테스트 수준·통합 전략·설계 기법
테스트 수준과 통합 전략을 구분하고 경계값·결정 테이블·커버리지 기법을 적용한다.
핵심 범위
테스트 수준은 무엇을 대상으로 검증하는가, 통합 전략은 모듈을 어떤 순서로 결합하는가, 테스트 설계 기법은 테스트 데이터를 어떤 기준으로 고르는가를 나타낸다.
테스트 수준
| 수준 | 대상과 목적 |
|---|---|
| 단위 테스트 | 모듈·함수·클래스 등 작은 단위의 내부 동작 확인 |
| 통합 테스트 | 모듈 사이의 인터페이스와 데이터 흐름 확인 |
| 시스템 테스트 | 완성된 시스템이 전체 요구사항을 만족하는지 확인 |
| 인수 테스트 | 사용자·고객 관점에서 업무 요구 충족 여부 확인 |
알파 테스트는 개발자 환경에서 제한된 사용자가 수행하고, 베타 테스트는 실제 사용 환경의 사용자에게 배포해 수행하는 인수 테스트 형태다.
전통적인 V 모델은 개발 산출물과 테스트 수준을 대응시킨다. 사용자 요구는 인수, 시스템 요구는 시스템, 구조·인터페이스 설계는 통합, 상세 모듈 설계는 단위 테스트의 주요 근거가 된다.
통합 테스트 전략

