エイリアス関係を考慮した Javaプログラム用静的スライシングツール

Slides:



Advertisements
Similar presentations
シーケンス図の生成のための実行履歴圧縮手法
Advertisements

XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
JPAを利用した RESTful Webサービスの開発
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
プログラムの動作を理解するための技術として
F11: Analysis III (このセッションは論文2本です)
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
大阪大学 大学院基礎工学研究科 情報数理系専攻 ソフトウェア科学分野 高田 智規
プログラム実行履歴を用いたトランザクションファンクション抽出手法
静的情報と動的情報を用いた プログラムスライス計算法
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
プログラム依存グラフを利用した 情報漏洩解析手法の提案と実現
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向プログラムにおける エイリアス解析について
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
プログラム解析情報のXMLデータベース化 ー 提案と実現 ー
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
利用実績に基づくソフトウェア部品検索システムSPARS-J
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オブジェクト指向プログラムにおける エイリアス解析・視覚化ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
アプリケーション依存の先読みが可能なO/Rマッピングツール
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
ソフトウェア保守のための コードクローン情報検索ツール
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
静的情報と動的情報を用いた Javaプログラムスライス計算法
同期処理のモジュール化を 可能にする アスペクト指向言語
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
アスペクト指向プログラミングの 動的プログラムスライスへの応用
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
統合開発環境のための プログラミング言語拡張 フレームワーク
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
C#プログラミング実習 第1回.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

エイリアス関係を考慮した Javaプログラム用静的スライシングツール 井上研究室 山中祐介 y-yamank@ics.es.osaka-u.ac.jp

背景 ソフトウェアの大規模化・複雑化 プログラム言語の高級化 プログラムの理解や保守が困難なものになっている プログラム解析 うっとこの発表 2019/6/10 背景 ソフトウェアの大規模化・複雑化 プログラム言語の高級化 プログラムの理解や保守が困難なものになっている プログラム解析 プログラムスライス エイリアス解析 ‥ 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 壱

プログラムスライス プログラムにおける、ある文のある変数(スライス基準)の値に影響を与える文の集合 特定の機能やエラーに関係ある部分の抽出が可能 1: a = 3; 2: if(a > 0) 3: b = a; 4: else 5: c = a; 6: a = b + 2; スライス基準<6, b>に 対するスライス 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 弐

スライスの計算過程 依存関係解析 プログラム依存グラフ(PDG)の 構築 PDG探索 1: a = 3; 2: if(a > 0) データ依存関係 制御依存関係 プログラム依存グラフ(PDG)の 構築 節点:各プログラム文 有向辺:文間の依存関係 PDG探索 スライス基準に対応する節点から 有向辺を逆向きに探索 1: a = 3; 2: if(a > 0) 3: b = a; 4: else 5: c = a; 6: a = b + 2; a a b 1 2 3 5 6 1 2 3 5 6 1 2 3 5 6 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 参

エイリアス関係 同じメモリ空間を指す可能性がある式間の同値関係 エイリアス関係が発生する箇所 エイリアス集合 引数の参照渡し 参照変数 ポインタを介した間接参照 エイリアス集合 エイリアス関係にある式の集合 1: a = new Integer(1); 2: b = new Integer(2); 3: c = b; 4: System.out.println(c); 5: c = a; 6: System.out.println(c); 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 四

エイリアス解析 静的解析によりエイリアス集合を求めること オブジェクト指向言語に対して静的解析を行う際に有効 オブジェクト指向言語には動的束縛や多態などの実行時決定要素が多い 実行時決定要素の特定がある程度可能 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 伍

既存のスライス手法の問題点 既存のオブジェクト指向言語を対象とした依存関係解析手法では、エイリアス関係の考慮について言及されていない a b 1: class A { 2: int n; 3: } 1: A a = new A(); 2: A b; 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); a.nとb.nは同じメモリ領域にあるので、4行目から5行目に メンバ変数nに関するデータ依存関係があるはず 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 六

研究の目的 Javaを対象とするエイリアス関係を考慮した静的スライス計算手法の提案、実装 既存の手法より正確なデータ依存関係の抽出が期待できる オブジェクト指向言語特有の実行時決定要素に対する解析が容易になる 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 七

提案手法の方針 エイリアス関係を考慮したデータ依存関係の抽出を行うため3種類の表を用意 前提としてエイリアス解析が終了している 文番号:変数vが最後に定義された文の番号 エイリアスID:エイリアス集合を区別するためのID 前提としてエイリアス解析が終了している 必要に応じてエイリアス集合の情報の取得が可能である 変数表 文番号、エイリアスID エイリアス表 エイリアスID メンバ変数表 メンバ変数、変数表 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 八

適用例(1行目) 同一のエイリアス集合に 属しているためIDは同じ aは参照変数であるため エイリアス集合を計算し エイリアス表を用意 1: class A { 2: int n; 3: } 式 ID 1:a 01 1:new 3:a 3:b 4:a 5:b IDに対するメンバ変数表を用意 メンバ変数はn 変数表にIDを記入 1: A a = new A(); 2: A b = new A(); 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); 変数表 メンバ変数表 変数 文番号 ID a 1 ID メンバ変数 文番号 01 n 1 01 aの変数表を用意、文番号は1 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 九

