Parallel Setsによるライブラリの 組み合わせと利用状況の可視化

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

PROCESS 14:一般情報(2) InstallShieldLecture
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
実証分析の手順 経済データ解析 2011年度.
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
情報伝播によるオブジェクト指向プログラム理解支援の提案
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
     年  月  日 名前 太郎 1 班.
SS2009 形式手法の適用ワーキング グループの報告
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
静的情報と動的情報を用いた プログラムスライス計算法
類似するコーディングパターンの 利用状況調査ツールの提案
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オープンソース開発の履歴情報を用いたコミュニティ検索支援システム
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
ライブラリのバージョン更新支援のための実行トレースからのテストケース生成
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
     年  月  日 名前 太郎 1 班.
MSET使用方法  一時中断したい場合には、マウスの右クリックをしてください(小ウインドウが開き一時停止します)。続行する場合には、開いた小ウインドウ以外の適当な場所を右クリックしてください。
コンポーネントランク法を用いたJavaクラス分類手法の提案
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
ハッシュ値比較による Javaバイトコードに含まれる ライブラリの検出手法
UMLモデルを対象とした リファクタリング候補検出の試み
Javaバイトコード比較を用いた ライブラリ再利用検出ツールの提案
プログラム理解におけるThin sliceの 統計的調査による有用性評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
パターンマイニング技術を 用いた実時間プログラムの コーディングパターン検出
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
Presentation transcript:

Parallel Setsによるライブラリの 組み合わせと利用状況の可視化 井上研究室 矢野裕貴

ライブラリの利用 ソースコードの再利用手段として,オープンソースライブラリの利用が盛んに行われている メリット 多彩な機能 開発コストの削減 一般的に,ソフトウェア開発におけるソースコードの再利用手段として,オープンソースライブラリの利用が行われています. ライブラリを適切に利用することによって様々な機能を低い開発コストで自身のプロジェクトに取り込むことができます.

ライブラリのバージョンアップ ライブラリは自身のプロジェクトとは別に開発が進められ,新しいバージョンがリリースされる 機能の追加 バグの修正 など 開発者は使用しているライブラリの更新作業を行う必要がある 互換性の問題 ライブラリは自身のプロジェクトとは独立して開発がすすめられ,機能の追加,バグの修正などの要因で新しいバージョンがリリースされます. 利用しているライブラリ内にバグが含まれていた場合などに,開発者は新しいバージョンへの更新作業を行わなければいけないのですが,この際にライブラリのバージョン間の非互換性による問題が発生する場合があります.

バージョン間の非互換性 アップデートの際,互換性を失うような変更が加えられる場合がある ライブラリ間にも依存関係が存在する APIの変更などが行われると開発中のプログラムにも修正が必要 ライブラリ間にも依存関係が存在する ライブラリの組み合わせによっても,非互換性による問題が発生する可能性 ライブラリのアップデートの際,クラスやメソッドの削除,シグネチャの変更などが行われると,バージョン間の互換性が崩れます.このようなアップデートを適用した場合,自身のプログラムにも修正を加えるなどの対応が必要になるのですが,ライブラリはそれ自身も他のオープンソースライブラリへの依存関係を持っているものが多く,この互換性の問題がライブラリ間でも同じように発生する場合があります. これによって,例えば使用しているライブラリのうちの1つを更新することで,同時に使用している他のライブラリが動作しなくなってしまうような可能性が存在します.

研究背景 他の開発者の判断を参考にする ライブラリの更新を行う際には,様々なことを考慮する必要がある 適切な選択が難しい 機能 品質 互換性 開発者が,ライブラリのアップデートを行ったり,新しいライブラリを導入したりする場合にバージョンの選択を行う際には,機能や,品質に加えて,先ほど紹介したような互換性の問題など,様々な要素を考慮する必要があり,判断が難しいです.そこで本研究では,ほかの開発者によって既に行われた判断,つまり既存のシステムにおけるライブラリの利用状況の可視化を行うことで,選択の支援を行います. . 他の開発者の判断を参考にする

