170 likes | 252 Views
【ICSE2012 勉強会 】 Recovering Links between an API and Its Learning Resources. 担当 : 岩崎 慎司( NTT データ). 背景・問題点 / 目的. 背景・問題点 フレームワークやライブラリの再利用には、提供されている学習資料 ( ドキュメント、 ML etc ) を利用し API を理解する必要がある API と学習資料のリンクを維持するのは難しい 学習資料の情報は構造化されておらず曖昧性を含んでおり、自動でリンクを復元するのは 難しい 目的
E N D
【ICSE2012 勉強会】Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)
背景・問題点/ 目的 • 背景・問題点 • フレームワークやライブラリの再利用には、提供されている学習資料 (ドキュメント、MLetc)を利用し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のリンクに誤りが存在しないか) • フィルタの効果(不要なリンクをどれだけフィルタできるか) • 評価方法 • 4種類のオープンソースのシステム(JodaTime、HttpComponents、Hibernate、XStream)を対象に実施 • 手動でリンク付けした結果と提案手法を実装したツール(RecoDoc)の結果を比較し、手動でリンク付けした結果にどれだけ提案手法が近いかで評価
評価結果 • 評価結果 • リンクの正確さ • 4つのシステムで平均96%の精度 • フィルタの効果 • 各CodeLikeTermに存在した平均16.8個のCodeElementへのリンク候補が、フィルターにより0.7個に削減
Generative Range Fixes for Software Configuration 2012/8/30 (株) NTTデータ
目的 • 多くかつ複雑な設定項目を持つソフトウェアが対象 • 妥当でない設定に対し、ユーザが修正を適切にできるような仕組みを提供するもの
主要貢献、手法、評価 • 主要貢献: RangeFixという考え方 • どのような修正候補があるかを幅を持ってユーザに提示する • 評価 : 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利用パターンを検索・順位付するアルゴリズム グラフに基づくコード補完のアルゴリズム 編集途中のコードに対しても文脈に即したコードを補完するツール(GraPacc) GraPaccの正確性・有益性を示す実証的な評価方法 編集途中のコード 5行目にカーソルがある時には、①ではなく②のAPI利用パターンでコード補完して欲しい API利用パターン① API利用パターン②
アプローチ 編集途中のコードと、API利用パターンをグラフベースのモデル(Groum[1])に変換 • 編集途中のコードはPPA[2]を利用して部分的なASTを作り、Groumに変換 変換したAPI利用パターンのGroumと、編集途中のコードのGroumの各ノードに、カーソルからの距離や、関連性の多さなどによって重み付ける 重み付けられたノードのTf-Idfを類似度として、API利用パターンを順位付ける 3.Tf-Idfで最終的な 類似度を計算 編集途中のコード 1.Groumに変換 2.重み付け 編集途中のコードのGroum API利用パターン②のGroum API利用パターン①のGroum < 類似度: 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の4つのコンポーネント • 入力パーサ:入力を構文構造木に変換 • 実行モニタ:メモリ割当てなどを行うフィールドを識別 • 学習エンジン:フィールドへの安全な入力を学習し制約を作成 • 修正機(Input Rectifer):入力を制約を用いて修正 自動入力修正(SOAP)システムのアーキテクチャ
適用例 • 適用対象 • オープンソースWebブラウザ Dillo • PNGの入力において脆弱性 • 適用方法 • パーサがDilloのPNG入力に関するフィールドを特定 • トレーニング用のPNGを入力し重要な箇所を特定 • トレーニングの結果を受けてフィールドの上限値を推論 • オンラインにて入力を自動修正 脆弱性を持つDilloのコード
評価方法・結果 • 評価方法・結果 • 定量評価 • 5つのアプリケーションに対して、SOAPで制約を生成 • 悪意あるデータを投入→すべて脆弱性を無効化 • 問題ないデータはほぼ損失せず(TIFF で0.5%) • アマゾン メカニカルタークを利用した人手による評価 • SOAPで修正した画像、動画とオリジナルを提示 • 0(全く異なる)~3(完全に一致)の指標でランク付け • 全体で2.5を上回る結果→修正画像はオリジナルに近い SOAPによって修正された画像の例 5つのアプリケーション Swfdec Dillo Image-Magick Google Picasa VLC オリジナル 修正