제목: 조합 테스팅(COMBINATORIAL TESTING)
저자: D. Richard Kuhn 외 2인
문서유형: 기술 문서(총 30페이지), 2012년
조합 테스팅의 실증적 기초와 수학적 기초에 대해 알아보고 그 장단점을 설명한 자료
실험계획법(DESIGN OF EXPERIMENTS)
- 소프트웨어를 위한 조합 테스팅은 통계 분야의 ‘실험계획법(design of experiments: DoE)’에 그 뿌리를 두고 있음.
- 1920년대 테스트 인자를 실험 단위에 랜덤하게 적용하여 응답 변수를 측정하는 농업 분야 실험에서 기원한 DoE는 ‘통제된 실험’을 수행하기 위한 통계적 방법론이다(즉, 신중하게 선택된 패러미터 값들을 가지고 시스템이 실행되며, 이는 입력 인자와 관심 패러미터인 응답 변수 간의 관계에 대한 유용한 통계적 정보를 계산하는 것을 허용함).
- DoE는 농업생산, 의료, 제조업 같은 조절불가능한 변수(uncontrolled variables)에 의존하는 시스템에서 주로 사용된다.
조합 테스팅(COMBINATORIAL TESTING)
- 패러미터들의 조합을 테스팅하는 것이 아주 효과적인 결함 발견으로 이어질 수 있음.
- 페어와이즈 테스팅(pairwise testing): ‘페어와이즈 테스팅’은 가장 기본적인 형태의 조합 테스팅이며, 패러미터 값들의 모든 가능한 쌍(2-way 조합)을 테스트에서 적어도 한번씩은 커버하는 것을 보장한다.
- 커버링 어레이(covering arrays): 세 개 또는 그 이상의 패러미터가 조합되는 경우에만 활성화되는 결함들도 존재하므로 더 높은 강도의 인터액션이 수행되는 조합 테스팅도 필요함. 이런 형태의 테스팅의 대표적인 예가 ‘커버링 어레이’이다. 커버링 어레이는 패러미터 값들의 모든 t-way 조합이 적어도 한번씩은 커버될 것을 요구한다. 복잡한 조합의 커버링 어레이를 생성하는 것이 현실적으로 어려운 문제이지만, 알고리즘 향상을 통해 최대 6-way 커버링 어레이(즉, t=6)까지 생성하는 것이 가능해짐.
- 직교 어레이(orthogonal arrays): 1960년대 Taguchi가 DoE 방법을 제조업 분야에 적용하여 ‘직교 어레이’를 제안함. 80년대 후반 임베디드 소프트웨어를 적재한 컴퓨터 및 통신 시스템이 출현하면서 DoE에 익숙한 일부 연구자들이 소프트웨어 테스팅에 직교 어레이 적용을 연구하기 시작함. 모든 직교 어레이는 커버링 어레이이지만 모든 커버링 어레이가 직교 어레이인 것은 아니다.
실무에서 조합 테스팅
조합 테스팅에 대한 기본적인 두 가지 접근법이 존재하는데, 하나는 ‘구성 패러미터 값들의 조합(combinations of configuration parameter values)’을 사용하는 것이고 다른 하나는 ‘입력 패러미터 값들의 조합(combinations of input parameter values)’을 사용하는 것이다.
1. 구성 테스팅(CONFIGURATION TESTING)
소프트웨어 시스템이 아주 많은 수의 구성 패러미터(configuration parameters)를 가지고 있는 경우가 흔하며, 초기 조합 테스팅은 시스템 구성의 모든 쌍(all pairs)을 테스팅 하는데 자주 적용되었음. 예를 들어, 통신 소프트웨어가 다양한 통화 타입(지역 전화, 장거리 전화, 국제 전화), 빌링 타입(발신자, 폰카드, 800), 액세스 타입(ISDN, VOIP, PBX), 빌링 서버 타입(Windows Server, Linux/MySQL, Oracle)으로 구성될 수 있는데, 이런 모든 구성에서 소프트웨어가 정확하게 동작해야 하므로 이 4가지 주요 구성 항목의 모든 페어와이즈 조합을 포함하는 테스트 스위트가 개발됨
구성 테스팅 예
운영 체제(윈도우 XP, 애플 OS X, Red Hat Enterprise Linux), 브라우저(Internet Explorer, Firefox), 프로토콜 스택(IPv4, IPv6), 프로세서(Intel, AMD), 데이터베이스(MySQL, Sybase, Oracle)의 5개 컴포넌트로 구성된 플랫폼 상에서 실행되는 애플리케이션이 있을 때, 총 48개(3x2x2x2x2 = 48)의 플랫폼 구성이 가능함. 아래 표는 단지 10개의 테스트케이스 만으로 각 컴포넌트가 다른 모든 컴포넌트와 적어도 한번씩은 인터액션하도록 테스트하는 것이 가능함을 보여줌(즉, 플랫폼 컴포넌트들의 모든 가능한 쌍이 커버가 됨)
[페어와이즈 테스트 구성]
2. 입력 테스팅(INPUT TESTING)
다양한 구성 옵션을 가지지 않는 애플리케이션이라 할지라도 특정 형태의 입력을 처리하는 일은 항상 수반됨. 예를 들어, 사용자가 아래의 10가지 방식으로 텍스트를 조정하는 것을 허용하는 워드프로세싱 애플리케이션이 있다면, 애플리케이션 내의 폰트 처리 기능이 이런 세팅을 입력으로 받아서 화면 상의 텍스트를 정확하게 처리해야 함.
- 아래 첨자(subscript)
- 윗 첨자(superscript)
- 밑줄(underline)
- 굵게(bold)
- 이탤릭체(italic)
- 줄긋기(strikethrough)
- 양각(emboss)
- 그림자(shadow)
- 작은 대문자(small caps)
- 모두 대문자(all caps)
bold+small caps과 같이 대부분의 옵션이 조합될 수 있지만 일부 양립이 불가능한 옵션들도 있음(예, subscript+superscript). 철저한 테스팅이 요구되는 경우 이 입력 세팅들의 모든 유효한 조합에서 폰트 처리 기능이 정확하게 동작해야만 하는데, 이 때 10개의 2진 입력에 대해 210 = 1,024개의 가능한 조합이 존재함. 하지만 경험적 분석에 의하면 실패가 대개 소수의 패러미터와 관련 있고 90% 이상의 버그가 3-way 조합 테스팅에 의해 발견된다고 함. 따라서 3-way 조합 테스팅이 워드프로세싱 애플리케이션의 비용 효과적인 테스팅 선택이 될 수 있으며, 이를 위해 아래와 같은 강도 3의 커버링 어레이를 생성함.
[10개 2진 변수들의 모든 3-way 조합을 포함하는 커버링 어레이]
위 표에서 A부터 J까지의 레이블을 가진 각 열(column)이 10개 패러미터의 값을 나타내며, 각 행(row)은 하나의 테스트케이스를 나타냄. 이 커버링 어레이에서 아무거나 세 개 컬럼을 아무 순서로나 선택해도 3개의 2진 값들의 모든 가능한 8가지 조합(000, 001, 010, …)이 나타남
제약(Constraints)
커버링 어레이를 생성하는데 있어서 ‘제약(Constraints)’이 중요한 고려 사항이며, 환경 제약(environment constraints)과 시스템 제약(system constraints)의 두 가지 타입이 존재한다.
- 환경 제약: 테스트 대상 시스템의 런타임 환경에 의해 생기는 제약. 예를 들어, 다양한 운영 체제와 브라우저에서 실행되도록 웹 애플리케이션을 테스트 할 때, 리녹스와 인터넷 익스플로러(IE)의 조합은 현실에서 발생하지 않으며 테스트 될 수 없음. 일반적으로 환경 제약을 위반하는 조합은 런타임에서 절대 발생할 수 없으며, 따라서 테스트 생성 시 반드시 제외시켜야 함
- 시스템 제약: 테스트 대상 시스템의 시맨틱(semantics)에 의해 부과되는 제약. 예를 들어, 신용 카드 애플리케이션 시스템에서 신청자의 수입이 반드시 양수값이여야 함. 시스템 제약을 충족시키지 못하는 유효하지 않은 조합은 런타임 시 테스트 대상 시스템에 디스플레이 될 수도 있으며, 테스트 대상 시스템은 이런 조합을 적절하게 거부해야 함. 유효하지 않은 조합이 제시되었을때 테스트 대상 시스템이 견고하게 버틸 수 있는지를 확인하는게 목적인 ‘견고성 테스팅(robustness testing)’을 수행하는 경우라면, 이런 유효하지 않은 조합 각각을 테스트 하는게 중요해짐
'테스트케이스설계기법별 > 명세 기반' 카테고리의 다른 글
요약정리 – 상태, 상태 그래프, 전이 테스팅 by Beizer (0) | 2021.03.15 |
---|---|
원인-결과 그래프(Cause-Effect Graph) 테스팅 (1) | 2020.10.12 |
페이퍼요약 - 기능 설계 검증을 위한 테스트 케이스 도출 by Stoica (0) | 2020.04.20 |
문서요약 – 직교 배열표 테스팅 기법 by Harrell (0) | 2020.04.13 |
페이퍼요약 - 이벤트 시퀀스를 활용한 효과적인 상호운용성 테스팅 방법 by Kuhn (0) | 2020.04.06 |