[소공 수업 정리] Test Techniques black
Verification, Validation, and Test
<Black-box Test>
Test Methods
Test Technique, Test Data Selection Method (Test Method), Test Coverage Criteria
Black box test: behavioral, specification-based
equivalence partitioning, bounding value analysis, decision table, state-based test, pair-wise test, etc.
Black-box Test (Specification-Based Test)
- 테스트 대상인 sw 코드의 내용, 내부의 구조는 보지 않고, 입력 값에 대한 프로그램 실행 결과가 올바른 출력인지 테스트
- 요구사항 등 명세서를 기반으로 테스트 케이스를 선정하여 테스트 (내용을 모르니까)
- 테스트 기법
- equivalence partitioning
- boundary value analysis
- usecase-based
- decision table
- state-based
- pair-wise test
1. 동치 분할 (Equivalence Partitioning)
프로그램의 입력 데이터를 여러 부류로 분류(같은 결과를 내보내는 입력을 하나로 묶는 것) 하고, 이를 바탕으로 각각의 대표값(각 집합마다 뽑아서)을 설정하여 테스트하는 방법
- 동치 분할의 집합: 같은 출력 결과를 생산하는 입력 조건 또는 입력 데이터 값:
- Valid Equivalence Class: 유효한 입력 데이터
- Invalid Equivalence Class: 유효하지 않은 입력 데이터(입력되지 말아야 할 값) ex. 시간표 내에서 8시 이후 수업
- 단점 : 주관적인 분할
2. 경계 값 분석 (Boundary Value Analysis)
동치 분할의 경계 부분에 해당되는 입력 값에서 결함이 발견될 확률이 경험적으로 높기 때문에 경계 값에서 테스트 데이터를 선정한다.
- 절차 : Equivalence Partitioning 진행 후 -> 경계 값들로 test 값 정하기
- 단점 : 주관적인 분할
- 러프한 분석 -> tester가 누구냐에 따라 결함을 많이 발견할 수도, 못할수도
- Exercise
- Integer
- Real-Number
- Character and String (Password (6-10 character alphanumeric))
- equivalence partitioning의 경계값들 모두 test case가 될 수 있음
3. 결정 테이블 (Decision Table)
- 앞까진 값이 동일한 출력을 내보내는 입력들끼리 묶은 것
- 입력 조건이 많은 경우, 특히 입력 값들이 논리적인 관계(True/False로 따질 수 있는 경우)를 갖는 경우 테이블화하여 체계적으로 분석
- 결정테이블의 모든 컬럼을 커버하는 테스트 케이스 선정
- ex. KTF N-Zone 단말기 요구사항
- 원인/결과를 도출한다. (Yes/No로 판단)
- 원인 - Test 조건
- 결과 - 기대결과
- 만약 원인과 결과가 5개라면 2^5개의 조합이 생긴다.
4. 상태 기반 테스트 (State-Based Testing)
상태도(state diagram)은 테스트 대상 시스템의 behavior, 즉 이전의 이력(history)을 반영하는 상태 및 그 변화를 잘 표현한다. (동작에 따라 상태가 어떻게 바뀌는지)
- 상태도는 상태(state), 전이(transition), 이벤트(event), 조건(guard), 액션(action)으로 구성
- 전이는 상태 변화를 일으키는 것 (상태가 A->B 등으로 바뀌는 것)
- A 상태에서 B 상태가 되기 위해선 Event가 있어야 한다.
- 상태도의 state, transition, (이벤트, 조건, 액션)을 커버하는 테스트
- State coverage: execute every state (node coverage) - 모든 상태들이 다 하나하나 test됐는지 check
- Transition coverage: execute every transition (edge coverage) - transition들이 다 커버가 됐는가
- Transition-pair: execute pairs of transitions (edge-pair coverage) - transition에 대한 조합들을 가지고 따지는 것
5. Pair-wise 조합 테스트 (모든 가능한 입력 변수 쌍)
2개 요소의 상호작용에 의한 테스트가 결함을 보다 더 발견한다는 경험에 기반, 이는 sw의 입력 조합이 매우 많을 때 전체를 다 테스트하지 않고도 높은 커버리지를 달성할 수 있도록 설계된 효율적인 기법
- 테스트 대상 아이템의 모든 요소에 대해, 두 개 요소의 모든 조합
- all-pairs 테이블 생성 자동화 도구 : www.pairwise.org 그 외 Triple, Quadruple,...
Orthogonal array에 의한 Pair-wise 테스트 방법
* Orthogonal array: 각 요소(factor)와 옵션(option)이 모든 조합에서 균등하게 분포되도록 설계된 배열
예를 들어, 4개의 요소(각각 3가지 값)가 있다고 하면:
- 전체 조합: 34=813^4 = 81개의 테스트 케이스 필요.
- Orthogonal Array 사용: 9개 테스트 케이스로도 모든 쌍 조합을 테스트 가능
- 적합한 orthogonal array 결정하고 필요 없는 열은 삭제
- 요소(factor) -> orthogonal array의 칼럼
- 옵션(option) -> 요소의 값
- 필요 없는 부분 삭제
Orthogonal Array를 활용한 Pair-wise 테스트 방법
- 요소(Factor)와 옵션(Value) 정의
- 테스트하려는 시스템의 변수(요소)와 각 변수의 가능한 값을 정리합니다.
- 예를 들어:
- 요소(Factor): OS, 브라우저, 네트워크.
- 옵션(Value): Windows/Linux, Chrome/Firefox, WiFi/Ethernet.
- 적합한 Orthogonal Array 선택
- 요소의 수와 각 요소의 가능한 값 개수에 맞는 Orthogonal Array를 선택합니다.
- 예: 3개의 요소, 각각 2개의 옵션 → L₄(2³) (4개의 test case) : 2개의 값을 가지는 3개의 요소를 조합하여 Orthogonal Array를 생성하며, 이 조합을 통해 4개의 test case를 얻을 수 있다는 뜻이다.
- Orthogonal Array로 테스트 케이스 생성
- Orthogonal Array에 따라 각 요소와 옵션의 조합을 매핑합니다.
- 각 요소 쌍의 모든 조합이 포함되도록 배열.
- 필요 없는 열/부분 삭제
- 테스트에 불필요한 요소가 있다면 해당 열을 삭제해 최적화합니다.