토픽 207 / 214·비교표
소프트웨어 테스트
블랙박스 vs 화이트박스 테스트
| 항목 | 블랙박스 | 화이트박스 |
|---|
| 기반 | 명세 기반 | 구조(코드) 기반 |
| 관점 | 사용자 관점 | 개발자 관점 |
| 코드 지식 | 불필요 | 필수 |
| 기법 | EP, BVA, 결정테이블 | 문장/결정/조건 커버리지 |
| 발견 결함 | 기능 누락/오류 | 논리적 오류/경로 오류 |
테스트 수준: 단위→통합→시스템→인수
| 항목 | 단위 | 통합 | 시스템 | 인수 |
|---|
| 대상 | 함수/클래스 | 모듈 간 | 전체 시스템 | 사용자 관점 |
| 수행자 | 개발자 | 개발팀/QA | QA팀 | 고객/사용자 |
| 목적 | 코드 정확성 | 인터페이스 검증 | 요구 충족 | 비즈니스 충족 |
| 도구 | JUnit, pytest | Postman | Selenium | UAT 시나리오 |
EP vs BVA vs 결정테이블
| 항목 | 동등분할(EP) | 경계값분석(BVA) | 결정테이블 |
|---|
| 원리 | 클래스 대표값 | 경계 인접값 | 조건-행동 조합 |
| 강점 | 케이스 수 감소 | off-by-one 발견 | 완전성 보장 |
| 케이스 수 | 클래스 수 | 4N+1 또는 6N+1 | 2^N 조합 |
TDD vs BDD vs ATDD
| 항목 | TDD | BDD | ATDD |
|---|
| 초점 | 테스트 우선/기술적 | 행위 중심/협업 | 인수 조건 |
| 주체 | 개발자 | 개발+비즈니스 | 팀 전체 |
| 형식 | Red-Green-Refactor | Given-When-Then | 인수 시나리오 |
| 도구 | JUnit, pytest | Cucumber, SpecFlow | FitNesse |
| 언어 | 프로그래밍 언어 | 자연어(Gherkin) | 자연어 |
테스트 피라미드 계층: Unit vs Integration vs E2E
| 항목 | Unit | Integration | E2E |
|---|
| 비율 | 70~80% | 15~20% | 5~10% |
| 실행 속도 | 매우 빠름 | 중간 | 느림 |
| 유지 비용 | 낮음 | 중간 | 높음 |
| 신뢰도 | 낮음(격리) | 중간 | 높음(실제 환경) |
| 결함 위치 | 명확 | 중간 | 불명확 |
테스트 피라미드 vs Ice Cream Cone vs Testing Trophy
| 항목 | 피라미드 | Ice Cream Cone | Testing Trophy |
|---|
| 구조 | Unit 많고 E2E 적음 | E2E 많고 Unit 적음 | 통합 테스트 중심 |
| 효율 | 최적 | 비효율/느림/취약 | 통합 균형 |
| 비용 | 낮음 | 높음 | 중간 |
SIL/HIL: MIL vs SIL vs PIL vs HIL
| 항목 | MIL | SIL | PIL | HIL |
|---|
| 대상 | 모델 | 소스코드 | 타겟 바이너리 | 실제 ECU |
| 환경 | 시뮬레이터 | 호스트 PC | 타겟 보드 | HIL 시뮬레이터 |
| 비용 | 낮음 | 낮음 | 중간 | 높음 |
| 현실성 | 낮음 | 중간 | 높음 | 매우 높음 |
정형 기법: Z/VDM vs Petri-Net vs 모델검사 vs 정리증명
| 항목 | Z/VDM | Petri-Net | 모델 검사 | 정리 증명 |
|---|
| 접근 | 명세 중심/상태 기반 | 동시성/그래프 | 자동/상태 탐색 | 수학적 증명 |
| 자동화 | 수동 | 분석 가능 | 자동(반례 제공) | 반자동 |
| 한계 | 명세 복잡도 | 상태 폭발 | 상태 폭발 | 완전하나 수동 |
| 적합 | 안전 필수 명세 | 분산/병렬 시스템 | 프로토콜 검증 | 완전 검증 |
Property-Based vs Example-Based vs Fuzzing
| 항목 | Property-Based | Example-Based | Fuzzing |
|---|
| 입력 | 속성 정의/자동 생성 | 개별 케이스/수동 | 무작위/자동 |
| 범위 | 광범위(수천 입력) | 제한적 | 광범위 |
| 초점 | 불변 조건 검증 | 기대 결과 확인 | 보안/크래시 |
| 디버깅 | 축소(Shrinking) | 직관적 | 반례 추적 |
Mutation Testing vs Code Coverage vs Property-Based
| 항목 | Mutation Testing | Code Coverage | Property-Based |
|---|
| 목적 | 테스트 품질 평가 | 코드 실행 비율 | 입력 다양화 |
| 방법 | 코드 변형→테스트 탐지 | 실행된 라인/분기 측정 | 속성+자동 입력 |
| 측정 | Mutation Score | 커버리지 % | 속성 위반 여부 |
테스트 vs 정적분석 vs 정형검증
| 항목 | 테스트(동적) | 정적 분석 | 정형 검증 |
|---|
| 실행 | 실행 필요 | 실행 불필요 | 수학적 추론 |
| 발견 | 결함(동적 오류) | 코드 구조/스멜 | 정확성 증명 |
| 완전성 | 불완전 | 오탐 가능 | 완전(이론적) |
| 자동화 | 자동화 가능 | 자동 | 반자동 |
Contract Testing vs Integration vs E2E vs Mock
| 항목 | Contract | Integration | E2E | Mock |
|---|
| 범위 | API 계약 | 모듈 간 | 전체 시스템 | 단위 격리 |
| 속도 | 빠름 | 중간 | 느림 | 빠름 |
| 독립 배포 | 지원 | 불가 | 불가 | N/A |
| 실제성 | 계약 기반 | 실제 연동 | 가장 현실적 | 가짜 |