j: code analysis

20
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 J: Code Analysis 情情情情情情 情情情情情情情情情情情 情情情情情情情情情情 WG ICSE’13 情情情

Upload: abel-abbott

Post on 30-Dec-2015

45 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 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 DataCentric Synchronization Daniel Marino, Christian Hammer, Julian Dolby, Mandana Vaziri, Frank Tip, Jan Vitek

J: Code Analysis

情報処理学会 ソフトウェア工学研究会 国際的研究活動活性化 WG ICSE’13 勉強会

Page 2: J:   Code  Analysis

ICSE’13 勉強会 (2013 年 7 月 9 日 )担当者: 野田 訓広 @ 阿草研 OB

In Proc. of ICSE’13, pp.302--311.

Page 3: J:   Code  Analysis

3

Outline

問題

• 全入力空間に対する Regression Verification(RV) は時間・メモリが非常に多く必要で非実用的

提案

• 入力空間を分割①し,段階的に検証していく手法② (Partition-Based RV) を提案・実装③ (on JSlice)

• テストケース生成の代替としても利用可能④

結果

• 既存手法よりも早くより多くの Regression Errorを検出

• 長期間報告されなかったバグを即座に検出

J1: Partition-Based Regression Verification

① ~④: Main Contributions

Page 4: J:   Code  Analysis

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)出力への影響が同じかを判定し求める.

Page 5: J:   Code  Analysis

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

Page 6: J:   Code  Analysis

6

所感 Pros

実験結果が良い.関連研究と比較した際の有用性がよく分かる.

実際に検出されづらいバグを検出できている(Apache CLI の例 ) 点が良い.

いかに良い例を見つけてくるかが重要? 手法考案と例を見つけるのはどちらが先?

Cons Scalability についての議論は保留されている.

結局実用的なのか? どのような Semantic Difference/Software

Regression が見つかるのかよく分からない

J1: Partition-Based Regression Verification

Page 7: J:   Code  Analysis

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 日 )担当者: 渥美 紀寿 ( 名古屋大学 )

Page 8: J:   Code  Analysis

研究の目的と主要な貢献目的 ソフトウェアの設定ミスによる不具合の原因を特定

特徴 テストオラクルが不要 クラッシュしている場合もしていない場合も自動的に

特定可能

主要な貢献 Java のソフトに対する診断ツールを実装 (http://config-errors.googlecode.com) 5 つのソフトウェアに対する 14 の設定エラーに対し

て評価したところ,根本の原因を上位に示すことができた

J2: Automated Diagnosis of Software Configuration Errors 8

Page 9: J:   Code  Analysis

手法の概要

プログラム

Configurationオプション

伝播解析true と評価される回数を計測するためのコード埋め込み

実行エラー検出

影響を受ける条件式

実行プロファイ

エラーレポート

プロファイルDB ( 成功実行 )

計測プログラム

入力 Configuration( エラー実行 )

Configuration オプションの値の設定からスライシング

成功実行におけるプロファイルをあらかじめ構築

成功実行と大きく異なる部分を検出

原因となる Configurationオプションを Ranking

J2: Automated Diagnosis of Software Configuration Errors 9

Page 10: J:   Code  Analysis

評価方法 対象

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

Page 11: J:   Code  Analysis

評価結果

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

Page 12: J:   Code  Analysis

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.

Page 13: J:   Code  Analysis

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

Page 14: J:   Code  Analysis

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)

Page 15: J:   Code  Analysis

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)

Page 16: J:   Code  Analysis

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)

Page 17: J:   Code  Analysis

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

Page 18: J:   Code  Analysis

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)

Page 19: J:   Code  Analysis

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)

Page 20: J:   Code  Analysis

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)