테스트 레벨과 통합 테스트
쉽게 말하면
테스트는 작은 것부터 큰 것으로 올라가요. 모듈 하나를 시험하는 단위 테스트, 모듈을 이어 붙여 시험하는 통합 테스트, 완성된 시스템 전체를 시험하는 시스템 테스트, 고객이 받아들일지 정하는 인수 테스트 순서예요. 모듈을 이어 붙일 때 아직 없는 부분은 가짜로 채워요. 위에서부터 붙일 땐 아래 대신 스텁을, 아래에서부터 붙일 땐 위 대신 드라이버를 써요.
시험용 정의
테스트 레벨은 단위 테스트(모듈·컴포넌트 단위, 주로 화이트박스) → 통합 테스트(모듈 간 인터페이스) → 시스템 테스트(전체 시스템이 기능·비기능 요구를 만족하는지) → 인수 테스트(사용자가 인수 여부 결정) 순서다. 인수 테스트에는 개발자 장소에서 사용자가 하는 알파 테스트와 사용자 장소에서 실제 환경으로 하는 베타 테스트가 있다. 통합 테스트는 하향식(상위부터, 스텁 사용, 깊이·너비 우선), 상향식(하위부터, 드라이버 사용, 클러스터 단위), 빅뱅(한꺼번에), 샌드위치(혼합) 방식이 있다. 테스트 하네스는 테스트를 돕는 코드와 데이터 묶음(드라이버, 스텁, 테스트 슈트, 케이스, 스크립트, 목 오브젝트)이다.
비유로 이해하기
자동차 공장이다. 부품 하나(단위) → 엔진 조립(통합) → 완성차 주행(시스템) → 고객 시승(인수). 운전대를 먼저 달았는데 엔진이 아직 없으면 가짜 엔진(스텁), 엔진은 있는데 운전대가 없으면 시험용 조종기(드라이버)를 붙인다.
자세히
그림으로 보기: 테스트 레벨
- 단위 테스트모듈 하나(상세 설계와 짝)
- 통합 테스트모듈 사이 인터페이스(아키텍처 설계와 짝)
- 시스템 테스트전체 기능·성능(요구 분석과 짝)
- 인수 테스트사용자가 받아들일지(알파·베타)
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 스텁 | 하위 모듈 대신 호출을 받아 간단히 결과를 돌려주는 임시 모듈 (하향식) |
| 드라이버 | 상위 모듈 대신 테스트 대상을 호출하는 임시 제어 모듈 (상향식) |
| 클러스터 | 하나의 주요 기능을 이루는 하위 모듈 묶음 |
| 테스트 슈트 | 테스트 케이스의 묶음 |
| 목 오브젝트 | 실제 객체처럼 정해진 대로 반응하는 가짜 객체 |
V 모델과 테스트 레벨
| 개발 단계 | 짝이 되는 테스트 |
|---|---|
| 요구사항 분석 | 인수 테스트 |
| 시스템(기본) 설계 | 시스템 테스트 |
| 상세 설계 | 통합 테스트 |
| 구현(코딩) | 단위 테스트 |
통합 방식 비교
| 방식 | 순서 | 임시 모듈 | 특징 |
|---|---|---|---|
| 하향식 | 상위 → 하위 (깊이 우선 또는 너비 우선) | 스텁 | 주요 제어 모듈과 구조를 일찍 시험 |
| 상향식 | 하위 → 상위 (클러스터 단위) | 드라이버 | 하위 모듈을 충분히 시험. 스텁 불필요 |
| 빅뱅 | 모두 한 번에 | 없음 | 작은 시스템. 결함 위치 찾기 어렵다 |
| 샌드위치(혼합) | 상위는 하향식, 하위는 상향식 | 둘 다 | 큰 시스템 |
상향식 통합 순서
- 하위 모듈들을 클러스터로 묶는다
- 드라이버를 만들어 클러스터를 시험한다
- 드라이버를 실제 상위 모듈로 바꾸며 위로 통합한다
테스트 자동화 도구: 정적 분석, 테스트 실행(데이터 주도·키워드 주도), 성능 테스트, 테스트 통제 도구. 단위 테스트 프레임워크로 xUnit(JUnit 등)을 쓴다.
기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| 상향식 통합 순서 | 가장 아래 모듈부터 합쳐 올라간다. 최상위 모듈을 먼저 만드는 것은 하향식 |
| 하향식 통합 방식 | 깊이 우선 또는 넓이 우선으로 하위 모듈을 붙여 간다 |
| xUnit | JUnit(자바), CppUnit(C++), HttpUnit(웹) 같은 단위 테스트 도구 묶음 |
시험에 이렇게 나와요
- 하향식 통합의 임시 하위 모듈 → 스텁 / 상향식 통합에서 하위 모듈을 호출하는 임시 모듈 → 드라이버
- 알파 테스트 → 개발자 장소에서 사용자가 개발자 앞에서 / 베타 테스트 → 사용자 환경에서 개발자 없이(필드 테스트)
- 알파·베타가 속한 단계 → 인수 테스트
- 단위 테스트로 못 찾는 오류 → 모듈 사이 상호작용 오류 (통합 테스트 대상)
- 단위 테스트 도구 → JUnit·CppUnit·HttpUnit 같은 xUnit 계열
- 성능 테스트 도구 → 가상 사용자로 처리량·응답 시간·자원 사용률 측정
확인 문제
Q1. 하향식 통합 테스트에서 아직 만들지 않은 하위 모듈을 대신하는 가짜 모듈은?
- 하네스
- 오라클
- 드라이버
- 스텁
정답 보기
4번 스텁
하향식은 위에서 아래로 붙이니 아래가 비어 스텁(Stub)을 쓴다. 상향식은 아래부터 붙이니 위가 비어 드라이버(Driver)를 쓴다.
Q2. 상향식 통합 테스트에 대한 설명으로 옳은 것은?
- 스텁이 반드시 필요하다
- 하위 모듈부터 클러스터로 묶어 드라이버로 시험한다
- 모든 모듈을 한꺼번에 통합한다
- 주요 제어 모듈을 가장 먼저 시험한다
정답 보기
2번 하위 모듈부터 클러스터로 묶어 드라이버로 시험한다
아래부터 올라가며 드라이버를 쓴다.
Q3. 개발자의 장소에서 사용자가 개발자 앞에서 하는 인수 테스트는?
- 단위 테스트
- 회귀 테스트
- 알파 테스트
- 베타 테스트
정답 보기
3번 알파 테스트
통제된 환경에서 하는 알파 테스트.
Q4. V 모델에서 '상세 설계'와 짝을 이루는 테스트는?
- 통합 테스트
- 단위 테스트
- 인수 테스트
- 시스템 테스트
정답 보기
1번 통합 테스트
구현은 단위, 상세 설계는 통합.
Q5. 테스트 하네스의 구성 요소가 아닌 것은?
- 테스트 드라이버
- 테스트 스텁
- 테스트 컴파일러
- 테스트 슈트
정답 보기
3번 테스트 컴파일러
드라이버, 스텁, 슈트, 케이스, 스크립트, 목 오브젝트.
헷갈리기 쉬운 O·X
하향식 통합 테스트에서는 드라이버가 필요하다.
정답 보기
X 하향식은 스텁, 상향식이 드라이버.
베타 테스트는 실제 사용자 환경에서 사용자가 직접 하는 테스트다.
정답 보기
O
단위 테스트는 주로 시스템 전체의 비기능 요구사항을 확인한다.
정답 보기
X 단위 테스트는 모듈 하나를 대상으로 한다. 전체 요구는 시스템 테스트.