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

     
   
테스트 케이스가 너무 많아서 줄이고 싶다면? Pairwise 죠!
글쓴이 : 똘칠 날짜 : 19-03-11 21:47 조회 : 1647


프로젝트 내에서 테스팅을 진행하다 보면 테스트 케이스의 분량 때문에 골치가 아플 때가 많습니다. 테스트 케이스가 적으면 적은 대로, 많으면 많은 대로 문제인 거죠. 만일 준비해 놓은 테스트 케이스가 적다면 매니저는 진지하게 질문할 것입니다. “그것만 테스트해도 충분하겠어? -_-;

역시나 조용히 자리로 돌아와 새로운 마음으로 테스트 케이스 디자인을 시작하는 나를 발견할 수 있겠죠. 하지만 테스트 케이스가 많은 경우에는 ‘내 마음의 정화’ 만으로 문제가 쉽게 해결되지 않습니다. 많다고 해서 무턱대고 줄이면 이전만큼의 테스트 커버리지를 보장할 수 없기 때문입니다.

아주 기본적인 동작들을 확인하는 테스트 케이스는 테스트 활동을 위한 필수 조건이죠. 한데 꽤 오래전 함께 일하던 동료들이 테스트 커버리지를 높여 보겠다며 다양한 기능을 복잡하게 연동하는 테스트 케이스를 마구마구 만들어 놓았습니다. 심증으로는 커버리지가 어느정도 높아졌다고 추측할 수 있겠으나, 복합적인 검증을 모두 만족시킬 수 있는지 장담할 수 없었습니다.

하지만 칼로 무 자르듯 테스트 케이스들을 잘라내지 못했습니다. 어느 누구도 테스트 케이스를 줄이면서 발생할 수 있는 리스크를 감수하고 싶어하진 않았으니까요. 때문에 테스트 케이스의 수를 줄이는 최적화 업무는 항상 어려웠습니다.

그럼에도 불구하고, 테스트 케이스 최적화 활동을 피하기만 하며 살 수는 없었습니다. 결국 엄청나게 큰 골칫덩이가 되어 끝판 왕으로 맞닥뜨리게 될테니까요. 더 이상 손을 쓸 수 없는 정도의 사태가 발생하기 전에 취할 수 있는 최선을 고민하며 여러가지 시도를 해보았습니다.

꽤나 댄디한 전략은 Pairwise testing입니다. 테스팅 관련한 서적을 읽거나 교육을 받다 보면 자주 등장하는 기법이죠? 이 기법은 다양한 조합에 대하여 높은 커버리지를 보장하면서도 적은 테스트 케이스로 검증할 수 있도록 합니다. 덕분에 시간을 많이 절약할 수 있다는 장점이 있습니다.

예시를 위해 메인 요리와 조리법, 사이드, 샐러드와 관련한 소스들을 선택하면 조리해주는 쿠킹 로봇을 테스트한다고 가정합시다. 선택할 수 있는 옵션은 다음과 같았고요.

1. 메인요리
: 쇠고기, 돼지고기, 닭고기, 양고기, 해산물
2. 메인요리 소스
: 소금, A1, 하인즈 57, 바비큐, 버섯 크림, 스테이크, 없음
3. 메인요리 조리법
: 찜, 볶음, 삶음, 튀김, 구이, 스테이크
4. 사이드
: 통감자, 통고구마, 으깬 감자, 감자 튀김, 볶음밥, 데친 채소
5. 샐러드
: 하우스, 시저, 닭가슴살, 비프, 버섯, 연어, 포크 커틀릿
6. 샐러드 소스
: 발사믹, 오리엔탈, 허니 머스터드, 키위, 갈릭, 참깨, 프렌치, 사과, 싸우전 아일랜드

가능한 전체 조리법은 몇 개나 될까요?
각각의 옵션을 모두 곱하면 5×7×6×6×7×9=79,380개의 조합이 도출됩니다. 이 모든 조합을 테스트하다 보면 우리뿐만 아니라 로봇도 늙겠네요. 하지만 Pairwise 도구를 사용하면 67개의 테스트 케이스로 모든 조합을 테스트할 수 있습니다. 다만 두 입력 값의 조합(예: 쇠고기-스테이크 소스, 돼지고기 – 튀김 등)만 고려하기 때문에 철저한 테스트가 될 수는 없습니다. 그래도 대부분의 결함은 두 개의 인자의 결합에서 발생한다고 하니 테스트의 효과성에서는 그렇게 염려하실 필요는 없을 것 같습니다.

일반적으로 쇠고기에 버섯 크림소스를 곁들어 먹는 경우는 적습니다. 버섯 크림 소스는 해산물을 위한 소스이니까요. 이런 경우, 테스트 케이스 작성의 제약 조건으로 쇠고기나 돼지고기, 닭고기나 양고기인 경우 버섯 크림 소스는 사용하지 않는다는 내용을 추가할 수 있는 도구도 있습니다. 도구가 불필요한 조합이 나오지 않도록 테스트 케이스를 디자인해준다면 더 할 나위 없이 반갑겠죠.

실무에서는 테스트 옵션의 조합을 줄이는 위와 같은 pairwise testing도 자주 사용하지만, 다양한 기능들을 테스트하기 위한 복합적 테스트 케이스 작성에도 응용됩니다. 8가지의 주요 기능이 있는 제품을 테스트해야 하는데 기능 A, B, C, D는 중요한 기능이며 그 외는 좀 덜 중요하다고 해보죠. 기능 A에 있는 세부 기능은 3가지, 기능 B에 있는 세부 기능은 5가지입니다. 8개 기능이 갖고 있는 모든 세부 기능을 복합적으로 테스트를 해야 한다면 아래와 같이 테이블을 작성할 수도 있습니다. 중요한 기능 네 가지는 그대로 작성하고요, 덜 중요한 나머지 기능들을 하나로 묶는 것이지요.

