UMLモデルを対象とした リファクタリング候補検出の試み

Slides:



Advertisements
Similar presentations
シーケンス図の生成のための実行履歴圧縮手法
Advertisements

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
Riding the Design Wave II
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
肥後 芳樹, ○石尾 隆, 渡邊 結, 出張 純也, 畑 秀明, 三宅 達也, 水野 修, 丸山 勝久
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
CKメトリクスを用いてリファクタリングの 効果を予測する手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
UMLメタモデルの変更に対応した ダイアグラム間整合性検証環境の 自動生成手法
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
組込みシステムの外部環境分析のためのUMLプロファイル
暗黙的に型付けされる構造体の Java言語への導入
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
リファクタリング中に生じる コンパイルエラーの自動解消手法
CKメトリクスに基づくリファクタリングの 効果予測手法の提案と実装
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
重複コードと非重複コードにおける 修正頻度の比較
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
Javaプログラムの変更を支援する 影響波及解析システム
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
社会シミュレーションのための モデル作成環境
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
UMLの概要とオブジェクト指向の基本概念
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 理工学部 情報システム工学科 新田直也.
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
開発者との対話を活かした 横断的構造の表現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア工学 知能情報学部 新田直也.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
アジャイル開発プロセス 森口朋広.
FSE/ASE勉強会 A10:Software Maintenance II
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Detecting Software Modularity Violations
Presentation transcript:

UMLモデルを対象とした リファクタリング候補検出の試み 増田敬史,○吉田則裕,浜口優,井上克郎 (大阪大学) 2019/4/7

リファクタリング ソフトウェアの外部的振る舞いを保ったまま,内部の構造を改善する作業[1] リファクタリングの分類 将来的な修正コストを削減できる リファクタリングの分類 ソースコードが対象 例:コードクローン(重複コード)の集約 設計モデルが対象 モデルリファクタリング(Model refactoring)と呼ばれる 本発表で取り上げる [1] M.Fowler, Refactoring:Improving the Design of Existing Code, Addison Wesley,1999 2019/4/7

