研究課題/領域番号 |
15K00091
|
研究機関 | 電気通信大学 |
研究代表者 |
寺田 実 電気通信大学, 大学院情報理工学研究科, 准教授 (80163921)
|
研究期間 (年度) |
2015-10-21 – 2019-03-31
|
キーワード | デバッグ / プログラム変異 |
研究実績の概要 |
1.Quicksort, heapsortのプログラムを対象として、ランダム変異によるバグ生成の処理を多数回(総計300万回程度)繰り返した。その結果、一部のテストのみを失敗する(バグ入り)プログラムが多数生成できたこと、いずれのプログラムについても「通過テスト数 - 生成度数」について似た傾向があることが確認できた。またheapsortについては、自作のコードに加えて別の作者によるより最適化されたコードについても処理を行った。その結果から、コードの最適化の程度によって生成されるバグのテスト通過数に違いがあることがわかった。以上の結果について、国内学会で口頭発表を一件行った。その後、N-queensプログラムを対象として同様の処理を加え、こちらは入力を持たないため得られる解総数の正解との近さを指標として評価した。また、生成したバグ入りプログラムの人間による理解とデバッグについては、申請者自身を被験者として取りかかったところである。 2.関連研究調査の過程で、ソフトウェアテスティングの文脈においてコードや入力に変異を与えて観察する手法 Fuzz Testing が存在することを知った。この手法は近年ネットワークアプリケーションの脆弱性の検査などにも利用されている。本研究の「バグ生成」とは目的が異なるが変異を与える手法などには共通点も多く、今後有益な情報を得ることが期待できる一方、本研究のアプローチである「正しいプログラムに変異を与える」ことの新規性について再考が必要となった。
|
現在までの達成度 (区分) |
現在までの達成度 (区分)
2: おおむね順調に進展している
理由
プログラムにランダムな変異を与え、網羅的なテストデータを入力してテスト通過数を測定するシステムを実装した。コードの変異においては、コンパイルエラーを発生させるような無意味な変異を回避するため、ソーステキストレベルではなく構文木レベルでの変異とし、部分木の変異、複製、交換などを実装した。変異の発生については構文木の対象節点(文、変数参照、算術演算子)ごとに一定確率で変異の発生を決め、さらに可能な変異候補からランダムに選択するようにした。また、変数の可視性の破壊によるエラーを除外するため、構文木の変異の際には局所変数の管理を行うことにした。 上記のシステムを購入した計算機システム上で継続的に稼働させ、テスト通過数ごとの発生度数を計測した。 また、高いテスト通過数を示したいくつかのバグプログラムについて、人間による理解を試みた。その結果、たとえば同一変数が比較式の両辺に出現するなどあきらかに不自然なものが存在することが分かり、単純なテスト通過数だけではなくより人間的な尺度の必要性が示唆された。 本来は29年度が最終年度であったが、研究実績の概要で記述した Fuzz Testing との関連から得られるものを活用して研究をさらに進めるため、研究計画の一年延長を申請した。
|
今後の研究の推進方策 |
まず対象とするプログラムの範囲を広げる。現状は sorting と n-queens プログラムのみであるが、たとえばグラフ処理アルゴリズムなども対象とする。 また、変異結果の評価尺度としてテスト通過数だけでなく、たとえばソースコード上の自然さを併用するなどする。ソースコード間の編集距離などが利用可能ではないかと考えている。 さらに、変異を与える手法として、現状では構文木の節点ごとに一定確率で変異を与えているが、これにくわえて、より有望な箇所に重点的に変異を加える方法(ゲーム木探索におけるモンテカルロ木探索に類似)を試みたい。 生成したバグ入りプログラムを被験者にデバッグしてもらい、そのベンチマークとしての利用可能性を評価する。 30年度は最終年度となるため、結果の公開、成果発表を行っていく。
|
次年度使用額が生じた理由 |
プログラム変異計算のために購入したワークステーションが十分なスペックで想定よりも低価格であったことと、システム開発用ノートPCを別予算から購入したため次年度使用額が生じた。 研究計画を一年延長したため、これを成果発表のための学会参加費用などに充当する計画である。
|