본문 바로가기
책/단위 테스트

[단위 테스트] 1장 단위 테스트의 목표

by 오오오오니 2025. 3. 18.

1장 단위 테스트의 목표

2024년 4월 11일
이 책에서 어떤 단위 테스트 기술이 좋은지 구별할 수 있고 테스트에 대한 비용 편익 분석 방법을 배우고 특정 상황에서 적절한 테스트 기술을 적용할 수 있는 방법을 배운다.

단위 테스트의 목표

단위 테스트의 목표 : 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것
코드는 점점 더 나빠지는 경향이 있어 변경될 때마다 무질서도가 증가한다.
지속적인 관리가 없으면 시스템은 점점 더 복잡해지고 흐트러지는데 테스트로 이런 경향을 뒤집을 수 있다. 테스트는 안전망 역할을 하며, 회귀에 대한 보험을 제공하는 도구다.
모든 테스트를 작성할 필요는 없다.
높은 유지 보수 비용을 인해 순가치가 0에 가까운 작은 테스트를 만들지 말고 고품질 테스트에 집중하자.
테스트 코드는 많으면 많을수록 좋다고 생각하지만 그렇지 않다. 잠재적인 버그에 노출되고 프로젝트 유지비가 증가한다.

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

커버리지 숫자를 목표로 하는 것은 해롭고 테스트 스위트 품질을 결정하는 데 커버리지 지표에 의존할 수 없다.
이유
테스트 대상 시스템의 모든 가능한 결과를 검증한다고 보장할 수 없다.
복사
public static bool WasLastStringLong { get; private set; } public static bool IsStringLong(string input) { bool result = input.length > 5; WasLastStringLong = result; // 첫 번째 결과 return result; // 두 번째 결과 }
외부 라이브러리의 코드 경로를 고려할 수 있는 커버리지 지표가 없다.
Parse
외부 라이브러리의 코드 경로를 고려해야 되는 것은 X, 커버리지 지표로 테스트 품질을 판단할 수 없다는 것.
특정 커버리지 숫자를 목표로 삼으면 위험하다.
커버리지 지표는 좋은 부정 지표이다.
커버리지가 너무 낮다 → 문제의 징후다.
커버리지 지표는 나쁜 긍정지표이다.
커버리지가 높다고 높다고 테스트 스위트의 품질이 높은 것은 아니다.

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

4장에서 자세히 배운다.
성공적인 테스트 스위트가 가지고 있는 특성
개발 주기에 통합돼 있다.
코드베이스에서 가장 중요한 부분만을 대상으로 한다.
테스트가 주는 가치는 테스트 구조뿐만이 아니라 검증하는 코드에도 있다. 중요한 부분은 노력을 기울이고 다른 부분은 간략하게 검증하는 것이 좋다.
가장 중요한 부분인 비지니스로직이 있는 도메인 모델을 테스트 하는 것이 시간 투가 대비 최고의 수익을 낼 수 있다.
최소한의 유지비로 최대의 가치를 끌어낸다

이 책을 통해 배우는 것

어떤 것이 프로젝트에 기여하는 것인지, 리팩터링 해야 하는 것인지 알 수 있다.
사용해온 기술과 좋은 사례들의 장점을 분명히 설명할 수 있다.
그 외
제품 코드와 관련 테스트 스위트를 리팩터링하는 방법
단위 테스트를 다양한 스타일로 적용하는 방법
통합 테스트로 시스템 전체 동작 검증하기
단위 테스트 안티 패턴을 식별하고 예방하기