ソフトウェアプロダクト集合に対する 派生関係木の構築

Slides:



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

紹介担当: 石尾 隆(大阪大学) Q11.  Feature Model によって定義される「プロダクトの集合」 (プロダクトライン)の振舞いを検証する手法の拡張 ◦ 通常の振舞い検証: たとえば Promela を使って,1プロダクトの 振舞いを表現したオートマトンの取りうる状態遷移を調べる ◦
シーケンス図の生成のための実行履歴圧縮手法
S8. コルモゴロフ複雑性に基づく プロダクト派生木復元の試み
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
ギャップを含むコードクローンの フィルタリング手法の提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
決定木とランダムフォレスト 和田 俊和.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
仮想メモリを用いた VMマイグレーションの高速化
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
コンポーネントランク法を用いたJavaクラス分類手法の提案
Javaを対象としたソフトウェア部品 検索システムSPARS-Jの実験的評価
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
決定木 Decision Tree DT 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Data Clustering: A Review
開発履歴データのリアルタイム収集・分析システムEPMの拡張について ~ SRGMを用いた予測グラフの実現および既存解析システムとの連携 ~
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
メトリクス値の変化に基づく コードクローンの編集傾向分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
時間情報に基づく多様な中心性に着目した 動的ネットワーク分析の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

ソフトウェアプロダクト集合に対する 派生関係木の構築 井上研究室 神田 哲也

研究の概要 元が同じソフトウェアが,要求される機能の違いに より複数作られている ソフトウェアプロダクトラインエンジニアリング Software Product Line Engineering (SPLE) 複数の類似するソフトウェアを開発・管理するための手法 SPLEが適用されていないソフトウェアプロダクト 集合が多数存在 既存製品群にSPLEを適用したい ソフトウェアが多いので絞り込みたい ソフトウェアの選択を支援する手法を提案

ソフトウェアプロダクトラインエンジニアリング 複数の類似するソフトウェアを開発・管理する手法 同一製品シリーズの機種別のソフトウェア 対象顧客が異なる同一のシステム ソフトウェアをコア資産と機能部品に分割 コア資産:プロダクト間で共通 機能部品:個別の要求に応じて開発 新規開発 ソフトウェア1 ソフトウェア2 ソフトウェア3 コア 資産 機能部品A コア 資産 機能部品B コア 資産 機能部品C 機能部品C 機能部品D 既存のソフトウェアプロダクトライン(SPL) 製品開発

ソフトウェアの進化 既存のソフトウェアからSPLを構築したい 代表となるソフトウェアを選択 すべてを調査・比較するとコストがかかる 代表となるソフトウェアを選択 選択の基準の例 一番新しいもの 分岐点 一番古いもの... あるソフトウェアがどのソフトウェアから作られたか (派生関係)が有用

企業で開発された ソフトウェアの分岐の実例[1] 木のような形 あるソフトウェアが25の製品に分岐した 図はそのうち8製品について可視化 分岐後の改版,製品内での分岐,新たな製品の 分岐が行われている [1] 野中ら, 組込みソフトウェア製品ファミリにおける 是正保守の予備的分析. 情報処理学会研究報告, Vol. 2009-SE-166, No. 13, pp. 1–8, nov 2009.

ソフトウェア集合のソースファイルのみから 派生関係を模した木(派生関係木)を作る 研究の目的 開発履歴が残っていない派生関係が失われている バージョン管理システムが使われていない 開発者もよく覚えていない 別々の組織で開発が進んだので履歴が共有されていない ソフトウェアプロダクトライン構築に使うソフトウェアを選択できない ソフトウェア集合のソースファイルのみから 派生関係を模した木(派生関係木)を作る

提案手法 ソフトウェアプロダクト集合に対し, ソースファイル間の類似度を計算 計算した類似度より,ソフトウェア間の距離を計測 ソースファイル間の差分を用いる Yoshimuraらの手法に基づく[2] 計算した類似度より,ソフトウェア間の距離を計測 距離に基づき最小全域木を構築 派生方向をラベルづけ ソフトウェアプロダクト集合 派生関係木 [2] Yoshimura et al.: Visualizing code clone outbreak: An industrial case study, in Proc. 6th IWSC, 2012

