
내 테스트 스위트는 "통과"라고 말했지만, 19개의 테스트가 거짓말을 하고 있었다.
요약
테스트 스위트의 실행 결과가 '통과'로 나타나더라도, 실제 실행된 테스트의 개수가 베이스라인과 일치하는지 확인하는 것이 중요함을 강조합니다. 누락된 테스트가 에러 없이 건너뛰어질 경우 발생하는 '가짜 성공'의 위험성을 경고합니다.
핵심 포인트
- 실패가 없는 상태와 모든 것이 확인된 상태는 다르다
- 테스트 개수가 예상된 베이스라인과 일치하는지 반드시 확인해야 한다
- 의존성 누락으로 인해 테스트가 조용히 건너뛰어지는 상황을 경계하라
- 신뢰할 수 없는 베이스라인은 이후의 모든 비교를 무의미하게 만든다
새로운 기능을 추가하기 전에, 깨끗한 베이스라인 (baseline)을 확인하기 위해 테스트 스위트 (suite)를 실행했습니다. 결과는 139개 통과, 3개 건너뜀 (skipped)으로 나왔습니다. 녹색 계열이었고, 실패 (failure)는 없었습니다. 그냥 고개를 끄덕이며 개발을 시작하는 것이 쉬운 선택이었을 것입니다.
하지만 저는 그렇게 하지 않았습니다. 숫자가 틀렸기 때문입니다. 제가 알고 있는 검증된 베이스라인 (baseline)은 158개입니다. 139개로 나오는 실행 결과는 "충분히 근접한" 것이 아닙니다. 19개의 테스트가 부족한 것이며, 그 19개가 통과하고 있는지, 실패하고 있는지, 아니면 단순히 존재하지 않는 것인지조차 알 수 없습니다.
원인은 지루하게도 밝혀졌습니다: 새로운 가상 환경 (virtualenv)에 어댑터 추가 기능 (adapter extras)이 설치되지 않았고, 그 결과 OpenTelemetry에 의존하는 모든 테스트가 조용히 건너뛰어지거나 아예 수집되지 않았던 것입니다. 아무런 에러 (error)도 발생하지 않았습니다. 누락된 테스트들이 실패할 수 없었기 때문에 실행 결과는 오히려 건강해 보였습니다. 이것이 가장 위험한 종류의 녹색입니다. "모든 것이 통과했다"가 아니라, "문제를 잡아냈어야 할 것들이 아예 질문조차 받지 못했다"는 상태 말입니다.
왜 이 문제 때문에 기능 개발 전체를 중단했을까요? 저의 작업 방식 전체가 "내 변경 사항 전후를 비교하여 무엇이 망가졌는지 확인하는 것"이기 때문입니다. 시작점이 실제 158개가 아니라면, 그 비교는 무의미합니다. 나중에 제 새로운 코드가 무언가를 망가뜨린 것인지, 아니면 이미 망가져 있었던 것인지 알 방법이 없게 됩니다. 신뢰할 수 없는 베이스라인 (baseline)은 그 위에 구축되는 모든 결과를 오염시킵니다.
추가 기능 (extras)을 설치하고 다시 실행했습니다: 158개 통과, 0개 건너뜀. 이제야 진짜 출발선이 생겼습니다. 그제서야 저는 개발을 시작했습니다.
이 교훈은 pytest에 관한 것이 아닙니다. "실패가 없다"는 것과 "모든 것이 실제로 확인되었다"는 것은 서로 다른 주장이며, 그 둘 사이의 간극이 바로 잘못된 확신이 자리 잡는 곳이라는 점입니다. 단순히 빨간색(실패)이 아닌 것만 세지 말고, 있어야 할 것이 모두 있는지 세십시오.
Code: github.com/JEONSEWON/Clew-by-Custos
#BuildInPublic #AIAgents #Testing #DevTools
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기