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<=점수<=100 | A | 95 |
70<=점수<=89 | B | 80 |
50<=점수<=69 | C | 60 |
0<=점수<=49 | D | 30 |
총 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<=점수<=100 | A | 경계값 : 90, 100 invalid : 89, 101 | 89,90,91 99,100,101 |
70<=점수<=89 | B | 경계값 : 70, 89 invalid : 69, 90 | 69,70,71 88,89,90 |
50<=점수<=69 | C | 경계값 : 50, 69 invalid : 49, 70 | 49,50,51 68,69,70 |
0<=점수<=49 | D | 경계값 : 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/