TDD의 필요성과 쉬운 예제를 통해 감을 잡는데 좋은 교재라고 생각한다. TDD에 대한 개념이 확립되지 않았다면 '소프트웨어 장인' 책을 읽고 TDD의 필요성을 느끼고 읽어보는 것을 추천한다. 1장의 예제는 아주 간단한 코드로 작성되어 있어 천천히 따라하면서 이해해보길 권장한다.
1부 자바로 다중 통화 코드를 작성
-> 예제를 통해 TDD의 처음부터 끝까지를 진행해 본다. 2부 파이썬으로 단위 테스팅 프레임워크를 작성
-> 파이썬으로 xUnit이라는 자바의 JUnit 같은 테스팅 프레임워크를 직접 작성 3부 테스트 주도로 개발할 때 자주 등장하는 패턴들을 정리 - 번역자의 노하우를 담은 'TDD 수련법', '실전 TDD' 원고 추가
-> 리팩토링, 디자인 기법 등 TDD를 베이스로 응용사례를 소개
테스트의 숨은 짧게 가져간다 (녹색바를 빨리보기) '작동하는 코드'를 먼저 만들고 '깔끔한 코드'를 만든다.
TDD의 주기 1. 작은 테스트를 추가한다 2. 모든 테스트를 실행하고, 실패하는 것을 확인한다. 3. 코드에 변화를 준다. 4. 모든 테스트를 실행하고, 성공하는 것을 확인한다. 5. 중복을 제거하기 위해 리팩토링한다.
테스트를 확실히 돌아가게 만드는 세 가지 접근법 1. 가짜로 구현하기 (명백한구현,가짜구현 : 일반적인 방식)
2. 삼각측량법 (삼각측량 (5 == 5, 5 != 6) : 어떻게 테스트를 구현해야할지 모를때)
3. 명백하게 구현하기
* 설계를 주도하기 위한 방법으로 테스트 코드와 실제 코드 사이의 중복을 제거하기 길이 미끄러우면 속도를 줄이고 상황이 좋으면 속도를 높이는 식으로 테스트 사이의 간격을 조절할 수 있는 능력.
TestSuite : 모든테스트가 동작하는지 확인 fixture : 테스트 시 여러번 사용되는 인스턴스 변수
테스트한다는 것은 무엇을 뜻하는가 테스트를 언제 해야 하는가 테스트할 로직을 어떻게 고를 것인가 테스트할 데이터를 어떻게 고를 것인가
*나중에 누군가 이 테스트를 보고 코드를 이해할 것을 기대하고 짠다.
assert를 먼저 구현(어떤 결과를 원하는가) 시퀀스다이어그램에서 모든 콜에 대해 테스트를 짜본다 회귀테스트 : 어떤문제가 발생한뒤 방어차원의 테스트코드 추가 모의객체는 하나의 위험요소가 될 수 있다. 작업을 불완전한 상태에서 마무리하기
패턴 커맨드 - 계산 작업에 대한 호출을 메세지가 아닌 객체로 표현 : runnable 값객체 - 객체가 생성된 이후 그 값이 절대로 변하지 않게 하여 별칭 문제가 발생하지 않게한다. : 동일과 동등 널객체 - 계산 작업의 기본 사례를 객체로 표현 템플릿메서드 - 계산 작업의 변하지 않는 순서를 여러 추상메서드로 표현 플러거블객체 - 둘이상의 구현을 객체를 호출함으로써 다양성 표현 팩토리 메서드 - 생성자 대신 메서드를 호출함으로써 객체를 생성 : 객체의 유연함 임포스터 - 현존하는 프로토콜을 갖는 다른구현을 추가하여 시스템에 변이를 도입 컴포지트 - 하나의 객체로 여러 객체의 행위 조합을 표현 수집매개변수 - 여러 다른 객체에서 계산한 결과를 모으기 위해 메개 변수를 여러곳으로 전달
리팩토링 차이점 일치시키기, 변화 격리하기, 데이터 이주시키기, 메서드추출하기, 메서드 인라인, 인터페이스추출, 메서드옮기기, 메서드객체