ファイルの同時変更パターンと変更 差分の分析による 論理的結合関係の自動抽出 松村知子*,横森励士**,大杉直樹*, 川口真司***,松下誠*** *奈良先端科学技術大学院大学情報科学研究科 **南山大学数理情報学部情報通信学科 ***大阪大学大学院情報科学研究科 2005年6月9日 ソフトウェアシンポジウム2005 於 富山国際会議場 1 レガシーソフトウェアの特徴 長年にわたる保守作業(機能変更,追加, 及びフォールト修正)によって,システム構 造が複雑化する あるコード片の変更に対して,別のコード片 も同時に変更されなければいけない,といっ た論理的結合関係が増加している 追加モジュール Logical Coupling* 保守作業 追加関係 *H. Gall, M. Jazayeri, J. Krajewski: ”CVS Release History Data for Detecting Logical Couplings”, Proc. 6th International Workshop on Principals of Software Evolution (IWPSE'03) pp.13-23, Sep. 2003. Helsinki, Finland 2 増加するLogical Couplingの問題点 設計ドキュメントに明記されていないものが多 いため,時間の経過や作業者の入れ替わりに よって,潜在化する システムに特化している プログラムコードの構文解析のみでは,把握 できないものがある Logical Couplingの例 関数Aへの変更を,Aのコピー&ペーストである関 数Bにも行わなければならない テーブルXに追加をする場合,記号定数Yの値を 修正漏れや修正間違いによる 変更しなければならない フォールト混入の危険性が増加する 3 Logical Couplingを用いた保守支援 結合関係を持つファイルは同じ変更者に よって同時に変更されることが多い 構成管理システムの変更履歴から,同時変 更される頻度の高いファイルの組み合わせ を抽出する ファイル変更パターン 抽出されたパターンを用いて,コード変更時 の修正漏れ・システム構造の複雑化を検出 する 新たな変更 ファイル変更パターンを抽出 {A,B,C,D}{P,G,F} {X,Y,Z} 同時変更ファイル Dの変更漏れ? {A,B,C} {P,G,F,X} 複雑化? 4 ファイル変更パターンによる保守支援 の特長と問題点 特長 構成管理システムの変更履歴のみから抽出 プログラミング言語に応じた構文解析が不要で,大規 模なコードサイズにも対応可能 コードの更新に応じて動的な結合関係の更新が可能 すべてのファイルを対象にできる(.ini, .properties, 画像ファイルなど) 問題点 関連ないファイルの更新が同時に行われることがあり, 更新数が少ないと,結合関係を持たないパターンが多 く抽出される(=抽出精度が悪化する)* *A. T. T. Ying, G. C. Murphy: ” Predicting Source Code Changes by Mining Change History ”, IEEE transactions on Software Engineering, pp.574-586, Vol.30, No.9, Sep. 2004. 5 関連研究 抽出精度を向上させるための従来手法 ファイル変更に関連する問題報告書中の単語 情報などを利用する* 粒度を構文要素レベル(関数・メソッドなど)まで 細分化する** ファイル変更パターンを用いることの特長を 一部相殺している 追加のデータ収集が必要 構文解析が必要 *J. S. Shirabad, T. C. Lethbridge, S. Matwin : ” Mining the Maintenance History of a Legacy Software System”, Proc. International Conference on Software Maintenance (ICSM'03) pp.95-104, Sep. 2003. Amsterdam, The Netherlands **Thomas Zimmermann, Peter Weißgerber, Stephan Diehl, Andreas Zeller: ” Mining Version Histories to Guide Software Changes ”, Proc. 26th International Conference on Software Engineering (ICSE'04) May, 2004 Edinburgh, Scotland, United Kingdom 6 本研究の目的 構成管理システムの変更履歴と各ファイル の変更内容(差分)を用いて,論理的結合関 係を持つファイル変更パターンを高精度で抽 出する 提案する方法の特長 論理的結合関係の抽出に必要なデータは,構成 管理システム(CVSなど)から取得可能で,デー タ収集のための追加工数が不要である 構文解析を行わないため,プログラミング言語を 意識する必要が無い 7 提案手法の流れ 同時に行われたと考えられる更新処理 構成管理システム (CVS)リポジトリ 同時変更数が一 定以上のファイ ル変更パターン の抽出 Fileα, Fileβ, Fileγ, Fileδ Fileθ, Fileη, Fileκ, Fileλ Fileα, Fileγ, Fileε Fileε, Fileζ 削除語 削除語 削除語 追加語 追加語 追加語 パターン毎に 同時変更時 の変更内容 から単語リス トの生成 … Fileα, Fileβ, Fileγ, Fileδ Fileθ, Fileη, Fileκ, Fileλ Fileα, Fileγ, Fileε Fileε, Fileζ 単語リストを用いて, トランザクション毎・ト ランザクション間の結 合関係の強さ(結合 度)を判定 結合度に基いて 有効なファイル 変更パターンの 精選 有効なファイル 変更パターン 8 提案方法の手順(1) 変更履歴データから同時変更数が一定以上 のファイル変更パターンを取り出す 構成管理 システム Trans. 変更日付 番号 1 2000/2/26 9:28:42 2 2000/2/27 9:42:12 3 2000/2/27 11:03:35 4 2000/2/28 1:30:28 5 2000/2/28 1:36:06 6 2000/2/28 1:37:14 7 2000/2/28 1:38:07 … 同時更新 データ 作成処理* 変更者 tomoko tomoko noriko kohei noriko tomoko kohei トランザクション データ 一定回数以上の 同時更新 パターン作成** ファイル変更 パターン 変更ファ ファイル1 ファイル2 ファイル3 ファイル4 ファイル5 ファイル6 … ファイル パターン 同時更 ファイル ファイル ファイル ファイル イル数 支持度 番号 新回数 数 番号1 番号2 番号3 番号4 21 0 1 2 3 4 5 1 9 0.00438 4 564 583 584 590 263 21 22 1 23 24 25 0.00438 272 4 26 119 121 125 132 4 2 270 9 271 4 131 17 273 187 194 196 5 3 8 9 0.00438 14 121 0.00438 4 17 82 194 196 2 4 274 9 204 0.00438 4 2 8 17 196 2 5 208 9 275 3 584 588 590 1 6 82 10 0.00486 7 9 0.00438 3 583 584 590 ・・・・・・・ *Thomas Zimmermann, Peter Weißgerber: ”Preprocessing CVS Data for Fine-Grained Analysis”, Proc. International Workshop on Mining Software Repositories (MSR), Edinburgh, Scotland, UK, May 2004 **Apriori Algorithm使用:R. Agrawal, R. Srikant: ”Fast algorithm for mining association rules”, Proc. 20th Very Large Data Bases Conference(VLDB), pp.487-499. Morgan Kaufmann, 1994 9 提案方法の手順 (2) 変更内容から単語リストを生成する Fileα Fileβ Fileγ Fileδ 削除語 削除語 削除語 削除語 追加語 追加語 追加語 追加語 削除語 削除語 削除語 削除語 追加語 追加語 追加語 追加語 FileαFileβ Fileγ Fileδ トランザクション1 1.6 1.3 1.9 トランザクション 1.7 トランザクション2 1.8 トランザクション 1.2 差分情報 1.3 1.10 1.4 差分情報 1.4 1.11 1.5 14c14 さ < #include "BzfString.h“ --ぶ > #include <string> ん 70c70 < BzfString SGIImageFile::getExtension() じ --> std::string SGIImageFile::getExtension() 10 提案方法の手順 (3) トランザクション毎/トランザクション間の単 語リストの似ている度合い(類似度)を計算 し,結合関係の強さ(結合度)を判定する 類似的結合関係 1トランザクション内で,同時変更ファイルに共通 する内容の変更が行われる関係 連携的結合関係 異なるトランザクション間で,共通する内容の変 更が行われる関係 11 類似的結合関係の類似度 共通単語数 全ファイルに共通する変更単語数 類似度 = 同時更新ファイル群の最小変更単語数 最小単語数 File α File β File γ File δ トランザクション1 A E B F C D A E G B C F D A H E B D A B G H E F C C D 4 4 = 1.00 H 1 3 = 0.33 L 3 3 = 1.00 S 1 2 = 0.50 トランザクション2 I J K L I O S Q R O J N L I J M L I J R O U Q R O P Q 12 連携的結合関係の類似度 共通単語数 各トランザクションに共通する変更単語数 類似度 = File α 2つのトランザクションうち少ない変更単語数 File β File γ File δ 最小単語数 トランザクション3 A B L M C D E F N O G H I J K 0 = 0.00 10 Q P 5 6 = 0.83 …… 0 = 1.00 11 トランザクション4 L X N M Y Z a O b P c V R L W M S N T O P 5 6 = 0.83 13 提案方法の手順 (4) 計算された類似度から,有効なファイル変 更パターンを精選する 類似度N%以上の組み合わせがS個以上存在 するファイル変更パターンを,有効パターンとす る 閾値N,Sはシステムの更新数やファイル数に基 いて,決定する 14 計測事例 提案方法を用いて,ファイル変更パターンを 精選する 精選後のファイル変更パターンから,論理 的結合関係を取り出す 計測対象:3つのオープンソースシステム 計測手段 CVS(構成管理システム)からの履歴抽出: EASEプロジェクト*で開発しているEPMツール の一部機能を使用 差分抽出:CVSのdiffコマンドを使用 その他の処理は専用プログラムを作成して実施 *EASE (Empirical Approach to Software Engineering) Project, http://www.empirical.jp/project/index.html 15 結果~ファイル変更パターンの精選 計測対象プロジェクトの概要 トランザク 測定対象期間 ション数 測定開始日 測定終了日 2709 6249 2003/7/10 2004/9/17 1562 1083 2000/2/22 2003/11/30 1796 7877 2000/3/5 2004/11/25 プロジェクト名 ファイル数 Azureus DooMLegacy BZFlag ファイル変更パターンの精選結果 プロジェクト名 Azureus DooMLegacy BZFlag 最小同時 更新回数 総パター ン数 14 9 14 類似度80%以上の 組み合わせが8個以上 有効パターン数 類似的 239 連携的 合計(重複なし) 類似的 268 連携的 合計(重複なし) 類似的 292 連携的 合計(重複なし) 220 1 221 31 6 37 164 85 207 16 類似的結合関係例 全ファイ bzflag/src/ ルの共通 mediafile/I 単語数 mageFile.h 1 1 トランザク 追加語 ション1 削除語 1 1 トランザク 追加語 2 2 ション2 削除語 1 1 トランザク 追加語 1 1 Index: bzflag/src/mediafile/ImageFile.h 0 0 diff ション3 -r1.2 -r1.3 削除語 トランザク 追加語 1 1 25c25 削除語 1 1 < ション4// static BzfString getExtension(); 2 2 --- トランザク 追加語 削除語 1 1 > ション5// static std::string getExtension(); トランザク 追加語 13 13 ション6 削除語 0 0 Index: bzflag/src/mediafile/SGIImageFile.h トランザク 追加語 5 5 diff -r1.2 -r1.3 ション7 削除語 5 5 23c23 1 1 < トランザク static 追加語 BzfString getExtension(); --- ション8 削除語 1 1 > トランザク static 追加語 std::string getExtension(); 1 1 ション9 削除語 1 1 トランザク 追加語 1 Index: bzflag/src/mediafile/WaveAudioFile.h 1 1 1 diff ション10 -r1.2 -r1.3 削除語 23c23 < --> static BzfString getExtension(); static std::string getExtension(); bzflag/src/ bzflag/src/ bzflag/src/ bzflag/src/ 共通単語 mediafile/S mediafile/S mediafile/W mediafile/Wa 数/最小 GIImageFile. GIImageFile. aveAudioFile veAudioFile. 単語数 cxx 1h 1 .cxx 1h 1 1 1 1 1 1 1 2 2 2 2 1 2 1 3 1 1 1 1 1 1 1 0 0 0 0 0 Index: bzflag/src/mediafile/SGIImageFile.cxx 1 1 1 1 1 diff -r1.2 -r1.3 1 1 1 1 1 14c14 2 "BzfString.h" 2 2 2 1 < #include 1 1 1 1 1 --> #include <string> 13 13 13 13 1 70c70 0 0 0 0 0 < BzfString 5 SGIImageFile::getExtension() 5 5 5 1 --5 5 5 5 1 > std::string SGIImageFile::getExtension() 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Index: bzflag/src/mediafile/WaveAudioFile.cxx 1 1 1 1 1 diff -r1.2 -r1.3 1 1 1 1 1 14d13 1 1 1 1 1 < #include "BzfString.h" 108c107 < BzfString WaveAudioFile::getExtension() --> std::string WaveAudioFile::getExtension() 17 連携的結合関係例 トランザク 追加語/削除語 トランザクショ 追加語/削除語 ション番号① (ADD/DELETE) ン番号② (ADD/DELETE) 共通単語数 トランザクショ トランザクショ 共通単語数/ ン①語数 ン②語数 最小単語数 6 ADD 15 ADD 5 6 37 0.83333333 7 ADD 8 DELETE 2 6 2 1 8 ADD 9 DELETE 2 19 2 1 9 18:27:41 ADD 2 7 = trepan 2 1 CommitDate = 2004/06/27 08:55:31 Owner CommitDate = 2004/06/22 Owner = trepan 10 DELETE Index: bzflag/include/Protocol.h 10 ADD 11 DELETE 3 9 3 1 Index: bzflag/include/Protocol.h ======================================================== ======================================================== 12 ADD 14 DELETE 12 13 34 0.92307692 RCS file: /cvsroot/bzflag/bzflag/include/Protocol.h,v RCS file: /cvsroot/bzflag/bzflag/include/Protocol.h,v 15 ADD 12 13 37 0.92307692 retrieving revision 1.59 retrieving revision 1.58 12 ADD retrieving revision 1.60 14 DELETE 19 19 34 1 retrieving revision 1.59 13 ADD diff -r1.59 -r1.60 diff -r1.58 -r1.59 13 ADD 15 ADD 19 19 37 1 82a83 110a111,112 14 ADD 15 DELETE 2 2 2 > const uint16_t MsgPlayerUpdateSmall = 0x7073; // 'ps‘1 > const uint16_t WorldCodeWeapon = 0x7765; // 'we‘ Index: bzflag/include/version.h 14 DELETE 34 34 37 1 > const uint16_t WorldCodeZone = 0x7A6e; 15 ADD // 'zn‘ ======================================================== 121a124,125 RCS file: /cvsroot/bzflag/bzflag/include/version.h,v > const uint16_t WorldCodeWeaponSize = 24; // basic size, revision 1.46 > const uint16_t WorldCodeZoneSize = 34; // basicretrieving size, retrieving revision 1.47 Index: bzflag/include/version.h diff -r1.46 ========================================================-r1.47 29c29 RCS file: /cvsroot/bzflag/bzflag/include/version.h,v < #define BZ_PROTO_VERSION "1115“ retrieving revision 1.45 --retrieving revision 1.46 > #define BZ_PROTO_VERSION "1116“ diff -r1.45 -r1.46 41c41 29c29 < #define BZ_REV 5 < #define BZ_PROTO_VERSION "1114“ ----> #define BZ_REV 6 > #define BZ_PROTO_VERSION "1115“ 41c41 < #define BZ_REV 4 --18 > #define BZ_REV 5 考察 共通単語に含まれる予約語やコメント中の 汎用的な単語(theやof)によって,類似度 が上がってしまう 単語の重み付け,もしくは取捨選択が必要 連携的結合関係において,1つのファイルの 変更・共通単語数が大きいと,他のファイル の変更に全く関連が無くても,類似度が高く なる 19 まとめ 構成管理システムから得られるファイルの 変更履歴や変更内容から,論理的結合関 係を持つファイル変更パターンを抽出する 方法を提案した 提案手法を3つのオープンソースに適用し, いくつかの抽出された論理的結合関係を紹 介した 20 今後の課題 本手法により精選されたファイル変更パター ンから論理的結合関係を抽出し,提案方法 を評価・改善する 変更内容の分類による結合関係の拡張 類似度計算方法の改良 具体的な閾値(最小同時変更回数や類似度な ど)の決定方法の確立 21 End of Slide 22
© Copyright 2024 ExpyDoc