개발자가 무엇을 개발해야 하는지 정할 때 여러사람들(도메인 전문가, QA, 디자이너, 아키텍트, 사용자 등)과 협업을 한다.
단위 테스트를 작성하면 비즈니스 규칙(도메인 지식)을 좀더 명확히 할 수 있다.
코드로 명시적으로 표현하기 때문에 2가지 이점이 생긴다.
첫번째는 관계자들과 명확한 의사소통을 할 수 있다.
두번째는 명확히 하는 과정에서 고려하지 못한 사항도 알게 된다.
개발자 사이에 의사소통도 명확해진다. 단위 테스트 자체가 해당 단위의 API 사용법이 예제가 되기 때문이다.
이로 인해 2가지 이점이 생긴다.
첫째 해당 기능의 개발자의 개발 의도를 이해할 수 있게 된다.
둘째 타 개발자들도 이 예제를 통해 단위 기능의 사용법을 알게 된다.
유닛 테스트는 테스트 가능한 단위로 분리하게 된다.
결과적으로 분리된 단위 만큼 낮은 결합도와 높은 응집력(Loose coupling & High Cohesion) 을 가진 설계구조로 가게 된다.
또한 유닛 테스트는 개발자가 인터페이스(함수 이름, 함수 시그니쳐)와 구현을 분리하여 설계를 고민하게 한다.
유닛 테스트를 작성하면서 자연스럽게 해당 단위 기능의 인터페이스를 호출하는 입장에서 작성하게 되기 때문이다.
회귀 테스트(Regression test)란 회귀 버그를 찾는 소프트웨어 테스트 방식이다. 그리고 회귀 버그는 이전에 제대로 작동하던 소프트웨어 기능에 문제가 생기는 것을 가리킨다.
즉 개발하면서 추가/변경된 사항이 영향을 미쳐서 원래 기능에 없던 버그가 생기는 것을 말한다.
기존 단위 테스트 들을 추가/변경 개발후에 테스트 함으로 회귀 버그가 생기는지 인지할 수 있다.
즉 변경의 영향을 단위 테스트로 알아낼 수 있고 변경후 다른 기능들이 문제가 없음을 보증할수 있는 수단이 된다.
회귀 보호는 기존 시스템이 복잡할 수록 더 필요하며, 기존 시스템의 품질을 유지하는데 유용하다.