테스트 우선 철학
- 점증적 개발 방식
- 시스템 테스트를 위해 사용할 수 있는 시스템 명세가 없음
- 매우 비공식적인 방식으로 테스팅 프로세스 진행(계획 주도 테스팅 대비)
- 테스트 우선 개발 방법
- 테스트를 개발 프로세스의 중심에 둠
- 모든 테스트를 성공하기 전엔 개발을 진행 못함
- XP에서 수행하는 테스팅의 주요 특징
- 테스트 우선 개발
- 시나리오를 가지는 점증적 테스트 개발
- 테스트 개발 및 검증에서 사용자 참여
- 테스트 자동화 프레임 워크 사용
테스트 주도 개발법(Test Driven Development)
- 테스트 우선 철학이 발전하여 일반화된 기법
- 코드 작성 전에 테스트 먼저 작성
- 코드를 작성하면서 테스트 실행 가능
- 개발 과정에서 문제점을 찾을 수 있음
- 테스트는 프로그램과 같이 작성되어야 함 ← 자동으로 테스트를 실행하기 위해
- 새로운 기능이 추가될 때마다 이전 테스트와 새로운 테스트가 자동적으로 수행
→ 새로운 기능이 에러를 발생시키지 않음을 확인
테스트 우선 접근법
- 사용자 스토리를 개발해 놓은 상황을 가정
- 스토리는 몇 개의 과업 카드로 나뉨
- 과업에 나와 있는 구현을 확인하기 위해 한 개 이상의 단위 테스트를 만듦
테스트 자동화
- 기능 구현 전에 테스트가 실행 가능한 요소의 형태로 작성되는 것
- 테스트 기능은 다음의 특성을 지켜야 함
- 독립적으로 작동이 가능해야 함
- 테스트할 입력의 제출을 시뮬레이션 가능해야 함
- 결과가 출력 명세에 부합하는지 확인해야 함
- 자동화 테스트 프레임워크
- 쉽게 실행 가능한 테스트를 작성, 실행할 때 테스트 집합을 적용하는 시스템
- 테스트 자동화로 인해 테스트 집합을 빠르고 쉽게 실행 가능
→ 새로 작성한 코드로 인해 문제를 즉시 찾을 수 있음
테스트 우선 개발의 문제점
- 프로그래머는 테스트보다 프로그래밍에 더 관심
- 불완전한 테스트를 작성하는 경우 → 발생할 가능성이 있는 모든 예제 확인 X
- 어떠한 테스트들은 점증적으로 작성하기 어려움
- 복잡한 UI를 가진 시스템에서 디스플레이 규칙과 화면 간 이동 흐름을 테스트하는 경우
- 테스트 집합의 완전성을 판단하기 어려움
- 테스트 집합이 완전한 커버리지를 보장 못하는 경우
- 시스템의 중요한 부분이 실행되지 않아 테스트를 못 받는 경우
- 테스트를 리뷰하지 않고 테스트만 추가 작성하면 버그를 발견하지 못한 채 배포될지도