단위테스트(Unit Test)
개별 모듈을 시험하는 것으로 모듈이 정확하게 수행하는지 검증
- 소프트웨어 개발 초기 단계 수행, 코드작성 직후
- 테스트케이스는 주로 모듈 설계 단계에서 준비
- 주로 구조기반 테스트 시행
단위 모듈
- 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 독립적인 컴파일 가능
- 다른 모듈에 호출되거나 삽입되기도 함
단위모듈 구현의 원리
- 단계적 분해: 단순한 형태로 시작하여 점진적으로 상세화
- 추상화: 복잡한 문제를 간단하고 일반적인 형태로 변환
- 독립성: 높은 응집도와 낮은 결합도로 모듈의 독립성 강화
- 정보은닉: 모듈 내부 데이터 및 로직의 외부로부터 보호
- 분할정복: 큰 문제를 작은 문제로 나누어 해결
단위 모듈 테스트 방법
- 화이트박스 테스트
- 메서드 기반 테스트
- 화면 기반 테스트
단위 테스트 자동화 도구
- JUnit: Java를 위한 단위테스트 프레임워크
- CppUnit: C++를 위한 단위테스트 프레임워크
- Unittest: Python 표준 라이브러리 중 하나, 자동화된 테스트 지원
- HttpUnit: HTTP 서버와의 상호작용을 테스트할 수 있는 Java 라이브러리
통합 테스트
여러 모듈 또는 서브시스템을 결합(통합)하고, 그 사이의 인터페이스 오류 및 모듈 간 상호작용 오류를 검증
통합 테스트 수행 방법의 분류⭐️
- 비점증적 방식: 빅뱅
- 점증적 방식: 상향식, 하향식
상향식테스트(Bottom Up Integration Test)
- 프로그램의 하위모듈에서 상위모듈방향으로 통합하면서 테스트 진행
- 하위모듈들을 클러스터(Cluster)로 결합
- 상위모듈로 더미 모듈인 드라이버(Driver) 작성
- 통합된 클러스터 단위로 테스트
- 테스트 완료후 클러스터는 프로그램 구조의 상위로 이동해 결합하고
- 드라이버는 실제모듈로 대체됨
하향식테스트(Top Down Integration Test)
(20.8)
- 프로그램의 상위모듈에서 하위모듈방향으로 통합하면서 테스트 진행
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음
- 상위모듈에서는 테스트케이스 사용 어려움
- 아직 개발되지 않은 하위모듈은 더미모듈인 스텁(Stub)으로 대체(20.6)
- 깊이우선방식(DFS), 넓이우선방식(BFS)에 따라 스텁들이 실제모듈로 교체
- 모듈이 통합될 때마다 테스트 실시
- 새로운 오류가 발생하지 않음을 보증하기위해 회귀테스트 실시
빅뱅테스트
- 모든 구성 요소들을 한꺼번에 통합하여 테스트
- 소규모 시스템에 편리한 테스트 방식
백본 테스트
- 샌드위치 테스트
- 하위 수준에서는 상향식 통합, 상위수준에서는 하향식 통합
- 대규모 프로젝트에서 사용하는 방식
- 비용이 많이 듦
시스템 테스트
완전히 통합된 소프트웨어를 대상으로, 소프트웨어와 시스템 사양 간 일치성 검증
- 실제 사용환경과 유사하게 만든 테스트 환경에서 수행해야함
- 유형
- 기능 테스트: 블랙박스테스트
- 비기능 테스트: 화이트박스테스트
인수 테스트⭐️
(20.8)
시스템을 배포하거나 실제 사용할 만한 준비가 되었는지 평가
- 사용자의 요구사항을 모두 충족하는지
- 시스템에 예상대로 동작하는지
- 유형
- 알파테스트: 개발자 통제 하에, 사용자가 개발환경에서 수행(20.6)
- 내부에서 자체 진행, 실제 사용환경에서 동작, 관련자만 참여
- 베타테스트: (통제되지 않는)실제 운영환경에서 여러 사용자가 수행(=필드테스팅)