コードの雑さを測定する
概要
- LLM によるコード生成はほぼ完璧だが、 品質問題 やスロップ(冗長・重複)の懸念
- コードの スロップ評価 は難しく、人間の直感やセンスが依然重要
- SlopCodeBench などによる定量指標(冗長性・侵食度)が提案
- LLMやエージェント自身による評価には限界
- コード品質評価の今後の課題と展望
LLMによるコード生成とスロップ問題
- LLM はほぼ完璧な形式的正しさでコードを生成
- 形式的に正しくても 不要な抽象化や重複、悪い設計 が混入するリスク
- 機能追加ごとに コード行数(LOC)爆発 の現象
- 巨大プロジェクトでは 人間の管理能力の限界 が露呈
- エージェントに任せても 品質低下(スロップ)問題 は解決困難
コードスロップの定量的評価指標
- LOC増減 の単純な計測は意外と有効だが、最適化すると意味を失う
- SlopCodeBench 論文で提案された指標
- 冗長性(Verbosity): 重複・冗長な行数の割合
- AST-Grepとクローン検出によるフラグ付き行数/全LOC
- 侵食度(Erosion): 巨大・複雑な関数にコードが集中する割合
- 関数ごとの複雑度(CC)と行数(SLOC)から質量を算出
- CC>10の関数の質量/全関数の質量
評価結果と人間コードとの比較
- SlopCodeBench評価 での平均値
- リポジトリ :冗長性0.15±0.06、侵食度0.31±0.17
- エージェント生成コード :冗長性0.33±0.10、侵食度0.68±0.20
- エージェントコードは人間コードの約2倍の冗長性・侵食度
- 自分の“vibe-coded”プロジェクトでも高いスロップ値を確認
LLM/エージェントによるコード評価の限界
- AIによる評価
- 1-10点評価はランダムに等しい
- 解答A/Bの比較も、名前を変えるだけで結果が変わる場合あり
- ルーブリックや自動テスト生成も、スロップ排除には不十分
- 人間による評価
- 可読性・品質確保には最善
- だが大規模データセットやAI訓練には非現実的
SlopCodeBenchの実験設計と示唆
- 通常のコードベンチマークと異なり 複数ラウンド・文脈消去 で評価
- 悪い設計判断が 累積 し、最新モデルでも 全テスト通過率0%
- 大量のLOC追加 がもたらすリスクの警鐘
コード品質評価の今後
- 関数の結合度、 コードの変動率(churn)、 凝集度(cohesion) など他指標も検討余地
- コード進捗=LOC増加という誤解への注意喚起
- 人間の感覚 が今も評価に不可欠という現状
まとめ
- LLM/エージェント によるコード生成の品質管理は未解決課題
- 定量指標 は有効だが、万能ではない
- 人間の直感・センス を補完する新たな評価軸の開発が今後の鍵