AIToday
大規模言語モデルAIコーディングZenn AI/ML掲載日時: 2026年10月11日 22:00

AIのRailsレビュー箇所を契約と検証で絞る

LINEで送る
AIのRailsレビュー箇所を契約と検証で絞る

設計ルールをAGENTS.mdの契約表にまとめ、AIにRailsコードとRSpecを書かせ、evilutionによるミューテーションテストとメソッド単位のCRAP値でテスト強度を検証。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

契約表はDesign by Contractに基づき、ルールを不変条件・事前条件・事後条件に分けている。不変条件だけでは不十分な具体例も示す。合計が10のままとだけ検証するspecでは、available_stockとreserved_stockが入れ替わるバグが生存した。availableが3減りreservedが3増えるという事後条件を加えるとその変異体は死に、予約数の直前・ちょうど・直後の境界値も加えると在庫モデルは150中62生存から150全殺傷になった。

ツール面ではRubyのミューテーションテスターを直接比較している。mutantのREADMEは無償利用を公開リポジトリに限定し、商用利用には開発者1人あたり月30ドルまたは年250ドルが必要なため、非公開アプリでは避けた。アーカイブ済みのmutestフォークはインストールに失敗した。MITのevilutionを採用し、evilutionもMITのmutineerも2026年に登場したばかりなので採用前にchangelogとissueを確認する価値があると述べている。

レビューの分業は明確だ。品質ゲートが完了条件を満たすか自動で判定し、人間は各specがIDで示す契約行を本当に検証しているか、生存変異体が実際のテスト欠落か、無効化行に真の等価理由があるかだけを確認する。specでのstub利用は、実際のDB状態から到達不可能な失敗と外部APIの2ケースに限定し、それぞれ理由を書くべきだと付け加えている。

よくある質問
RSpecが通ればAI製テストを信頼できると言えないのはなぜか?
User#adult?の例では年齢20と15をカバーするspecの行カバレッジは100%だったが、evilutionは17変異体のうち2つが生存したと報告した。年齢18の境界を変える変異体が通ったのは、テストが年齢18ちょうどを検証していなかったためだ。
作者がmutantやmutestではなくevilutionを選んだのはなぜか?
作者によればmutantのREADMEは無償利用を公開リポジトリに限定し、商用利用には開発者1人あたり月30ドルまたは年250ドルが必要としている。MITフォークのmutestは2020年にアーカイブされ、bundle installに失敗した。
evilutionの等価変異体判定を作者が確認してわかったことは?
作者はevilutionが等価と判定した4つの変異体を実行せず手作業で書き直したところ、真に等価だったのは1つだけだった。スコア100%でもJSON出力の等価リストを読むよう勧めている。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へGoogle、文章でゲーム作成のPlayground公開