ソフトウェアが似ている→多くのソースファイルが似ている キーアイデア ソフトウェアが似ている→多くのソースファイルが似ている :類似度の高いソースファイル ソフトウェアA ソフトウェアA ソフトウェアB ソフトウェアC 類似度の高いソースファイル:4組 類似度の高いソースファイル:2組 ソフトウェアA-B間のほうがソフトウェアA-C間よりも 似ている(距離が近い)

距離・派生方向の計算 ソフトウェアA,B間の距離: -(類似関係にあるソースファイルの組の数) 派生方向: 多いほど距離が近い値であるので,負号をつけて 順序関係を逆転 辺に重みをつけて計10種類を実験 派生方向: ソフトウェア全体でソースコードが増加する方向 ファイル単位での派生方向も考慮して計3種類を実験

派生関係木の構築 距離の近いソフトウェア同士を接続していく 派生方向を計算してラベルづけする ソフトウェア間の距離の合計が最小となるような木 (最小全域木)を構築 派生方向を計算してラベルづけする 3 6 3 5 8 7 5 5 6 5 6 7 4 比較の始点 4 距離の合計:57 距離の合計:17

実験 オープンソースソフトウェアに対して手法を適用 派生関係木の形と派生方向について バージョン履歴との一致度合いを評価 以下の6種類のデータセットを作成 開発が分岐していない – PostgreSQL-major 組織内で開発が分岐 – PostgreSQL-8-ALL 新しいいくつかの製品しか残っていない – PostgreSQL-8-LATEST 途中の製品が一部欠落している – PostgreSQL-8-annually プロジェクトが2つに分岐した - ffmpeg プロジェクトが3つ以上に分岐した - *-BSD 派生関係木の形と派生方向について バージョン履歴との一致度合いを評価 途中の製品が一部欠落している – PostgreSQL-8-annually

手法適用例: PostgreSQL-8-annually オープンソースのデータベース管理システム バージョン8系は8.0系~8.4系がそれぞれ分岐 想定した状況:途中の製品が一部欠落している 過去に作られたソフトウェア製品ファミリのうち, その一部が入手できなかった場合 8つのリリースタイミング全26バージョンを解析 バージョン8.Xのうち2005年から2012年までの9月前後に リリースされたバージョン バージョン管理システムから得られる履歴と 派生関係木を比較

結果(1/3) ツールの出力

結果(2/3) バージョン履歴と照らし 合わせた(右図) バージョン系列内(同色)ではバージョン順に並んでいる :開発履歴での分岐箇所 :手法が示した分岐箇所 バージョン履歴と照らし 合わせた(右図) バージョン系列内(同色)ではバージョン順に並んでいる 最新版がどれかわかる バージョン系列間は開発履歴と一致していない 方向は正しい バージョン系列内と比べ 距離関数の値が大きい 8.0.9→8.0.14 距離: -514 8.0.14→8.1.10 距離: -176

結果(3/3) 派生関係木の形とバージョン履歴で一致した辺の数 他のデータセットも含めると派生関係木の形は 平均88%が履歴と一致 22本(/26本中) 他のデータセットも含めると派生関係木の形は 平均88%が履歴と一致 分岐の箇所は近いバージョン間で前後 派生方向がバージョン履歴と一致した辺の数 22本(/形が一致した22本中) 他のデータセットも含めると派生方向は 平均86%が履歴と一致 分岐丸ごとではなく部分的に方向を誤検出することがある

考察 派生関係木の形について 派生方向について 誤検出はあるものの,履歴上で近いバージョンと つながっている辺がほとんど 大きな流れはバージョン履歴と一致 最新版が木の葉ノードに配置されるなど 派生方向について 他のデータセットでは誤検出があった ソースコードが追加→次のバージョンで削除という「手戻り」やソースコードの置換に弱い

まとめと今後の課題 まとめ 今後の課題 ソフトウェアプロダクト集合のソースコードから 派生関係木を構築する手法を提案 オープンソースソフトウェア集合に対し手法を適用し, 実際のバージョン履歴と近い派生関係を得られた 今後の課題 より検出の精度を上げるためのメトリクスの利用の検討 企業で開発されているソースコードへの適用実験 派生関係木を利用した ソフトウェアプロダクトライン構築手法の提案