minikin/cargo-crap

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

何を解決するか

cargo-crap は Rust 開発者向けのツールで、"リスクの高い" コードを特定します。このツールは、複雑さが高く(読みにくく、保守が難しい)かつテストカバレッジが低い(カバレッジが低い)関数を対象としており、バグが隠れている可能性が最も高い場所です。

動作方法

このツールは CRAP(Change Risk Anti-Patterns)メトリクスを計算します。これは循環的複雑度(CC)とテストカバレッジを組み合わせた単一のスコアを算出する式です。

  • 低スコア: 単純で完全にテストされた関数は 1.0 になります。
  • 高スコア: 複雑度が増し、カバレッジが減るにつれてスコアは上昇します。
  • ハードリミット: 関数の複雑度が高すぎる(概ね 30 を超える)場合、テストカバレッジがどれほど高かろうとリスクがあるとマークされます。

cargo-llvm-cov などのカバレッジツールと連携して LCOV レポートを読み込み、コードリスクが一定の閾値を超えるとビルドを失敗させる CI/CD パイプラインで使用できます。

対象ユーザー

高いコード品質を維持し、複雑なロジックがテストされていない状態にならないようにしたい Rust 開発者やチーム向けです。

特徴

  • CI 統合: --fail-above--fail-regression を使って、リスクの増加を防ぐためにビルドをブロックできます。
  • ベースライン比較: 前回の JSON ベースラインと現在の結果を比較し、改善や回復を追跡できます。
  • 重複関数検出: 構造的類似性に基づいて重複候補の関数を特定できます。
  • 複数の出力形式: 人間が読みやすいテーブル、JSON、GitHub アノテーション、SARIF、Shields.io バッジをサポートしています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト