minikin/cargo-crap

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

해결하는 문제

cargo-crap은 루스트 개발자를 위한 도구로, '위험한' 코드를 식별합니다. 이 도구는 복잡도가 높고(읽기 어렵고 유지보수가 어려움) 테스트 커버리지가 낮은(낮은 커버리지) 함수를 대상으로 하며, 이는 버그가 숨어 있을 가능성이 가장 높은 영역입니다.

작동 방식

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

  • 낮은 점수: 간단하고 완전히 테스트된 함수는 1.0 점을 받습니다.
  • 높은 점수: 복잡도가 증가하고 커버리지가 감소할수록 점수가 상승합니다.
  • 경계값: 함수의 복잡도가 너무 높을 경우(약 30 이상), 테스트 커버리지가 얼마나 되든 간에 위험으로 간주됩니다.

cargo-llvm-cov와 같은 커버리지 도구와 통합되어 LCOV 보고서를 읽어들이며, 코드 위험도가 특정 기준을 초과할 경우 빌드를 실패시키는 CI/CD 파이프라인에서 사용할 수 있습니다.

대상 사용자

높은 코드 품질을 유지하고 복잡한 로직이 테스트되지 않은 상태로 남아있지 않도록 보장하고자 하는 루스트 개발자 및 팀입니다.

주요 기능

  • CI 통합: --fail-above 또는 --fail-regression를 사용해 위험도 증가를 방지할 수 있는 빌드 게이트를 제공합니다.
  • 기준 비교: 이전 JSON 기준과 현재 결과를 비교하여 개선 또는 회귀 여부를 추적할 수 있습니다.
  • 중복 함수 탐지: 구조적 유사성 기반으로 후보 중복 함수를 식별할 수 있습니다.
  • 다양한 출력 형식: 인간이 읽기 쉬운 테이블, JSON, GitHub 주석, SARIF, Shields.io 배지 등 다양한 형식을 지원합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트