S8. コルモゴロフ複雑性に基づく プロダクト派生木復元の試み

Slides:



Advertisements
Similar presentations
BRIEF: Binary Robust Independent Elementary Features
Advertisements

区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
    有限幾何学        第8回.
利用実績に基づくソフトウェア部品検索システムSPARS-J
圧縮類似度を用いた方言の自動分類 ~ライス符号を用いた前処理~ ~連結クラスタリング法~ ~余弦類似度を用いた方言分類木の評価~
時空間データからのオブジェクトベース知識発見
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
日本大学 文理学部 情報システム解析学科 谷研究室 益田真太郎
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
k 個のミスマッチを許した点集合マッチング・アルゴリズム
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
決定木とランダムフォレスト 和田 俊和.
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
動的依存グラフの3-gramを用いた 実行トレースの比較手法
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
実行時情報に基づく OSカーネルのコンフィグ最小化
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
Data Clustering: A Review
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
SIFTとGraph Cutsを用いた 物体認識及びセグメンテーション
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
第16章 動的計画法 アルゴリズムイントロダクション.
構造的類似性を持つ半構造化文書における頻度分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
保守請負時を対象とした 労力見積のためのメトリクスの提案
ソースコードの木構造を考慮した 差分計算を用いる 版管理システムの提案
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

S8. コルモゴロフ複雑性に基づく プロダクト派生木復元の試み 早瀬 康裕        筑波大学 神田 哲也,石尾 隆  大阪大学

背景 ソフトウェアプロダクトの派生開発 派生関係を記録しておくことは大切 新たなプロダクトを作成する際に,既存の似たプロダクトを改変して実現 0から開発するより,低コストで高信頼 派生関係を記録しておくことは大切 派生プロダクトへの修正の伝搬 → 修正全体の 40% に及ぶことも [野中2009] 利用実績の評価 次に開発する製品に役立つ,あるいは近い機能を持つ製品を探す [野中2009] 野中ら, “組込みソフトウェア製品ファミリにおける是正保守の予備的分析“,情報処理学会研究報告, SE-166-13

突然ですが,企業の人に質問してみました 質問1. バージョン管理はされていないのですか? 突然ですが,企業の人に質問してみました 質問1. バージョン管理はされていないのですか? 私たちのシステムはバージョン管理システムの出現よりも前から開発されています. 個別の製品単位ではバージョン管理されていますが,複数のプロジェクトの関係はわかりません.

質問2. リリース日付は分かりますか? もちろん記録してあります 確認してみないと分かりませんが,たぶん記録されていると思います すみません

先行研究 PRET [4] ソースコードの内容のみから,バージョングラフを復元する手法 ソフトウェア プロダクト集合 派生関係木

PRET の処理 (1/4) 手順1. プロダクトの類似性を,類似したソースファイルの組の数と定義し,全てのプロダクトの類似性を求める :類似度の高いソースファイル ソフトウェアA ソフトウェアA ソフトウェアB ソフトウェアC 類似度の高いソースファイル:4組 類似度の高いソースファイル:2組 [4] Kanda et al., “Extraction of Product Evolution Tree from Source Code of Product Variants”, SPLC ’13

PRET の処理 (2/4) 手順2. 頂点をプロダクト,「-類似性」を辺の重みとした完全グラフを作り,最小全域木を構築する -7 -4 -5 -5 -2 -3 -5 -4 -5 -4 -3 -6 比較の始点 -6 距離の合計:-43 距離の合計:-23

PRET の処理 (3/4) 手順3. Diffの追加行数が多くなる方向に,辺の方向を推定 +80行 +20行 +420行 +50行

PRET の処理 (4/4) ファイルの類似を判定する方法 2つのソースファイルの内容をトークン列に変換 (コメントを捨てる) トークン列の LCS を計算 (diffコマンドを使用) LCSに含まれるトークン数が閾値以上ならば,ファイルが類似していると判定 実験では,閾値を9割にした場合が,推定結果が最良になった

モチベーション PRETの特徴 ファイルが似ているかどうかに捨象 ソースコードのトークンのみを利用 類似の閾値を事前に決定する必要がある 決定した閾値よりも大きな変更,もしくは小さな変更が多くを占めていると,プロダクトの類似性を上手く判定できない ソースコードのトークンのみを利用 コメントや,ソースツリー内のテキストファイルを利用して結果を改善できないか? 正味の変更量を計りたい

キーアイデア ソースコードのコルモゴロフ複雑性[5] を,ソースコードの情報量と仮定 コルモゴロフ複雑性とは,文字列の複雑さの一つの定義 文字列を出力する最短のプログラムの長さを,その文字列の複雑さと考える 一般には,コルモゴロフ複雑性の値は計算不能 可逆圧縮後のサイズを近似値として採用することが多い コルモゴロフ複雑性の増分が小さいプロダクトの間に派生関係があると考える

