정의
|
- Simple Code의 추구를 목적으로 Test Case를 먼저 개발하고 Test Case를 통과하는 실제코드를 나중에 개발하는 Agile 개발방법
- 테스트 작성으로 요구사항 검증, 설계의 고도화, 짧은 주기 Life Cycle을 반복하는 테스트-설계-피드백 중심 개발사고 방식/방법론
|
특징
|
- Design for Testability: 소스코드의 의존성이 감소하고 독립적인 테스트가 가능한 설계구조
- 테스트 커버리지 확보: 단위테스트를 통한 테스트 커버리지 유지, 디버깅 시간감소
- 기능에 집중: 기능위주의 테스트 작성으로 해당 기능의 견고성이 증가
- clean code that works: 작동하는 깔끔한 코드 지향
|
사이클
|
- 사용자 요구사항 : 사용자, BA, 제품 개발자 등이 요구사항 Story 작성
- Test Case : 사용자, Tester 등 관련자들이 Test Case를 마련 Detail하게 작성
- Code 작성 : 테스트에 대해 실행 가능한 코드를 빠르게 작성
- (임시코드/자료삽입, 가짜 구현, 명백한 구현)
- Refactoring : Bad small을 제거하여 Refactoring 수행 후 Simple code에 대한 Test 수행
|
패턴
|
- 빨강막대패턴 : 테스트를 언제, 어디에 작성할 것인지, 언제 멈출 것인지 결정
- 테스트 패턴 : 상세한 테스트 작성(자식/모의객체/Self-shunt/메시지 호출)
- 초록막대 패턴 : 코드가 테스트를 통과하도록 신속하게 작동하는 코드 작성
- xUnit 패턴 : 자동화된 단위테스트 지원 프레임워크(jUnit, CppUnit, PyUnit)
- 디자인 패턴 : 검증된 해결책, 설계 Template/Best Practice
|
수행방법
|
- Automatic: 테스트가 혼자 실행, 자신을 검증할 수 있어야 함
- Through: 철저함, 문제 영역에 대한 완벽한 테스트 지원
- Repeatable: 반복가능, 같은 결과 도출
- Independent: 하나의 대상에 집중, 독립적 상태 유지, 다른 테스트 의존 안 함
- Professional(전문적): 캡슐화, 낮은 결합도의 원칙이 테스트 코드에서도 지켜져야 함
|
장애요소
|
- 빈번한 요구사항 변경
- 테스트케이스의 독립성 확보 어려움
- 유닛 테스트의 자동화툴 지원 및 툴의 유연성
- 반복적인 회귀테스트
|