17
Copyright © 2012 NTT DATA Corporation 担担 担担 担担 NTT 担担担ICSE2012 担担担Recovering Links between an API and Its Learning Resources

【ICSE2012 勉強会 】 Recovering Links between an API and Its Learning Resources

  • Upload
    arama

  • View
    16

  • Download
    0

Embed Size (px)

DESCRIPTION

【ICSE2012 勉強会 】 Recovering Links between an API and Its Learning Resources. 担当 : 岩崎 慎司( NTT データ). 背景・問題点 / 目的. 背景・問題点 フレームワークやライブラリの再利用には、提供されている学習資料 ( ドキュメント、 ML etc ) を利用し API を理解する必要がある API と学習資料のリンクを維持するのは難しい 学習資料の情報は構造化されておらず曖昧性を含んでおり、自動でリンクを復元するのは 難しい 目的 - PowerPoint PPT Presentation

Citation preview

Page 1: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

Copyright © 2012 NTT DATA Corporation

担当 : 岩崎 慎司( NTT データ)

【 ICSE2012 勉強会】Recovering Links between an API and Its Learning Resources

Page 2: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

2Copyright © 2012NTT DATA Corporation

背景・問題点 / 目的

背景・問題点 フレームワークやライブラリの再利用には、提供

されている学習資料 ( ドキュメント、 ML   etc)を利用し API を理解する必要がある

API と学習資料のリンクを維持するのは難しい 学習資料の情報は構造化されておらず曖昧性を含

んでおり、自動でリンクを復元するのは難しい目的

提案手法により、精度の高い学習資料と API 間のリンクの復元を行う

スライド中の図表は論文の図表を引用

Page 3: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

3Copyright © 2012NTT DATA Corporation

アプローチ

提案したメタモデルを利用し、学習資料とソースコードのリンク付けを行う1. ドキュメント、 ML 、ソースコードを解析し、提案

モデルの要素を生成する2. ドキュメントと ML の CodeLikeTerm とソースコー

ドの CodeElement をリンク ( 精度をあげるためリンクのフィルタリングを実施 )

ソースコード

ドキュメント、ML

org.apache.http.entity.EntityTemplateorg.apache.http.entity.ContentProducer

ContentProducerEntityTemplateCrednetials

CodeElement

CodeLikeTerm

Page 4: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

4Copyright © 2012NTT DATA Corporation

評価内容・評価方法

評価内容 リンクの正確さ (CodeLikeTerm と

CodeElement のリンクに誤りが存在しないか )

フィルタの効果 ( 不要なリンクをどれだけフィルタできるか )

評価方法 4 種類のオープンソースのシステム (JodaTime 、

HttpComponents 、 Hibernate 、 XStream) を対象に実施

手動でリンク付けした結果と提案手法を実装したツール (RecoDoc) の結果を比較し、手動でリンク付けした結果にどれだけ提案手法が近いかで評価

Page 5: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

5Copyright © 2012NTT DATA Corporation

評価結果

評価結果 リンクの正確さ

4 つのシステムで平均 96% の精度 フィルタの効果

各 CodeLikeTerm に存在した平均 16.8 個のCodeElement へのリンク候補が、フィルターにより0.7 個に削減

Page 6: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

Copyright © 2012 NTT DATA Corporation

2012/8/30

( 株 ) NTTデータ

Generative Range Fixes for Software Configuration

Page 7: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

7Copyright © 2012 NTT DATA Corporation

目的

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

Page 8: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

8Copyright © 2012 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]

Page 9: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

Copyright © 2012 NTT DATA Corporation

Anh Tuan Nguyen, et al.

担当 : 岡田 譲二 ( NTT データ)

Graph-Based Pattern-Oriented, Context-Sensitive Source Code Completion

Page 10: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

10

Copyright © 2011 NTT DATA Corporation

目的と主要な貢献

■ 目的• API の利用方法についてコードの文脈を考慮して最適なコード補完を

行う

■ 主要な貢献1. コードの文脈に即した API 利用パターンを検索・順位付するアルゴ

リズム2. グラフに基づくコード補完のアルゴリズム3. 編集途中のコードに対しても文脈に即したコードを補完するツール

( GraPacc )4. GraPacc の正確性・有益性を示す実証的な評価方法

1 Display display = new Display();2 Shell shell = new Shell(display);3 ...4 Button button = new Button(shell,

SWT.PUSH);5 button._

1 Button button = new Button(shell, SWT.PUSH);

2 FormData bData = new FormData();3 button.setLayout(bData);

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();

API 利用パターン①

