API呼び出し列の差分を利用した

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