본문 바로가기
✅ 테스트

단위 테스트의 목표와 책 단위 테스트 소개

by kukim 2022. 1. 4.

이 글은 책 Unit Testing(단위 테스트) 1장을 요약했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻

  • 단위 테스트의 상태
  • 단위 테스트의 목표
  • 좋지 않은 테스트 스위트(suite)의 결과
  • 테스트 스위트 커버리지 지표
  • 성공적인 테스트 스위트의 속성

단위 테스트는 단순히 테스트를 작성하는 것보다 더 큰 범주다. 테스트에 드는 노력을 가능한 한 줄이고, 그에 따르는 이득을 최대화해야 한다. 어떤 단위 테스트 기술이 좋은지 구별하고, 테스트에 대한 비용 편익 분석(cost-benefit analysis) 방법을 배우고 특정 상황에 적절한 테스트 기술 적용과 공통적인 안티 패턴(처음에는 괜찮은 것 같지만 미래에 문제를 야기하는 패턴)을 배운다.

1. 단위 테스트 현황

이제 대부분의 회사에서 테스트는 필수로 간주된다. 이제 고민은 ‘단위 테스트를 작성해야 하는가?’ 에서 ‘좋은 단위 테스트를 작성하는 것은 어떤 의미인가?’로 바뀌었다.

이 책은 이상적인 단위 테스트에 대한 정확하고 과학적인 정의를 다룬다. 실제 사례에 어떻게 적용되는지 살펴보고 적용하는 방법을 배운다.

2. 단위 테스트의 목표

단위 테스트의 목표소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 테스트는 안정망 역할을 하여 새로운 기능 도입하거나 새로운 요구 사항에 더 잘 맞게 리팩터링한 후에도 기존 기능이 잘 작동하는지 확인하는 데 도움이 된다. 한 가지 단점이 있다면 테스트 도입 초반노력이 필요하다.

 

하지만 테스트는 프로젝트 성장에 도움 되지만 좋지 않은 테스트 작성은 오히려 악영향을 끼친다. 좋은 테스트 코드를 작성해야 한다. 이 기준은 4장에서 자세하게 살펴본다.

3. 테스트 스위트 품질 측정을 위한 두 가지 커버리지 지표

커버리지 지표 : 테스트 스위트가 소스 코드를 얼마나 실행하는지를 백분율로 나타낸 지표

커버리지 지표는 만능이 아니다. 커버리지 지표가 100%라도 완벽한 테스트가 아니다. 하지만 너무 낮은 커버리지 지표(10%)라면 테스트가 충분하지 않다는 증거이다.

지표 1 : 코드 커버리지

코드 커버리지(테스트 커버리지) = 제품 코드 라인 수 / 전체 라인 수

지표 2 : 분기 커버리지

분기 커버리지 = 통과 분기 / 전체 분기 수

지표의 문제점

  1. 테스트 대상 시스템의 모든 결과를 검증한다고 보장할 수 없음
    • 테스트하지않지만 코드를 사용하는 경우만 있음 p41
  2. 외부 라이브러리 코드 경로를 고려할 수 있는 지표는 없음

커버리지 지표를 사용한다면?

  • 테스트 스위트 품질 결정은 커버리지 지표만으로 충분하지 않다.
  • 커버리지 지표는 좋은 부정 지표이지만 나쁜 긍정 지표이다. 60% 미만이라면 문제 징후라 볼 수 있다. 하지만 100%라고 좋은 테스트 스위트라고 볼 순 없다. 그래도 테스트 스위트의 첫걸음으로 커버리지 지표는 참고할만하다.

4. 성공적인 테스트 스위트는 무엇인가?

  • 개발할 때 테스트를 함께 : 모든 테스트는 개발 주기에 통합돼야 한다. 이상적으로 코드 변경될 때마다 아무리 작은 것이라도 실행해야 한다.
  • 가장 중요한 부분만 대상으로 테스트  : 모든 부분 테스트할 필요 없다. 보통 비즈니스 로직(도메인 모델)이 가장 중요하므로 집중적으로 테스트 한다.
  • 가치 있는 테스트를 식별하고, 작성 : 이는 기준틀(frame of reference)이 필요하다. 앞으로 책 내용에서 살펴보자.

5. 이 책을 통해 배우는 것

  • 테스트하는데 필요한 기준틀을 배운다.
  • 4장에서 기준틀을 배운다.
  • 4~6에서 기존 단위 테스트 기술과 실천을 살펴본다.
  • 기준틀 외의 내용도 배운다.
    • 제품 코드 관련 테스트 스위트 리팩터링 하는 법
    • 단위 테스트 다양한 스타일 적용
    • 통합 테스트로 시스템 전체 동작 검증
    • 단위 테스트 안티 패턴 식별과 예방

요약

  • 프로젝트가 커질수록 코드는 복잡해진다. 엔트로피가 증가한다. 이를 위해 테스트를 통해 안전망 역할을 할 수 있다.
  • 단위 테스트 작성은 중요하다. 좋은 단위 테스트가 필요하다. 안 좋은 단위 테스트가 많으면 오히려 악영향을 끼친다.
  • 좋은 단위 테스트 스위트는 개발 속도를 늦추지 않고 새로운 기능 추가 변경을 쉽도록 도와준다.
  • 모든 테스트를 할 필요 없다. 중요한 곳에, 가치 있는 테스트만 하라
  • 단위 테스트를 평가하는 커버리지 지표는 나쁜 부정 지표이지만 나쁜 긍정 지표이기도 하다.
  • 성공적인 테스트 스위트는 1. 개발 주기에 통합, 2. 가장 중요한 부분만을 대상, 3. 최소한의 유지비로 최대한의 가치를 끌어내야 한다.
  • 단위 테스트의 목표를 달성하기 위해서는 1. 좋은 테스트와 좋지 않은 테스트를 구별하고, 2. 테스트를 리팩터링 해 더 가치 있게 만든다.

댓글