테스트 원리·프로세스·정적 및 동적 테스트
테스트의 기본 원리와 활동을 살펴보고 정적·동적 테스트 및 디버깅의 차이를 익힌다.
핵심 범위
애플리케이션 테스트는 소프트웨어의 결함을 발견하고 요구사항 충족 여부를 확인하기 위한 활동이다. 시험에서는 테스트 원리, 테스트 프로세스, 정적 테스트와 동적 테스트를 구분한다.
테스트의 기본 원리
- 결함의 존재를 밝힌다: 테스트는 결함이 있음을 보여 줄 수 있지만 결함이 전혀 없음을 증명할 수는 없다.
- 완전한 테스트는 불가능하다: 모든 입력과 경로를 시험할 수 없으므로 위험과 우선순위를 고려한다.
- 개발 초기에 시작한다: 결함을 일찍 찾을수록 수정 비용을 줄일 수 있다.
- 결함은 집중된다: 소수 모듈에 많은 결함이 모이는 경향이 있다.
- 살충제 패러독스: 같은 테스트만 반복하면 새로운 결함을 찾는 효과가 줄어들 수 있다.
- 테스트는 상황에 의존한다: 시스템의 목적과 위험에 따라 방법이 달라진다.
- 오류 부재의 궤변: 결함이 적어도 사용자 요구를 만족하지 못하면 좋은 소프트웨어가 아니다.
테스트 프로세스
| 활동 | 핵심 내용 |
|---|---|
| 계획 | 범위, 목표, 일정, 인력, 환경, 종료 기준 수립 |
| 분석·설계 | 테스트 조건과 테스트 케이스, 기대 결과 작성 |
| 구현 | 테스트 데이터, 절차, 스크립트, 환경 준비 |
| 실행 | 테스트 수행, 실제 결과 기록, 기대 결과와 비교 |
| 결함 관리 | 발견 결함을 기록·분류하고 수정 상태 추적 |
| 완료 | 결과, 미해결 결함, 잔여 위험, 산출물 정리 |
테스트 케이스에는 식별자, 목적, 사전 조건, 입력값, 수행 절차, 기대 결과가 포함될 수 있다.
테스트 오라클은 승인된 요구사항과 규칙에 기반해야 한다. 요구사항끼리 충돌하면 권한 있는 책임자와 기준을 확정하고 변경 이력과 추적 관계를 갱신한다.
실제 결과가 다르더라도 테스트 환경·데이터·스크립트·기대 결과가 원인일 수 있다. 제품 결함 판정 전에 정의된 사전 조건이 실제로 충족되었는지 확인한다.
정적 테스트와 동적 테스트
| 구분 | 정적 테스트 | 동적 테스트 |
|---|---|---|
| 실행 여부 | 프로그램을 실행하지 않음 | 프로그램을 실행함 |
| 대상 | 요구사항, 설계서, 코드 등 | 실행 가능한 소프트웨어 |
| 대표 방법 | 리뷰, 인스펙션, 정적 분석 | 단위·통합·시스템·인수 테스트 |
리뷰 유형
- 동료 검토: 동료가 산출물을 검토한다.
- 워크스루: 작성자가 내용을 설명하며 의견을 받는다.
- 인스펙션: 역할과 절차를 정해 공식적으로 결함을 찾는다.
정적 분석 도구는 코드를 실행하지 않고 코딩 규칙 위반, 잠재 오류, 복잡도 등을 분석한다.
테스트와 디버깅
- 테스트는 실패를 발견하고 기록하는 활동이다.
- 디버깅은 실패의 원인을 찾아 결함을 수정하는 개발 활동이다.
테스트가 실패 원인을 자동으로 수정하는 것은 아니다.
품질 보증은 적절한 개발·검토·테스트 프로세스를 만들고 개선하여 결함을 예방하는 데 초점을 둔다. 테스트와 디버깅은 품질 보증 전체와 같은 뜻이 아니다.