j: code analysis
DESCRIPTION
J: Code Analysis. J1: Partition-Based Regression Verification Marcel Böhme , Bruno C. d. S. Oliveira, Abhik Roychoudhury J2: Automated Diagnosis of Software Configuration Errors Sai Zhang, Michael D. Ernst J3: Detecting Deadlock in Programs with - PowerPoint PPT PresentationTRANSCRIPT
J1: Partition-Based Regression Verification Marcel Böhme, Bruno C. d. S. Oliveira, Abhik Roychoudhury
J2: Automated Diagnosis of Software Configuration Errors Sai Zhang, Michael D. Ernst
J3: Detecting Deadlock in Programs with DataCentric Synchronization Daniel Marino, Christian Hammer, Julian Dolby, Mandana Vaziri, Frank Tip, Jan Vitek
J: Code Analysis
情報処理学会 ソフトウェア工学研究会 国際的研究活動活性化 WG ICSE’13 勉強会
ICSE’13 勉強会 (2013 年 7 月 9 日 )担当者: 野田 訓広 @ 阿草研 OB
In Proc. of ICSE’13, pp.302--311.
3
Outline
問題
• 全入力空間に対する Regression Verification(RV) は時間・メモリが非常に多く必要で非実用的
提案
• 入力空間を分割①し,段階的に検証していく手法② (Partition-Based RV) を提案・実装③ (on JSlice)
• テストケース生成の代替としても利用可能④
結果
• 既存手法よりも早くより多くの Regression Errorを検出
• 長期間報告されなかったバグを即座に検出
J1: Partition-Based Regression Verification
① ~④: Main Contributions
4
Partition-Based RV
J1: Partition-Based Regression Verification
・ RV : 全入力空間を検証・ PRV : 入力空間を分割し段階的に検証・ RT : 入力空間の特定の点に対し検査
a. ランダムにテストケース選択・実行b. 同値空間 (differential partition) を計
算c. 隣接する空間のテストケースを選択・実
行d. b. に戻る
上図は “ Böhne et. al., Partition-Based Regression Verification, In Proc. of ICSE‘13, pp.302-311” より引用
同値空間は記号実行を基にした方法で計算.スライス・到達可能性・伝播状態などを
計算して, (1)同じ変更部分に到達するか(2)出力への影響が同じかを判定し求める.
5
Experimental Evaluation 提案手法が関連手法よりもどれだけ有用かを評価
5 個のソフトウェア (20LOC ~ 5,000LOC) 83 個のバージョン
RQ1 : Efficiency – Semantic Difference 41% 少ない時間で完了 21% 多くの regression differences を検出
RQ2 : Efficiency – Software Regression 63% 少ない時間で完了 48% 多くの software regression (≠semantic
difference) を検出 RQ3 : Practicability
Apache CLI に対し, 2 ヶ月間も報告されなかったバグを88 秒で検出!
J1: Partition-Based Regression Verification
6
所感 Pros
実験結果が良い.関連研究と比較した際の有用性がよく分かる.
実際に検出されづらいバグを検出できている(Apache CLI の例 ) 点が良い.
いかに良い例を見つけてくるかが重要? 手法考案と例を見つけるのはどちらが先?
Cons Scalability についての議論は保留されている.
結局実用的なのか? どのような Semantic Difference/Software
Regression が見つかるのかよく分からない
J1: Partition-Based Regression Verification
Sai Zhang, Michael D. ErnstUniversity of Washington, USA
Automated Diagnosis of Software Configuration
Errors
In Proc. of ICSE’13, pp.312-321.
ICSE’13 勉強会 (2013 年 7 月 9 日 )担当者: 渥美 紀寿 ( 名古屋大学 )
研究の目的と主要な貢献目的 ソフトウェアの設定ミスによる不具合の原因を特定
特徴 テストオラクルが不要 クラッシュしている場合もしていない場合も自動的に
特定可能
主要な貢献 Java のソフトに対する診断ツールを実装 (http://config-errors.googlecode.com) 5 つのソフトウェアに対する 14 の設定エラーに対し
て評価したところ,根本の原因を上位に示すことができた
J2: Automated Diagnosis of Software Configuration Errors 8
手法の概要
プログラム
Configurationオプション
伝播解析true と評価される回数を計測するためのコード埋め込み
実行エラー検出
影響を受ける条件式
実行プロファイ
ル
エラーレポート
プロファイルDB ( 成功実行 )
計測プログラム
入力 Configuration( エラー実行 )
Configuration オプションの値の設定からスライシング
成功実行におけるプロファイルをあらかじめ構築
成功実行と大きく異なる部分を検出
原因となる Configurationオプションを Ranking
J2: Automated Diagnosis of Software Configuration Errors 9
評価方法 対象
Randoop, Weka, JChord, Synoptic, Soot 5 non-crashing, 9 crashing
プロファイル DB の構築 ユーザマニュアル, FAQ , ML 等から成功実行
既存技術との比較,利用技術の違い ConfAnalyzer[1], Fault Localization
(Tarantula[2], Daikon[3]), Slicing (Full Slicing, Thin Slicing)
その他 確度,パフォーマンス[1] A. Rabkin and R. Katz. Precomputing possible configuration error diagnoses. In ASE, 2011.
[2] J.A.Jones,M.J.Harrold,andJ.Stasko.Visualizationoftestinformation to assist fault localization. In ICSE, 2002.[3] M. D. Ernst, J. Cockrell, W. G. Griswold, and D. Notkin. Dynamically discovering likely program invariants to support program evolution. In ICSE, 1999.
J2: Automated Diagnosis of Software Configuration Errors 10
評価結果
Fig. 6. (S. Zhang, M. D. Ernst, Automated Diagnosis of Software Configuration Errors, In Proc. of ICSE’13, pp.312-321.)
類似 prof. / 全 prof. in DB
Fault Localiztion(Tarantula, Daikon)
プロファイルが短かいので,うまくいかない
non-crashing では原因を上位に出せた
正しい実行におけるプロファイルに大きく依存
既存技術との比較を詳細に分析しているところが
論文の高評価に
J2: Automated Diagnosis of Software Configuration Errors 11
ICSE’13 勉強会 (2013 年 7 月 9 日 )今井 敬吾 @ IT プランニング
Detecting Deadlock in Programs with Data-Centric
Synchronizationby Daniel Marino, Christian Hammer, Julian Dolby, Mandana Vaziri, Frank Tip, Jan Vitek @ ICSE 2013
In Proc. of ICSE’13, pp.322--331.
13
概要AJ ( 先行研究: Java の並行拡張 ) :アトミックにアクセスすべ
きフィールド群を宣言的に記述する atomic set 機能 (POPL’06, ICSE’08, ECOOP’10, TOPLAS’12, ICSE’13 ほか )
AJ コンパイラは適切な位置にロック命令を挿入した Java のコードを生成する競合が起こらない・データの一貫性を保持できる(オーバーヘッドも比較的小さい)
(挿入したロックにより)デッドロックが起こってしまう…
⇒AJ プログラムのデッドロックを検出する 型システム(というよりアノテーション+プログラム解析アルゴリズム)を提案
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
AJ(Java+
atomic set)
Java
compile
lock
14
AJ 先行研究:宣言的な同期制約 [1-3]
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
tree1
Node root;int size;
atomic set t : root と size にアクセスするメソッド呼び出し( t の unit of work と呼ぶ)が(それらのアクセスに関して)アトミックになる
t
The program code is from Fig. 2. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)
15
node1
Node left;Node right;
AJ 先行研究:アトミックセットのエイリアス [1-3]
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
tree1
Node root;int size;
Aliasing annotation :複数のオブジェクトのアトミックセットを一つにする。(単一のロックにより、 tree1 と node1 の両方のフィールドが保護される)
root
t
n
The program code is from Fig. 2. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)
16
検出可能なデッドロックの簡単な例
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
tree1
t
tree2
t
T3
T4
①
② ②
①
t < t (atomic set t のロックが循環する ) デッドロック
The program code is from Fig. 2 and Fig. 3. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)
17
貢献 AJ のデッドロック検出アルゴリズムの提案と実装
ロックに半順序が付くことを示す、素朴なアルゴリズムAJ のアノテーションはやや(かなり)重たいので、これくらいできて当然かも?
再帰的データ構造を扱うためにアノテーション |a<this.a| を AJ に追加
eclipse プラグイン (未公開 ) : WALAで CFG生成・データフロー解析
正当性の証明はごくインフォーマル ([8] の tech. report にある )
評価(解析対象のプログラム 10 個 (一部公開) について) AJ プログラムの修正はごくわずかで良い
2 個:デッドロック誤検出を取り除くためのリファクタリング少し1 個: |a<this.a| のアノテーション 4箇所AJ アノテーションは「筋が良い」か?わずかなアノテーションでデッドロックを検出できるならば良いが、 AJ 自身に向き不向きがあるように思われる。例えば Java の collection フレームワークを AJ に書き換えるのに 1 ファイルあたり 50近いエイリアスが必要( Table I参照)。他はそうでもないが…
RQ3: 実行時間は?→最大で 75 秒 (Core i5 1.8GHz RAM 4GB)J3: Detecting Deadlock in Programs with Data-Centric Synchronization
18
Node left;Node right;
Node left;Node right;
node2 node3
node1
Node left;Node right;
(補足 )順序付けアノテーション |this.a<a|
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
left right
n
nn
木全体をひとつの atomic set に属させる場合、子ノードの n を自身のn と同じにすればよいThe program code is from Fig. 2. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)
19
Node left;Node right;
Node left;Node right;
node2 node3
node1
Node left;Node right;
(補足 )順序付けアノテーション |this.a<a|
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
left right
n
n n
left/right を全スレッドが同じ順でアクセスしていることを保証できない(デッドロックと判定される )
ノード毎に異なる atomic set
細粒度 lock:ノード毎に異なるatomic set にしたい
エイリアスを削除
エイリアスを削除すると…
Error
The program code is from Fig. 2. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)
20
Node left;Node right;
Node left;Node right;
node2 node3
node1
Node left;Node right;
(補足 )順序付けアノテーション |this.a<a|
J3: Detecting Deadlock in Programs with Data-Centric Synchronization
left right
n
n n
親→子の順にアクセスすることを保証できる
|this.n<n|子ノードの
atomic set は自分より後にロックする
子ノードのatomic set は自分より後にロックする
|this.n<n|
|this.n<n|
|this.n<n|
Ok
The program code is from Fig. 2. of (D. Marino, et al., Detecting Deadlock in Programs with Data-Centric Synchronization, In Proc. of ICSE '13, pp. 322-331)