-
-
Effective Unit Testing - 클린 코드와 좋은 설계를 이끄는 단위 테스트, 한국어판
라쎄 코스켈라 지음, 이복연 옮김 / 한빛미디어 / 2013년 11월
평점 :
절판
테스트 코드의 목적은 제품 코드를 작성하는 즉시 정확하게 구현했는지 검사하는 것과 그 후에 코드베이스가 커져도 계속 잘 동작하는지 지속해서 확인하는 것이라 할 수 있다.
그럼 바로 확인할 수 있는 테스트 코드가 필요한 이유는 무엇인가? 바로 비용의 문제이기 때문이다. 단순히 한 개발자의 야근 문제가 아니라 회사 차원에서 큰 비용이 든다. 구글의 측정결과 즉시 수정하면 $5가 들지만, 전체 빌드때 발견 $50, 통합테스트 $500로 높아지고, 시스템 테스트에 발견되면 $5,000의 비용이 든다고 한다. 그러니 문제는 가능한 한 빨리 발견해야 하기에, 빠르게 실행하고 정확한 테스트 결과를 내놓을 수 있는 신뢰할 수 있는 테스트 코드가 필요 한 것이다.
이 책은 읽어야 할 대상이 너무나 명확한, 잘 타케팅된 책이다.
테스팅의 중요성과 필요성에 대해 가볍게 언급을 하긴 하지만 프로그램을 작성하면서 테스트를 왜 해야 하는지 모르는 프로그래머에게는 테스팅 기본 책을 읽고 읽는 것이 좋을 것이다. Java언어 프로그래머를 위한 테스팅 이야기책이지만 JUnit의 사용법이 부록 형태로 가볍게 다루어질 정도로, 자세한 툴의 사용법을 알고 싶을 때 보는 책이 아닌, 테스트 코드 자체의 품질을 높이기 위한 책이다.
책에서는 테스트 코드도 제품 코드를 다루듯이 하고, 믿고 의지할 수 있을 만큼 철저하게 리팩토링하고 높은 품질을 유지하도록 많은 노력을 기울여야 한다고 말한다.
테스트 코드 작성을 권장수준의 커버리지만 넓히려고 하고, 수치만 달성하려는 태도가 아닌, 실제 코드와 같이 보라는 관점의 전환을 이야기하는 것이다.
그렇기에 테스트 코드를 개선하는 과정에서 언급하는 테스트 냄새라던가, 여러 가지 원칙들은 테스트 코드가 아닌 제품 코드를 작성할 때에 적용하는 가독성, 유지 보수성을 높이는 리팩토링들과 같다고 할 수 있다. 특히 마틴 파울러의 리팩토링 책과 비슷하게 테스트 냄새와 그에 따른 카탈로그를 제공한다.
하지만 테스트 코드 작성만의 다른 점도 적지 않게 있기에 그 점에는 유의해야 할 것이다. 일례로 테스트 코드에서 어떤 방식으로 의도를 표현할지 결정할 때, 코드 중복이나 성능보다 가독성과 명료성이 더 중요하다.
책 중간에 정치인이 지키지도 못할 공약을 남발하는 경향을 비유하며, 지키지 못할 약속이라는 3가지 테스트 코드들을 언급한다.
- 아무 '일'도 안 하는 테스트
- 무언가 일은 하지만, 정작 '검증'은 전혀 하지 않는 테스트
- 이름값 못하는 테스트
이런 테스트들은 모두 자신은 물론 동료까지 위험에 처하게 한다. 테스트는 자신이 명시한 동작에 문제가 생기면 실패해야 하는 것을 잊지 말아야 하며, 이 책을 통해 제품 코드를 작성하는 것 만큼의 노력을 테스트 코드에 쏟게 되면, 그를 통해 제품 코드 작성의 효율과 실력도 향상되리라 생각한다.
개인적으로 테스트 코드에서 테스트 코드 중 할당문이나 메서드 호출 등에 박혀 있는 숫자로 된 값(매직 넘버)를 적시하는 경우가 있는데, 이를 의미가 분명한 이름의 상수나 변수로 대체해서 읽기 쉬운 코드로 만들거나, 가독성이 있게 작성해 우회하는 버릇을 들이도록 해야겠다.