【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)

Slides:



Advertisements
Similar presentations
High-Impact Defects: A Study of Breakage and Surprise Defects
Advertisements

Riding the Design Wave II
TF-IDF法とLSHアルゴリズムを用いた 関数単位のコードクローン検出法
Brittany Jonson†, Yoonki Song†, Emerson Murphy-Hill†, Robert Bowdidge‡
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
先端論文紹介ゼミ Role-based Context-specific Multiagent Q-learning
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Research Session 17: Formal Verification
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
Oracle APEX Forms変換の概要
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
ギャップを含むコードクローンの フィルタリング手法の提案
コーディングパターンと キーワードを用いて生成したコードスニペットの推薦
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
クローンセットに対する主要編集者の分析法の提案と調査
実行時情報に基づく OSカーネルのコンフィグ最小化
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
Javaプログラムの変更を支援する 影響波及解析システム
情報検索技術に基づくベクトル表現と 深層学習を用いたコード片の類似性判定法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ハッシュ値比較による Javaバイトコードに含まれる ライブラリの検出手法
UMLモデルを対象とした リファクタリング候補検出の試み
プログラム実行履歴を用いたコードクローン検出手法
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
複数特徴量の重み付け統合による一般物体認識
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
dcNavi: デバッグ方法をアドバイス する関心事指向リポジトリナビゲータ
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
SIFTとGraph Cutsを用いた 物体認識及びセグメンテーション
コーディングパターンの あいまい検索の提案と実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
dcNavi:デバッグ支援のための グラフベース推薦システム
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
統合開発環境のための プログラミング言語拡張 フレームワーク
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Don’t Touch My Code! Examining the Effects of Ownership on Software Quality C. Bird (マイクロソフト・リサーチ) et al. 担当者:吉田(NAIST)
プログラム理解のための 付加注釈 DocumentTag の提案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Detecting Software Modularity Violations
Presentation transcript:

【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)

背景・問題点 / 目的 背景・問題点 フレームワークやライブラリの再利用には、提供されている学習資料 (ドキュメント、ML etc)を利用しAPIを理解する必要がある APIと学習資料のリンクを維持するのは難しい 学習資料の情報は構造化されておらず曖昧性を含んでおり、自動でリンクを復元するのは難しい 目的 提案手法により、精度の高い学習資料とAPI間のリンクの復元を行う スライド中の図表は論文の図表を引用

提案したメタモデルを利用し、学習資料とソースコードのリンク付けを行う アプローチ 提案したメタモデルを利用し、学習資料とソースコードのリンク付けを行う ドキュメント、ML、ソースコードを解析し、提案モデルの要素を生成する ドキュメントとMLのCodeLikeTermとソースコードのCodeElementをリンク(精度をあげるためリンクのフィルタリングを実施) CodeElement org.apache.http.entity.EntityTemplate org.apache.http.entity.ContentProducer CodeLikeTerm ソースコード ContentProducer EntityTemplate Crednetials ドキュメント、ML

評価内容 評価方法 リンクの正確さ(CodeLikeTermとCodeElementのリンクに誤りが存在しないか) 評価内容・評価方法 評価内容 リンクの正確さ(CodeLikeTermとCodeElementのリンクに誤りが存在しないか) フィルタの効果(不要なリンクをどれだけフィルタできるか) 評価方法 4種類のオープンソースのシステム(JodaTime、HttpComponents、Hibernate、XStream)を対象に実施 手動でリンク付けした結果と提案手法を実装したツール(RecoDoc)の結果を比較し、手動でリンク付けした結果にどれだけ提案手法が近いかで評価

評価結果 フィルタの効果 リンクの正確さ 評価結果 4つのシステムで平均96%の精度 各CodeLikeTermに存在した平均16.8個のCodeElementへのリンク候補が、フィルターにより0.7個に削減

Generative Range Fixes for Software Configuration 2012/8/30 (株) NTTデータ Copyright © 2011 NTT DATA Corporation

目的 多くかつ複雑な設定項目を持つソフトウェアが対象 妥当でない設定に対し、ユーザが修正を適切にできるような仕組みを提供するもの

主要貢献、手法、評価 主要貢献: Range Fixという考え方 どのような修正候補があるかを幅を持ってユーザに提示する 評価 : RQを5つ設定し、評価を実施 評価がしっかりしている印象 どのような複雑な設定に対して修正候補を提示できるか?ユーザにとって妥当な候補が提示されているか? 高性能か?既存手法より良いか?提示した3つの戦略のどれが効果的か? [Use_Pre_Allocation := false] • [Pre_Allocation_Size: Pre_Allocation_Size <=8] • [Buffer_Size: Buffer_Size >= 5] • [Object_Size: Object_Size <= 409.6]

Graph-Based Pattern-Oriented, Context-Sensitive Source Code Completion Anh Tuan Nguyen, et al. 担当 : 岡田 譲二 (NTTデータ)

