研究課題/領域番号 |
15K00091
|
研究機関 | 電気通信大学 |
研究代表者 |
寺田 実 電気通信大学, 大学院情報理工学研究科, 准教授 (80163921)
|
研究期間 (年度) |
2015-10-21 – 2018-03-31
|
キーワード | デバッグ |
研究実績の概要 |
1. Quick Sort プログラムに含まれる partition 処理に着目し、そのうちの数ヶ所を候補として人手で選出し、テキスト処理によってそれらの箇所にあらかじめ用意した変異をランダムに加える「バグ自動生成プログラム」を作成した。変更内容としては、使用する変数の取り替え、比較演算子の取り替えなどである。生成されたプログラムにテストデータセットを与えてバグを確認できた。 さらに、正解と異なった結果をもたらしたテスト件数を手がかりにすれば、どれだけ「正解に近いが誤っているか」を評価でき、これはデバッグの難しさの尺度として利用可能なのではないかとの着想を得た。これは自動生成したバグの評価に利用することが可能であると考えられる。 2. Java のマルチスレッドプログラムを対象として、スレッド間の同期を行う処理に人手で変更を加えることによりさまざまな並列処理のバグを作成する実験を行った。たとえば synchronized構文によりガードする範囲の変更や、ガードそのものの省略などである。生成したプログラムを実行してバグの発生を確認できた。 さらに、生成したバグに対して利用可能なデバッグ手法がどれくらいあるかを基準として、生成したバグの評価を試みた。たとえば、再現性がないバグの場合、バグ発生時のトレースくらいしか有効な手段はなくなるなどである。また、自動バグ検出ツールである Java Path Finderの適用による評価も行なった。
|
現在までの達成度 (区分) |
現在までの達成度 (区分)
2: おおむね順調に進展している
理由
デバッグ手法の評価のための手段として、バグの難易度を利用する着想を得た。これは、難易度の高いバグとは、テストデータセットに対する出力を正しいプログラムの出力と比較したときに、不一致項目の件数が(1件以上であって)最小のものであるという仮説に基づくもので、これは機械的に判定可能である。 また、機械的なプログラムの変異のために、Eclipse上のJavaプログラムのAbstract Syntax Treeの処理を習得した。前年はテキスト処理で変異を行っていたが、これにより構文的に正しい変異結果をプログラムの任意の箇所で行うことが可能になった。 さらに、並行動作プログラムに対しては、人手でのバグ導入を試み、ある程度の結果を出すことができた。 以上を平成28年度の研究実施計画とてらしあわせて、おおむね順調に進展していると判断する。
|
今後の研究の推進方策 |
テストデータセット不一致件数の最小化という仮説にもとづき、正しいプログラムを出発点としてGenetic Programmingの手法を用いてバグ入りプログラムを生成し、それらを「正解との不一致件数最小」をふくむ評価関数で淘汰していくことで、難しいバグを人工的に合成できるをこと最優先で確認したい。これは、一般に行なわれている「正解を求めるGenetic Programming」とは逆のアプローチである。この手法を既知の様々なアルゴリズムに適用し、難しいバグが合成できたかを評価する。 並列処理についても、正解との実行トレースの一致などを評価関数として同様のバグ生成が可能かを調べていく。 29年度は最終年度でもあり、結果の公開、成果発表を行っていく。
|
次年度使用額が生じた理由 |
バグ生成のために構文解析技術の習得が必要となり、購入予定であったシステム開発用ノートPCの購入を翌年度にまわしたこと、参加予定であった学会のひとつを別の経費を使用して参加したことなどが理由である。
|
次年度使用額の使用計画 |
システム開発用ノートPC、成果発表のための学会参加費などに当てる計画である。
|