CS
소프트웨어 테스트
2026년 01월 30일 07:22
Software Test
1. 소프트웨어 테스트란?
-
소프트웨어가 요구사항에 맞게 동작하는지 확인하는 과정
-
오류(Error) 및 결함(Bug)을 발견하기 위한 활동이며 결함이 없음을 증명하는 활동이 아님
-
살충제 패러독스: 동일한 테스트 케이스를 반복해서 수행하면 새로운 결함을 더 이상 발견하지 못하는 현상
-
파레토의 법칙: 소프트웨어 테스트에서는 전체 결함의 대부분이 소수의 모듈에 집중되어 발생
2. 테스트의 목적
- 오류 및 결함 발견
- 소프트웨어 품질 향상
- 신뢰성 확보
3. 생명주기 단계별 테스트 (V-모델 기준)
| 개발 단계 | 테스트 단계 |
|---|---|
| 요구사항 분석 | 인수 테스트 |
| 시스템 설계 | 시스템 테스트 |
| 아키텍처 설계 | 통합 테스트 |
| 모듈 설계 | 단위 테스트 |
4. 테스트 단계별 정리
단위 테스트 (Unit Test)
- 대상: 함수, 클래스, 단일 모듈
- 수행자: 개발자
- 목적: 모듈 내부 로직의 정확성 검증
- 특징
- 내부 구조를 고려한 테스트
- 구현 직후 수행
- 화이트박스 테스트 중심
통합 테스트 (Integration Test)
- 대상: 여러 모듈의 결합
- 수행자: 개발자 또는 테스트 담당자
- 목적: 모듈 간 인터페이스 오류 검출
- 특징
- 상위·하위 모듈 연동 테스트
- 스텁(Stub)과 드라이버(Driver) 사용
시스템 테스트 (System Test)
- 대상: 전체 시스템
- 수행자: 테스트 담당자
- 목적: 시스템 요구사항 충족 여부 검증
- 특징
- 실제 환경과 유사한 조건
- 기능 테스트 + 비기능 테스트 포함
- 블랙박스 테스트 중심
인수 테스트 (Acceptance Test)
- 대상: 완성된 시스템
- 수행자: 사용자
- 목적: 요구사항 만족 여부 최종 확인
- 특징
- 사용자 관점 테스트
- 계약 기준에 따라 수행
- 블랙박스 테스트
- 알파, 베타 테스트
5. 테스트 관점에 따른 분류
블랙박스 테스트 (Black Box Test)
-
특징
- 내부 구조를 고려하지 않음
- 입력과 출력만을 기준으로 테스트
- 사용자 관점 테스트
-
적용 단계
- 시스템 테스트
- 인수 테스트
-
대표 기법
- 동치 분해: 입력 값을 유효한 그룹과 무효한 그룹으로 나누어 각 그룹에서 대표 값을 선택해 테스트
- 경계값 분석: 입력 값의 최소값·최대값 등 경계 부근에서 오류가 발생하기 쉬운 점을 집중 테스트
- 원인–결과 그래프: 입력 조건(원인)과 출력 결과(결과)의 논리적 관계를 그래프로 표현하여 테스트 케이스 도출
화이트박스 테스트 (White Box Test)
-
특징
- 내부 구조를 고려하여 테스트
- 코드 흐름과 분기 구조 확인
- 개발자 관점 테스트
-
적용 단계
- 단위 테스트
-
대표 기법
- 기초 경로 검사: 프로그램의 제어 흐름 그래프를 기반으로 독립적인 모든 실행 경로를 최소 한 번 이상 테스트
- 제어 구조 테스트: 프로그램의 순차, 선택, 반복 구조가 올바르게 동작하는지 검사
6. 스텁과 드라이버
스텁 (Stub)
- 하위 모듈을 대신하는 가짜 모듈
- 호출 당하는 모듈
- 하향식 통합 테스트에서 사용
드라이버 (Driver)
- 상위 모듈을 대신하는 가짜 모듈
- 호출 하는 모듈
- 상향식 통합 테스트에서 사용
7. 테스트 커버리지 (Test Coverage)
- 테스트가 프로그램을 얼마나 실행했는지를 측정하는 기준
- 테스트의 충분성을 판단하는 지표
주요 커버리지 종류
- 구문 커버리지: 모든 문장이 한 번 이상 실행되었는지
- 분기 커버리지: 모든 조건의 참/거짓이 실행되었는지
- 조건 커버리지: 조건식 내 각 조건이 실행되었는지
8. 테스트 오라클 (Test Oracle)
테스트 결과가 올바른지 판단하기 위한 기준
테스트 실행 결과를 기대 결과(Expected Result) 와 비교하여 성공 또는 실패를 판정
- 목적: 테스트 결과의 옳고 그름 판단
- 특징
- 자동 또는 수동으로 판정 가능
- 모든 테스트에는 오라클이 존재해야 테스트 수행 가능
- 오라클이 없으면 테스트 결과의 정확성 판단 불가
9. 회귀 테스트 (Regression Test)
프로그램 수정 또는 변경 이후 기존 기능이 정상적으로 동작하는지 확인하는 테스트
- 목적: 수정으로 인해 발생할 수 있는 부작용(Side Effect) 검출
- 특징
- 기존 테스트 케이스를 재사용
- 변경된 부분 및 영향 범위 중심으로 수행
- 유지보수 단계에서 주로 수행
10. 정적 테스트 / 동적 테스트
정적 테스트 (Static Test)
- 프로그램을 실행하지 않고 검토
- 코드 또는 문서 기반 테스트
- 종류
- 워크스루(Walkthrough): 개발자가 주도하며 설명하면서 검토
- 인스펙션(Inspection): 전문가가 참여하는 공식적인 검토
동적 테스트 (Dynamic Test)
- 프로그램을 실제로 실행하여 테스트
- 실행 결과를 기반으로 오류 검출
11. 알파 테스트 / 베타 테스트
알파 테스트
- 개발자 환경에서 수행
- 사용자 참여 가능
- 내부 검증 목적
베타 테스트
- 실제 사용자 환경에서 수행
- 배포 전 최종 검증
