좋은 단위테스트

좋은 단위 테스트의 4대 요소

회귀방지, 리팩터링 내성, 빠른 피드백, 유지보수성에 대해 알아보자


좋은 단위 테스트의 4대요소

  1. 회귀방지(버그방지)
  2. 리팩터링 내성
  3. 빠른 피드백
  4. 유지 보수성

회귀 방지

회귀방지란 소프트웨어에 버그가 생기는 것을 방지한다는 의미이다

코드를 수정하거나(새 기능을 추가) 기능이 의도한 대로 작동하지 않은 경우, 코드베이스가 점점 커질수록 잠재적인 버그에 더 많이 노출된다. => 회귀 방지 너무 중요

테스트 점수가 얼마나 잘 나오는지 평가할 때 고려해야 하는것

  • 테스트 중에 실행되는 코드의 양
  • 코드 복잡도
  • 코드의 도메인 유의성

코드의 양이 많아지면 당연히 회귀할 가능성이 높아진다. 나머지도 마찬가지이다 하지만 너무 적은 양의 테스트 코드는 의미가 없다.


리팩터링 내성

리팩터링 내성은 테스트를 실패로 바꾸지 않고 기본 어플리케이션 코드를 리팩터링(가독성을 높이고 복잡도를 줄이는 작업)할 수 있는지에 대한 척도

거짓 양성

리팩터링을 했더니 기존 테스트가 실패가 뜬다면 이를 거짓 양성이라고 한다

테스트가 소프트웨어의 지속 가능한 성장을 하게 하는 매커니즘은 회귀 없이 주기적으로 리팩터링하고 새로운 기능을 추가할 수 있는 것이다

하지만 거짓 양성은 여기에서 나올수 있는 이점들을 모두 방해하는데

  • 테스트가 타당한 이유 없이 실패하면, 코드 문제에 대응하는 능력과 의지가 희석된다. 시간이 흐르면서 이런 실패가 익숙해지고 신경을 쓰지 않게 된다.
  • 반면 거짓 양성이 빈번하면 테스트에 대한 신뢰가 서서히 떨어지며, 더 이상 테스트를 믿을만한 안전망으로 인식하지 않게 된다. 즉 허위 경보로 생각하게된다. 이렇게 신뢰가 떨어지게 되면 리팩토링을 줄이게 된다. 이는 회귀를 피하려고 하는 방어기제

이러한 거짓 양성의 원인은 무엇일까? 테스트에서 발생하는 거짓양성의 수는 테스트 구성 방식과 직접적인 관련이 있다. 테스트와 테스트 대상 시스템의 구현 세부 사항이 많이 결합할수록 허위 경보가 더 많이 생긴다. 거짓 양성이 생길 가능성을 줄이는 방법은 해당 구현 세부 사항에서 테스트를 분리하는 것뿐이다.


빠른 피드백, 유지 보수성

느린 테스트는 피드백을 느리게 하고 잠재적으로 버그를 뒤늦게 눈에 띄게 해서 버그 수정 비용이 증가한다. 자주 실행하지 못하기 때문에 빨리 버그를 잡지 못한다

유지 보수성은 2가지 주요 요소로 평가할 수 있다.

  1. 테스트가 얼마나 이해하기 어려운가?
  2. 테스트가 얼마나 실행하기 어려운가?
    • 테스트가 외주 종속성으로 작동하면 데이터베이스 서버를 재부팅하고 네트워크 연결문제를 해결하는 등 의존성을 상시 운영하는데 시간을 들어간다