X
STEN 회원이 되시면 테스팅에 관한 많은 정보와 자료를 공유할 수 있도록 저희가 돕겠습니다.
아이디
패스워드
자동로그인 사용
 
아직 회원이 아니십니까?    
아이디/패스워드를 잊으셨습니까?    

     
   
생각보다 어려운 동등분할 기법
글쓴이 : 똘칠 날짜 : 19-05-03 23:12 조회 : 1564


일반적인 테스트 전략에서 동등분할 기법은 리스크가 낮은 부분에 적용하는 편입니다. 경계값 분석보다 테스트 케이스가 적게 나오기 때문이죠.

일례로 나이가 10~19세인 사람들을 테스트한다고 해볼까요? 동등분할 기법을 적용하면 9세 미만에서 1개, 10~19세에서 1개, 그리고 20세 이상에서 1개, 이렇게 총 3개의 테스트 케이스면 동등분할 커버리지를 모두 만족하게 됩니다.

하지만 경계값 분석을 적용한다면 테스트 케이스의 개수는 훨씬 많아지죠. 변수를 int16으로 가정한다면 테스트해야 할 경계는 6개(-32768, 9, 10, 19, 20, 32767) 이고요, Two-value boundary testing을 적용하여 테스트 케이스를 적게 만든다 하더라도 총 8개(-32769, -32768, 9, 10, 19, 20, 32767, 32768)가 됩니다.

때문에 상당히 안정된, 재사용을 많이 했던 기능에 대해서는 동등분할 기법을 적용하여 간단히 테스트하고 넘어가는 경우가 많이 있습니다. 한데, 꼭 동등분할이 가볍지만은 않더라고요.

캘린더와 연동하여 실행되는 프로그램에 문제가 있어 좀 더 진득한 테스트를 진행해보기로 결정한 적이 있습니다. 캘린더라는 조건을 경계값으로 분석하려 하니 경계값 분석으로 테스트하기엔 애매한 부분이 있더군요. 그래서 동등분할을 적용하기로 전략을 변경했습니다.

우리가 사용하고 있는 달력은 그레고리력(Gregorian calendar)이고요, 규칙은 다음과 같습니다.

1. 4의 배수인 해를 윤년으로 지정하여 2월 29일을 삽입합니다
2. 100으로 나눌 수 있지만 400으로 나뉘어 떨어지지 않는 해는 예외로 두어 윤년이 아닌 평년으로 지정합니다
- 1700년, 1800년, 1900년, 2100년, 2200년, 2300년은 윤년이 아닙니다
- 1600년, 2000년, 2400년은 윤년입니다

캘린더를 동등 분할 기법으로 테스트하려면 어떻게 해야 할까요? 어떻게 하시겠습니까?
동등분할 기법을 적용하려면 우선 동일한 결과를 발생하는 입력 값과 출력 값들을 묶어야 합니다. 우선 연/월/일에서 각각 equivalence class를 도출했습니다.

연도의 출력 값은 윤년이냐, 윤년이 아니냐로 결정됩니다. 따라서 입력값은 이렇게 표현할 수 있습니다.

YEAR1 = { year | (year mod 4 != 0) OR ((year mod 100 = 0) AND (year mod 400 != 0))} //평년
YEAR2 = { year | ((year mod 4 = 0) AND (year mod 100 != 0)) OR (year mod 400 = 0)} //윤년

월은 어떻게 구분해야 할까요? 일상적인 월과 특수한 월로 구분해야 할 것입니다.

MonTH1 = { month| month has 30 days }
MonTH2 = { month| month has 31 days }
MonTH3 = { February }

마지막으로, 일의 equivalence partition은 어떻게 될까요?
매 달 있는 날과 매 달 있지는 않은 날로 구분을 했습니다.

DAY1 = { day| 1 ≤ Day ≤ 28 }
DAY2 = { 29 }
DAY3 = { 30 }
DAY4 = { 31 }

분류를 하고 나니 YEAR의 equivalence class는 2개, MONTH는 3개, DAY는 4개가 됩니다.
그 다음 테스트 케이스를 어떻게 도출했을까요?
여기에서 Combinatorial test design techniques을 참고했습니다. (ISO 29119-4를 참고하시면 됩니다)

간략하게는 each choice testing을 적용할 수 있습니다. 각 partition을 한 번씩은 테스트할 수 있도록 테스트 케이스를 작성하는 것이죠.

TestCase1: YEAR1, MONTH1, DAY1
TestCase2: YEAR2, MONTH2, DAY2
TestCase3: YEAR1, MONTH3, DAY3
TestCase4: YEAR2, MONTH1, DAY4

위와 같이 테스트 케이스 4개면 모든 Partition을 테스트할 수 있습니다. 하지만 우리의 목적은 진득한, 좀 더 강도높은 테스트였기 때문에 All combinations testing을 적용했습니다. 이 기법은 가능한 모든 조합을 테스트합니다. 따라서 테스트 케이스는 2 × 3 × 4 = 24 개가 도출되었습니다.

경계값 분석 기법은 언제든 범위에 대해서만 테스트 케이스를 도출합니다. 하지만 동등분할 기법은 범위 뿐만 아니라 집합에 대해서도 테스트가 가능하다는 장점이 있습니다.
일반적으로 가장 결함을 잘 잡을 수 있는 경계값 분석 기법을 가장 많이 사용하고 있십니다. 하지만 때로는 동등분할도 제 값을 톡톡히 한다는 것을 잊지 말아주세요 :)


AQAQAQA 19-05-07 15:56
잘 봤습니다.
     
똘칠 19-05-12 21:17
감사합니다 :)
장군yi 19-07-19 15:35
잘 읽고 갑니다.