Computer Science/Software Engineering
[Software Engineering] Software Testing
__K.Jun__
2025. 2. 18. 17:28
소프트웨어 테스트의 목표와 원칙
(1) 테스트의 목표
- 소프트웨어 테스트는 오류(결함, 버그)를 찾는 과정이다.
- 성공적인 테스트란 아직 발견되지 않은 오류를 찾아내는 것이다.
- 테스트는 버그가 없음을 증명하는 것이 아니라, 버그의 존재를 증명하는 것이다.
(2) 소프트웨어 테스트의 원칙
- 모든 테스트는 고객 요구 사항과 연계되어야 함
→ 테스트는 고객의 요구 사항을 검증하는 방향으로 진행되어야 한다. - 테스트 계획은 가능한 빨리 수립해야 함
→ 분석 모델이 완성되는 즉시 테스트 계획을 시작할 수 있다. - 파레토 법칙(80-20 법칙)이 적용됨
→ 대부분의 오류(80%)는 코드의 일부(20%)에서 발생하는 경향이 있다. - 테스트는 작은 단위에서 큰 단위로 진행됨
→ 개별 모듈부터 시작하여 전체 시스템까지 확장하는 방식이다. - 완벽한 테스트(모든 경우의 수를 테스트)는 불가능함→ 현실적으로 가능한 수준에서 테스트를 수행해야 한다.
소프트웨어 테스트의 수준
소프트웨어 테스트는 단위(Unit) → 통합(Integration) → 시스템(System) → 인수(Acceptance) 단계로 진행된다.
(1) 단위(Unit) 테스트
- 소프트웨어의 개별 모듈(컴포넌트)이 정상적으로 작동하는지 확인하는 테스트.
- 목표:
- 각 모듈이 예상대로 작동하는지 검증.
- 경계 조건, 데이터 구조, 에러 처리 등을 테스트.
- 테스트 도구:
- JUnit, xUnit 등 자동화된 테스트 프레임워크 활용.
단위 테스트 환경
- 드라이버(Driver): 테스트 데이터를 입력하고 결과를 출력하는 역할.
- 스텁(Stub): 아직 개발되지 않은 하위 모듈을 대신하는 가짜 모듈.
(2) 통합(Integration) 테스트
- 개별 단위 테스트를 통과한 모듈들을 결합하여 테스트하는 과정.
- 목표:
- 모듈 간 인터페이스 및 상호작용의 오류를 발견.
- 주요 기법:
- 증분 통합 테스트 (Incremental Integration Testing)
- 작은 단위로 테스트를 진행하며 점진적으로 전체 시스템을 구성.
- 상향식(Bottom-Up) 통합 테스트
- 하위 모듈부터 먼저 테스트한 후 점진적으로 상위 모듈과 통합.
- 테스트를 위해 드라이버(Driver) 사용.
- 하향식(Top-Down) 통합 테스트
- 최상위 모듈부터 테스트한 후 점진적으로 하위 모듈을 추가.
- 아직 구현되지 않은 하위 모듈은 스텁(Stub) 으로 대체.
- 증분 통합 테스트 (Incremental Integration Testing)
회귀 테스트 (Regression Testing)
- 새로운 모듈이 추가될 때, 기존 기능이 제대로 동작하는지 검증하는 테스트.
- 기존 테스트 사례를 다시 실행하여 의도치 않은 버그가 발생했는지 확인.
(3) 시스템(System) 테스트
- 전체 시스템이 올바르게 동작하는지 검증하는 단계.
- 기능적 요구사항(Functional Requirements)뿐만 아니라, **비기능적 요구사항(Non-Functional Requirements)**도 검증.
- 성능 테스트
- 보안 테스트
- 스트레스 테스트
- 호환성 테스트 등
- 일반적으로 독립적인 테스트 그룹에서 수행.
(4) 인수(Acceptance) 테스트
- 고객 또는 최종 사용자가 시스템이 요구사항을 충족하는지 검증하는 테스트.
- 내부 인수 테스트(Internal Acceptance Testing)
- 개발 조직 내에서 수행하며, 제품 관리, 영업, 고객 지원 팀(개발/테스트 팀 제외 인원들)이 참여.
- 외부 인수 테스트(External Acceptance Testing)
- 고객이나 최종 사용자에 의해 수행.
사용 사례 테스트 (Use Case Testing)
- 고객의 실제 사용 시나리오를 기반으로 테스트 케이스 설계.
- 컴포넌트 간 통합 결함(Integration Defect) 을 발견하는 데 유용.
알파(Alpha) 및 베타(Beta) 테스트
- 알파 테스트(Alpha Testing)
- 개발사 내부에서 제한된 환경에서 사용자들이 소프트웨어를 테스트.
- 베타 테스트(Beta Testing)
- 실제 사용자 환경에서 제품을 시험 운영하고 피드백을 받는 과정.
728x90