Show HN: Crucible – AIがテストを書いたなら、誰がテストをテストしたのか?
Crucible は、AIが生成したテストの欠陥を発見するための対抗的テスト強化ツールです。ミューテーションテストを使用して、AIが書いたテストが見逃すバグを特定します。無料のスコアコマンドでテストスイートを評価し、その後、テスターがテストを書き、mutmut が生存者を見つけ、クリティックが標的を絞ったテストを書く対抗ループを実行します。このツールは機械検証可能なレシートを生成し、Python/pytestプロジェクトで動作します。
Crucible は、AIが生成したコードのテスト品質を向上させるためのオープンソースツールです。AIがテストを書く時代において、カバレッジ指標だけではテストの有効性を測れないという問題に取り組みます。Crucible はミューテーションテストを用いて、実際の欠陥を注入し、テストスイートがそれらを検出できるかを検証します。例えば、カバレッジ97%のモジュールでも、実際には71の欠陥のうち25が見逃されていることがあり、Crucibleはそのうち24を殺します。
Crucible のワークフローは二段階です。まず crucible score コマンドは、AIモデルを一切使わずに既存のテストスイートを評価し、真の欠陥検出率を出力します。これは完全無料で、APIキーも不要です。次に crucible harden コマンドは対抗ループを開始します。テスターエージェントがテストを書き、mutmut が生存欠陥を見つけ、クリティックエージェントがそれらを対象としたテストを生成します。すべての判定は機械的に行われ、pytest が直接実行します。
Crucible は透明性を重視し、各実行の詳細なレシートを生成します。メタデータ、トークン使用量、コスト、結果などが記録され、後で検証可能です。実験結果では、対抗ループが一回限りの生成よりも有意に多くのミュータントを殺すことが示されています(McNemar検定 p = 4.9×10⁻³²)。
ただし、Crucible には正直な制限があります。現在は Python + pytest プロジェクトのみ対応し、mutmut の特定バージョンに依存します。モデルの非決定性により結果が変動することもありますが、レシートはすべての実行を記録するため、都合の良い結果だけを選ぶことはできません。Crucible 自身もこのツールでテストされており、品質が保証されています。
全体として、Crucible はAI生成コードのテスト品質を可視化し、改善するための実用的なツールであり、カバレッジだけに頼らない真の安全性を提供します。