본문 바로가기

테스트이론/소프트웨어 테스팅

에러, 결함, 실패

Fault

소스코드 자체에 있는 비정상적인 요소

 

Error

소스코드에 존재하는 fault가 실행되어 내부 상태가 오염됨

 

Failure

Error가 프로그램 외부에서 관찰되는 상태

 

Fault → Error   Failure

 

프로그램 소스코드에 fault가 있거나, fault를 실행해서 error 상태가 돼도 프로그램이 정상적인 동작으로 복귀한 뒤에 성공적으로 실행을 마칠 수 있다. 예를 들어,

void rotateLeft(int* rgInt, int size){
	int i;
	for(i=0; i<size; i++){
		rgInt[i]=rhInt[i+1];
     }
}

array 값을 한 칸씩 옆으로 옮겨 회전하는 기능이 있다.

 

Test Input #1

input: rgInt [], size 0

output: rgInt []

→ fault는 있지만 error 아님 (회전할 것이 없으므로)

 

Test Input #2

input: rgInt [0, 1] 0, size 2 (배열 뒤 우연히 0이라는 값이 있다고 가정)

output: rgInt [1, 0] 0

error는 있지만 failure 아님

 

코드의 오류를 외부에서 관찰해서 Failure로 인지하기 위해

Test Input #3

input: rgInt [0, 1] 66, size 2 (배열 뒤 66이라는 값이 있다고 가정)

output: rgInt [1, 66] 66

오류가 있다. failure 발생

 

위 예시를 통해 rgInt 배열을 읽는 loop가 array 바깥에 접근하는 것이 오류, 배열의 첫 번째 값을 다른 데로 옮겨주지 않은 것이 오류, 배열의 첫 번째 값을 나중에 쓰기 위해 저장하지 않은 것이 오류라고 정의할 수 있다. fault를 어떻게 진단하느냐에 따라 수정이 달라질 수 있다.

 


소프트웨어 품질을 조사하는 기법

 

동적 분석

분석의 대상이 프로그램의 실행 결과

실제 실행과 예측을 비교

 

정적 분석

프로그램 소스코드만을 재료로

실행하지 않고 소스코드 내용만 봄


Test Input

테스팅을 목표로 하고 주어진 프로그램을 실행하기 위해서 사용하는 입력 값 전체

 

Test Oracle

주어진 테스트 입력을 사용했을 때 반환된 출력 값이 맞는지 틀리는지 결정하는 모든 메커니즘

가장 많은 비용 발생

 

Test Suite

Test Effectiveness

작성한 Test Suite 또는 Test Case가 실제로 프로그램 상에 오류가 있을 때 찾아내는 확률

높을수록 효과적인 테스트


Test와 Debugging

 

Test는 Fault가 있다는 것을 밝혀내는 행동이며, Debugging은 그것을 바탕으로 소스코드 자체의 품질을 향상시키고 결함을 제거하는 활동이다. 밀접하게 연관되지만, 약간 다른 개념

'테스트이론 > 소프트웨어 테스팅' 카테고리의 다른 글

등가 파티션  (0) 2021.03.08
블랙박스 테스팅  (0) 2021.03.08
테스트 불가능한 프로그램  (0) 2021.03.07
테스팅 자동화 기술  (0) 2021.03.04
소프트웨어 품질  (0) 2021.03.03