세상을 바꾸는 개발자

유닛테스트의 효과 및 목표 본문

기타/UnitTest

유닛테스트의 효과 및 목표

헬창코딩 2022. 3. 2. 21:51

안녕하세요~ 헬창코딩입니다.

오늘은 유닛테스트를 공부하면서 중요했던 부분과 생각했던 부분을 생각나는 대로 끄적여 보려고 합니다!! (단순 복습용)

참고한 책은  블라디미르 코리코프님이 지으신 UnitTesting란 책입니다.

 

유닛테스트라는 말은 예전부터 많이 들어왔었고 스스로도 공부하고 적용해야겠다는 생각은 늘 했었습니다.

하지만 빨리 아웃풋이 나와야 하는 상황이라 실천에 옮기지는 못했었는데요

이번에 이직하면서 공부하고 적용해볼 수 있는 시간이 생겨서 한번 해보려고 합니다.

 

유닛테스트가 무엇인지는 나중에 제대로 다뤄보도록 하겠습니다.

제가 기존에 알았던 유닛테스트의 효과 및 목표는 크게

  1. 버그를 사전에 방지한다.
  2. 좋은 코드설계를 할 수 있도록 만들어준다.

이 두 가지로 알고 있었는데요 하지만 이 책에서는 유닛테스트를 하는 최고의 목표는

 

지속가능한 성장을 하는 것

 

이라고 합니다.

 

저는 개발이라는 것이 한번 해놓고 끝나는 것이 아니라 유지보수부터 진짜 개발이라고 생각하는데요

이 과정에서 유지보수를 진행하면 할수록 코드가 복잡해지고 많은 버그가 생기기 마련입니다.

이때 테스트 코드를 제대로 짰다면 이 과정을 훨씬 더 빠르고 유연하게 하는 것이 테스트 코드를 짜는 효과이자 목표라고 합니다.

처음에서는 노력이 많이 필요하지만, 장기적으로 볼 때 큰 비용을 줄일 수 있다고 합니다.

 

하지만 유닛테스트를 아무렇게나 짠다고 해서 이러한 효과를 볼 수는 없습니다.

오히려 시간 낭비와 코드가 더 보기 싫어지는 상황이 발생할 수도 있죠

그래서 이 책에서는 유닛테스트의 효과를 체험하기 위해서는 몇 가지 주의사항이 필요하다고 합니다.

 

프로젝트에 도움이 되는 단위테스트를 분석하라(가치 파악)

제품 코드와 테스트 코드는 다르지 않다. → 코드는 자산이 아니라 책임이다.

코드커버리지와 분기커버리지를 사용할 수는 있다 → 하지만 괜찮은 부정 지표지만 좋지 않은 긍정지표이다.

 

코드커버리지

  • 테스트에 사용된코드의 라인수/실제 전체코드의 라인수
  • 코드만 작게처리해도 변할 수 있는 수 이다.

분기 커버리지:

  • 코드커버리지의 장점을 극복하는데 도움
  • 통과분기 / 전체 분기수

 

코드 커버리지에 관한 문제점

 

테스트 대상 시스템의 모든 가능한 결과를 검증한다고 보장할 수 없다.

 

외부 라이브러리의 코드 경로를 고려할 수 있는 커버리지 지표는 없다.

 

→ 너무 테스트에 관한 의무적인 법칙이나 강제가 생겨버린다면 의미 없는 테스트가 이루어지거나 코드커버리지만 통과하려고 의미 없는 테스트 코드를 작성하게 될 수도 있다.

→ 커버리지를 보는 가장 좋은 방법은 지표 자체로 보아야 하며 목표로 여겨서는 안 된다.(병원 환자의 체온을 예로 듦)

→ 시스템의 커버리지는 높게 두는 곳이 좋지만 이 수준을 요구 사항으로 삼는 것은 좋지 않다. (미미하지만 매우 중요함)

 

성공적인 테스트 스위트의 특성

1. 개발 주기에 통합돼 있다

2. 코드 베이스에서 가장 중요한 부분만을 대상으로 한다.

3. 최소한의 유지비로 최대의 가치를 끌어낸다.

 

 

다음은 단위 테스트란 무엇인가에 대해서 자세하게 공부해보려고 합니다.

Comments