1. 기능 A
: 기능 A_1, 기능 A_2, 기능 A_3
2. 기능 B
: 기능 B_1, 기능 B_2, 기능 B_3, 기능 B_4, 기능 B_5
3. 기능 C
: 기능 C_1, 기능 C_2
4. 기능 D
: 기능 D_1, 기능 D_2, 기능 D_3, 기능 D_4
5. 그 외
: 기능 E_1, 기능 E_2, 기능 F_1, 기능 F_2, 기능 F_3, 기능 G_1, 기능 H_1

마찬가지로 다양한 조합을 모두 테스트하려면 3×5×2×4×7=840 가지 경우를 테스트해야 할 것입니다. 하지만 Pairwise 도구를 이용한다면 35개면 충분합니다. 위의 예제에서 기능 A, B, C 등을 parameter라고 하고요, 각 parameter가 가진 값의 수를 Value라고 합니다. Parameter 기능 B의 value는 5 인 것이죠.
이렇게 조금만 고민하면 현재의 테스트 활동을 좀 더 엣지있게 바꿀 수 있는 다양한 방법들이 존재합니다. 다음에도 계속해서 실무와 관련한 다양한 사례들을 만나보도록 하죠.

우유아빠™ 19-03-12 12:58
좋은 정보를 올려 주셨습니다만, 무언가 접근이 이상한 것 같습니다.

모든 상황을 테스트 할 수는 없습니다. 그래서 일반적으로는 랜덤한 입력데이터를 선택하기도 하고, 경험에 기반해서 선택하기도 합니다.
그 중에 좀 더 결함이 잘 발견될 수 있는 입력들을 선택하는 방법이 소위 테스트 기법을 사용하는 방법입니다.

설명하신 내용은 페어와이즈만이 적절한 절차를 통해 테스트 케이스를 줄일 수 있다는 오해를
불러일으킬 수 있다고 봅니다.
뿐만 아니라 조합 기법 중 페어와이즈는 입력 정보 간의 종속관계가 존재할 때는 변형이 필요한
기법이기도 합니다. 사용에 한계가 있을 수 있습니다.
똘칠 19-03-12 17:03
말씀 감사합니다.
내용 중에도 기본적인 기능에 대한 테스트는 필수이며, 추가적인 복합기능을 위해 pairwise를 적용했다고 언급한 부분이 있었습니다. 당연히 pairwise는 철저한 테스트를 위한 기법은 아닙니다.
입력 데이터 간의 종속이 있는 경우, 관련한 제약조건을 설정하여 종속적인 관계를 반영하여 Test Case를 만들어내는 도구도 있습니다. (예: 아이폰인 경우OS는 iOS만 설정되도록 TC가 디자인 됨)
Won님 19-03-12 18:24
재밋게 잘봤습니다.^^ 감사합니다.
많은 분들에게 도움되겠네요~
오성환 19-03-13 09:24
음식으로 페어와이즈 기법을 적용한다는게 매우 기발하네요.
dippers 19-03-18 16:38
모든 조합을 테스팅하기 어렵다고 한다면 페어와이즈만한게 없긴하죠.
다만 주위사람들을 이해시키고 설득시키는 과정이 더 복잡할 때가 있죠. 좋은 글 잘봤습니다.
불가사리 19-03-21 06:17
감사합니다! pair wise 기법 잘 배워갑니다~
Jace_ 19-03-25 16:53
재밌는 예시네요^^ 잘 봤습니다.
narooto2 19-03-26 10:10
이 페어와이즈를 툴로해볼때 개알책에서 링크로 소개된
Allpairs 도구를 이용하여 자동으로 생성하시나요? 아니면 다른 툴을 사용하시나요?
(http://www.pairwise.org/)

한때 PICT 툴이 있어서 Allpairs 보단 좀 수월하여 UI가 개선되긴했지만 그래도 여전히 좀 불편하긴하더라구요,,, ^^;

웹버전으로 구현된 혹시 그런사이트나 툴 없을까요?
(있으면 추천 및 링크좀...^^;)

개인적인생각이지만, 조합계산해서 구현하는 정도라면 웹사이트버전으로 쉽게 이용 가능할꺼 같은데(물론 말은 쉽게하죠,,, 저는 개발하지 못하닌깐...@.,@;;) 여전히 cmd 창열어서 메모장 띄어쓰기 엔터치고 숫자 세가면서 한다는게 좀 많이 불편해서요,,, 그래서인지몰라도 잘 안쓰게되기도하고,,, ^^;
     
똘칠 19-03-27 13:57
narooto2님,
예전에 저도 Allpairs를 사용했었습니다. 엑셀과 함께 사용하기가 쉽죠
요즘엔 ACTS tool을 쓰고 있습니다.
링크는 http://www.pairwise.org에 가시면 그 외에도 많은 툴을 다운로드 받으실 수 있습니다 ^^
6툴플레이어 19-03-26 17:33
유용한 글 감사합니다.
다음글도 기대되네요 ~^^
     
똘칠 19-05-12 21:16
자주 올리려고 노력하고 있습니다.^_^ 읽어주셔서 감사합니다
테스트아키텍트 19-05-03 10:38
실무에서 가장 유용하고 적합한 정도가 pairwise라고 생각합니다.
좋은 글 감사합니다 ^^
     
똘칠 19-05-12 21:33
감사합니다. 아키텍트님의 글도 멋지더군요.