Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs

Slides:



Advertisements
Similar presentations
OWL-Sを用いたWebアプリケーションの検査と生成
Advertisements

遺伝的アルゴリズムにおける ランドスケープによる問題のクラス分類
点対応の外れ値除去の最適化によるカメラの動的校正手法の精度向上
ラベル付き区間グラフを列挙するBDDとその応用
全体ミーティング (4/25) 村田雅之.
ASE 2011 Software Model Checking
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
NTT ソフトウェアイノベーションセンタ 丹野 治門
プログラムの動作を理解するための技術として
Observable modified Condition/Decision coverage
F11: Analysis III (このセッションは論文2本です)
【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)
ネストした仮想化を用いた VMの安全な帯域外リモート管理
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Research Session 17: Formal Verification
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
Solving Shape-Analysis Problems in Languages with Destructive Updating
プログラム実行履歴を用いたトランザクションファンクション抽出手法
進捗 Javaバイトコード変換による 細粒度CPU資源管理
型付きアセンブリ言語を用いた安全なカーネル拡張
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
静的情報と動的情報を用いた プログラムスライス計算法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
決定木とランダムフォレスト 和田 俊和.
動的スライスを用いた バグ修正前後の実行系列の比較
5 テスト技術 5.1 テストとは LISのテスト 故障診断 fault diagnosis 故障解析 fault analysis
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
実行時情報に基づく OSカーネルのコンフィグ最小化
WWW上の効率的な ハブ探索法の提案と実装
Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~
Internet広域分散協調サーチロボット の研究開発
コンポーネントランク法を用いたJavaクラス分類手法の提案
通信機構合わせた最適化をおこなう並列化ンパイラ
動的データ依存関係解析を用いた Javaプログラムスライス手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
バイトコードを単位とするJavaスライスシステムの試作
サポートベクターマシンを用いた タンパク質スレッディングの ためのスコア関数の学習 情報科学科4年 81025G 蓬来祐一郎.
ソフトウェア保守のための コードクローン情報検索ツール
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
Data Clustering: A Review
情報経済システム論:第13回 担当教員 黒田敏史 2019/5/7 情報経済システム論.
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
静的情報と動的情報を用いた Javaプログラムスライス計算法
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
メソッドの同時更新履歴を用いたクラスの機能別分類法
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
クラスタリングを用いた ベイズ学習モデルを動的に更新する ソフトウェア障害検知手法
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
グラフ-ベクトル変換を用いたグラフ構造表現による一般物体認識
Presentation transcript:

Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs 担当: 吉田@南山大学 S. Anand and M.J. Harrold, “Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs”, ASE 2011, Lawrence, KS, USA.

背景 Symbolic exection DSE: Dynamic symbolic execution プログラム解析の技術 記号を入力して解釈実行し path constraints を算出 実行できないプログラム native methods や library classes の存在 DSE: Dynamic symbolic execution Concolic exection 具体的な値を用いた実行と記号実行の併用 記号実行できない箇所を補う

DSEの問題 記号実行できないプログラム 記号実行系の実現の難しさ native methods, standard library classes 副作用により具体的な実行結果と記号実行の結果に差異が生じる 手動で解析用モデルを補うことで対処 記号実行系の実現の難しさ 記号実行用インタプリタとJVMとの不親和 命令の置換え実行をするアプローチでもライブラリがうまく扱えず、精度が落ちる

Heap Cloning 目的: 提案: 解析用のモデルを追加する手間を減らしたい 既存の手法の限界を打ち破る ヒープの二重化 本来の具体的な計算に用いるヒープ 記号計算用のヒープ 副作用がある native methods を特定 native method を呼び出したあとにヒープ間に差異が生じたら副作用あり Standard library classes を使わない

実現方法 プログラムを書換える ヒープの二重化 Standard library classes を使わないようにする 直感的には、すべてのオブジェクトのラッパーを作る Standard library classes を使わないようにする S. Anand and M.J. Harrold, “Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs”, ASE 2011, Lawrence, KS, USA.

