2010년 1월 18일 월요일

Pairwise Testing


페어와이즈(pairwise) 조합 테스팅은 커버해야할 기능적 범위에 비해 상대적으로 적은 량의 테스트 세트를 구성하여 소프트웨어의 결함을 찾고 테스트에 대한 자신감(Confidence)을 얻을 수 있는 방법 중의 한가지 이다. 페어와이즈는 관찰 결과 대부분의 결함이 2개 요소의 상효작용(Interactions of two factors)에 기인한다는 것에 착안하여 2개 요소의 모든 조합을 다룬다. 즉, 페어와이즈 조합의 의미는 테스트를 하는데 필요한 각 값들이 다른 파라메터의 값과 최소한 한번씩은 조합을 이룬다는 의미이다.
제 약된 자원으로 제한된 시간에 테스트를 해야 하는 상황에서 테스트 대상 소프트웨어의 설정, 기능, 이벤트 등의 조합을 모두 테스트 하는 것은 현실적/경제적으로 가능하지 않은 경우가 대부분이다. 반면, 테스트를 하지 않거나, 일부 조합을 의도적으로 누락시키는 것은 그만큼의 리스크를 동반하게 되므로 조합 테스팅은 매우 중요한 의미를 갖는다.
페어와이즈 조합 테스팅은 모든 조합을 고려해 테스팅했을 때 발견할 수 있는 결함을 모두 발견할 수 있는 것은 아니다. 그러나 페어와이즈 조합 테스팅기법을 사용하여 테스팅한 결과에 결함이 없었다는 것까지는 보장성을 제공해 준다. 그리고 경험적으로 의미있고 결함을 발견할 가능성이 높다고 판단되는 조합을 추가하여 관리 가능한 선에서 조합을 늘리는 것은 조합 테스팅의 효과성을 높이는데 도움이 된다. 물론, 늘어난 조합을 감안하여 도출한 테스트 케이스가 보장하는 범위는 페어와이즈 조합 테스팅 기법이 보장하는 범위까지이다.
조 합 테스팅에서 파라미터(Parameters)는 조합할 값을 대표하는 요소로서 소프트웨어의 다양한 기능, 사용자 또는 하드웨어 설정, 속성, 선택옵션 등의 종류를 파악함으로써 알 수 있다. 값(values)은 각 파라미터에 대한 선택 가능한 개별적인 값을 의미하는 것으로 숫자, 텍스트,또는 리스트에서의 선택된 것이 해당될 수 있다.
3개의 파라미터가 있고 각 파라미터가 5가지, 4가지, 5가지의 값을 가질 경우를 생각해 보자. 모든 조합을 고려하면 5 * 4* 5 = 100가지의 조합이 생긴다. 이러한 100가지의 조합을 가지고 100가지의 경로로 테스트를 수행해 준다고 가정하면 10,000개의 테스트 케이스를 수행해야 한다. 조합할 것이 조금 더 많아지고 테스팅하는 경로나 종류가 더 다양해진다면 테스트에 엄청난 시간과 비용이 소요될 것이다. 이런 경우, 합리적으로 일정 수준의 보장성을 확보 하면서 조합의 수를 줄여 주어야 한다.
=================================

아래 사이트에 가면 pairwise testing 기법에 대해 많은 정보를 얻을 수 있다.
http://www.pairwise.org
pairwise.org에서 Effectiveness of Pairwise 항목중 하나를 옮겨본다.

We measured the coverage of combinatorial design test sets for 10 Unix commands: basename, cb, comm, crypt, sleep, sort, touch, tty, uniq, and wc. […] The pairwise tests gave over 90 percent block coverage.

[D. M. Cohen et al., 1996]

10가지 unix 명령을 페어와이즈 만으로 90%의 블럭 커버리지를 준다면.. 사용해 볼 만한 가치가 있지 않은가??

 

1. 사용된 예제
파라미터 3개(동작모드, 설정, 이퀄라이저), 변수는 각각 2가지
- 동작모드 : 순차, 순차반복
- 설정 : Hold, 착신
- 이퀄라이저 : Off, Live
2. All pairs
2x2x2 = 8 가지 경우
동작모드    설정    이퀄라이저
순차          Hold    Off
순차          Hold    Live
순차          착신    Off
순차          착신    Live
순차반복    Hold    Off
순차반복    Hold    Live
순차반복    착신    Off
순차반복    착신    Live
3. Pairwise
동작모드    설정    이퀄라이저
순차          Hold    Off
순차          착신    Live
순차반복    Hold    Live
순차반복    착신    Off
4. Orthogonal Array
동작모드    설정    이퀄라이저
순차          Hold    Off
순차          착신    Live
순차반복    Hold    Live
순차반복    착신    Off
상기 예제에 대한 관련 자료를 보았을때 Pairwise 와 Orthogonal Array의 결과가
동일하게 설명되고 있는것 같습니다.
두 기법이 동일한 것인지, 아니면 어떠한 경우에 차이가 있는건지 의견을 구합니다.

신재문
08-06-06 09:59

안녕하세요? 아는 데 까지만 설명드리면... 틀릴 수도 있습니다만.
먼저 조합의 수로 따져보면,
1) All combination
2) Orthogonal array
3) pairwise (=all pairs) 의 순으로 산출된 개수가 많습니다.
all combination을 안하려고 다른 기법을 적용하는 것이므로 all combination은 논외로하고, Orthogonal array(이하 OA)는 조합이 전체 산출 결과에 골고루 균등하게 분포되어 있는 형태이며, pairwise는 골고루 분포되는 것보다는 중복되더라도 전체 산출 결과의 수가 적은 형태를 띱니다.
즉, OA는 직교 배열표에 대입하여 테스트 케이스를 도출하는 것이며, pairwise는 조합은 무조건 다 포함되지만, 그것이 다른 산출 결과에 중복해서 들어가는 것을 허용해서 결과적으로 전체 산출 결과의 수는 작아지는 것입니다. (좀 기계적으로 조합을 커버한다고 생각하시는 편이 나을 듯)
중요한 것은 OA / pairwise 모두 완전한 커버리지를 보장하지 않으며, 그 리스크는 당연히 시행자가 져야 한다는 점입니다. 두 가지 기법 모두 커버리지에 대한 아무런 보장성이 없습니다. 다시 말하면, 두 기법을 사용해서도 놓칠 수 있는 버그 발생 조합이 있다는 것이죠. (사실 어떻게 해도 버그를 놓칠 가능성이 존재하지요.)
따라서, 시간/경험 등의 요소를 바탕으로 좀 더 많은 테스트 개수를 산출하는 OA를 쓸 것인지, 조합은 중복해서 커버하지만 테스트 개수가 적은 pairwise를 쓸 것인지는 사용하시는 분이 알아야 판단하셔야 합니다. ^^
전문가에 따라서는 OA가 낫다, pairwise가 낫다는 주장이 엇갈리나 이 역시 증명 자체가 불가능한 이슈이며, 이들도 경험상 그렇게 얘기합니다. (여기서 이 기법을 쓰는 목적은 완전한 테스트가 아닌, 적은 수의 케이스로 더 많은 수의 결함을 찾는 것이라는 점을 이해하시는 것이 중요합니다.)
또한 OA / pairwise 모두 단점이 있으므로 마이크로소프트 내부에서 만든 pict 툴 사용을 고려해 보시는 것도 좋겠습니다.
아래에 참고하시라고 PICT 툴의 설명서를 번역해 두었습니다.
http://techbard.tistory.com/102

[출처] STEN - http://www.sten.or.kr/bbs/board.php?bo_table=test_story&wr_id=1446

댓글 없음:

댓글 쓰기