UMLモデルを対象とした リファクタリング候補検出の試み 増田敬史,○吉田則裕,浜口優,井上克郎 (大阪大学) 2015/9/30 1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University リファクタリング • ソフトウェアの外部的振る舞いを保ったまま, 内部の構造を改善する作業[1] – 将来的な修正コストを削減できる • リファクタリングの分類 – ソースコードが対象 • 例:コードクローン(重複コード)の集約 – 設計モデルが対象 • モデルリファクタリング(Model refactoring)と呼ばれる • 本発表で取り上げる [1] M.Fowler, Refactoring:Improving the Design of Existing Code, Addison Wesley,1999 2 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 モデルリファクタリング • ソフトウェアの外部的振る舞いを保ったままで, モデルの品質を改善させること [2] – 設計段階でリファクタリングを行うことができる – UMLのクラス図で表されるモデルが対象であるこ とが多い 親クラスの抽出 Developer Employee Programmer Developer Programmer • デザインパターンを導入するモデルリファクタ リングが提案されている [3] [2] T.Mens,G.Taentzer,and D.Muller, Challenges in Model Refactoring, Proc. WOOR 2007. [3] D. Astels, Refactoring with UML, Proc. International Conference on eXtreme Programming and 3 Flexible Process in Software Engineering, 2002. Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 デザインパターン • 設計において頻出する問題を解決するための,洗練 された設計パターン[4] – 適用すべき状況や利点・欠点についても記述されている • デザインパターンを導入するリファクタリング – 既存のモデルにデザインパターンを導入する パターンA パターン適用 パターンB 修正 [4] E.Gamma,R.Helm,R.Johnson,and J.Vlissides.Design Patterns Elements of Reusable Object-Oriented Software.Addison Wesley,1999. Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4 2015/9/30 例題:成績管理・表示システム(1/2) 複数のGUIから入力・閲覧が可能 データが変更されると,他のGUIに変更を通知する 成績データセット 書込 読込 読込 A 君 B 君 C 君 算 数 89 44 33 国 語 88 99 29 理 科 39 59 89 表形式のGUI 変更通知 変更通知 100 90 80 70 60 50 40 30 20 10 0 書込 書込 読込 変更通知 A君 算数 国語 理科 B君 C君 変更通知 A君 B君 C君 棒グラフ形式のGUI 円グラフ形式のGUI 表と円グラフ間の変更通知を作り忘れている Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 5 2015/9/30 例題:成績管理・表示システム(2/2) Observerパターンを適用 成績データセットは,書込が発生すると他のGUIに変更を通知 成績データセット 読込・書込 変更通知 A 君 B 君 C 君 算 数 89 44 33 国 語 88 99 29 理 科 39 59 89 表形式のGUI 関連 なし 100 90 80 70 60 50 40 30 20 10 0 算数 国語 理科 A君 B君 A君 関連 なし B君 C君 C君 棒グラフ形式のGUI 円グラフ形式のGUI 円グラフが追加されても,他のGUIを変更する必要がない 6 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 リファクタリング前後のUMLモデル Seiseki Seiseki Seiseki Seiseki Observer Observer Hyou Hyou BouGraph BouGraph EnGraph HyouHyou BouGraph BouGraph EnGraph (a)リファクタリング前 (b)リファクタリング後 クラス間に双方向の関連が存在 リファクタリング候補 Observerパターンを導入 双方向の関連が除去 7 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 デザインパターンを導入する リファクタリングの問題点 • UMLモデルから,リファクタリングの候補を探すこと は困難 – 特に,大規模なモデルが対象の場合は難しい • リファクタリング後のUMLモデルを予測することは 困難 – 開発者は,リファクタリング前後を比較しながら,是非を 検討したい リファクタリング支援手法が必要 8 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 提案手法の概要 XML形式で記述されたUMLモデルに対して,以下を行う (1) Observerパターンを導入するリファクタリングの候補を特定 (2) (1)からリファクタリング後のUMLモデルを作成 (3) UMLモデル全体からリファクタリングに関連する部分を抽出 検討 提案手法 リファクタリング候補 開発者 UMLモデル全体 リファクタリング後 のUMLモデル 9 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 リファクタリング候補の特定・修正 XMLパーサを作成し,UMLモデルのXML表現を解析する クラス間に双方向の関連が存在 リファクタリング候補 Seiseki Hyou BouGraph (a)UMLモデル <xml> <Class> <name = “ToukeiData”> </Class> <Class> <name = “Hyou”> 双方向の関連を特定 継承に変更 </Class> <AssociationData> <GeneralizationData> <AssociationEnd> <ParentClass> <Classname==“ToukeiData”> “ToukeiData”> <Classname <AssociationEnd> <ChildClass> <Classname==“Hyou”> “Hyou”> <Classname </AssociationData> </GeneralizationData> </xml> 10 (b)UMLモデルのXML表現 2015/9/30 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University リファクタリング候補の特定・修正 XMLパーサを作成し,UMLモデルのXML表現を解析する クラス間に双方向の関連が存在 リファクタリング候補 Seiseki Seiseki Observer Hyou BouGraph Hyou BouGraph (a)UMLモデル 11 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 リファクタリングに関連する部分の抽出 UMLモデル全体からリファクタリングを行った部分を抽出 – リファクタリングを行ったクラスを含むパッケージを検出 – 抽出されたUMLモデルで適用部分を確認できる packageA packageA packageB packageB packageB packageC pacakgeB packageC XML表現を書き換え 適用部分を検出 12 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 実験概要 • 目的 – 実装したツールのリファクタリング候補特定に 対する有効性を確認 • 実験対象 – デジタル時計のUMLモデル • 7クラス,1パッケージ – 教務関係業務システムのUMLモデル • 104クラス,12パッケージ ※UMLモデリングツールJUDEを用いてUMLモデ ルをXML形式に変換した 13 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 デジタル時計のUMLモデル 典型的なリファクタリング例[4] 結果:TimeSourceクラスとClockDriverクラスの 相互関連を解消 UMLモデルに対するデザインパターン適用可能 部分の検出・修正機能を確認 (a) ツール適用前 (b) ツール適用後 [4] R.C.Martin.Agile Software Development.Pearson Education,2004 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 14 2015/9/30 業務システムのUMLモデル(1/2) • 3つのクラス対が双方向の関連を持ってい たが,リファクタリングを行う必要はなかった 1. Action クラスとActionForward クラス Strutsフレームワークを用いている部分 2. Kamoku クラスとKyouikukatei クラス間 2つともオペレーションを持たないデータクラス 3. JugyouKamoku クラスとGakusei クラス 2つともオペレーションを持たないデータクラス 15 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 業務システムのUMLモデル (2/2) リファクタリング候補を検討 適用する必要がないことがわかった 開発者が検出部分に注目しリファクタリングを検討可能 RishuuServiceクラスがJugyouKamokuクラス とGakuseiクラスのデータを管理 16 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 考察 • 提案手法を用いてリファクタリング候補の検出 を行うことが可能 – • 業務ソフトウェアのUMLモデルからは,リファ クタリングすべき例が見つからなかった – • 検出された部分のみで設計を検討できた 他の業務ソフトウェアにも適用したい Strutsを用いている部分が検出された – 特定のフレームワークを用いている部分は,分析 対象から外せるようにしたい 17 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30 まとめと今後の課題 • UMLモデル上でのリファクタリング候補検出手法を提 案 – リファクタリング候補を開発者に提示 – 実装したツールを用いた適用実験 • 今後の課題 – – – – – 他のソフトウェアへの適用 他のデザインパターンを導入するリファクタリングの支援 リファクタリングに関連する部分の抽出法 リファクタリングを行う効果の評価方法 シーケンス図を対象としたリファクタリング支援 18 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/9/30
© Copyright 2024 ExpyDoc