解説

AMI HAPPY

ねえねえ智也くん!この『DynaFix』っていう論文のタイトル、なんか強そうで気になる!ダイナミックに直すってこと?

TOMOYA NEUTRAL

ああ、これは自動プログラム修正、つまりAPRっていう分野の新しい研究だよ。AIを使ってプログラムのバグを自動で直す技術のことだね。

AMI SURPRISED

へー!AIが勝手にバグを直してくれるなんて、夢の技術じゃん!でも、今までのは何がダメだったの?

TOMOYA NEUTRAL

今までの手法は、コードの文字面だけを見る『静的解析』に頼りすぎていたんだ。でも、バグって実際に動かしてみないと原因がわからないことが多いだろ?

AMI HAPPY

確かに!「書いた時は完璧だと思ったのに!」ってこと、私もあるよ。動かして初めて「あれ?」ってなるよね。

TOMOYA NEUTRAL

そう。既存の手法でもテスト結果を使うことはあったけど、「テストに落ちた」っていう大雑把な情報だけだったんだ。それじゃあ、複雑なバグは直せない。

AMI SURPRISED

じゃあ、このDynaFixはどうやって解決してるの?

TOMOYA NEUTRAL

DynaFixは『実行レベルの動的情報』をフル活用するんだ。変数の値がどう変わったか、どのルートを通ってエラーになったか、っていう細かい情報をAIに教えるんだよ。

AMI HAPPY

なるほど!お医者さんがレントゲンだけじゃなくて、血液検査の結果も見ながら診断するみたいな感じかな?

TOMOYA NEUTRAL

いい例えだね。そのために彼らは『ByteTrace』っていうツールを作ったんだ。これは『バイトコード・インストルメンテーション』っていう技術を使っていてね。

AMI SURPRISED

ばいとこーど……いんすとる……?呪文?

TOMOYA NEUTRAL

簡単に言うと、プログラムの元の書き換えずに、実行中にこっそり中身を覗き見るための仕掛けを組み込む技術のことだよ。これで詳細なデータを集めるんだ。

AMI HAPPY

へー!すごい!それで、どうやって直していくの?

TOMOYA NEUTRAL

まず、バグがあるコードとByteTraceで集めた実行データをAIに渡して、修正案を作らせる。もしその修正案がテストに落ちたら、またその時の実行データを集めてAIに渡すんだ。

AMI SURPRISED

あ、一回で諦めないんだ!何度もやり直すの?

TOMOYA NEUTRAL

そう。これを『反復的修正』と呼んでいる。人間がデバッグする時も、「ここを直してみよう、あ、まだダメだ、次はここかな」って繰り返すだろ?それをAIにやらせるわけだ。

AMI HAPPY

まさに人間みたいだね!それで、結果はどうだったの?

TOMOYA NEUTRAL

Defects4Jっていう有名なテストセットで試したところ、186個のバグを直せた。これは最新の他手法より10%も高いし、今まで誰も直せなかったバグも38個解決したんだよ。

AMI SURPRISED

186個!しかも誰も直せなかったバグまで……!DynaFix、めちゃくちゃ優秀じゃん!

TOMOYA NEUTRAL

効率も良くて、修正案を探す範囲を従来より70%も減らせたらしい。無駄な試行錯誤が減ったってことだね。実行データがあるから、AIが迷わずに済むんだ。

AMI HAPPY

これがあれば、エンジニアの人たちも楽になれるね!将来はどうなるのかな?

TOMOYA NEUTRAL

今は一つの関数の中にあるバグがメインだけど、将来的には複数の関数にまたがるもっと複雑なバグにも対応できるようになるはずだよ。ただ、実行データを集める分、計算コストがかかるのが課題かな。

AMI HAPPY

なるほどね〜。あ、じゃあ私の「朝起きられないバグ」も、DynaFixで実行データを解析して直してほしいな!

TOMOYA NEUTRAL

それはプログラムのバグじゃなくて、ただの夜更かしだろ。生活習慣を自分でデバッグしなさい。

要点

  • 従来の自動プログラム修正(APR)は、コードの見た目(静的情報)に頼りすぎており、実際に動かした時の挙動(動的情報)を十分に活用できていなかった。
  • 提案手法の『DynaFix』は、プログラム実行時の変数の値や実行ルート、関数の呼び出し履歴などの詳細な情報をAIに与えて修正案を考えさせる。
  • 一度で修正できなくても、失敗した時の実行データを再度取得してAIにフィードバックする『反復的な修正プロセス』を導入している。
  • Javaプログラムを解析するための専用ツール『ByteTrace』を開発し、ソースコードを書き換えずに詳細な実行データを収集することを可能にした。
  • 有名なバグ修正データセット『Defects4J』で評価し、既存の最新手法より10%多い186個のバグを修正。これまで誰も直せなかった38個のバグも解決した。