하향식의 스텁은 호출받는 하위 모듈, 상향식의 드라이버는 호출하는 상위 모듈을 대신한다.
| 전략 | 방법 | 필요한 대역 |
|---|---|---|
| 빅뱅 | 모든 모듈을 한 번에 결합 | 별도 대역이 적지만 결함 위치 파악이 어려움 |
| 하향식 | 상위 모듈부터 아래로 결합 | 아직 없는 하위 모듈을 스텁으로 대체 |
| 상향식 | 하위 모듈부터 위로 결합 | 아직 없는 상위 호출 모듈을 드라이버로 대체 |
| 샌드위치 | 하향식과 상향식을 함께 수행 | 스텁과 드라이버 모두 사용할 수 있음 |
- 스텁: 호출되는 하위 모듈을 대신한다.
- 드라이버: 하위 모듈을 호출하는 상위 모듈을 대신한다.
하향식 통합의 너비 우선은 같은 계층을 먼저 결합하고, 깊이 우선은 한 분기를 끝까지 내려간다. 두 방식 모두 아직 결합하지 않은 하위 호출 대상을 스텁으로 대신할 수 있다.
명세 기반 테스트 기법
동등 분할
입력 영역을 같은 방식으로 처리될 것으로 예상되는 유효·무효 그룹으로 나누고 각 그룹에서 대표값을 선택한다.
경계값 분석
오류가 자주 발생하는 입력 범위의 경계와 경계 바로 안팎의 값을 선택한다. 예를 들어 허용 범위가 1~100이면 0, 1, 2, 99, 100, 101 등을 고려한다.
결정 테이블
여러 조건의 조합과 그에 따른 행동을 표로 나타낸다. 할인, 승인, 권한처럼 복합 조건의 조합을 시험할 때 유용하다.
상태 전이 테스트
현재 상태와 사건에 따라 다음 상태와 행동이 달라지는 시스템을 시험한다. 로그인 실패 횟수, 주문 상태, 신호등 등이 대표 사례다.
동등 분할에서는 값의 범위뿐 아니라 자료형, 필수 여부, 코드 집합 등 검증 규칙의 각 차원을 구분한다. 문자열 숫자를 자동 변환하는지 여부가 클래스 판정에 영향을 준다.
결정 테이블은 조건 조합별로 행동이 누락되거나 서로 충돌하는지 확인하는 데도 쓰인다. 여러 규칙이 동시에 적용될 때 행동 결합 또는 우선순위를 정의해야 한다.
상태 전이는 현재 상태와 사건뿐 아니라 가드 조건을 만족해야 실행될 수 있다. 전이에 연결된 행동은 전이가 허용된 경우 수행하며, 미허용 사건의 처리도 명세에 따른다.
구조 기반 테스트 기법
| 커버리지 | 의미 |
|---|---|
| 문장 커버리지 | 모든 실행 문장을 한 번 이상 수행 |
| 분기·결정 커버리지 | 각 판단 결과의 참과 거짓을 한 번 이상 수행 |
| 조건 커버리지 | 각 개별 조건이 참과 거짓을 한 번 이상 갖게 함 |
| 조건/결정 커버리지 | 조건 커버리지와 결정 커버리지를 모두 만족 |
100% 커버리지는 해당 기준의 항목을 모두 실행했다는 뜻이지 모든 결함과 누락 요구사항이 없다는 뜻은 아니다.
기본 경로 테스트
제어 흐름 그래프의 독립 경로를 기준으로 테스트한다. 순환 복잡도는 일반적으로 V(G) = E - N + 2 또는 이진 판단 노드 수 + 1로 계산할 수 있다.
반복문 테스트에서는 반복을 건너뛰는 경우, 정확히 한 번 수행하는 경우, 여러 번 수행하는 경우를 구분한다. 상한이 정의된 반복은 상한의 전후도 별도로 검토한다.
개별 조건 커버리지의 분모는 실행 가능한 각 원자 조건의 참·거짓 결과 수다. 조건 세 개의 양쪽 결과가 모두 가능하면 분모는 6이다. 단락 평가로 실제 평가되지 않은 조건은 관측한 것으로 세지 않는다.
다중 조건 커버리지와 실행 가능 조합
조건 커버리지는 각 개별 조건의 참·거짓 결과를 세고, 결정 커버리지는 전체 결정의 참·거짓 결과를 센다. 다중 조건 커버리지는 한 결정에 포함된 조건들의 조합을 세는 별도의 기준이다. 서로 독립적인 불리언 조건 n개의 이론적 조합은 2ⁿ개다. 두 조건 A, B가 모두 매번 평가되고 네 조합이 모두 가능하다면 (T,T), (T,F), (F,T)를 시험한 조합 커버리지는 3/4이다. A AND B의 결정 결과는 참과 거짓을 모두 보므로 결정 커버리지는 100%가 된다.
업무 제약 때문에 불가능한 조합이 있다면 분모를 어떻게 정하는지 명시한다. ‘실행 가능한 조합만 분모’라는 조건에서는 불가능한 조합을 제외하고 계산한다. 단락 평가로 일부 조건이 실제 실행되지 않는 경우와 논리적인 조합 자체가 불가능한 경우는 구분한다. 조건을 모두 평가한다는 전제가 없으면 실제 실행 기록도 살펴야 한다.
원인-효과 그래프에서 결정 테이블로
원인-효과 그래프는 입력 조건인 원인과 출력·행동인 효과 사이의 논리 관계를 나타낸다. 조건들의 AND·OR·NOT 관계와 제약을 정리한 후, 유효한 조건 조합과 그때의 행동을 결정 테이블의 규칙 열로 옮길 수 있다. 이 열에서 테스트 데이터를 정한다. 그래프를 만들었다는 사실 자체가 모든 경우를 실행했다는 뜻은 아니다.
경험 기반 테스트와 기록
오류 추정은 과거 결함, 개발·사용 경험, 실패하기 쉬운 패턴을 근거로 테스트를 선정하는 방법이다. 명세의 경계만 기계적으로 고르는 것과 다르며, 경험에 따른 추정을 관측 가능한 입력과 기대 결과로 바꾸어 확인한다.
탐색적 테스트에서는 학습·설계·실행이 서로 영향을 주며 진행된다. 임의로 누르는 무기록 작업과 같지 않다. 조사 목표와 범위, 환경·데이터, 실제로 수행한 활동, 관찰 결과와 발견한 문제, 미확인 사항을 남겨 후속 확인을 가능하게 한다. 이미 관찰한 성공만 기록하고 실패나 미확인 영역을 숨기지 않는다.
상태·전이와 테스트 범위
상태 커버리지는 방문한 상태 수, 전이 커버리지는 실행한 전이 수를 각각 대상 전체로 나눈다. 대기·확정·취소의 세 상태와 대기→확정·대기→취소·확정→취소의 세 전이가 있을 때, 대기→확정→취소 경로는 상태 100%, 전이 2/3을 확인한다.
여러 입력 검증을 따로 시험하려면 한 입력만 무효로 하고 나머지는 유효하게 구성한다. 모두 잘못된 입력을 한꺼번에 넣으면 앞의 오류가 뒤의 검증을 가릴 수 있다. 테스트 집합을 줄일 때는 필요한 요구사항의 합집합이 유지되는지 확인하고, 선행 데이터가 필요한 케이스는 준비 순서를 지킨다.