APIの利用方法についてコードの文脈を考慮して最適なコード補完を行う 目的と主要な貢献 ■目的 APIの利用方法についてコードの文脈を考慮して最適なコード補完を行う ■主要な貢献 コードの文脈に即したAPI利用パターンを検索・順位付するアルゴリズム グラフに基づくコード補完のアルゴリズム 編集途中のコードに対しても文脈に即したコードを補完するツール(GraPacc) GraPaccの正確性・有益性を示す実証的な評価方法 1 Display display = new Display(); 2 Shell shell = new Shell(display); 3 ... 4 Button button = new Button(shell, SWT.PUSH); 5 button._ 1 Display display = new Display(); 2 Shell shell = new Shell(display); 3 ... 4 shell.pack(); 5 shell.open(); 6 while (!shell.isDiposed()){ 7 if (!display.readAndDiposed()) 8 display.sleep(); 9 } 10 display.disposed(); 編集途中のコード 5行目にカーソルがある時には、 ①ではなく②のAPI利用パターンでコード補完して欲しい API利用パターン① 1 Button button = new Button(shell, SWT.PUSH); 2 FormData bData = new FormData(); 3 button.setLayout(bData); API利用パターン②

< アプローチ 編集途中のコードと、API利用パターンをグラフベースのモデル(Groum[1])に変換 編集途中のコードはPPA[2]を利用して部分的なASTを作り、Groumに変換 変換したAPI利用パターンのGroumと、編集途中のコードのGroumの各ノードに、カーソルからの距離や、関連性の多さなどによって重み付ける 重み付けられたノードのTf-Idfを類似度として、API利用パターンを順位付ける 1 Display display = new Display(); 2 Shell shell = new Shell(display); 3 ... 4 Button button = new Button(shell, SWT.PUSH); 5 button._ API利用パターン①のGroum 3.Tf-Idfで最終的な 類似度を計算 編集途中のコード 1.Groumに変換 API利用パターン②のGroum 編集途中のコードのGroum 2.重み付け 類似度: 3 < 類似度: 7 [1] T.T. Nguyen, et al, "Graph-based Mining of Multiple Object Usage Patterns", in ESEC/FSE '09. ACM Press, 2009. [2] B. Dagenais and L. Hendren, "Enabling static analysis for patial java programs", in OOPSLA '08. ACM, 2008, pp.313-328

テストデータで利用したプロジェクトのソースの例 評価方法・結果 ■評価方法 4プロジェクトからJava Utility libraryのAPI利用パターンを抽出 他の24プロジェクトにGraPaccを適用して評価 テストデータは上記のプロジェクトのソースを途中で分割して、 前半を編集途中のコード、後半を正解とした ■評価結果 適合率:84.6%、再現率:71.0%、F値:77.0% パターンを検索し、コード補完するまで0.7秒 不正確な結果を出す理由としては、1つのAPIが2つのメソッドに分かれているとコード補完が冗長に行われることなどを挙げている 編集途中のコード 正解 テストデータで利用したプロジェクトのソースの例

【ICSE2012 勉強会】 Session B : Automatic Input Rectification 担当 : 津野 裕介 (NTTデータ)

背景・問題点 目的 ソフトウェアのエラーやセキュリティの脆弱性は、しばしば非定型入力によって発生 標準的な対応方法は、フィルタの利用 背景・問題点 / 目的 背景・問題点 ソフトウェアのエラーやセキュリティの脆弱性は、しばしば非定型入力によって発生 標準的な対応方法は、フィルタの利用 しかし、問題のない変則的な入力を排除してしまう 目的 自動的に潜在的に危険性のある入力をプログラムが正常に処理する可能性が高い典型的な入力に変換すること スライド中の図表は論文の図表を引用

自動入力修正 (SOAP=Sanitization Of Anomalous inPuts)の提案 アプローチ 自動入力修正 (SOAP=Sanitization Of Anomalous inPuts)の提案 入力を処理するアプリケーション向けの典型的入力について、一組の制約を最初に学習 自動的に修正機を生成 入力が与えられる時、制約を満たせばスルー 制約を満たさない入力は修正 SOAPの4つのコンポーネント 入力パーサ:入力を構文構造木に変換 実行モニタ:メモリ割当てなどを行うフィールドを識別 学習エンジン:フィールドへの安全な入力を学習し制約を作成 修正機(Input Rectifer):入力を制約を用いて修正 自動入力修正(SOAP)システムのアーキテクチャ

適用対象 適用方法 適用例 オープンソースWebブラウザ Dillo パーサがDilloの PNG入力に関する フィールドを特定 トレーニングの結果を 受けてフィールドの 上限値を推論 オンラインにて入力を 自動修正 脆弱性を持つDillo のコード

評価方法・結果 定量評価 アマゾン メカニカルタークを利用した人手による評価 評価方法・結果 5つのアプリケーションに対して、SOAPで制約を生成 悪意あるデータを投入→すべて脆弱性を無効化 問題ないデータはほぼ損失せず(TIFF で0.5%) アマゾン メカニカルタークを利用した人手による評価 SOAPで修正した画像、動画とオリジナルを提示 0(全く異なる)~3(完全に一致)の指標でランク付け 全体で2.5を上回る結果→修正画像はオリジナルに近い 5つのアプリケーション SOAPによって修正された画像の例 Swfdec Google Picasa Dillo Image- Magick VLC オリジナル 修正