Transcript b - qwik.jp
【ICSE2012 勉強会】
Recovering Links between an API and Its Learning
Resources
担当 : 岩崎 慎司(NTTデータ)
Copyright © 2012 NTT DATA Corporation
背景・問題点 / 目的
背景・問題点
フレームワークやライブラリの再利用には、提供
されている学習資料 (ドキュメント、ML etc)を利
用しAPIを理解する必要がある
APIと学習資料のリンクを維持するのは難しい
学習資料の情報は構造化されておらず曖昧性を含
んでおり、自動でリンクを復元するのは難しい
目的
提案手法により、精度の高い学習資料とAPI間の
リンクの復元を行う
スライド中の図表は論文の図表を引
用
Copyright © 2012NTT DATA Corporation
2
アプローチ
提案したメタモデルを利用し、学習資料とソー
スコードのリンク付けを行う
1.
2.
ドキュメント、ML、ソースコードを解析し、提案モ
デルの要素を生成する
ドキュメントとMLのCodeLikeTermとソースコードの
CodeElementをリンク(精度をあげるためリンクの
CodeElement
フィルタリングを実施)
org.apache.http.entity.EntityTemplate
org.apache.http.entity.ContentProducer
CodeLikeTerm
ソースコー
ド
ContentProducer
EntityTemplate
Crednetials
ドキュメント、
ML
Copyright © 2012NTT DATA Corporation
3
評価内容・評価方法
評価内容
リンクの正確さ(CodeLikeTermとCodeElement
のリンクに誤りが存在しないか)
フィルタの効果(不要なリンクをどれだけフィ
ルタできるか)
評価方法
4種類のオープンソースのシステム(JodaTime、
HttpComponents、Hibernate、XStream)を対象に
実施
手動でリンク付けした結果と提案手法を実装した
ツール(RecoDoc)の結果を比較し、手動でリンク付
けした結果にどれだけ提案手法が近いかで評価
Copyright © 2012NTT DATA Corporation
4
評価結果
評価結果
リンクの正確さ
4つのシステムで平均96%の精度
フィルタの効果
各CodeLikeTermに存在した平均16.8個の
CodeElementへのリンク候補が、フィルターにより
0.7個に削減
Copyright © 2012NTT DATA Corporation
5
Generative Range Fixes for Software Configuration
2012/8/30
(株) NTTデータ
Copyright © 2012 NTT DATA Corporation
目的
• 多くかつ複雑な設定項目を持つソフトウェアが対象
• 妥当でない設定に対し、ユーザが修正を適切にできるような仕組みを提
供するもの
Copyright © 2012 NTT DATA Corporation
7
主要貢献、手法、評価
• 主要貢献: Range Fixという考え方
• どのような修正候補があるかを幅を持ってユーザに提示する
[Use_Pre_Allocation := false]
• [Pre_Allocation_Size: Pre_Allocation_Size <=8]
• [Buffer_Size: Buffer_Size >= 5]
• [Object_Size: Object_Size <= 409.6]
• 評価 : RQを5つ設定し、評価を実施
• 評価がしっかりしている印象
• どのような複雑な設定に対して修正候補を提示できるか?ユーザにとっ
て妥当な候補が提示されているか? 高性能か?既存手法より良いか?提
示した3つの戦略のどれが効果的か?
Copyright © 2012 NTT DATA Corporation
8
Graph-Based Pattern-Oriented,
Context-Sensitive Source Code Completion
Anh Tuan Nguyen, et al.
担当 : 岡田 譲二 (NTTデータ)
Copyright © 2012 NTT DATA Corporation
目的と主要な貢献
■目的
• APIの利用方法についてコードの文脈を考慮して最適なコード補完を行
う
1
2
3
4
5
Display display = new Display();
Shell shell = new Shell(display);
...
Button button = new Button(shell, SWT.PUSH);
button._
編集途中のコード
5行目にカーソルがある時に
は、
①ではなく②のAPI利用パ
ターンでコード補完して欲し
い
1
2
3
4
5
6
7
8
9
10
Display display = new Display();
Shell shell = new Shell(display);
...
shell.pack();
shell.open();
while (!shell.isDiposed()){
if (!display.readAndDiposed())
display.sleep();
}
display.disposed();
API利用パターン①
1
2
3
Button button = new Button(shell, SWT.PUSH);
FormData bData = new FormData();
button.setLayout(bData);
API利用パターン②
■主要な貢献
1. コードの文脈に即したAPI利用パターンを検索・順位付するアルゴリ
ズム
2. グラフに基づくコード補完のアルゴリズム
3. 編集途中のコードに対しても文脈に即したコードを補完するツール
Copyright © 2011 NTT DATA Corporation
1
アプローチ
1. 編集途中のコードと、API利用パターンをグラフベースのモデル
(Groum[1])に変換
編集途中のコードはPPA[2]を利用して部分的なASTを作り、Groumに変換
2. 変換したAPI利用パターンのGroumと、編集途中のコードのGroumの各
ノードに、カーソルからの距離や、関連性の多さなどによって重み付ける
3. 重み付けられたノードのTf-Idfを類似度として、API利用パターンを順位付
1 Display display = new Display();
ける
3.Tf-Idfで最終的な
2 Shell shell = new Shell(display);
3
4
5
類似度を計算
...
Button button = new Button(shell, SWT.PUSH);
button._
編集途中のコード
1.Groumに変換
2.重み付け
API利用パターン①のGroum
編集途中のコードのGroum
類似度: 3
API利用パターン②のGroum
<
類似度: 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
Copyright © 2011 NTT DATA Corporation
1
評価方法・結果
■評価方法
• 4プロジェクトからJava Utility libraryのAPI利用パターンを抽出
• 他の24プロジェクトにGraPaccを適用して評価
• テストデータは上記のプロジェクトのソースを途中で分割して、
前半を編集途中のコード、後半を正解とした
編集途中のコード
正解
テストデータで利用したプロジェクトのソースの例
■評価結果
• 適合率:84.6%、再現率:71.0%、F値:77.0%
• パターンを検索し、コード補完するまで0.7秒
• 不正確な結果を出す理由としては、1つのAPIが2つのメソッドに分かれ
ているとコード補完が冗長に行われることなどを挙げている
Copyright © 2011 NTT DATA Corporation
1
【ICSE2012 勉強会】
Session B : Automatic Input Rectification
担当 : 津野 裕介 (NTTデータ)
Copyright © 2012 NTT DATA Corporation
背景・問題点 / 目的
背景・問題点
スライド中の図表は論文の図表を引
用
ソフトウェアのエラーやセキュリティの脆弱性
は、しばしば非定型入力によって発生
標準的な対応方法は、フィルタの利用
しかし、問題のない変則的な入力を排除してしま
う
目的
自動的に潜在的に危険性のある入力をプログラム
が正常に処理する可能性が高い典型的な入力に変
換すること
Copyright © 2012NTT DATA Corporation
1
アプローチ
自動入力修正
(SOAP=Sanitization Of Anomalous inPuts)の提
案
入力を処理するアプリケーション向けの典型的入力につい
て、一組の制約を最初に学習
自動的に修正機を生成
入力が与えられる時、制約を満たせばスルー
制約を満たさない入力は修正
SOAPの4つのコンポーネント
入力パーサ:入力を構文構造木に変換
実行モニタ:メモリ割当てなどを行うフィールドを識別
3. 学習エンジン:フィールドへの安全な入力を学習し制約を
作成
自動入力修正(SOAP)システムのアーキテクチャ
4. 修正機(Input Rectifer):入力を制約を用いて修正
1.
2.
Copyright © 2012NTT DATA Corporation
1
適用例
適用対象
オープンソースWebブラウザ Dillo
PNGの入力において脆弱性
脆弱性を持つDillo のコード
適用方法
1.
2.
3.
4.
パーサがDilloの
PNG入力に関する
フィールドを特定
トレーニング用の
PNGを入力し重要な
箇所を特定
トレーニングの結果を
受けてフィールドの
上限値を推論
オンラインにて入力を
自動修正
Copyright © 2012NTT DATA Corporation
1
評価方法・結果
評価方法・結果
定量評価
5つのアプリケーションに対して、SOAPで制約を
生成
悪意あるデータを投入→すべて脆弱性を無効化
問題ないデータはほぼ損失せず(TIFF で0.5%)
アマゾン メカニカルタークを利用した人手によ
る評価
SOAPで修正した画像、動画とオリジナルを提示
0(全く異なる)~3(完全に一致)の指標でランク付け
SOAPによって修正された画像の
5つのアプリケー
例
全体で2.5を上回る結果→修正画像はオリジナルに
1. ション
Swfdec
4. Google
2. Dillo 近い Picasa
3. Image- 5. VLC
Magick
オリジナル
Copyright © 2012NTT DATA Corporation
修正
1