提案手法のアルゴリズム (1/4) 入力 出力 手順1 各 pi から,画像などのバイナリファイルを取り除く プロダクト集合 P = {p1, p2, …, pn} 出力 プロダクトの派生関係を表す有向グラフ G = {P, E} 手順1 各 pi から,画像などのバイナリファイルを取り除く プロダクトp2 プロダクトp1 README mp3 c cpp c txt jpg .h

提案手法のアルゴリズム (2/4) 手順2 各 pi について, pi を tar でアーカイブし,可逆圧縮したときのサイズ C(pi) を求める プロダクトp2 プロダクトp1 README c cpp c txt .h C(p1) = 300 C(p2) = 500

提案手法のアルゴリズム (3/4) 手順3 プロダクトの全ての二個組 (pi, pj) について,pi と pj を結合した仮想的なプロダクト pi・pj を構成し,それを可逆圧縮したサイズ C(pi・pj) を求める プロダクトp1 プロダクトp2 README c cpp c txt .h 仮想プロダクト p1・p2 c cpp README txt .h C(p1・p2) = 600

提案手法のアルゴリズム (4/4) 手順4 プロダクトpi に対してプロダクトpj を追加したときの増加情報量 I(pi, pj) = C(pi · pj) − C(pi) を求める 手順5 増加情報量に基づいてグラフを構築する 仮定1 派生プロダクトの情報量は,派生元プロダクトの情報量より多い 仮定2 派生元プロダクトに派生プロダクトを結合したときの増加情報量は少ない 仮定3 1つのプロダクトの派生元プロダクトは,たかだか1つである プロダクト q について, q よりも圧縮後のデータ量が小さいプロダクトのうち,q を結合したときの増加情報量が最も小さいプロダクト p から q に辺を引く -7 C=90 C=80 C=120 I=30 I=40 C=100

評価実験 目的: 提案手法とPRETの推定結果を比較する データセット: PRETの評価実験と同じ DS1 開発が分岐していないプロダクト集合 (PostgreSQL 7.x, 8.x.0, 9.x.0) DS2 組織内で開発が分岐したプロダクト集合 (PostgreSQL 8.x.y) DS3 プロダクトファミリのうち新しいいくつかの製品しか残っていない場合 (PostgreSQL 8.x.y, ただし y は各ブランチの最終7つ) DS4 プロダクトファミリのうち過去の製品の一部が欠落している場合 (PostgreSQL のリリースを1年毎にサンプル) DS5 プロジェクトが 2 つに分岐した場合 (FFmpeg, libav) DS6 プロジェクトが 3 つ以上に分岐し,複数回の併合が起こった場合 (*-BSD)

評価方法 評価基準 実行の方法 再現率と適合率 誤りの評価 辺の向きが逆 nバージョンスキップ 正しい派生関係が A → B → C → D であるときに, A → D という辺が出力されると,2バージョンスキップの辺が1つあるとみなす. 実行の方法 提案手法の可逆圧縮には, gzip, bzip2, xz を使用 (全て -9 オプションを付与) PRET でファイル類似を判定する閾値は,結果が最良となる 0.9 を採用

実験結果 3件 PRETの勝利 2件 提案手法の勝利 1件 引き分け データ 正解 辺数 手法 出力辺数 適合数 適合率 再現率 誤り 逆 skip 1 2 >3 DS1 12 gz 1.00 bz2 xz PRET 11 0.917 N/A DS2 143 105 0.734 3 22 5 58 0.406 8 33 122 0.853 4 9 128 0.895 DS3 37 24 0.649 6 21 0.568 29 0.784 30 0.811 DS4 20 0.833 14 0.583 DS5 15 0.933 0.0667 7 0.467 0.733 DS6 17 10 0.667 0.588 0.533 0.471 0.800 0.706 実験結果 3件 PRETの勝利 2件 提案手法の勝利 1件 引き分け

適合率の概観

事例 グラフを紹介

表2 PostgreSQL 8.0.x のソースコードに対する圧縮率 考察 DS1とDS4の結果から,提案手法はプロダクトの大きな変化に強い可能性がある 圧縮アルゴリズムによる精度の違いは, gzip > xz > bzip2 gzip は圧縮率が安定している bzip2 は,圧縮率は gzip より優れているものの,圧縮率が非常に不安定 xz は圧縮率が高く,圧縮率も安定しているが,推定結果はあまり良くない 表2 PostgreSQL 8.0.x のソースコードに対する圧縮率 圧縮手法 圧縮率 (平均 ± 標準偏差) 標準偏差/平均 gzip -9 0.231 ± 0.000384 0.00166 bzip2 -9 0.182 ± 0.000368 0.00202 xz -9 0.163 ± 0.000233 0.00143

まとめ コルモゴロフ複雑度を用いた,プロダクト派生グラフの推定手法を提案 今後の課題 PRET と組み合わせることで,精度を高める方法を検討 他の圧縮アルゴリズムの採用を検討 高圧縮であることより,人間の編集操作を反映した圧縮であることが精度を高める可能性あり グラフ構築方法の改善 提案手法およびPRETは木構造を前提としているが,マージが起こると木構造ではなくなる 計算速度の向上 (現在は O(n^2))