利用状況の可視化 他のシステムにおけるライブラリの利用状況を,ライブラリ選択の際の判断基準に 例)時間的な利用数の変化[1] usage 同じような研究が既にいくつか行われていて,例えば,ライブラリの利用数の時間的な変化の可視化を行うことで,利用傾向を探るようなものなどがあります. time [1] Y. M. Mileva, V. Dallmeier, M. Burger, and A. Zeller. Mining trends of library usage, in ERCIM Workshops, 2009, pp. 57–62.

提案手法 Parallel Setsを用いた,既存のシステムにおけるライブラリ利用の組み合わせの可視化 Parallel Sets とは,Kosaraらによって提案された複数のパラメータで分類分けできるようなデータに対する可視化手法[2] 組みあわせを考慮することで,ライブラリ間で非互換性による問題が発生するリスクを低減 既に利用された実績のある組み合わせを選ぶと安全である可能性が高い 本研究の提案手法では,Parallel Setsと呼ばれる可視化手法を用いて,ライブラリの組み合わせに着目した利用状況の可視化を行います. ライブラリ単体ではなく,複数の組みあわせを考慮することで,利用しているライブラリ間で非互換性による問題が発生するリスクを低減することを目的としています. [2] Robert Kosara. Turning a table into a tree: Growing parallel sets into a purposeful project. Beautiful Visualization: Looking at Data through the Eyes of Experts, pp. 193-204

Parallel Setsを用いた ライブラリ利用状況の可視化 それぞれの階層でシステムが各ライブラリのどのバージョンを利用しているかが表される 幅:各バージョンの利用数 線:組み合わせ 色:1層目のライブラリの利用バージョン Parallel Setsを用いた,ライブラリの利用状況の可視化はこのようになります. それぞれの階層で,システムが各ライブラリのどのバージョンを使用しているのかが分類され,表されています.ここで,幅が各バージョンの利用数を表し,階層間をつなぐ線が利用の組み合わせを表します.線の色は1層目にライブラリの利用バージョンとなっています.

Parallel Sets - データとの対応 ライブラリA,Bの両方を使用している100個のシステムの場合 Library A Ver. 1.0 Ver. 2.0 Library B Ver. 1.0 25 50 2.0 15 35 40 60 100 25 1.0 40(40%) 40 説明のため,ライブラリA,Bの両方を使用している100個のシステムにおけるライブラリ利用状況についての可視化例を示しました. ここで,横幅全体が100個のシステムを表しており, 赤線で示された部分でライブラリAのバージョン1を使用しているシステムが40個あることが表されています. さらに,そのうち,ライブラリBのバージョン1を同時に使用しているシステムがこの線で表されます. 1.0→1.0 25(25%)

Parallel Sets - 3層以上の場合 3層以上でも同様 1.0→1.0→2.0 10(10%) これは,3層以上になっても同様で,例えばこの線で,ライブラリA,のバージョン1,ライブラリBのバージョン1と,ライブラリCのバージョン2を同時に使用しているシステムの数が表されます.このように組み合わせが線によって表されるので,線が太いものを見ることで,人気の高い組みあわせを知ることができるようになっています.

Parallel Sets - 並び替え 各階層の入れ替え バージョン,利用数順にソート

可視化手順 Step1 依存関係データベースの作成 Step2 Parallel Setsの出力 既存のシステムから依存関係を収集 データベースからの検索,可視化を行うツールを作成 今回,実際のデータを用いてライブラリ利用の組み合わせを可視化しました. 手順をおおまかに分けると,データベースの作成,図の出力の2つのステップに分けられます.

