Skip to main content
QUICK REVIEW

[論文レビュー] Automatic Repair of Infinite Loops

Sebastian R. Lamelas Marcote, Martin Monperrus|arXiv (Cornell University)|Apr 20, 2015
Software Testing and Debugging Techniques参考文献 14被引用数 13
ひとこと要約

本稿では、反復回数とランタイム状態を動的ループインストルメンテーションで監視し、Satisfiability Modulo Theory (SMT) 解法を用いて正しいループ条件を合成することで、無限ループを自動修復する手法 $\mathit{Infinitel}$ を提示する。標準的なハードウェア上で数秒から1時間程度の実行時間で、7つの種まきバグおよび7つの実世界の無限ループバグを正常に修復した。

ABSTRACT

Research on automatic software repair is concerned with the development of systems that automatically detect and repair bugs. One well-known class of bugs is the infinite loop. Every computer programmer or user has, at least once, experienced this type of bug. We state the problem of repairing infinite loops in the context of test-suite based software repair: given a test suite with at least one failing test, generate a patch that makes all test cases pass. Consequently, repairing infinites loop means having at least one test case that hangs by triggering the infinite loop. Our system to automatically repair infinite loops is called $Infinitel$. We develop a technique to manipulate loops so that one can dynamically analyze the number of iterations of loops; decide to interrupt the loop execution; and dynamically examine the state of the loop on a per-iteration basis. Then, in order to synthesize a new loop condition, we encode this set of program states as a code synthesis problem using a technique based on Satisfiability Modulo Theory (SMT). We evaluate our technique on seven seeded-bugs and on seven real-bugs. $Infinitel$ is able to repair all of them, within seconds up to one hour on a standard laptop configuration.

研究の動機と目的

  • ソフトウェアバグの高い保守コストに対処するため、一般的で破壊的な欠陥クラスである無限ループの自動修復を可能にすること。
  • その構造的・行動的特徴を活用することで、一般向け修復ツールとは異なり、無限ループに特化した修復手法を開発すること。
  • 通過するテストケースの正しさを保ちつつ、ハングするテストケースを停止させる正しいループ条件の自動合成を可能にすること。
  • 検出のみまたはランタイム回避に依存する既存手法の制限を克服し、静的でオフラインの修復ソリューションを提供すること。
  • SMTに基づくコード合成が、実世界および種まきバグのシナリオにおける無限ループの修復の実現可能性と有効性を評価すること。

提案手法

  • 各反復ごとに反復回数、実行状態、変数値を動的に追跡できるように、ソースコードをインストルメント化する。
  • ランタイム分析を用いて、無限ループを引き起こすハングするテストケースを特定し、実行トレースを収集する。
  • 収集したランタイム状態を、Satisfiability Modulo Theory (SMT) 解法用の制約集合として表現する。
  • 終了を保証し、正しさを満たす新しいループ条件を生成することを目的とした、コード合成問題として修復タスクを定式化する。
  • SMTソルバーを用いて、すべてのテストケースが通過し、かつループが停止する新しいループガード条件を合成する。
  • 合成された条件を元のコードに統合し、正しいパッチを生成する。

実験結果

リサーチクエスチョン

  • RQ1テスト・スイートに基づく修復において、動的インストルメンテーションとSMTベースの合成を用いて無限ループを自動で修復できるか?
  • RQ2本手法は、種まきバグと比較して、実世界の無限ループバグの修復においてどの程度有効であるか?
  • RQ3スペクトラムベースの故障局所化やミューテーションオペレータに依存せずに、無限ループを検出し、修正できるか?
  • RQ4実プログラムにおける動的インストルメンテーションおよびSMT解法パイプラインの実行オーバーヘッドとスケーラビリティはどの程度か?
  • RQ5無限ループ以外のループ関連の欠陥、例えば誤ったループ境界などに対しても、本手法は一般化可能か?

主な発見

  • $\mathit{Infinitel}$ は、標準ラップトップ上で数秒から1時間の実行時間で、7つの種まきバグおよび7つの実世界の無限ループバグをすべて正常に修復した。
  • 動的インストルメンテーション技術により、反復ごとのループ状態の正確なモニタリングが可能になり、無限ループの原因を正確に特定できた。
  • SMTベースの合成により、すべてのテストケースで終了と正しさを保証する正しいループ条件パッチが生成された。
  • $\mathit{Jolt}$ や $\mathit{NoPol}$ のような検出専用ツールと比較して、意味的パッチを生成する点で優れた性能を示した。
  • 実世界の例(grepコマンドの無限ループ修正など)を含む多様なプログラムに対して、強力な耐障害性を示した。
  • 匿名クラスやネストされたループ構造を含む複雑なケースでも有効であったが、インストルメンテーション時のフィールドアクセスに一部制限が存在した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。