테스트는 사용자의 요구사항을 만족하는 고품질의 소프트웨어를 얻기 위한 소프트웨어 개발 과정의 가장 핵심적인 구성 요소이다. 테스트를 통해 수렴된 요구 사항을 만족하는지에 대한 검증(Verification)과 그 문제를 해결하는 과정이 우리가 의도한 대로 동작하고 있는지에 대한 검사(Validation)가 이뤄지기 때문이다. 다양한 테스트 기법 중에서도 가장 기본이 되는 것이 바로 단위 테스트이다. 단위 테스트는 소프트웨어의 가장 기본이 되는 단위, 즉 클래스를 대상으로 하며 테스트 대상이 되는 클래스 내부를 알고 있는 개발자에 의해 직접 테스트가 이뤄지기 때문에 화이트 박스(White Box) 테스트, 또는 개발자 테스트라고 불리기도 한다. 시스템의 품질을 유지하기 위해 테스트가 가지는 중요성을 알기 때문에 대부분의 프로젝트 팀에서는 QA팀이나 전문 테스터를 확보하고, 테스트 커버리지 툴을 비롯한 다양한 도구를 활용하고 있지만, 개발자에 의해 작성된 코드 자체가 버그를 갖고 있다면 성능 테스트나 통합 테스트의 결과 역시 신뢰할 수 없다. 이러한 이유로 단위 테스트는 모든 테스트 활동의 기반이 되는 출발점이라고 볼 수 있다.
테스트에서 2가지 강조하고 싶은 점은 TDD와 자동화된 테스트이다. 완성된 것처럼 보이는 복잡한 로직을 눈 앞에 두고 거꾸로 테스트 코드를 작성하는 것은 겪어본 사람만이 알 수 있는 고통이다. 테스트가 필수적인 개발 활동이라는 인식에 대해 공감한다면, 반드시 테스트 주도 개발방법을 익히도록 하자. 인터페이스 중심 설계, Mock/Stub의 활용, EasyMock 과 같은 라이브러리 사용법, 코드리뷰와 리팩토링, 짝 프로그래밍 등은 여러분이 테스트 주도 개발방법을 익히는데 큰 도움을 줄 수 있는 대표적인 기법들이다. 또 한 가지는 모든 테스트를 자동화하라는 것이다. 특히 권장할 만한 것은 Cruise Control 등의 도구를 활용한 지속적인 통합(Continuous Integration)이다. 필자가 진행하는 프로젝트에서는 매일 2시간 간격으로 테스트가 자동으로 수행되어, 그 결과가 보고된다. Clover와 같은 테스트 커버리지 도구의 활용도 적극 추천한다. 자신의 모든 코드가 100% 테스트되었다는 자신감은 여러분을 한 층 더 높은 수준의 개발로 인도해줄 것이다.
어떤 좋은 도구나 기법을 활용하더라도 잘 훈련된 개발자 없이는 원하는 결과를 얻지 못한다. 스스로 만족할 수 있는 단순하고 명확한 코드에 욕심을 내는 개발자라면, 이 책을 통해 테스트 능력을 배양하는 것이 그 목표에 도달할 수 있게 하는 지름길이 되리라는 것을 감히 얘기해본다.