モデルリファクタリング ソフトウェアの外部的振る舞いを保ったままで,モデルの品質を改善させること [2] 設計段階でリファクタリングを行うことができる UMLのクラス図で表されるモデルが対象であることが多い デザインパターンを導入するモデルリファクタリングが提案されている [3] 親クラスの抽出 Employee Developer Programmer Developer Programmer [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 Flexible Process in Software Engineering, 2002. 2019/4/7

デザインパターン 設計において頻出する問題を解決するための,洗練された設計パターン[4] デザインパターンを導入するリファクタリング 適用すべき状況や利点・欠点についても記述されている デザインパターンを導入するリファクタリング 既存のモデルにデザインパターンを導入する パターンA パターンB パターン適用 修正 [4] E.Gamma,R.Helm,R.Johnson,and J.Vlissides.Design Patterns Elements of Reusable Object-Oriented Software.Addison Wesley,1999. 2019/4/7

表と円グラフ間の変更通知を作り忘れている 例題:成績管理・表示システム(1/2) 複数のGUIから入力・閲覧が可能 データが変更されると,他のGUIに変更を通知する 成績データセット 書込 読込 書込 読込 書込 読込 変更通知 A君 B君 C君 算数 89 44 33 国語 88 99 29 理科 39 59 変更通知 変更通知 変更通知 表形式のGUI 棒グラフ形式のGUI 円グラフ形式のGUI 表と円グラフ間の変更通知を作り忘れている 2019/4/7

円グラフが追加されても,他のGUIを変更する必要がない 例題:成績管理・表示システム(2/2) Observerパターンを適用 成績データセットは,書込が発生すると他のGUIに変更を通知 成績データセット 読込・書込 変更通知 A君 B君 C君 算数 89 44 33 国語 88 99 29 理科 39 59 関連 なし 関連 なし 表形式のGUI 棒グラフ形式のGUI 円グラフ形式のGUI 円グラフが追加されても,他のGUIを変更する必要がない 2019/4/7

リファクタリング前後のUMLモデル (a)リファクタリング前 (b)リファクタリング後 クラス間に双方向の関連が存在 Hyou Seiseki BouGraph Observer Hyou Seiseki BouGraph Observer EnGraph Hyou Seiseki BouGraph EnGraph Hyou Seiseki BouGraph (a)リファクタリング前 (b)リファクタリング後 クラス間に双方向の関連が存在  リファクタリング候補 Observerパターンを導入  双方向の関連が除去 2019/4/7

デザインパターンを導入する リファクタリングの問題点 UMLモデルから,リファクタリングの候補を探すことは困難 特に,大規模なモデルが対象の場合は難しい リファクタリング後のUMLモデルを予測することは困難 開発者は,リファクタリング前後を比較しながら,是非を検討したい リファクタリング支援手法が必要 2019/4/7

提案手法の概要 XML形式で記述されたUMLモデルに対して,以下を行う (1) Observerパターンを導入するリファクタリングの候補を特定 (2) (1)からリファクタリング後のUMLモデルを作成 (3) UMLモデル全体からリファクタリングに関連する部分を抽出 検討 提案手法 リファクタリング候補 UMLモデル全体 開発者 リファクタリング後 のUMLモデル 2019/4/7

リファクタリング候補の特定・修正 XMLパーサを作成し,UMLモデルのXML表現を解析する クラス間に双方向の関連が存在  リファクタリング候補 <xml> <Class> <name = “ToukeiData”> </Class> <name = “Hyou”> <AssociationData> <AssociationEnd> <Classname = “ToukeiData”> <Classname = “Hyou”> </AssociationData> </xml> Seiseki 双方向の関連を特定 継承に変更 <GeneralizationData> <ParentClass> <Classname = “ToukeiData”> <ChildClass> <Classname = “Hyou”> </GeneralizationData> Hyou BouGraph (a)UMLモデル (b)UMLモデルのXML表現 2019/4/7

リファクタリング候補の特定・修正 XMLパーサを作成し,UMLモデルのXML表現を解析する クラス間に双方向の関連が存在  リファクタリング候補 Hyou Seiseki BouGraph Observer Seiseki Hyou BouGraph (a)UMLモデル 2019/4/7

リファクタリングに関連する部分の抽出 UMLモデル全体からリファクタリングを行った部分を抽出 リファクタリングを行ったクラスを含むパッケージを検出 抽出されたUMLモデルで適用部分を確認できる packageA packageB packageA packageB packageC packageB pacakgeB packageC XML表現を書き換え 適用部分を検出 2019/4/7

実験概要 目的 実験対象 実装したツールのリファクタリング候補特定に対する有効性を確認 デジタル時計のUMLモデル 7クラス,1パッケージ 教務関係業務システムのUMLモデル 104クラス,12パッケージ ※UMLモデリングツールJUDEを用いてUMLモデルをXML形式に変換した 2019/4/7

デジタル時計のUMLモデル 典型的なリファクタリング例[4] 結果:TimeSourceクラスとClockDriverクラスの 相互関連を解消 UMLモデルに対するデザインパターン適用可能 部分の検出・修正機能を確認 (a) ツール適用前 (b) ツール適用後 [4] R.C.Martin.Agile Software Development.Pearson Education,2004 2019/4/7

業務システムのUMLモデル(1/2) 3つのクラス対が双方向の関連を持っていたが,リファクタリングを行う必要はなかった Action クラスとActionForward クラス Strutsフレームワークを用いている部分 Kamoku クラスとKyouikukatei クラス間 2つともオペレーションを持たないデータクラス JugyouKamoku クラスとGakusei クラス 2019/4/7

開発者が検出部分に注目しリファクタリングを検討可能 業務システムのUMLモデル (2/2) リファクタリング候補を検討 適用する必要がないことがわかった 開発者が検出部分に注目しリファクタリングを検討可能 RishuuServiceクラスがJugyouKamokuクラス とGakuseiクラスのデータを管理 2019/4/7

考察 提案手法を用いてリファクタリング候補の検出を行うことが可能 検出された部分のみで設計を検討できた 業務ソフトウェアのUMLモデルからは,リファクタリングすべき例が見つからなかった 他の業務ソフトウェアにも適用したい Strutsを用いている部分が検出された 特定のフレームワークを用いている部分は,分析対象から外せるようにしたい 2019/4/7

まとめと今後の課題 UMLモデル上でのリファクタリング候補検出手法を提案 今後の課題 リファクタリング候補を開発者に提示 実装したツールを用いた適用実験 今後の課題 他のソフトウェアへの適用 他のデザインパターンを導入するリファクタリングの支援 リファクタリングに関連する部分の抽出法 リファクタリングを行う効果の評価方法 シーケンス図を対象としたリファクタリング支援 2019/4/7