기본 테스팅 (Fundamental Testing)
Fundamental testing은 소프트웨어 테스팅의 기본적인 프로세스와 원칙을 의미한다.
이는 소프트웨어의 품질을 보장하기 위한 체계적인 접근 방식을 제공한다.
Fundamental testing process는 다음과 같은 주요 단계로 구성된다:
계획 및 통제 (Planning and Control)
- 테스트의 범위, 목표, 위험을 결정한다.
- 필요한 리소스를 식별하고 일정을 수립한다.
분석 및 설계 (Analysis and Design)
- 테스트 조건을 식별한다.
- 테스트 케이스를 설계한다.
- 테스트 환경을 준비한다.
구현 및 실행 (Implementation and Execution)
- 테스트 케이스를 우선순위화하고 실행한다.
- 결과를 기록하고 결함을 보고한다.
종료 기준 평가 및 보고 (Evaluating Exit Criteria and Reporting)
- 테스트 목표 달성 여부를 평가한다.
- 결과를 이해관계자에게 보고한다.
테스트 종료 활동 (Test Closure Activities)
- 테스트 자산을 문서화하고 보관한다.
이러한 프로세스는 소프트웨어 개발 주기 전반에 걸쳐 반복적으로 적용되며, 각 단계는 소프트웨어의 품질을 향상시키는 데 중요한 역할을 한다.
Fundamental Testing의 중요한 원칙들
조기 테스팅 (Early Testing)
가능한 한 일찍 테스트를 시작하여 문제를 조기에 발견하고 수정 비용을 최소화한다.철저한 테스팅 (Exhaustive Testing)
모든 가능한 경우를 테스트하는 것은 불가능하므로, 위험 기반으로 중요한 케이스를 선별하여 테스트한다.테스트 케이스 그룹핑
연관된 테스트 케이스들을 논리적으로 그룹화하여 효율적으로 관리한다:독립적인 테스팅
각 테스트는 다른 테스트의 결과에 영향을 받지 않도록 독립적으로 설계된다.
핵심 구성 요소 비교
비교 항목 | Unit Test | Integration Test | System Test | Acceptance Test |
---|---|---|---|---|
정의 | 개별 코드 단위(함수, 메서드, 클래스 등)의 동작을 검증하는 테스트 | 여러 모듈이나 컴포넌트 간의 상호작용을 검증하는 테스트 | 전체 시스템의 end-to-end 동작을 검증하는 테스트 | 사용자 관점에서 시스템이 요구사항을 충족하는지 검증하는 테스트 |
테스트 범위 | 가장 작은 단위 (단일 함수/모듈) | 여러 모듈의 결합 | 전체 시스템 | 전체 시스템의 비즈니스 요구사항 |
수행 시점 | 개발 단계에서 즉시 | 모듈 개발 완료 후 | 통합 테스트 완료 후 | 시스템 테스트 완료 후 |
테스트 주체 | 개발자 | 개발자/테스터 | QA 팀 | 최종 사용자/고객 |
테스트 환경 | 개발 환경 | 통합 테스트 환경 | 테스트 환경 | 실제 운영 환경과 유사한 환경 |
기술 지식 요구 | 높음 (코드 레벨) | 중간 (인터페이스 수준) | 낮음 (시스템 수준) | 매우 낮음 (사용자 수준) |
자동화 정도 | 매우 높음 | 높음 | 중간 | 낮음 |
테스트 목적 | 코드의 정확성 검증 | 컴포넌트 간 통신 검증 | 전체 시스템 기능 검증 | 비즈니스 요구사항 충족 검증 |
피드백 속도 | 즉각적 | 빠른 편 | 느린 편 | 매우 느림 |
테스트 비용 | 매우 낮음 | 중간 | 높음 | 매우 높음 |
테스트 데이터 | 단순한 테스트 데이터 | 통합 테스트용 데이터 | 실제와 유사한 데이터 | 실제 운영 데이터 |
실행 빈도 | 매우 자주 (코드 변경시마다) | 자주 (기능 통합시) | 가끔 (주요 릴리즈 전) | 드물게 (최종 승인 전) |
오류 발견 시점 | 매우 이른 시점 | 이른 시점 | 늦은 시점 | 매우 늦은 시점 |
수정 비용 | 매우 낮음 | 중간 | 높음 | 매우 높음 |
주요 도구 예시 | JUnit, NUnit | Selenium, Postman | TestComplete, SoapUI | Manual Testing Tools |
추가적인 특징들:
- 테스트 의존성:
- Unit Test: 독립적으로 실행
- Integration Test: 다른 모듈에 의존
- System Test: 전체 시스템에 의존
- Acceptance Test: 전체 시스템과 비즈니스 프로세스에 의존
- 테스트 시나리오 복잡도:
- Unit Test: 단순한 시나리오
- Integration Test: 중간 수준의 복잡도
- System Test: 복잡한 시나리오
- Acceptance Test: 실제 사용 시나리오
- 유지보수 용이성:
- Unit Test: 매우 쉬움
- Integration Test: 중간
- System Test: 어려움
- Acceptance Test: 매우 어려움
이러한 테스트들은 서로 보완적인 관계에 있으며, 품질 높은 소프트웨어를 만들기 위해서는 모든 단계의 테스트가 적절히 수행되어야 한다.