Post on 01-Jan-2016
description
API 呼び出し列の差分を利用したAndroid アプリケーション比較ツールの
試作
井上研究室神田 哲也
特別研究発表会
2
ソフトウェアの比較• 現在,大量のソフトウェアが入手可能
– Android Market から, Vector から,…– 類似するソフトウェアが多い
• ソフトウェアを選択する必要性– 利用者:ソフトウェアに利用したい機能が存
在するかを確認したい– 開発者:機能追加の際,今あるソフトウェア
がどのような機能を持つか知りたい ソフトウェアを比較して 機能の違いを明確にする必要がある
特別研究発表会
3
ソフトウェア比較における問題点
比較方法 問題点
実際に利用して比べる
• すべての機能を試すことが大変• 比較したいソフトウェアが多い
場合時間的コストがかかる
ドキュメントの比較 • 同じ機能を別の用語で定義するなど記述レベルが統一されていない恐れ
• ドキュメントが存在しない場合
ソースコードの比較 • 差分が多くなり理解が難しい
特別研究発表会
4
API 呼び出しと機能• プラットフォーム固有の機能を利用するために
API が呼び出される• 高機能な API が提供される環境がある
– Android , Windows ,…
• 呼び出しの形式は統一されている 複数のソフトウェアを機械的に処理できる• ソースコードの比較より少ない情報で比較が可
能
API 呼び出しを比較することでソフトウェアの比較ができるのではな
いか
特別研究発表会
5
Android
• 携帯端末向けプラットフォーム• Android SDK (ソフトウェア開発キッ
ト)– カメラ, GPS 位置情報などを利用するため
の API を含む– 抽象度が高く,高機能な API を持つ
6
A.m1()
B.m2()
D.m2()
B.m3()
提案手法の概要
特別研究発表会
共通する機能X1 のみに存在する
機能
アプリケーション X1
アプリケーション X2
共通するAPI 呼び出し
列
API 呼び出し列抽出
API 呼び出し列抽出
比較
事前知識X1 のみに出現す
るAPI 呼び出し列
X2 のみに出現する
API 呼び出し列
照合
X2 のみに存在する
機能
A.m1()
B.m2()
B.m3()
C.m1()
D.m4()
API 呼び出し列
照合 照合
API
呼び出し列
名前
特別研究発表会
7
API 呼び出し列• メソッドから抽出した興味のある API 呼び
出しの並び– ソースコード中の出現順– 制御構造は考慮しない
• 1 メソッドにつき1つの API 呼び出し列を抽出 public void onClick(View v) {
String s = str.substring(2); Intent intent=new Intent(this,com.example.edit.class); startActivity(intent);}
android.content.Intent.android.content.Intentandroid.app.Activity.startActivity
ソースコード
API 呼び出し列
特別研究発表会
8
A.m1()B.m2()
B.m3()
C.m1()
D.m4()
D.m2()B.m3()
比較
API 呼び出し列の比較A.m1()
B.m2()
B.m3()
C.m1()
D.m4()
B.m3()
A.m1()
B.m2()
D.m2()
B.m3()
API 呼び出し列
X1 のみに出現するAPI 呼び出し列
X2 のみに出現するAPI 呼び出し列
共通するAPI 呼び出し列
長さ2以上の共通する連続部分を共通する API 呼び出し列として抽出
B.m3()
特別研究発表会
9
D.m2()
B.m3()
事前知識
B.m2()B.m3()C.m1()D.m4()
A.m1()B.m2()
一致
一致
一致
A.m1()
B.m2()
D.m2()
B.m3()
B.m2()
B.m3()
C.m1()
カメラ1
地図 1
カメラ3
事前知識との照合
共通するAPI 呼び出し列
X1 のみに出現するAPI 呼び出し列
X2 のみに出現するAPI 呼び出し列
B.m3()
C.m1()
D.m4()
特別研究発表会
10
B.m2()
C.m1()
事前知識
地図機能を持つAndroid
アプリケーション
A.m1()
B.m2()
C.m1()
API 呼び出し列B.m2()
C.m1()
B.m3()
A.m1()
B.m2()
共通する API呼び出し列 1
A.m1()
B.m2()
D.m4()
B.m2()
C.m1()
共通する API呼び出し列 2
X1
X2
…X3
API呼び出し列
抽出
事前知識作成の概要
フィルタリング
フィルタリング
A.m1()
B.m2()登録除去
地図 2
特別研究発表会
11
ツールの概要( 1/2 ) : 起動画面
比較対象を選択
特別研究発表会
12
ツールの概要( 2/2 ) : 結果表示
検出された機能(差分)
検出された機能(共通)
選択
機能名と API 呼び出し列
出現位置情報
特別研究発表会
13
ケーススタディ( 1/7 ) : 目的• 作成した事前知識に登録されている機能
が,比較対象のアプリケーションに含まれているかを確認する
• 試作したツールにより,共通する機能,共通しない機能がわかることを確認する
特別研究発表会
14
ケーススタディ( 2/7 ) : 対象
• 地図機能を持つアプリケーション 11 個を収集
• 6 個で事前知識作成– 156 個の API 呼び出し列を抽出– うち 23 個に機能名をつけ登録
• 残りの 5 個をケーススタディの対象とする
特別研究発表会
15
ケーススタディ( 3/7 ) : 手順
1. 地図機能を持つアプリケーション 5 個から API 呼び出し列を抽出し,事前知識と照合
2. 照合結果から 5 つのアプリケーションが区別できることを確認
3. 試作したツールを用いて 2 つのアプリケーションを比較し,機能の差分が提示されることを確認
特別研究発表会
16
ケーススタディ( 4/7 ) : 結果
機能を含むアプリケーション数
0 1 2 3 4 5 合計
機能を表しているAPI 呼び出し列の数
5 8 3 0 6 1 23
• 8 割近くの機能が調査対象のアプリケーションに出現
いずれかのアプリケーションに出現した機能: 18
特別研究発表会
17
ケーススタディ( 5/7 ): 5つのアプリケーションとの照
合機能
警告ダイアログ表示
緯度経度取得
トースト表示
緯度経度設定
サブメニュー表示
アプリケーション A
○ ○ ○ ○ -
アプリケーション B
○ - ○ - -
アプリケーション C
○ ○ - - -
アプリケーション D
○ ○ ○ - -
アプリケーション E
○ ○ ○ ○ ○• アプリケーション間の違いをいくつかの機能で確認– アプリケーション A には緯度経度を設定する機能が
存在– 警告ダイアログ表示機能はすべてのアプリケーショ
ンに存在
…
特別研究発表会
18
ケーススタディ( 6/7 ): ツールを用いた比較の例
• 共通する機能と共通しない機能が区分されている– どちらもメニューの UI を利用– 比較元 2 では緯度経度を取得する
• 同じ機能でも違う API 呼び出し列で実現されている場合あるため,複数表示される項目がある
アプリケーション Cアプリケーション B
特別研究発表会
19
ケーススタディ( 7/7 ) : 考察
• API 呼び出し列を比較することで,機能の比較が実現できている
• 特定の機能を表していないと考えられるAPI 呼び出し列が多い– Android アプリケーションに共通する記述– アプリケーション内部での処理
特別研究発表会
20
まとめと今後の課題
• まとめ– API 呼び出し列を利用したアプリケーション
の比較方法の提案
– Android アプリケーション向け比較ツールの試作
– 手法の有効性を確認• 今後の課題
– 事前知識のフィルタリングの自動化– ドメインごとに固有の機能と,ドメインによ
らない機能を分類して提示する手法の検討