API 利用パターン②

5 行目にカーソルがある時には、①ではなく②の API 利用パターンでコード補完して欲しい

編集途中のコード

Page 11: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

11

Copyright © 2011 NTT DATA Corporation

アプローチ

1. 編集途中のコードと、 API 利用パターンをグラフベースのモデル( Groum[1] )に変換

編集途中のコードは PPA[2] を利用して部分的な AST を作り、 Groum に変換

2. 変換した API 利用パターンの Groum と、編集途中のコードの Groumの各ノードに、カーソルからの距離や、関連性の多さなどによって重み付ける

3. 重み付けられたノードの Tf-Idf を類似度として、 API 利用パターンを順位付ける

[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

API 利用パターン①の Groum

編集途中のコードの Groum

API 利用パターン②の Groum

類似度: 3 類似度:  7<

1 Display display = new Display();2 Shell shell = new Shell(display);3 ...4 Button button = new Button(shell,

SWT.PUSH);5 button._

編集途中のコード

1.Groum に変換

2. 重み付け

3.Tf-Idf で最終的な 類似度を計算

Page 12: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

12

Copyright © 2011 NTT DATA Corporation

評価方法・結果

■ 評価方法• 4 プロジェクトから Java Utility library の API 利用パターンを抽出• 他の 24 プロジェクトに GraPacc を適用して評価• テストデータは上記のプロジェクトのソースを途中で分割して、前半を編集途中のコード、後半を正解とした

■ 評価結果• 適合率: 84.6% 、再現率: 71.0% 、 F値: 77.0%• パターンを検索し、コード補完するまで 0.7秒• 不正確な結果を出す理由としては、 1 つの API が 2 つのメソッドに分

かれているとコード補完が冗長に行われることなどを挙げている

編集途中のコード

正解

テストデータで利用したプロジェクトのソースの例

Page 13: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

Copyright © 2012 NTT DATA Corporation

担当 : 津野 裕介 ( NTT データ)

【 ICSE2012 勉強会】Session B : Automatic Input Rectification

Page 14: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

14

Copyright © 2012NTT DATA Corporation

背景・問題点 / 目的

背景・問題点 ソフトウェアのエラーやセキュリティの脆弱性は、

しばしば非定型入力によって発生 標準的な対応方法は、フィルタの利用 しかし、問題のない変則的な入力を排除してしま

う目的

自動的に潜在的に危険性のある入力をプログラムが正常に処理する可能性が高い典型的な入力に変換すること

スライド中の図表は論文の図表を引用

Page 15: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

15

Copyright © 2012NTT DATA Corporation

アプローチ

自動入力修正( SOAP=Sanitization Of Anomalous inPuts )の提案 入力を処理するアプリケーション向けの典型的入力について、一

組の制約を最初に学習 自動的に修正機を生成 入力が与えられる時、制約を満たせばスルー 制約を満たさない入力は修正

SOAP の 4 つのコンポーネント1. 入力パーサ:入力を構文構造木に変換2. 実行モニタ:メモリ割当てなどを行うフィールドを識別3. 学習エンジン:フィールドへの安全な入力を学習し制約を作成4. 修正機( Input Rectifer ):入力を制約を用いて修正

自動入力修正( SOAP )システムのアーキテクチャ

Page 16: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

16

Copyright © 2012NTT DATA Corporation

適用例

適用対象 オープンソース Web ブラウザ Dillo

PNG の入力において脆弱性

適用方法1. パーサが Dillo の

PNG入力に関するフィールドを特定

2. トレーニング用のPNG を入力し重要な箇所を特定

3. トレーニングの結果を受けてフィールドの上限値を推論

4. オンラインにて入力を自動修正

脆弱性を持つ Dillo のコード

Page 17: 【ICSE2012  勉強会 】 Recovering  Links between an API and Its Learning Resources

17

Copyright © 2012NTT DATA Corporation

評価方法・結果

評価方法・結果 定量評価

5 つのアプリケーションに対して、 SOAP で制約を生成悪意あるデータを投入→すべて脆弱性を無効化 問題ないデータはほぼ損失せず( TIFF で 0.5%)

アマゾン メカニカルタークを利用した人手による評価 SOAP で修正した画像、動画とオリジナルを提示 0(全く異なる )~ 3( 完全に一致)の指標でランク付け全体で 2.5 を上回る結果→修正画像はオリジナルに近い

1. Swfdec2. Dillo3. Image-

Magick4. Google

Picasa 5. VLC

5つのアプリケーション

SOAP によって修正された画像の例

オリジナル 修正