설계한당

[SW test] Allpairs - IPO Algorithm / 조합 테스트를 위한 TC(테스트케이스)선택 툴 사용하기

이히당 2024. 12. 7. 14:09

소프트웨어 테스트는 크게 두 갈래로 나뉜다.

정적테스트

  • 정적 분석
  • 리뷰
    • 인스펙션
    • 워크스루

동적테스트

  • 명세기반 테스트
  • 구조기반 테스트
  • 경험기반 테스트

이 정적/동적의 차이점은 '코드의 실행 여부'다.
코드를 실행한 상태에서 실행하는 테스트를 동적테스트라고한다.

 

그 중에서도 오늘 알아볼 Allpairs라는 툴은 동적테스트의 명세기반 테스트에서 사용된다.

명세기반 테스트 안에도 여러가지가 존재한다.

  • 동등분할
  • 경계 값 분석
  • 조합 테스트
  • 상태 전이
  • 결정 테이블

이 중에서 조합테스트에 사용된다.

조합 테스트(pairwise test)란?

  • 페어와이즈 테스트(Pairwise Testing)는 입력 변수들의 모든 가능한 값 쌍(pair)을 최소한 한 번씩 포함하는 테스트 케이스를 생성하는 기법이다.
  • 모든 변수의 모든 조합(전체 조합)을 테스트하는 대신, 두 변수 간의 모든 조합을 커버하도록 테스트 케이스를 설계한다.
  • 이를 통해 테스트 케이스 수를 크게 줄이면서도 주요 결합 결함을 효과적으로 발견할 수 있다.

예를 들어
Fun1(a,b,c)라는 함수가 있다고 해보자.
a에는 one, two, three가
b에는 four, five
c에는 six, seven 들어갈 수 있다고 할 때,

 

일반적인 경우

만들어질 수 있는 경우의 수는 3x2x2으로 12개일 것이다.

 

반면, 조합 테스트를 사용하는 경우

예를 들어:

  • (a, b): one과 four, one과 five, two와 four 등
  • (a, c): one과 six, one과 seven, two와 six 등
  • (b, c): four와 six, four와 seven, five와 six 등

이런 모든 쌍이 포함되도록 테스트 케이스를 설계하므로, 전체 조합보다 적은 수의 테스트 케이스로 커버가 가능하다

 

비교하면 다음과 같다.

labels: 
['Play', 'Config', 'Equalizer']

parameters:
[['linear', 'linearRecursive', '1'], ['Hold', 'Take'], ['Off', 'Live']]

+----+-----------------+--------+-----------+
| 00 |       Play      | Config | Equalizer |
+----+-----------------+--------+-----------+
| 01 |      linear     |  Hold  |    Off    |
| 02 | linearRecursive |  Take  |    Off    |
| 03 |        1        |  Take  |    Live   |
| 04 |        1        |  Hold  |    Off    |
| 05 | linearRecursive |  Hold  |    Live   |
| 06 |      linear     |  Take  |    Live   |
+----+-----------------+--------+-----------+

All Combinations:       12 [3, 2, 2]
    vs
All Pairs:               6

 

딱봐도 헷갈리고 인간이 계산하기에 힘들것같다.


그래서 만들어 진 것이 allpairs다.

이제 이 툴을 사용해보자.

https://github.com/joebmt/allpairs

 

GitHub - joebmt/allpairs: Allpairs testing tool written in python

Allpairs testing tool written in python. Contribute to joebmt/allpairs development by creating an account on GitHub.

github.com

 

코드는 위의 것을 클론해오면 된다.

 

이제 아래의 파일에 조합을 파악하고 싶은 내용을 작성한다.

ap_datafile.py

# ---
# ap_datafile.py - python datafile to use as allpairs input to generate allpairs combinations
# ---
labels = \
['Play', 'Config', 'Equalizer']
parameters = \
[['linear', 'linearRecursive', '1', '1 Recursive', 'suffle'],
 ['Hold', 'Take', 'Slide', 'Caption'],
 ['Off', 'Live', 'Wide', 'Mild', 'Pro']]

 

위의 파일은 각 Play, Config, Equalizer 레이블에 들어갈 파라미터들을 표현한 것이다.


나는 윈도우 운영체제를 사용하고 있어서 git bash에서 실행했다.

(리눅스명령어 쓰려면 그냥 나는 gitbash에서 쓰는게 편한것같다.. 아님 말구요)

leath@heewon2 MINGW64 ~/Downloads/allpairs/release/allpairs (master)
$ perl allpairs --csv_out ./data/ap_datafile.py > ap.csv

## 이렇게 쓰면 결과가 ap.csv에 저장된다.

leath@heewon2 MINGW64 ~/Downloads/allpairs/release/allpairs (master)
$ perl allpairs -v ./data/ap_datafile.py
Note: Processing python datafile: ./data/ap_datafile.py

## 이렇게 쓰면 아래와 같이 bash에 출력된다.

labels:
['Play', 'Config', 'Equalizer']

parameters:
[['linear', 'linearRecursive', '1', '1 Recursive', 'suffle'],
 ['Hold', 'Take', 'Slide', 'Caption'],
 ['Off', 'Live', 'Wide', 'Mild', 'Pro']]

+----+-----------------+---------+-----------+
| 00 |       Play      |  Config | Equalizer |
+----+-----------------+---------+-----------+
| 01 |      linear     |   Hold  |    Off    |
| 02 | linearRecursive |   Take  |    Off    |
| 03 |        1        |  Slide  |    Off    |
| 04 |   1 Recursive   | Caption |    Off    |
| 05 |      suffle     | Caption |    Live   |
| 06 |      suffle     |  Slide  |    Wide   |
| 07 |   1 Recursive   |   Take  |    Wide   |
| 08 |        1        |   Hold  |    Wide   |
| 09 | linearRecursive |   Hold  |    Live   |
| 10 |      linear     | Caption |    Wide   |
| 11 |      linear     |  Slide  |    Live   |
| 12 | linearRecursive |  Slide  |    Mild   |
| 13 |        1        |   Take  |    Live   |
| 14 |   1 Recursive   |   Hold  |    Mild   |
| 15 |      suffle     |   Take  |    Mild   |
| 16 |      suffle     |   Hold  |    Pro    |
| 17 |   1 Recursive   |  Slide  |    Pro    |
| 18 |        1        | Caption |    Mild   |
| 19 | linearRecursive | Caption |    Pro    |
| 20 |      linear     |   Take  |    Pro    |
| 21 |      linear     |   Take  |    Mild   |
| 22 | linearRecursive |   Take  |    Wide   |
| 23 |        1        |   Take  |    Pro    |
| 24 |   1 Recursive   |   Take  |    Live   |
| 25 |      suffle     |   Take  |    Off    |
+----+-----------------+---------+-----------+

All Combinations:      100 [5, 4, 5]
    vs
All Pairs:              25

leath@heewon2 MINGW64 ~/Downloads/allpairs/release/allpairs (master)
$

 

끝!

728x90