swtest

동등 분할(또는 등가 분할)(Equivalence Partitioning)


by Kitle · 2020. 06. 21.



명세기반 기법

시스템에서 제공하는 기능 및 메뉴 등 명세를 기반으로 테스트 케이스를 설계하는 기법이다.


동등 분할(또는 등가 분할)(Equivalence Partitioning)

SW나 시스템의 입력값이 여러가지 중, 입력의 결과로 나타날 결과 값이 동일한 경우는 하나의 그룹으로 간주될 수 있다. 그리고 이러한 그룹 내의 입력값은 내부적으로 같은 방식으로 처리됨을 가정한다.

동등 분할은 이러한 원리를 이용하여, 입/출력값 영역을 유한개의 상호 독립적인 집합으로 나누어 수학적인 등가 집합을 만든 후, 각 등가집합의 원소 중 대푯값 하나를 선택하여 테스트 케이스를 선정하는 방식이다.

이 기법은 가능한 모든 경우의 수에서 테스트 개수를 줄여준다.


[예제]

A라는 학교에서 학생들의 성적에 따른 등급을 자동으로 계산해 주는 프로그램을 만들고자 한다.

100~90점은 A, 89~70점은 B, 69~50점은 C, 49~0점은 D로 산정하고자 한다.

이때 등가분할에 의거한 데이터는

구간
등급
동등 분할 테스트를 위한 데이터 선택 예)
90<=점수<=100A95
70<=점수<=89B80
50<=점수<=69C60
0<=점수<=49D30

총 4개의 데이터가 산출될 수 있다. 이것은 최소한 결과의 값을 선택하여 테스트를 수행한다는 것까지 보장한다.


성적이 나올 수 있는 가짓수가 0~100 사이라면

모든 가능한 테스트 케이스는 0,1,2....100 까지 총 101가지가 된다

동등 분할 기법을 사용한 경우는 4개로 단축 할 수 있다

그러나 4개의 케이스가 모든 전체를 만족한다고 보기는 어렵다


경곗값 분석(Boundary Value Analysis)

Partitioning을 이용하여 입출력 도메인을 equivalence class로 나누었을 때, 각 범위의 경계 값에서 결함이 발생하는 경우가 많다는 사실에 착안하여, 결함 검출 가능성을 높일 수 있도록 테스트 케이스를 설계하는 기법이다.

즉, equivalence class 안에서 테스트 케이스를 선정할 때, 임의의 데이터를 이용하는 것 대신에 class의 경계에 있는 데이터를 이용한다.

또 복잡한 계산을 요구하는 문제의 경우 equivalence class의 범위를 정의하는 것이 어려우므로 가능한 한 상세한 요구명세가 필요하다는 제한이 있다.

분할영역의 최댓값과 최솟값은 그 영역의 경곗값이 됨


[예제]

윗 예제 이어서..


방법1)

two-value : Boundary value & invalid Value 를 선택한다.

three-value (or full boundary value) : 경곗값을 기준으로 양쪽 모두 선택한 값을 추가해준다. 예)  경계값이 0인 경우 -1, 0, 1 을 선택


구간등급

two-value 적용

three-value 적용
90<=점수<=100A

경계값 : 90, 100

invalid : 89, 101

89,90,91

99,100,101

70<=점수<=89B

경계값 : 70, 89

invalid : 69, 90

69,70,71

88,89,90

50<=점수<=69C

경계값 : 50, 69

invalid : 49, 70

49,50,51

68,69,70

0<=점수<=49D

경계값 : 0, 49

invalid : -1,50

-1,0,1

48,49,50

최종 테스트할 value(중복제거)-1, 0, 49, 50, 69, 70, 89, 90, 100, 101-1, 0, 1, 48, 49, 50, 51, 68, 69, 70, 71, 88, 89, 90, 91, 99, 100, 101


위에서도 말 했듯이 범위의 경계 값에서 결함의 발생하는 경우가 연구결과 많다고 한다.

실제로도 요구사항 명세 관점에서는 70~90점 B, 90점 이상 A 이렇게 90점이 모호하게 기술되는 경우가 많으며 (91점이  A인지, 90점이 A인지 이럴때 헷갈리게 된다),

구현 관점에서는 90<=점수<=100 으로 할 수도 있지만 89<점수<101 로도 할 수 있으며 이때 실수로 부등호를 누락한다던지 숫자를 하나 더하거나 빼는 실수 가능성이 있다.

인덱스나 반복문 사용시 예를들어 Index를 0부터 시작한다던지, 1부터 시작한다던지, 카운트를 1~100으로 한다던지, 0~99로 한다든지 (따라서 루프가 한번 빠지거나 더해지거나) 등에 따라 발생 가능성이 있다고 한다.


동등분할과 경곗값 분석 비교

동등분할은 테스터가 선택하는 값이 달라질 수 있으며, 특성상 테스트 결과가 달라 질 수 있다. (테스터의 오류가 아니며, 기법에서 제한적인 테스트를 하기 때문임)

경곗값 분석의 데이터 선택은 같은 방식(파티션의 최대/최소) 값을 선택 하는 경우 누가 선택해도 같은 값이 나오게 된다.

주의사항: 동등분할 / 경곗값 분석으로 테스트 데이터를 선정 시 위에 표에나온 것처럼 유효 값 외에 무효값도 선택 하는 것이 중요하다. 예) 무효값으로 -1, 101을 선택하는 경우

물론 input제한으로 입력조차 안되게 막을 수 있지만, 이또한 막혔는지 확인하는 테스트가 필요하여 Invalid Value 체크가 중요함

*자동으로 분석을 원하는 경우  본 블로그의 경계값 분석 툴을 활용 바람 http://kitle.xyz/bva/