Step1 依存関係データベースの作成 調査対象 方法 約40万の依存関係を抽出 GitHubで公開されている約4000のプロジェクト(2014/8) 100コミット以上 Maven2を用いて管理されている 方法 pom.xmlに記述された依存関係を参照 約40万の依存関係を抽出 Neo4jグラフデータベースへ追加 Step1では,GitHubで公開されている約4000のMaven2というプロジェクト管理ツールを使用しているプロジェクトにおける2014年8月時点の最新コミットを対象とし,依存関係の調査を行いました. これは,Mavenプロジェクト内に含まれるPomファイルという設定ファイルに記述された依存関係を参照することによって行いました. 結果,約40万の依存関係を抽出でき,Neo4jグラフデータベースへの追加を行いました.

Step2 Parallel Setsの出力 データベースから選択ライブラリに関するデータの検索,結果の可視化 Query 作成ツールでは,ライブラリ名を複数選択することによって,選択したライブラリを使用しているシステムの検索を行い,結果をD3.jsというJavascriptのライブラリを用いて可視化します.

使用例(ケース設定) 開発中のHttpのクライアントアプリケーションに新しく,Joda-Timeというライブラリを導入したい 現在使用しているライブラリ ・Commons-Collections : Ver. 3.2 ・Commons-HttpClient : Ver. 3.1 Q1. Joda-Timeのどのバージョンが現在の環境に適合する可能性が高いか Q2. 使用中のライブラリのアップデートも行うとしたら,  どんな組み合わせが良いか 使用例をケース設定を行い解説していきます. 開発中のHttpのクライアントアプリケーションにおいて,新しくJoda-Timeというカレンダーを扱うライブラリを導入するとします. 現在使用しているライブラリはCommons-Collections ver. 3.2とCommons-HttpClientのver. 3.1となっています. このケースにおいて,Joda-Timeを導入する際,どのバージョンを選択するのがよいかと,使用しているライブラリも合わせてアップデートする場合,どのような組み合わせがよいか の2つの質問を設定し,本可視化を用いて回答を行っていきます. .

Q1:Joda-Timeのどのバージョンを選ぶか 現在使用しているライブラリ ・Commons-Collections : Ver. 3.2 ・Commons-HttpClient : Ver. 3.1 まず,Joda-timeのどのバージョンを利用すべきかを調べます.

Q1:Joda-Timeのどのバージョンを選ぶか 候補 Ver. {1.4, 1.6, 2.0, 2.2} この図をみるとこの範囲で表された部分が同じ組み合わせで2つのライブラリを使用しているシステムであることがわかります.この線は4つに分かれているので,これを辿ることで,候補となるバージョンが1.4,1.6.2.0.2.2であることがわかります 候補

Q2: 3つのライブラリのバージョンの組み合わせの選択 利用数が多い組み合わせを探した場合 Commons-Collections Ver. 3.2.1 Commons-HttpClient Ver. 3.1 Joda-time Ver. 1.6 2つ目の使用中のライブラリも組みあわせてアップデートを行う場合です. 単純に利用数が一番多い組み合わせを見ると,3.2.1→3.1→1.6の組み合わせとなっています.

Q2: 3つのライブラリのバージョンの組み合わせの選択 新しいバージョンの組み合わせを優先した場合 Commons-Collections Ver. 3.2.1 Commons-HttpClient Ver. 3.1 Joda-time Ver. 2.2 次にバージョン順に並べ替えてみることで,できる限り新しいバージョンの組み合わせを探すと,3.2.1,3.1.2.2の組み合わせが見つかります.ここで,joda-timeの最新バージョン

まとめと今後の課題 まとめ 今後の課題 ライブラリの組み合わせに着目した利用状況の可視化の提案 実際のデータに対する可視化を行った ライブラリ同士の比較を行いやすいように 他の可視化手法との組み合わせ まとめです 本研究では,ライブラリの組み合わせに着目した利用状況の可視化を提案しました.また.実際のシステムにおける利用状況のデータを収集し,実際に可視化を行いました. 今後の課題としては, 今回実装したツールでは,ライブラリのバージョン選択の補助のみを想定していたが,辛かったため,ほかの可視化手法と組み合わせるなどして,どのライブラリを利用するかの選択の補助も行えるようにしたい.