기능을 추가해야할 때는 테스트부터 작성하자.
테스트를 작성하면 그 기능을 추가하려고 해야 할 작업이 무엇인지 자문하게 된다.
구현부가 아니라 인터페이스에 집중하게 된다.
단위 테스트와 기능 테스트
단위 테스트
•
목적: 프로그래밍 생산성 향상
•
매우 국소적이다.
•
하나의 패키지 안에서만 효력이 있다.
•
다른 패키지의 인터페이스를 테스트하지만, 그 외에 나머지 코드는 잘 돌아간다고 가정
기능 테스트
•
소프트웨어 전반이 제대로 돌아가는지 확인한다.
•
고객에게 품질 보증을 한다.
테스트 추가
너무 많은 테스트를 작성하려다 보면 초반에 질려서 오히려 테스트를 필요한 만큼도 작성하지 못하게 되므로, 버그 가능성이 없는 부분은 테스트 작성 대상에서 제외시켜야한다.
엄청난 테스트 작성을 계획하는 것은 비생산적이다.
테스트에 살을 붙이는 작업이 이런 식으로 계속 된다.
인터페이스를 거쳐서 만들면 시간이 걸리지만, 해당 클래스의 인터페이스를 깊이 이해하게 된다.
에러 조건과 경계 조건에 관해 생각하는 일이 쉬워짐
객체의 단점은 상속과 재정의로 인해 테스트할 조합이 너무 많아져서 테스트가 어려워질 수 있다는 점.
기능이 연동되는 추상 클래스가 3개고, 하위클래스가 3개라면, 조합될 후보 클래스는 9개지만 조합 가능한 경우는 27개이다. 조합 후보들끼리 독립적인 편이면 테스트하지 말자.