Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • iOS
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • 모듈화
  • 소프트웨어 공학
  • ImageResource
  • 알고리즘
  • 티스토리챌린지
  • if let
  • jekyll
  • ios
  • authenticationinterceptor
  • 오블완
  • constraint
  • Python
  • 부스트캠프
  • MVC
  • 소프트웨어공학
  • CS
  • alamofire
  • image
  • Swift5.7
  • Optional
  • Git
  • boj
  • SwiftUI
  • guard
  • swift
  • AVAudioSession
  • Concurrency
  • AutoLayout
  • 백준
  • 소프트웨어 테스트

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
CS

[소프트웨어공학] 소프트웨어 테스트 - 1

[소프트웨어공학] 소프트웨어 테스트 - 1
CS

[소프트웨어공학] 소프트웨어 테스트 - 1

2022. 10. 3. 14:41

소프트웨어 테스트의 중요성

  • 소프트웨어는 일상생활을 편리하게 하지만 문제가 발생하면 위험
  • 사전에 문제 발생 최소화를 위한 충분한 시험 필요

소프트웨어 테스트의 정의

  • 정적 테스팅
    • 오류 발견 및 방지 목적의 프로그램, 문서 분석과정
  • 동적 테스팅
    • 오류를 발견하기 위해 프로그램을 실행하는 과정
    • 품질 평가, 향상을 위해 프로그램을 실행하는 과정
      • 신뢰성, 성능, 편의성, 접근성, 보안성, 안전성 등

테스트 진화 과정

 

오류, 결함, 오작동

용어 정의

  • 실수(mistake): 요구사항 잘못 파악 / 오해, 철자 오류
  • 오류(error): 프로그램의 올바르지 않은 내부 상태
    • 선행 및 후속 조건, 무결성 위배 상태
    • 기대 값과 실제 계산 값의 차이
  • 결함(fault): 오류를 발생시키는 프로그램 부분
    • 잘못된 정보 반영, 올바른 정보 누락
    • 알고리즘 결함, 구현상의 결함
  • 오작동(failure): 명세와 다른 동작이 나타나는 상황
    • 예상 결과와 실행 결과의 차이
    • 결함에 의해 발생하나, 반드시 발생하는 것은 아님

소프트웨어의 실수, 결함, 오류, 오작동 관계

실수가 결함을 유도하고, 결함은 오류를 발생시켜 오작동을 만듬

예시


  
// 속도(s) = 거리(d) / 시간(t)
let s = d / t
print(s)
// 실수: 시간이 0인 경우에 대해 고려하지 않음
// 결함: 시간이 0인 경우에 대한 처리 코드가 없음
// 오류: 시간이 0인 경우에 예외 발생
// 오작동: 예외가 전달되어 프로그램 실행 중단
// * 시간이 0이 아니면 오작동 발생하지 않음 *

 

효과적인/좋은 테스트란?

소프트웨어의 오작동 발생 조건을 만족시켜야 함

  • 도달성(rechability) 조건: 프로그램의 결함이 있는 부분을 실행해야 함
  • 감염(infection) 조건: 결함 부분을 실행하여 오류를 발생시켜야 함
  • 오류 전달(error propagation) 조건: 오류가 나타나는 지점까지 전달되어야 함

  
func double(param: Int) -> Int {
retVal = param * param// + 를 *로 입력 실수
return retVal
}
// 프로그램의 결함이 있는 부분까지는 도달했지만,
// 감염 조건을 불만족 함(오류 미발생)
double(param: 2)

테스트의 한계

완전한 테스트 불가능

  • 모든 입력 조건 조합에 대하여 테스트 불가능
    • '계산기' 프로그램에 대한 완전한 테스트
      • 0+0, 0+1, ... 0+n, 1+0, 1+1, ..., 1+n, ...0+0+0, ... 등등 끝이 없음
  • 테스트는 프로그램에 오류가 있음을 보여줄 수 있지만, 오류가 없음을 보여줄 수는 없다.

Program testing can be used to show the presence of bugs, but never their absence. -Dijkstra-

  • 어떤 테스트를 선정할 것인가? (테스트 선정 기준)
  • 언제 테스트를 종료할 것인가? (테스트 종료 기준)

테스트 선정 = 종료 = 적합성 기준

  • 테스트 선정 기준을 만족하는 테스트 집합에 대해 프로그램이 올바르게 수행하면 오류가 남아 있을 가능성이 있더라도 테스트 종료

 

테스트 오라클

  • 프로그램 실행결과가 올바른지 판단하는 매커니즘
  • 수작업으로 수행(테스트 오라클의 자동 생성 불가능)

오라클 종류

  • 진정한 오라클
    • 모든 입력에 대해 원하는 결과 생성하여 오류 검출
    • 대상 프로그램과 독립적인 알고리즘 사용 (고비용)
  • 샘플링 오라클
    • 특정 입력만 원하는 결과 생성 (제작 용이)
  • 휴리스틱 오라클 (샘플링 오라클 +)
    • 특정 입력은 올바른 결과 생성, 기타 휴리스틱 처리
  • 일관성 검사 오라클 (regression test)
    • 수정 전과 후의 프로그램 실행결과 비교
    • 대부분의 상업용 테스트 도구에서 사용
저작자표시 (새창열림)

'CS' 카테고리의 다른 글

[소프트웨어 공학] JUnit  (0) 2022.10.10
[소프트웨어 공학] 소프트웨어 테스트 - 2  (1) 2022.10.03
[소프트웨어 공학] 디자인 패턴 Design Pattern  (2) 2022.09.26
[소프트웨어 공학] 디자인 원칙 SOLID  (0) 2022.09.26
[소프트웨어 공학] 의존성 주입과 IoC  (1) 2022.09.26
  • 소프트웨어 테스트의 중요성
  • 소프트웨어 테스트의 정의
  • 테스트 진화 과정
  •  
  • 오류, 결함, 오작동
  • 용어 정의
  • 소프트웨어의 실수, 결함, 오류, 오작동 관계
  • 예시
  •  
  • 효과적인/좋은 테스트란?
  • 테스트의 한계
  • 완전한 테스트 불가능
  • 테스트 선정 = 종료 = 적합성 기준
  • 테스트 오라클
  • 오라클 종류
'CS' 카테고리의 다른 글
  • [소프트웨어 공학] JUnit
  • [소프트웨어 공학] 소프트웨어 테스트 - 2
  • [소프트웨어 공학] 디자인 패턴 Design Pattern
  • [소프트웨어 공학] 디자인 원칙 SOLID
Dev.YoungKyu
Dev.YoungKyu
iOS를 공부하고 있습니다

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.