본문 바로가기

테스트이론

경계값 분석

경계값 분석이 효과적인 테스팅 기법인 까닭? off by one error

 

off by one error

프로그램의 분기 등을 결정하는 논리적 조건문에서 조건이 값 1만큼의 차이로 서로 다른 행동을 하게 되는 결함

 

예로는 "작다"와 "작거나 같다"의 차이를 구별하지 못해 오는 실수로 인한 오류 검출을 경계값 분석이 돕는다

 

Loof

올바른 루프로,

for(i=0; i<10; i++){
/* body of loop*/
}

 

올바르지 않은 루프의 예시로는,

for(i=1; i<10; i++){
/* body of loop*/
}
for(i=0; i<=10; i++){
/* body of loop*/
}
for(i=0; i<11; i++){
/* body of loop*/
}

 

Fenceposts

대상들 사이에 경계가 몇 번이나 발생하는지를 셀 때 흔히 발생

1

2

3

4

위의 물건은 8개이지만, 경계는 5개이다

반복문과 조건을 올바르게 작성하여 경계가 8개 있다는 오류가 발생함을 유의 

 

strncat

void foo(char *s){
	char buf[15];
	memset(buf, 0, sizeof(buf));
	strncat(buf, s, sizeof(buf));//should be: sizeof(buf)-1
}

strncat 함수의 경우, 주어진 포인터로부터 버퍼로 문자열을 복사할 때 암묵적으로 문자열의 끝을 알리는 null 캐릭터를 함께 복사한다. 따라서 복사해야 되는 문자열의 길이는 버퍼의 크기에서 1을 빼주어야 한다.

이것은 심각한 보안 문제 발생할 수 있다.


Boundary Value analysis

Equivalence 파티션의 경계를 이루는 조건이 무엇인지 명확하게 판단하여 경계에 해당하는 값과 경계의 전후로 1만큼의 차이를 가지는 값을 고름 → off by one 효과적으로 검출

 

사용자의 나이를 입력으로 받는 시스템에 대한 경계값 분석

Equivalence 파티션 기법으로,

E1 = {0<= i <= 20} = {i < 0}

E2 = {20< i <= 70} = {i > 120}

E3 = {70 < i <= 120}

U1 = i < 0

U2 = i > 120

위와 같이 설정할 수 있다

 

그러므로 경계값 분석,

경계의 조건에 해당하는 값과 그 값에 양쪽으로 1만큼의 차이가 나는 값을 선택해야 하므로 Test input을 {-1,0,1,19,20,21,69,70,71,119,120,121}로 구성한다