適用例(2行目) 新しいエイリアス集合 IDは02 bは参照変数であるためエイリアス 集合を計算しエイリアス表を用意 1: class A { 2: int n; 3: } bは参照変数であるためエイリアス 集合を計算しエイリアス表を用意 式 ID 1:a 01 1:new 3:a 3:b 4:a 5:b 式 ID 2:b 02 2:new 1: A a = new A(); 2: A b = new A(); 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); 変数表 メンバ変数表 IDに02を記入 IDに対するメンバ変数表を用意 変数 文番号 ID a 1 01 b 2 02 変数 文番号 ID a 1 01 b 2 変数 文番号 ID a 1 01 ID メンバ変数 文番号 01 n 1 02 2 ID メンバ変数 文番号 01 n 1 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾

適用例(3行目) 3:bはエイリアス表に含まれている 同一のIDからa,bは 変数bは定義されているため ため変数表のIDを01に変更 1: class A { 2: int n; 3: } 式 ID 1:a 01 1:new 3:a 3:b 4:a 5:b 式 ID 2:b 02 2:new 1: A a = new A(); 2: A b = new A(); 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); a 変数aは参照されているため 1~3へのデータ依存関係を抽出 変数bは定義されているため 文番号を3に変更 3:bはエイリアス表に含まれている ため変数表のIDを01に変更 同一のIDからa,bは 同じメモリ領域を参照している ことがわかる 変数表 メンバ変数表 変数 文番号 ID a 1 01 b 3 変数 文番号 ID a 1 01 b 2 02 変数 文番号 ID a 1 01 b 3 02 ID メンバ変数 文番号 01 n 1 02 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾壱

適用例(4行目) aとnは参照されているため 1~4へのデータ依存関係を抽出 nは定義されているため文番号を4に変更 エイリアス表 1: class A { 2: int n; 3: } 式 ID 1:a 01 1:new 3:a 3:b 4:a 5:b 式 ID 2:b 02 2:new 1: A a = new A(); 2: A b = new A(); 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); a a,n aとnは参照されているため 1~4へのデータ依存関係を抽出 nは定義されているため文番号を4に変更 変数表 メンバ変数表 変数 文番号 ID a 1 01 b 3 ID メンバ変数 文番号 01 n 4 02 2 ID メンバ変数 文番号 01 n 1 02 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾弐

適用例(5行目) b,nは参照されているため3~5,4~5の データ依存関係を抽出 エイリアス表 1: class A { 2: int n; 3: } 式 ID 1:a 01 1:new 3:a 3:b 4:a 5:b 式 ID 2:b 02 2:new 1: A a = new A(); 2: A b = new A(); 3: b = a; 4: a.n += 1; 5: System.out.println(b.n); a a,n b n b,nは参照されているため3~5,4~5の データ依存関係を抽出 変数表 メンバ変数表 変数 文番号 ID a 1 01 b 3 ID メンバ変数 文番号 01 n 4 02 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾参

各種情報はフレームワークの既存ライブラリから取得 スライシングツールの実現 我々の研究グループで開発しているJavaプログラム解析フレームワークにスライス計算ライブラリを追加 スライス計算ライブラリ PDG構築部 入力:Javaプログラムの意味解析木とエイリアス集合情報 出力:プログラム依存グラフ スライス計算部 ユーザ要求に応じたスライス計算 各種情報はフレームワークの既存ライブラリから取得 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾四

Javaプログラム解析フレームワーク エイリアス解析 ライブラリ エイリアス フローグラフ XML データベース プログラム依存グラフ スライス計算 ライブラリ ソースコード Java XML-意味解析木 変換ライブラリ 抽象構文木 構文解析 ライブラリ GUI ユーザ 意味解析木 意味解析 ライブラリ 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾伍

評価実験 解析対象プログラム 実験環境 P1:サンプルプログラム(2クラス、24行) P2:簡易ドローツール(3クラス、323行) CPU:Pentium4 1.5Ghz メモリ:512MB OS:FreeBSD 5.0-CURRENT 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾六

評価(解析コスト) コスト削減のためには、どのライブラリを PDG構築の対象に含めるか選択が必要 PDG構築までのコスト うっとこの発表 2019/6/10 評価(解析コスト) PDG構築までのコスト 解析対象が参照しているJDKクラスライブラリを含む P1の総クラス数:272、P2の総クラス数:876クラス P2はP1と比べて遥かにコストが大きい 解析時間(秒) メモリ使用量(MB) プログラム 総時間 P1 17.2 P2 67.8 プログラム 合計 P1 149 P2 457 コスト削減のためには、どのライブラリを PDG構築の対象に含めるか選択が必要 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾七

エイリアスを無視した場合のスライスは正確な 評価(スライスサイズ) 解析対象プログラムのみ(JDKクラスライブラリは含まない) エイリアスを考慮した方がスライスサイズが大きい 増加した文はエイリアス関係にある参照変数がもたらす依存関係 スライスサイズ(行) プログラム エイリアス考慮 エイリアス無視 P1 8 6 P2 42 30 エイリアスを無視した場合のスライスは正確な ものといえないため考慮することが重要 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾八

まとめと今後の課題 オブジェクト指向言語を対象とするエイリアス関係を考慮した静的スライス計算手法の提案、実装 今後の課題 より正確な依存関係の抽出が可能 Javaプログラム解析フレームワークへの追加実装でスライシングツールを実現 今後の課題 スレッド、例外を含めた複雑な制御構造の解析への対応 大規模システムに対する適用実験 PDG構築対象の選択を可能にすることでのコスト削減 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾九

終劇