minikin/cargo-crap

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

해결하는 문제

cargo-crap는 복잡하고 테스트되지 않은 Rust 함수를 식별하기 위해 설계되었습니다. 함수가 논리적으로 복잡(고 사이클로마티크 복잡도)하지만 충분한 테스트 커버리지가 부족한 코드베이스 내의 위험 영역을 타겟으로 합니다. 이러한 영역은 변경 시 리그레션 발생 가능성이 가장 높은 곳입니다.

작동 방식

이 도구는 syn을 사용하여 Rust 소스 코드를 파싱하고, cargo-llvm-cov 또는 cargo tarpaulin과 같은 도구가 생성한 LCOV 커버리지 파일을 읽습니다. 각 함수에 대해 다음 공식을 사용하여 CRAP (Change Risk Anti-Patterns) 점수를 계산합니다:

CRAP(m) = comp(m)² × (1 − cov(m)/100)³ + comp(m)

여기서 comp는 사이클로마티크 복잡도이고, cov는 라인 커버리지 퍼센트입니다. 높은 점수는 복잡하면서도 충분히 테스트되지 않은 함수를 나타냅니다. 이 도구는 CI/CD 파이프라인에 통합되어 점수가 특정 기준을 초과하거나 점수의 회귀가 발생할 경우 빌드를 실패시킬 수 있습니다.

대상 사용자

AI 생성 코드가 포함된 경우 특히 숨겨진 복잡성이 있을 수 있으므로, 높은 코드 품질과 테스트 커버리지를 유지하고자 하는 Rust 개발자 및 팀에게 적합합니다.

주요 기능

  • CI/CD 통합: 기준치 또는 회귀 게이트를 기반으로 빌드 실패를 지원하여 품질 저하를 방지합니다.
  • LCOV 호환성: 표준 Rust 커버리지 도구와 호환됩니다.
  • 세부 보고서: 커버리지 퍼센트와 미커버된 라인 범위를 포함한 테이블을 제공합니다.
  • AI 기반 트리아주: 선택적으로 TypeSafe와 통합하여 논리적 유사성 기반으로 중복 함수를 병합할지 여부를 판단할 수 있습니다(구조가 아니라 논리 기반).
  • 다양한 출력 형식: 인간이 읽기 쉬운 테이블, Markdown, PR 댓글, JSON 형식을 지원합니다.

관련

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