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 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 |