minikin/cargo-crap

Change Risk Anti-Patterns (CRAP) metric for Rust projects

해결하는 문제

이 도구는 복잡도가 높으면서 테스트가 제대로 이루어지지 않은 함수를 찾아 Rust 프로젝트 내의 "품질이 낮은" 코드를 식별합니다. 이는 특히 복잡도는 높지만 테스트 커버리지가 부족할 수 있는 AI 생성 코드에서 버그가 숨어있을 가능성이 가장 높은 위치를 개발자가 찾는 데 도움을 줍니다.

작동 방식

이 도구는 순환 복잡도(CC)와 테스트 커버리지를 하나의 점수로 결합한 CRAP (Change Risk Anti-Patterns) 지표를 계산합니다.

  • 낮은 점수(예: 1.0)는 단순하고 테스트가 완벽하게 완료된 함수를 나타냅니다.
  • 높은 점수는 함수가 복잡하고 커버리지가 부족함을 나타냅니다.
  • 함수가 100% 커버리지를 가지는 경우, CRAP 점수는 순환 복잡도와 동일합니다.
  • 매우 높은 복잡도(CC > 30)를 가진 함수는 테스트 커버리지와 관계없이 플래그가 지정됩니다.

대상

복잡하고 테스트되지 않은 코드가 프로덕션 코드베이스에 유입되는 것을 방지하기 위해 CI/CD 파이프라인에 자동화된 코드 품질 게이트를 통합하고자 하는 Rust 개발자 및 팀.

주요 특징

  • CI 통합: --fail-above를 지원하여 함수가 특정 임계값을 초과하면 에러와 함께 종료됩니다.
  • 베이스라인 비교: 현재 결과를 JSON 베이스라인과 비교하여 코드 품질의 퇴행을 감지할 수 있습니다.
  • 다양한 출력 형식: 사람이 읽기 쉬운 테이블, JSON, GitHub annotations, Markdown, SARIF 및 Shields.io 배지를 지원합니다.
  • 워크스페이스 지원: 전체 Cargo 워크스페이스(모노레포)를 분석할 수 있습니다.