API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.

Slides:



Advertisements
Similar presentations
地図の重ね合わせに伴う 位相関係の矛盾訂正手法 萬上 裕 † 阿部光敏* 高倉弘喜 † 上林彌彦 ‡ 京都大学工学研究科 † 京都大学工学部 * 京都大学情報学研究科 ‡
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
BREW を学ぶ 情報工学科1組 石原 第4 週目 Microsoft Visual Studio.NET 2003 を使って BREW アプリの作成手順を学ぶ.
1 Layout Utilities の紹介 Layout Utilities とは、お客様のプログラムに 流し込み印刷を簡単に組み込めるソフトウエア開発ツールです 無償 流し込み印刷の例.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
Androidアプリを公開する方法.
GPSはじめの第一歩 Android編 2009/03/28 山本 慎也.
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
PBLソフトウェア班 ~ペイントアプリケーション開発~ 安藤 貴哉 小木曽 太紀
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
実際にたたいてAPI APIの初歩からプログラムまで使用方法のAtoZ.
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
静的情報と動的情報を用いた プログラムスライス計算法
類似するコーディングパターンの 利用状況調査ツールの提案
DNSトラフィックに着目したボット検出手法の検討
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ソフトウェア工学 知能情報学部 新田直也.
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
実行時情報に基づく OSカーネルのコンフィグ最小化
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
TIME SIGNAL: 集合知を利用した赤信号点灯時間の取得手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
Firebaseを用いた 位置情報共有システム
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
ソフトウェアプロダクト集合に対する 派生関係木の構築
同期処理のモジュール化を 可能にする アスペクト指向言語
設計情報の再利用を目的とした UML図の自動推薦ツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
統合開発環境のための プログラミング言語拡張 フレームワーク
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
地理情報コンテンツ・データベースコンテンツ新規作成
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム依存グラフを用いた ソースコードのパターン違反検出法
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
Presentation transcript:

API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也

ソフトウェアの比較 現在,大量のソフトウェアが入手可能 –Android Market から, Vector から, … – 類似するソフトウェアが多い ソフトウェアを選択する必要性 – 利用者:ソフトウェアに利用したい機能が存 在するかを確認したい – 開発者:機能追加の際,今あるソフトウェア がどのような機能を持つか知りたい  ソフトウェアを比較して 機能の違いを明確にする必要がある 2 特別研究発表会

ソフトウェア比較における問題 点 特別研究発表会 3 比較方法問題点 実際に利用して比べ る すべての機能を試すことが大変 比較したいソフトウェアが多い場 合 時間的コストがかかる ドキュメントの比較 同じ機能を別の用語で定義するな ど記述レベルが統一されていない 恐れ ドキュメントが存在しない場合 ソースコードの比較 差分が多くなり理解が難しい

API 呼び出しと機能 プラットフォーム固有の機能を利用するために API が呼び出される 高機能な API が提供される環境がある –Android , Windows , … 呼び出しの形式は統一されている  複数のソフトウェアを機械的に処理できる ソースコードの比較より少ない情報で比較が可能 4 特別研究発表会 API 呼び出しを比較することで ソフトウェアの比較ができるのではな いか

Android 携帯端末向けプラットフォーム Android SDK (ソフトウェア開発キット) – カメラ, GPS 位置情報などを利用するための API を含む – 抽象度が高く,高機能な API を持つ 特別研究発表会 5

6 A.m1() B.m2() D.m2() B.m3() 提案手法の概要 特別研究発表会 共通する機能 X 1 のみに存在する 機能 アプリケーション X 1 アプリケーション X 2 共通する API 呼び出し 列 API 呼び出し列抽出 比較 事前知識 X 1 のみに出現する API 呼び出し列 X 2 のみに出現する API 呼び出し列 照合 X 2 のみに存在する 機能 A.m1() B.m2() B.m3() C.m1() D.m4() API 呼び出し列 照合 API 呼び出し 列 名前

API 呼び出し列 メソッドから抽出した興味のある API 呼び出 しの並び – ソースコード中の出現順 – 制御構造は考慮しない 1 メソッドにつき1つの API 呼び出し列を抽出 特別研究発表会 7 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.Intent android.app.Activity.startActivity ソースコー ド API 呼び出し 列

A.m1() B.m2() B.m3() C.m1() D.m4() D.m2() B.m3() 特別研究発表会 8 比較 API 呼び出し列の比較 A.m1() B.m2() B.m3() C.m1() D.m4() B.m3() A.m1() B.m2() D.m2() B.m3() API 呼び出し列 X 1 のみに出現する API 呼び出し列 X 2 のみに出現する API 呼び出し列 共通する API 呼び出し列 長さ2以上の共通す る連続部分を 共通する API 呼び出し 列として抽出 B.m3()

D.m2() B.m3() 事前知識 特別研究発表会 9 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 呼び出し列 X 1 のみに出現する API 呼び出し列 X 2 のみに出現する API 呼び出し列 B.m3() C.m1() D.m4()

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 X1X1 X1X1 X2X2 X2X2 … X3X3 X3X3 特別研究発表会 10 API 呼び出し列 抽出 事前知識作成の概要 フィルタリ ング A.m1() B.m2() 登録 除去 地図 2

