피드로 돌아가기
Dev.toBackend
원문 읽기
개발자가 Litmus CLI 도구를 도입해 테스트 우선순위를 자동 분석함으로써 테스트 계획 수립 시간을 반일에서 몇 분으로 단축
You inherited a .NET codebase with zero tests. Now what?
AI 요약
Context
레거시 .NET 코드베이스를 인수받은 팀은 200개 이상의 파일 중 어디부터 테스트를 작성해야 할지 결정하기 어려웠다. 기존의 순차적 테스트 작성(알파벳순) 또는 반응적 테스트(수정한 부분만) 전략은 실제 위험도가 높은 파일을 놓치거나 문제 해결을 뒤처지게 했다. 매 프로젝트 시작마다 수동으로 git 로그, 커버리지 리포트, 소스 코드를 교차 검증하는 데 반일이 소요되었다.
Technical Solution
- RiskScore 계산식 도입: Churn × (1 - Coverage) × (1 + Complexity) 공식으로 파일의 위험도를 정량화
- Roslyn 기반 의존성 분석: DateTime.Now, File.ReadAllText(), new HttpClient() 등 6가지 카테고리의 unseamed 의존성을 자동 감지
- Coupling 계수 적용: StartingPriority = RiskScore × (1 - Coupling)으로 실제 테스트 가능성을 반영해 순위 보정
- 가중치 차등 적용: Infrastructure 호출(2.0×)을 생성자 파라미터(0.5×)보다 높게 가중화해 테스트 어려움 정도를 반영
- CLI 기반 즉시 실행: dotnet tool install과 dotnet-litmus scan 명령어로 설정 없이 git 히스토리, 테스트 커버리지, 소스 분석을 통합 수행
Key Takeaway
레거시 코드의 테스트 전략은 정적 분석(복잡도, 커버리지)과 동적 데이터(변경 빈도, 의존성 구조)를 공식으로 결합할 때 객관적이고 재현 가능해진다. Seams 개념(의존성 치환 가능 지점)을 자동 감지하는 것이 실제 테스트 가능성을 판단하는 핵심이다.
실천 포인트
테스트 커버리지가 없는 .NET 레거시 프로젝트에서 Litmus를 실행하면 수동 분석 없이 PaymentProcessor처럼 자주 변경되면서 테스트하기 쉬운 파일(seams가 있는)을 우선 대상으로 식별할 수 있다. 이를 통해 스프린트 계획 회의에서 추측 대신 git 데이터와 정적 분석 수치로 뒷받침된 우선순위를 제시할 수 있다.