테마
테스트 원칙과 단계
테스트는 결함을 찾아 품질을 확인하는 일이지만, 아무렇게나 많이 한다고 좋아지지 않는다. 그래서 테스트에는 경험에서 나온 원칙과, 개발 단계에 맞춰 나눈 테스트 단계가 있다. 실기 시험은 원칙의 이름(파레토 법칙, 살충제 패러독스, 오류-부재의 궤변), 정적·동적 테스트의 구분, V-모델에서 단계끼리의 짝, 알파·베타 테스트 구분을 단답형으로 묻는다.
테스트의 기본 원칙
원칙은 테스트를 어디에 얼마나 쏟을지 판단하게 해 준다.
| 원칙 | 뜻 |
|---|---|
| 파레토 법칙(Pareto principle) | 결함의 대부분이 코드의 일부분에 몰려 있다 |
| 살충제 패러독스(pesticide paradox) | 같은 테스트를 되풀이하면 새 결함을 더는 못 찾는다 |
| 오류-부재의 궤변 | 결함을 없애도 요구를 못 채우면 품질이 높다고 할 수 없다 |
파레토 법칙(Pareto principle)은 "결과의 80%가 원인의 20%에서 나온다"는 경험칙으로, 결함이 몰린 모듈을 먼저 시험하라는 뜻이 된다. 살충제 패러독스(pesticide paradox)는 같은 약을 계속 뿌리면 벌레가 내성을 갖는 현상에 빗댄 것으로, 테스트 케이스(test case)를 주기적으로 검토하고 새로 만들어야 하는 이유가 된다. 오류-부재의 궤변(absence of errors fallacy)은 결함 수만으로 품질을 판단하지 말라는 경고다. 이 밖에 결함의 존재만 보여 줄 뿐 부재는 증명하지 못한다는 원칙, 가능한 모든 입력 조합을 다 시험할 수는 없어 완벽한 테스트는 불가능하다는 원칙도 있다.
정적 테스트와 동적 테스트
프로그램을 실행하느냐로 테스트를 나눌 수 있다. 정적 테스트(static testing)는 실행하지 않고 명세서나 소스 코드를 읽어서 결함을 찾는다. 대표적인 방법으로 워크스루(walkthrough), 인스펙션(inspection), 코드 검사가 있다.
동적 테스트(dynamic testing)는 프로그램을 실제로 실행해서 결과를 본다. 내부 코드 구조를 보고 테스트를 설계하면 화이트박스 테스트(white-box testing), 명세만 보고 입력과 출력을 확인하면 블랙박스 테스트(black-box testing)다.
V-모델과 테스트 단계
V-모델(V-model)은 개발 단계와 테스트 단계를 V자로 마주 세워, 각 테스트가 어느 개발 산출물을 검증하는지 보여 주는 모형이다. 왼쪽으로 내려가며 요구사항부터 코드까지 만들고, 오른쪽으로 올라가며 거꾸로 확인한다.
| 개발 단계 | 짝이 되는 테스트 |
|---|---|
| 요구사항 | 인수 테스트(acceptance test) |
| 분석 | 시스템 테스트 |
| 설계 | 통합 테스트 |
| 구현 | 단위 테스트 |
단위 테스트(unit test)는 코딩 직후 모듈이나 컴포넌트 하나를 따로 떼어 시험한다. 인터페이스, 자료 구조, 경계 조건, 오류 처리 경로가 제대로 동작하는지 확인하므로 화이트박스 기법을 많이 쓴다. 통합 테스트(integration test)는 단위 테스트를 마친 모듈을 합치면서 모듈 사이 인터페이스 오류를 찾는다. 시스템 테스트(system test)는 완성된 시스템 전체가 기능·성능 같은 요구를 실제와 비슷한 환경에서 만족하는지 본다.
인수 테스트(acceptance test)는 사용자가 요구사항을 충족하는지 직접 확인하고 받아들일지 결정하는 마지막 단계다. 인수 테스트의 대표 두 가지는 장소와 통제 여부로 구분한다.
| 구분 | 알파 테스트 | 베타 테스트 |
|---|---|---|
| 장소 | 개발자 쪽 환경 | 사용자의 실제 환경 |
| 참여 | 사용자가 개발자 앞에서 | 여러 최종 사용자가 개발자 없이 |
| 환경 | 통제된 환경 | 통제되지 않은 실업무 환경 |
알파 테스트(alpha test)는 개발자가 옆에서 문제를 함께 기록하고, 베타 테스트(beta test)는 사용자가 발견한 문제를 개발자에게 알린다.
시험 포인트
- "결함의 80%가 코드 20%에서 발견된다" → 파레토 법칙. "같은 테스트 반복으로 더는 결함을 못 찾는다" → 살충제 패러독스. "결함을 없애도 요구를 못 채우면 품질이 높지 않다" → 오류-부재의 궤변.
- 실행 없이 검토 → 정적 테스트(워크스루·인스펙션). 실행해서 확인 → 동적 테스트(화이트박스·블랙박스).
- V-모델 짝: 요구사항↔인수, 분석↔시스템, 설계↔통합, 구현↔단위.
- 개발자 앞·통제된 환경 → 알파. 사용자 실환경·개발자 없음 → 베타.
