Goal-Of-Unit-Testing
1 단위 테스트 현황
- 기업용 애플리케이션 개발 프로젝트는 거의 모두 단위 테스트가 적용돼 있다
- 수많은 단위 테스트와 통합 테스트를 통해 좋은 코드 커버리지를 달성하고 있다
- 제품 코드와 테스트 코드의 비율이 점점 높아지고 있다
- 단위 테스트에 대한 논쟁은 이제
단위 테스트를 작성해야 하는가?
에서좋은 단위 테스트를 작성하는 것은 어떤 의미인가?
로 바뀌었다
2 단위 테스트의 목표
- 단위 테스트 활동이 더 나은 설계로 이어진다. 하지만 더 나은 설계는 단위 테스트의 주목표는 아니고 부수 효과일 뿐이다
- 단위 테스트의 궁극적인 목표는 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다
테스트가 없는 일반 프로젝트
- 처음에는 발목을 잡을 것이 없으므로 빨리 시작할 수 있다
- 아직 잘못된 아키텍쳐 결정이 없고 걱정할 만한 코드가 있지도 않다
- 시간이 지나면서 점점 더 많은 시간을 들여야하고 결국 개발 속도가 현저히 느려지고, 심지어 전혀 진행하지 못할 정도로 느려질 수 있다
- 개발 속도가 빠르게 감소하는 이러한 현상을 소프트웨어 엔트로피라고도 한다
- 코드베이스에서 무언가를 변경할 때마다 무질서도(엔트로피)는 증가한다
- 지속적인 정리와 리팩터링 등과 같은 관리를 하지 않고 방치하면 시스템이 점점 더 복잡해지고 무질서해진다
테스트가 있는 프로젝트
- 테스트는 안전망 역할을 하며, 대부분의 회귀에 대한 보험을 제공하는 도구라 할 수 있다
- 테스트는 새로운 기능을 도입하거나 새로운 요구 사항을에 더 잘 맞게 리팩터링한 후에도 기존 기능이 잘 작동하는지 확인하는데 큰 도움이 된다
- 단점은 초반에 상당한 노력이 필요하다는 것
- 그러나 프로젝트 후반에도 잘 성장할 수 있도록 하므로 장기적으로 보면 그 비용을 메울 수 있다
- 코드베이스를 지속적으로 검증하는 테스트 없이는 개발이 쉽게 확장되지 않는다
- 지속성과 확장성이 핵심이며 이를 통해 장기적으로 개발 속도를 유지할 수 있다