ツールの概要( 1/2 ) : 起動画面 11 比較対象を選択 特別研究発表会

ツールの概要( 2/2 ) : 結果表示 12 検出された機能(差 分) 検出された機能(共 通) 選択 機能名と API 呼び出し 列 出現位置情報 特別研究発表会

ケーススタディ( 1/7 ) : 目的 作成した事前知識に登録されている機能 が,比較対象のアプリケーションに含ま れているかを確認する 試作したツールにより,共通する機能, 共通しない機能がわかることを確認する 特別研究発表会 13

ケーススタディ( 2/7 ) : 対象 地図機能を持つアプリケーション 11 個を 収集 6 個で事前知識作成 –156 個の API 呼び出し列を抽出 – うち 23 個に機能名をつけ登録 残りの 5 個をケーススタディの対象とする 特別研究発表会 14

ケーススタディ( 3/7 ) : 手順 特別研究発表会 地図機能を持つアプリケーション 5 個か ら API 呼び出し列を抽出し,事前知識と 照合 2. 照合結果から 5 つのアプリケーションが 区別できることを確認 3. 試作したツールを用いて 2 つのアプリ ケーションを比較し,機能の差分が提示 されることを確認

ケーススタディ( 4/7 ) : 結果 機能を含むアプリケーション数 合計 機能を表している API 呼び出し列の 数 割近くの機能が調査対象のアプリケー ションに出現 特別研究発表会 16 いずれかのアプリケーションに出現した機 能: 18

ケーススタディ( 5/7 ) : 5つのアプリケーションとの照 合 機能 警告ダイア ログ表示 緯度経度 取得 トースト 表示 緯度経度 設定 サブメ ニュー表示 アプリケーショ ン A ○○○○ - アプリケーショ ン B ○ - ○ -- アプリケーショ ン C ○○ --- アプリケーショ ン D ○○○ -- アプリケーショ ン E ○○○○○ アプリケーション間の違いをいくつかの機能で 確認 – アプリケーション A には緯度経度を設定する機能が存 在 – 警告ダイアログ表示機能はすべてのアプリケーショ ンに存在 特別研究発表会 17 …

ケーススタディ( 6/7 ) : ツールを用いた比較の例 共通する機能と共通しない機能が区分されている – どちらもメニューの UI を利用 – 比較元 2 では緯度経度を取得する 同じ機能でも違う API 呼び出し列で実現されている場合 あるため,複数表示される項目がある 特別研究発表会 18 アプリケーション C アプリケーション B

ケーススタディ( 7/7 ) : 考察 API 呼び出し列を比較することで,機能の 比較が実現できている 特定の機能を表していないと考えられる API 呼び出し列が多い –Android アプリケーションに共通する記述 – アプリケーション内部での処理 特別研究発表会 19

まとめと今後の課題 まとめ –API 呼び出し列を利用したアプリケーション の 比較方法の提案 –Android アプリケーション向け比較ツールの試 作 – 手法の有効性を確認 今後の課題 – 事前知識のフィルタリングの自動化 – ドメインごとに固有の機能と,ドメインによ らない機能を分類して提示する手法の検討 20 特別研究発表会

非表示スライド 説明用 21 特別研究発表会

単純なソースコードの比較 Unix diff ではほぼ全体が差分になってしま う 例 :twitter クライアントアプリ 2 種の diff 22 + if (colIndex > -1) { + inReplyTo = mCursor.getString(colIndex); + if (inReplyTo != null && "null".equals(inReplyTo) == false) { + inReplyTo = String.format(Locale.getDefault(), getText(R.string.tweet_source_in_reply_to).toString(), inReplyTo); } - terp_handler = new Handler() { - public void handleMessage(Message m) { - switch (m.arg1) { - case -1: 特別研究発表会

共通部分の抽出 23 プロジェクト 1 API 呼び 出し A.m 1() B.m 2() B.m 3() C.m 1() D.m 4() D.m 2() B.m 3() E.m 3() A.m 1() ○ ------- B.m 2() - ○ ------ D.m 2() ----- ○ -- B.m 3() -- ○ --- ○ - B.m 2() - ○ ------ B.m 3() -- ○ --- ○ - C.m 1() --- ○ ---- D.m 4() ---- ○ --- E.m 3() ------- ○ D.m 2() ----- ○ -- B.m2() B.m3() C.m1() D.m4() A.m1() B.m2() 共通部分情報 特別研究発表会

差分の抽出 24 プロジェクト 1 API 呼び 出し A.m 1() B.m 2() B.m 3() C.m 1() D.m 4() D.m 2() B.m 3() E.m 3() A.m 1() ○ ------- B.m 2() - ○ ------ D.m 2() ----- ○ -- B.m 3() -- ○ --- ○ - B.m 2() - ○ ------ B.m 3() -- ○ --- ○ - C.m 1() --- ○ ---- D.m 4() ---- ○ --- E.m 3() ------- ○ D.m 2() ----- ○ -- 差分情報 (プロジェクト 1 ) D.m2() 差分情報 (プロジェク ト 2 ) D.m2() B.m3() 取り消し線をつけた API 呼び出しは共通部 分 代わりにダミーを記録 特別研究発表会 B.m3() E.m3() D.m2()