회귀는 소프트웨어 버그다. 코드를 수정한 후 (일반적으로 새 기능을 출시한 후) 기능이 의도한 대로 작동하지 않는 경우다. 회귀 방지 지표에 대한 테스트 점수가 얼마나 잘 나오는지 평가하려면 다음 사항을 고려해야한다.
최상의 보호를 위해서는 테스트가 해당 라이브러리, 프레임워크, 외부 시스템을 테스트 범주에 포함시켜서 소프트웨어가 이러한 의존성에 대해 검증이 올바른지 확인한다.
리팩터링 내성은 테스트를 '빨간색(실패)'으로 바꾸지 않고 기본 애플리케이션 코드를 리팩터링할 수 있는지에 대한 척도다. 리팩터링 내성 지표에서 테스트 점수가 얼마나 잘 나오는지 평가하려면 테스트에서 얼마나 많이 거짓 양성이 발생하는지 살펴봐야한다. 거짓 양성에 신경써야하는 이유는 2가지 장점이 있다.
거짓 양성은 이 두가지 이점을 모두 방해한다.
거짓양성이란 허위 경보다. 실제로 기능이 의도한 대로 작동하지만 테스트는 실패를 나타내는 결과다.
테스트에서 발생하는 거짓 양성의 수는 테스트 구성 방식과 직접적인 관련이 있다. 테스트와 테스트 대상 시스템(SUT)의 구현 세부사항이 많이 결합할수록 허위 경보가 더 많이 생긴다. 거짓 양성이 생길 가능성을 줄이는 방법은 해당 구현 세부 사항에서 테스트를 분리하는 것뿐이다. 체스트를 통해 SUT가 제공하는 최종 결과를 검증하는지 확인해야 한다.
테스트를 깨지지 않고 리팩터링 내성을 높이는 방법은 SUT의 구현 세부 사항과 테스트 간의 결합도를 낮추는 것뿐이다. 즉, 코드의 내부 작업과 테스트 사이를 가능한 한 멀리 떨어뜨리고 최종 결과를 목표로 하는 것이다.
오류 유형 표 | 기능 | |
작동 | 고장 | |
테스트 결과 | ||
테스트 통과 | 올바른 추론 (참 음성) | 2종 오류 (거짓 음성) |
테스트 실패 | 1종 오류 (거짓 양성) | 올바른 추론 (참 양성) |
좋은 단위 테스트의 4대 특정
테스트 스위트를 탄탄하게 만들려면 테스트의 불안정성(거짓 양성)을 제거하는 것이 최우선 과제다.