개발자 끄적끄적

조합 테스팅 본문

소프트웨어공학

조합 테스팅

햏치 2024. 5. 29. 13:32

<조합 테스팅>
- 조합 테스팅은 테스트 대상 프로그램의 동등 분할이나 BVA등을 통해 여러 개의 클래스들로 각 입력 인자를 여러 클래스나 값들로 분할하였을 때 이들을 조합하여 테스트 케이스를 구성하는 방식
- 예제 : 입력 x,y,z를 어떻게 조합하여 테스트 케이스를 만들것인가?


  1. one-to-one : 3+4+2=9개의 test case
  2. minimized : 4개
  3. 모든 입력 인자들 : 3*4*2=24





<조합 테스팅 종류>
- Each choice 테스팅(=minimized): 각 입력 인자의 분할된 클래스로부터 최소한 하나의 입력 값이 테스트케이스에 포함
- 페어와이즈 테스팅: 각 인자의 값(또는 클래스)과 다른 인자의 값(또는 클래스)를 최소한 한번은 조합하여 테스트 케이스를 구성
- All combinations 테스팅: 모든 입력 인자의 모든 가능한 클래스의 조합이 테스트 케이스들에 포함되도록 구성
- Base choice 테스팅: 기반이 되는 테스트 조합을 미리 선정한다. 기반 테스트는 사용자의 관점에서 가장 선택될 빈도가 높고, 일반적으로는 정상 동작할 수 있는 것을 선정하고 선정된 기반 테스트에서 하나의 인자에만 변경을 주고 나머지는 기반 테스트의 값으로 고정하여 테스트 케이스들을 생성





<예제>
[명세] 새우 버거와 닭고기 버거는 4000원, 소고기 버거는 5000원이다. 
주문할 때 쿠폰을 사용하면 1000원 할인 가능하다. 또한 주문시간에 따라 할인이 가능하다.
피크 타임은 오전11시~오후2시(11:00~13:59)이다. 피크 타임 외의 시간에 주문하면 500원 할인한다.
All combinations : 3*2*2=12개
Each Choice(minimized) : 3개

*테스트 아이템 인자(Test Item Parameter) : 프로그램 행위에 영향을 주는 인자 : 버거 종류, 주문 시간, 쿠폰 적용







<예제_1>
[명세] 새우 버거와 닭고기 버거는 4000원, 소고기 버거는 5000원이다. 
주문할 때 쿠폰을 사용하면 1000원 할인 가능하지만 피크 타임외의 시간에만 적용이 가능하다
피크 타임은 오전11시~오후2시(11:00~13:59)이다. 피크 타임 외의 시간에 주문하면 500원 할인한다.
만약 주문시간에 따른 할인과 쿠폰이 동시에 적용되면 쿠폰에 따른 할인만 적용한다

- 예제 프로그램
public class BurgerShop2{
  public int getPrice(BurgerKind burgerType, LocalTime orderTime, boolean couponApplied){
int totalPrice = 0;
if(burgerType == BurgerKind.SHRIMP) totalPrice = 4000;
if(burgerType == BurgerKind.CHICKEN) totalPrice = 4000;
if(burgerType == BurgerKind.BEEP) totalPrice = 5000;

LocalTime startTime = LocalTime.of(hour:11, minute:0, second:0);
LocalTime endTime = LocalTime.of(hour:13, minute:59, second:59);

if(orderTime.isBefore(startTime) || orderTime.isAfter(endTime)){
  if(couponApplied)
    totalPrice -= 2000;
  else totalPrice -= 500;
}
return totalPrice
}
}
Q. Each Choice Testing으로 오류 검출 가능? 검출 안된다(운이 좋으면 검출 가능)

 

<테스트 조합의 갯수>
Each Choice < Pairwise < All Combination





<예제_2>
[명세] 새우 버거와 닭고기 버거는 4000원, 소고기 버거는 5000원이다.
주문할 때 쿠폰을 사용하면 1000원 할인 가능하지만 피크 타임외의 시간에만 적용이 가능하다. 피크 타임은 오전 11시~오후2시(11:00~13:59)분이다. 피크 타임 외의 시간에 주문하면 500원 할인한다. 소고기 버거는 쿠폰을 사용할 때 300원 더 할인한다. 만약 주문시간에 따른 할인과 쿠폰이 동시에 적용되면 쿠폰에 따른 할인만 적용된다.

LocalTime startTime = LocalTime.of(11,0,0);
LocalTime endTime = LocalTime.of(13,59,59);
if(orderTime.isBefore(startTime) || orderTime.isAfter(endTme)){
if(couponApplied){
  totalPrice -= 1000;
  if(burgerType == BurgerKind.BEEF)
totalPrice -=300; //Nonpeaktime, Coupon True, BEEF 일 때 만족
}else totalPrice -= 500;
}
return totalPrice;
}
-> pairwise에서는 만족하는 커버리지가 없으므로(Nonpeaktime, Coupon True, BEEF), All Combination을 커버리지로 테스트케이스를 만들어야 한다





<Pairwise 테스트>
- Each Choice는 유용한 테스트 케이스가 누락될 수 있다
- All Combinations는 너무 많은 테스트 케이스가 생성된다
- Pairwise 테스트는 모든 가능한 입력 값들의 조합들을 테스트 하는 대신 모든 짝(pair)들의 조합을 테스트하는 방법





<Base Choice 테스팅>
- 기반이 되는 테스트 조합을 미리 선정한다. 기반 테스트는 사용자의 관점에서 가장 선택될 빈도가 높으면서 일반적으로는 정상 동작할 수있는 것을 선택한다. 기반 선정 조합은 우선 기반 조합을 선정하고 선정된 기반 테스트에서 하나의 인자에만 변경을 주고 나머지는 기반 테스트의 값으로 고정하여 생성한다.





<IPO 알고리즘>
- 수평확장(Horizontal Growth) 수직확장(Vertical Growth)의 반복
- 수평확장은 새로운 Factor를 고려하는 과정이고 수직확장은 테스트 케이스를 추가하는 과정이다.
  - 수평확장 : 수평으로 확장하는데 값은 '입력인자, Test item, Parameter'가 있다
  - 수직확장 : 수평확장이 하나의 테스트 케이스(Test Case)가 되는 것
*Test Item Parameter = Factor


1. All Combination : 3*3*2=18개
2. Each Choice = 3개
3. Pairwise : 인자들 중에 가장 많은 값(A, B) = 3*3=9개

'소프트웨어공학' 카테고리의 다른 글

구조 기반 테스트  (1) 2024.06.03
명세 기반 테스트  (0) 2024.05.21
클래스 다이어그램 정리  (0) 2024.05.20