API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの...

20
API 呼呼呼呼呼呼呼呼呼呼呼呼呼 Android 呼呼呼呼呼呼呼呼呼呼呼呼呼呼呼呼 呼呼呼呼呼 呼呼 呼呼

description

API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作. 井上研究室 神田 哲也. ソフトウェアの比較. 現在,大量のソフトウェアが入手可能 Android Market から, Vector から, … 類似 する ソフトウェアが多い ソフトウェア を選択する必要性 利用者:ソフトウェアに利用したい機能が存在するかを確認したい 開発者 :機能追加の際,今あるソフトウェアがどのような機能を持つか知りたい  ソフトウェアを比較して 機能の違いを明確にする必要がある. ソフトウェア比較における問題点. API 呼び出しと機能. - PowerPoint PPT Presentation

Transcript of API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの...

Page 1: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

API 呼び出し列の差分を利用したAndroid アプリケーション比較ツールの

試作

井上研究室神田 哲也

Page 2: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

2

ソフトウェアの比較• 現在,大量のソフトウェアが入手可能

– Android Market から, Vector から,…– 類似するソフトウェアが多い

• ソフトウェアを選択する必要性– 利用者:ソフトウェアに利用したい機能が存

在するかを確認したい– 開発者:機能追加の際,今あるソフトウェア

がどのような機能を持つか知りたい ソフトウェアを比較して 機能の違いを明確にする必要がある

Page 3: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

3

ソフトウェア比較における問題点

比較方法 問題点

実際に利用して比べる

• すべての機能を試すことが大変• 比較したいソフトウェアが多い

場合時間的コストがかかる

ドキュメントの比較 • 同じ機能を別の用語で定義するなど記述レベルが統一されていない恐れ

• ドキュメントが存在しない場合

ソースコードの比較 • 差分が多くなり理解が難しい

Page 4: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

4

API 呼び出しと機能• プラットフォーム固有の機能を利用するために

API が呼び出される• 高機能な API が提供される環境がある

– Android , Windows ,…

• 呼び出しの形式は統一されている 複数のソフトウェアを機械的に処理できる• ソースコードの比較より少ない情報で比較が可

API 呼び出しを比較することでソフトウェアの比較ができるのではな

いか

Page 5: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

5

Android

• 携帯端末向けプラットフォーム• Android SDK (ソフトウェア開発キッ

ト)– カメラ, GPS 位置情報などを利用するため

の API を含む– 抽象度が高く,高機能な API を持つ

Page 6: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

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

呼び出し列

名前

Page 7: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

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 呼び出し列

Page 8: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

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

Page 9: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

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

Page 10: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

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

Page 11: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

11

ツールの概要( 1/2 ) : 起動画面

比較対象を選択

Page 12: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

12

ツールの概要( 2/2 ) : 結果表示

検出された機能(差分)

検出された機能(共通)

選択

機能名と API 呼び出し列

出現位置情報

Page 13: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

13

ケーススタディ( 1/7 ) : 目的• 作成した事前知識に登録されている機能

が,比較対象のアプリケーションに含まれているかを確認する

• 試作したツールにより,共通する機能,共通しない機能がわかることを確認する

Page 14: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

14

ケーススタディ( 2/7 ) : 対象

• 地図機能を持つアプリケーション 11 個を収集

• 6 個で事前知識作成– 156 個の API 呼び出し列を抽出– うち 23 個に機能名をつけ登録

• 残りの 5 個をケーススタディの対象とする

Page 15: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

15

ケーススタディ( 3/7 ) : 手順

1. 地図機能を持つアプリケーション 5 個から API 呼び出し列を抽出し,事前知識と照合

2. 照合結果から 5 つのアプリケーションが区別できることを確認

3. 試作したツールを用いて 2 つのアプリケーションを比較し,機能の差分が提示されることを確認

Page 16: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

16

ケーススタディ( 4/7 ) : 結果

  機能を含むアプリケーション数  

  0 1 2 3 4 5 合計

機能を表しているAPI 呼び出し列の数

5 8 3 0 6 1 23

• 8 割近くの機能が調査対象のアプリケーションに出現

いずれかのアプリケーションに出現した機能: 18

Page 17: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

17

ケーススタディ( 5/7 ): 5つのアプリケーションとの照

合機能

警告ダイアログ表示

緯度経度取得

トースト表示

緯度経度設定

サブメニュー表示

アプリケーション A

○ ○ ○ ○ -

アプリケーション B

○ - ○ - -

アプリケーション C

○ ○ - - -

アプリケーション D

○ ○ ○ - -

アプリケーション E

○ ○ ○ ○ ○• アプリケーション間の違いをいくつかの機能で確認– アプリケーション A には緯度経度を設定する機能が

存在– 警告ダイアログ表示機能はすべてのアプリケーショ

ンに存在

Page 18: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

18

ケーススタディ( 6/7 ): ツールを用いた比較の例

• 共通する機能と共通しない機能が区分されている– どちらもメニューの UI を利用– 比較元 2 では緯度経度を取得する

• 同じ機能でも違う API 呼び出し列で実現されている場合あるため,複数表示される項目がある

アプリケーション Cアプリケーション B

Page 19: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

19

ケーススタディ( 7/7 ) : 考察

• API 呼び出し列を比較することで,機能の比較が実現できている

• 特定の機能を表していないと考えられるAPI 呼び出し列が多い– Android アプリケーションに共通する記述– アプリケーション内部での処理

Page 20: API 呼び出し列の差分を利用 した Android アプリケーション比較ツールの 試作

特別研究発表会

20

まとめと今後の課題

• まとめ– API 呼び出し列を利用したアプリケーション

の比較方法の提案

– Android アプリケーション向け比較ツールの試作

– 手法の有効性を確認• 今後の課題

– 事前知識のフィルタリングの自動化– ドメインごとに固有の機能と,ドメインによ

らない機能を分類して提示する手法の検討