Kent Beck의 Programmer Test Principles
Kent Beck이 TDD에서 말하는 단위테스트는 자동화된 단위테스트와 혼동되어 사용되고 있습니다.
그래서 Kent Beck은 TDD에서의 테스트를 Programmer Test(programmer가 작성하므로)라고 부르고 다음과 같은 특성을 갖는다고 말합니다.
TDD를 하시는 개발자 분들은 이런 원칙을 준수하셔야 할 것 같습니다.
1. 빠른 속도(fast)
- 피드백이 프로그래밍 흐름을 방해해서는 안 됨
- 1분 이상 걸리면 문맥 전환이 일어남. 테스트 실행 횟수를 줄이고 싶은 유혹을 느낄 만큼 길어서 디버깅 비용이 증가함
2. 결정론적(deterministic)
- Facebook에서는 비결정론적 테스트는 삭제하는 정책이 있어다고 함
- 커버리지를 잃고 싶지 않다면, 테스트 가능하도록 설계를 변경하고, 테스트를 다시 작성하라
- non-deterministic은 테스트에서 shared fixture(ex. DB)등을 사용하면 발생 가능함
3. 예측성(predictive)
- test가 성공해서 "배포해도 괜찮아"라고 말했는데 배포가 실패하면, 당신은 테스트를 믿지 않게 될 것
4. 동작 변경(behavior change)에 민감하고 구조 변경(structure change)에 둔감함
- 프로그램의 동작이 관찰자 관점에서 안정적이라면, 어떤 테스트도 변경되어서는 안 됨
- 리팩터리(행위 변경 없는 구조 변경/개선) 내성이 있어야 함을 의미
5. 작성 비용이 저렴함(cheap to write)
- 우리는 테스트에 대한 보수를 받는 것이 아니라,
- a) 작동하고
- b) 변경할 수 있는
- 코드에 대한 보수를 받음
- 테스트는 도움이 될 수 있지만, 다른 조건이 동일하다면, 테스트에 드는 노력이 적을수록 좋음
6. 읽기 비용이 저렴함(cheap to read)
- 코드와 마찬가지로 테스트도 작성보다 읽을 때가 더 많음
- 그러니 읽기 쉬워야 함
7. 변경 비용이 저렴함(cheap to change)
원문: https://medium.com/@kentbeck_7670/programmer-test-principles-d01c064d7934
※ 해당 글은 저자의 허락을 받아 OKKY에서 등록했습니다.
