Googleが「このコードはCRAPだ」と斬る、テストすべきでないコードを見極める新指標

Code Is Crap

GoogleのTesting Blogに投稿されたAlberto Savoiaによる記事で、コードの品質を測る新指標「CRAP」を紹介している。変更の複雑さとテストカバレッジを掛け合わせ、「危険なコード」を炙り出す考え方だ。単純なgetterにまでテストを強要する従来のカバレッジツールへの批判も込められている。

すべてのコードカバレッジツールは大量の誤検知を生み出す。public Value getValue() { return value; } のようなメソッドをテストする必要はない。それは常識だ。しかしCodeProやJaCoCoのようなツールは、愚かなテストを書くことを強制する。Crap4Jだけがこの点で優れている。
  1. almondfestival

    この手法はこの15年で進化したり、取って代わられたりしているのは間違いないだろうけど、これを読んで強く印象に残ったのは、ユニットテストカバレッジの力学が近年どれだけ変わったかということだ。AIが生成したコミットには、昔と比べて10倍ものユニットテスト(その多くはかなり馬鹿げていてトートロジー的なものだ)が含まれている。CRAP1の式の係数をいくつか更新する必要がありそうだ…あるいは、テストカバレッジはノイズが多すぎてパラメータとして使えなくなるかもしれないし、すでになっているのかもしれない。

  2. bluGill

    指標というものは、それに基づいて行動し、結果として物事を改善して初めて意味がある。測定が簡単なものはたくさんあるが、その指標に対して取るべき有用な行動など何もない。

  3. onionisafruit

    CRAPスコアを計算するツールをいくつか見たことがある。でも実際に本気で使ったことはないな。

    Rust用には https://crates.io/crates/cargo-crap があって、Go用には https://padiazg.github.io/go-crap/ がある。

  4. aomix

    職場のコードベースをcargo-crap準拠にして、CIで強制するのが目標なんだ。一度エージェントを一晩走らせてみたら、差分がコードベースの40%くらいに及んで、単一のマージとしては到底受け入れられない規模だった。だから今は機会があるごとに少しずつ進めている。

  5. richardbarosky

    振り子はクラス、関数、循環的複雑度(そしてここではCRAP)といった類の馬鹿げた指標の方向へ振り切れすぎている。

    これはSandi Metzの「All the Little Things」というトークを思い出させる。そこで彼女はGilded Roseの型(kata)を扱っている。トークの中で彼女は、解いている問題の本質だけが残るまで自分の解答を作り直していく。

    循環的複雑度の指標は、各ステップで設計の良さと複雑さの除去の代理指標としてもてはやされる。しかし、この指標自体の弱点は、OOのメソッドディスパッチ自体を通じて起こる制御フローの間接性を考慮していないことだ。

    同時に、Kevlin Henneyの「Gilding the Rose」というトークは同じ型を取り上げ、彼が最後に明かす、はるかにまともな解答にたどり着く。

    短い関数はかつて流行った。Uncle Bobは「関数の第一のルールは短くあるべきこと。第二のルールは、それよりもさらに短くあるべきことだ」と説いていた。今では長い関数の利点を強調するのがかなり流行っている。

    https://github.com/johnousterhout/aposd-vs-clean-code

    この業界は時々かなり馬鹿げている ¯\_(ツ)_/¯

この日のほかの記事

2026-09-16