테스트 주도 개발(TDD): 소개
소개
📖 테스트 주도 개발
🤷♀️ 켄트 벡
📢 2008년도 책으로 공부하였으므로 현재 책이랑 차이가 있을 수 있음
TDD의 궁극적인 목표는 ‘작동하는 깔끔한 코드’이다.
두가지 규칙
- 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성
- 중복을 제거
추가로
- 매 결정사항에 대해 피드백을 제공하는 실행 가능한 코드를 설계를 해야 함
- 결정사항: ‘이 부분에서는 상속을 써야겠다’라는 설계에 대한 결정사항
- 자동화된 테스트를 누군가 만들어주길 기다리는게 아니라 직접 작성하는 마인드
- 응집도는 높고 결합도는 낮은 컴포넌트들로 구성해야 함
테스트 프로그래밍 순서
💡 빨강/초록/리팩토링은 TDD의 주문이다.
- 빨강 - 실패하는 작은 테스트 작성(컴파일 안되도 됨)
- 초록 - 빨리 테스트가 통과하도록 변경(복붙, 상수 리턴 등 죄악을 저질러도 됨)
- 리팩토링 - 모든 중복 제거
왜 작은 단계를 밟아나가나?
TDD는 프로그래밍을 하면서 나타나는 ‘두려움을 관리하는 방법’이다.
두려움이 우리 프로그래밍에 주는 영향
- 두려움은 우리를 망설이게 만듦
- 두려움은 우리가 커뮤니케이션을 덜 하게 만듦
- 두려움은 우리가 피드백 받는 것을 피하도록 만듦
- 두려움은 우리를 까다롭게 만듦
어떤 태도로?
그럼 우리는 두려움 대신 어떤 태도를 가져야 하는가?
- 불확실한 상태로 있는 대신, 가능하면 재빨리 구체적인 학습 시작
- 침묵을 지키는 대신, 좀더 분명하게 커뮤니케이션을 한다.
- 피드백을 회피하는 대신, 도움이 되고 구체적인 피드백을 찾는다.
- (자신의 나쁜 성깔을 직접 해결해야 한다.)
책 구성
1부 Money 예제
- 코딩하기 전 테스트를 먼저 만드는 방법
- 설계를 키워나가는 방법
2부 xUnit 예제
- 자동화 테스트를 위한 프레임워크 만들기
- 리플랙션이나 예외를 포함하는 복잡한 로직을 테스트하는 예제
- xUnit 아키텍처 소개
- 1부보다 더 작은 단계로 작업하는 방식
- 자기 참조(self-referential)
3부 테스트 주도 개발을 위한 패턴들
- 어떤 테스트를 작성해야 하는지
- xUnit에서 어떻게 테스트 할 것인지
- 예제에서 사용된 디자인 패턴과 리팩토링 소개
공부 순서에 대해
- 주변을 배회하기 전에 지도보는 걸 좋아한다
- 바로 3부 패턴 가서 예제를 설명 대신 봐도 됨
- 배회하다가 어디를 지나왔는지 지도로 확인하는 걸 좋아한다
- 예제를 읽다가 상세한 내용을 알고 싶을 때 패턴 참고하는 방식으로 해도 됨
꼭 순서대로 봐야되는것이 아닌, 본인 습득 타입에 따라 다양하게 읽어도 된다는 뜻인 듯
감사의 글 중 마인드가 멋있었던 말
두 사람이 하나의 머리를 공유한다면 아이디어의 근원이 누구인지 가릴 수 있는 방법이 없다. 이 책에서 나온 훌륭한 아이디어가 전부 Ward의 것이라고 가정해도 무방하다.