評価実験 実装: CINGER (Concolic INput GEneratoR) 実験: 対象: NanoXML, JLex, Sat4J(2 versions), BCEL, Lucene (約 12千〜57千行) テストケースを実行して path constraints を算出 ライブラリクラス内の実行で生じる制約を確認 BCEL の場合、約 90% 命令を置き換える方法で精度の向上に貢献できる モデル化すべき native method の特定 56 個中 1 個 (arraycopy in java.lang.system)

Automatic Generation of Load Tests 担当: 蜂巣@南山大学 P. Zhang, S. Elbaum, and M. B. Dwyer, “Automatic Generation of Load Tests”, ASE 2011, Lawrence, KS, USA.

背景 Load Test: 極端な負荷の下で,システムの性能が許容できるかどうか検証する 既存のLoad Test生成方法の限界 特定の値に依存 入力サイズを増やすとコスト増 入力サイズを増やしても同じ計算ばかり増える 応答時間やスループット以外の評価基準を扱えない メモリや消費電力

提案方法 単に入力サイズを増やすのではなく, 注意深くデータを選ぶ プログラムの振舞いの多様性(diversity)をカバー 複数の評価基準に対応 記号実行を用いてプログラムパスを探索してテスト生成

direct and incremental SE テスタのすること  (1) 記号として扱う変数を指定  (2) 生成するテスト数を指定    (testSuitSize)  (3) 基準を選択(measure)    応答時間,消費メモリ  さらに,1フェイズの分岐の数を  指定 (lookAhead) 共通のノードの距離が lookAhead/testSuitSize以上 testSuitSize=2, lookAhead=6

評価 応答時間 (左の図) JZlibを使って比較(ランダムデータ) 2倍の差 記号実行の最大分岐数を100に すれば100MBまで生成可能 2. 消費メモリ SAT4Jを使って比較(ベンチマーク)  1.2倍から3.7倍の増加 3. 複数(応答時間と消費メモリ) (左の表)  TinySQLを使って比較 応答時間も消費メモリも約2倍増加  テストケースの多様性も十分

Symbolic Search-Based Testing 担当: 吉田@南山大学 A. Baars, M. Harman and et al. , “Symbolic Search-Based Testing”, ASE 2011, Lawrence, KS, USA.

背景と提案 Search Based Software Testing Symbolic Search-Based Testing テストデータの自動生成 生成時の基準: Branch coverage テストデータの探索アルゴリズムは研究されているが、fitness function は古いまま Symbolic Search-Based Testing Fitness function の改善 Partial symbolic execution による静的解析 精度に関する尺度の導入

Symbolically Enhanced Fitness Function 目的の経路からそれた分岐で評価 従来: 2 つのパラメタの和 branch distance (分岐条件と距離) 例: x > 0 ⇒ |x – 0| + K (K is a failure constant. K=1) approach level (目標分岐条件までの距離) 提案: 目的の分岐までの各経路で2つのパラメタの和を求め、その最小値 path distance (branch distance の総和) approximation level (ループの存在による記号実行の不正確さ)

Approximation Level 分岐 2 から 8 まで ループの存在 s, i の値は正しく計算できない Path condition: < n > 0 ∧ 0 < n ∧ a = n > approximation level: 3 1 ≧ n, s = 10, b = s

評価実験 前提: RQ1: branch coverage に負の影響がない? RQ2: 効率が向上する? 探索方法: [local search] Alternating Variable Method (AVM) [global search] Generic Algorithm (GA) 対象: 複数のC言語のプログラム, 分岐数 338 RQ1: branch coverage に負の影響がない? 結果: 同じか coverage を上げる 探索の成功率も高める傾向 ただし、オーバーフロー等の検査があると成功率が下がる RQ2: 効率が向上する? AVM: 最大で約 90% の評価回数を削減 GA:最大で約 30% の評価回数を削減