250 likes | 441 Views
X-1. SemFix: Program Repair via Semantic Analysis. Hoang Duong Thien Nguyen † , Dawei Qi † , Abhik Roychoudhury † , Satish Chandra ‡ † School of Computing, National University of Singapore, Singapore ‡ IBM Research, USA. 紹介: 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 楠本研究室 楊 嘉晨. X-1.
E N D
X-1 SemFix: Program Repair via Semantic Analysis Hoang Duong ThienNguyen†, Dawei Qi†, AbhikRoychoudhury†, SatishChandra‡ †School of Computing, National University of Singapore, Singapore ‡IBM Research, USA 紹介: 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 楠本研究室 楊 嘉晨
X-1 既存のプログラム自動修復:GenProg テストケース … ? プログラム
X-1 障害の原因となるステートメントを特定 1 intis_upward_preferred( intinhibit, intup_sep, intdown_sep) { 2 intbias; 3 if(inhibit) 4 bias = down_sep; 5 else 6 bias = up_sep; 7 if (bias > down_sep) 8 return 1; 9 else 10 return 0; 11 } 入力 状態 期待 実際 結果 結果 i nhibit up_set down_sep 1 0 100 0 0 成功 1 11 110 1 0 失敗 0 100 50 1 1 成功 1 - 20 60 1 0 失敗 0 0 10 0 0 成功
X-1 記号実行による修復案を導く 1 intis_upward_preferred( intinhibit, intup_sep, intdown_sep) { 2 intbias; 3 if(inhibit) 4 bias = X; 5 else 6 bias = up_sep; 7 if (bias > down_sep) 8 return 1; 9 else 10 return 0; 11 } bias=up_sep+100
X-1 GenProgとの比較実験
X-1 感想 • ソースコードに存在しない修復案を自動生成 • 使える計算の組み合わせが幅広い • 実験と結果の分析がとても詳しく記述されていた • GNUCoreutilsの実際にあるバグを修復した • 正確さはテストケースに依存する • 1行以上にバグがあると修復できない
X-2 Automatic Recovery from Runtime Failures Antonio Carzaniga*, Alessandra Gorlay†, Andrea Mattavelli*, and Nicolo Perino*, Mauro Pezze* *University of Lugano, Faculty of Informatics Lugano, Switzerland†Saarland University, Computer Science, Saarbrucken, Germany 紹介: 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 楠本研究室 井垣 宏
X-2 背景と目的 • バグが残ったままDeployされているソフトウェアシステムは多い • 特殊な状況でしか発生しない • 単体テストのみでは検出できない • 実行時に故障発生を検知し,バグを含むプログラムを正しい実行結果を返すプログラムに変更する
X-2 アプローチ • 故障を検知すると検知直前のCheckPointにロールバックし,故障を検知したプログラムとは別のプログラムを実行する --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- CheckPoint RollBack 正常 正常 CheckPoint 異常 異常 終了
X-2 アプローチ • 故障を検知すると検知直前のCheckPointにロールバックし,故障を検知したプログラムとは別のプログラムを実行する --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- CheckPoint RollBack 正常 正常 CheckPoint 異常 終了 正常 代替呼び出し
X-2 代替呼び出し(workaround) • deprecated method • 出力の一部が共通であるメソッド • 前提条件が異なるが出力が等しいメソッド • -> Intrinsic Redundancy • semantically equivalent, syntactically different • ->混入するバグが異なる
X-2 実験 • Real Faults in JodaTime • 提案手法で実際に3つのIssueを検出し,代替呼び出しと差し替えることが出来た • Mutation Analysis • エラーを生成して埋め込み,どの程度提案手法で検知できるか(後述) • Runtime Overhead • 正常時のオーバヘッド(後述)
X-2 感想 • deprecated codeの使い道として非常に興味深い • 古いメソッドを新しいメソッドに差し替える際に対応関係を開発者が明記しておく • 新しいメソッドで故障が検出されたときだけ対応する古いメソッドが呼び出される • しかもこの処理が自動化されていて,古いメソッドが呼ばれたことを開発者にフィードバックしてくれたら! • 保守に伴うコード編集が怖くなくなるかも
X-3 Program Transformations to Fix C Integers Zack Cokerand Munawar HafizAuburn University 紹介: 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 楠本研究室 村上 寛明 スライド中の図表は 論文から引用しています.
X-3 概要 • 目的 • C言語の整数に関する問題を抱えたソースコードを自動的に修正すること. • 貢献 • C言語の整数に関する問題の解決法(ソースコードの修正方法)を提案した. • 提案手法をツールとして実装し,公開した.
X-3 提案手法 • Add Integer Cast (AIC) • Replace Arithmetic Operator (RAO) • Change Integer Type (CIT) 符号なし整数として宣言するようにプログラムを自動修正する memcpy()の第三引数は 符号なし整数として扱われるが, 通常の整数として宣言されている CIT を用いたソースコードの修正例
X-3 評価実験 • 整数における脆弱性が報告されているプログラム(7,147個)に対し,提案手法を適用した. 自動修正した箇所は1,500万行以上に及んだ
X-3 所感 • 非常に読みやすい • 難しい表現を用いていない • 図を使って提案手法を分かりやすく説明している • ツールを公開している “http://www.munawarhafiz.com/research/openrefactory-C/index.htm” • 新規性は無い? • C言語の整数についての研究は幅広く行われている • 精度の評価は? • 修正した後のソースコードが正しく振る舞うのかを調査しなくてもよいのか?
X-4 ★ SIGSOFT Distinguished Paper Award 受賞論文 Automatic Patch Generation Learned from Human-Written Patches Dongsun Kim, Jaechang Nam, Jaewoo Song, and Sunghun Kim The Hong Kong University of Science and Technology, China 紹介: 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 楠本研究室 堀田 圭佑
X-4 研究概要 • 目的 • パッチの自動生成 • 特長 • 人が作成したパッチをベースにしたパッチ生成 バグを含むコード 提案手法が自動生成したパッチ Automatic Patch Generation Learned from Human-Written Patches Fig. 1 (a), (c), (d) より引用 人が作成したパッチ
X-4 提案手法:PAR 不具合を含んでいそうな箇所 (Fault Location) を特定[8] テストケースを用いて パッチ候補をテスト 通った 通らなかった Fault Location (とその近傍)を修正したコード片(パッチ候補)を生成 †: パラメータの追加,null-checkの追加 etc. パッチに頻出するパターン†をベースにパッチ候補を生成 著者らが実際のパッチを分析して特定 learned from human-written patches [8] C. Le Goues, M. Dewey-Vogt, S. Forrest, and W. Weimer, “A systematic study of automated program repair: Fixing 55 out of 105 bugs for $8 each,” in ICSE ’12. Automatic Patch Generation Learned from Human-Written Patches Fig. 3 より引用
X-4 評価 • 既存手法 GenProgとの比較 • パッチ候補をランダムに作って,テストケースが通ればOK,という手法 • Fixability • 6つのソフトウェアから実在したバグ119個を収集 • バグをいくつ修正できたかを比較 • Acceptability • PARとGenProgがともに修正できたバグについて,それぞれが生成したパッチを人が評価 • 253人が評価 PAR : 27 個 > GenProg: 16個 PARの方がacceptable
X-4 貢献 • パッチの分析 • 62,656のパッチを分析 • パッチに頻出するパターンを見つけた • 定量的評価 • 119個の実在のバグ • 2つのツールを各バグにつき100回実行 • 253人が参加した被験者実験