大規模ソフトウエアに対 するUMLモデルを利用したリフ

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