단위 테스트의 목표

김민규·2023년 7월 8일
0

단위 테스트

목록 보기
1/4

단위 테스트의 목표

  • 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다.
  • 지속적인 정리와 리팩터링 등과 같은 적절한 관리를 하지 않고 방치하면 시스템이 점점 더 복잡해지고 무질서(엔트로피, software entropy)해진다.

  • 테스트는 안전망 역할을 한다.
    • 테스트는 새로운 기능을 도입하거나 새로운 요구 사항에 더 잘 맞게 리팩터링한 후에도 기존 기능이 잘 작동하는지 확인하는 데 도움이 된다.

⚠️ 단위 테스트와 코드 설계의 관계
코드를 단위 테스트하기 어렵다면 코드 개선이 반드시 필요하다는 것을 의미한다.
강결합(tight coupling)에서 저품질이 나타난다.
테스트하기 어렵다.

좋은 테스트와 좋지 않은 테스트

  • 모든 테스트를 작성할 필요는 없다.
  • 지속 가능한 프로젝트 성장을 위해서는 고품질 테스트에만 집중해야 한다.
  • 테스트도 역시 코드다.
    • 특정 문제를 해결하는 것, 즉 애플리케이션의 정확성을 보장하는 것을 목표로 하는 코드베이스의 일부로 봐야 한다.

테스트 스위트 품질 측정을 위한 커버리지 지표

커버리지 지표는 테스트 스위트(테스트 케이스를 관계별로 묶어놓은 것)가 소스 코드를 얼마나 실행하는지를 백분율로 나타낸다.

  • 100% 커버리지라고 해서 반드시 양질의 테스트 스위트라고 보장하지는 않는다.
  • 커버리지 지표는 그 자체로 보는 것이며, 목표로 여겨서는 안 된다.

무엇이 성공적인 테스트 스위트를 만드는가?

  • 개발 주기에 통합돼 있다.
    • 코드가 변경될 때마다 아무리 작은 것이라도 실행해야 한다.
  • 코드베이스에서 가장 중요한 부분만을 대상으로 한다.
    • 시스템의 가장 중요한 부분에 단위 테스트 노력을 기울이고,
    • 다른 부분은 간략하게 또는 간접적으로 검증하는 것이 좋다.
    • 비즈니스 로직(도메인 모델) 테스트가 시간 투자 대비 최고의 수익을 낼 수 있다.
  • 최소한의 유지비로 최대의 가치를 끌어낸다.
    • 가치 있는 테스트를 작성하려면 코드 설계 기술을 알아야 한다.(이 책의 상당 부분을 코드 설계에 할애하고 있다)
profile
Backend Engineer, Vim User

0개의 댓글