UMLモデルを対象とした リファクタリング候補検出手法の提案と実現

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

メタモデル記述を用いた成果物間の依存関係追跡手法
シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
表計算ソフトで動作するNEMUROの開発
侵入検知システムの構築と ログの可読性向上
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
ソフトウェア設計における意思決定ガイドラインとしてのデザインパターンのモデル
セマンティクスを利用した 図書検索システム
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
UMLとは           032234 田邊祐司.
コンポーネントランクを用いた ソフトウェアのクラス設計に関する 分析手法の提案
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
CKメトリクスを用いてリファクタリングの 効果を予測する手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
UMLメタモデルの変更に対応した ダイアグラム間整合性検証環境の 自動生成手法
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
組込みシステムの外部環境分析のためのUMLプロファイル
暗黙的に型付けされる構造体の Java言語への導入
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
リファクタリング中に生じる コンパイルエラーの自動解消手法
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
CKメトリクスに基づくリファクタリングの 効果予測手法の提案と実装
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
言語XBRLで記述された 財務諸表の分析支援ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
バイトコードを単位とするJavaスライスシステムの試作
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
ソフトウェア保守のための コードクローン情報検索ツール
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 理工学部 情報システム工学科 新田直也.
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
ソフトウェア工学 知能情報学部 新田直也.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Presentation transcript:

UMLモデルを対象とした リファクタリング候補検出手法の提案と実現 井上研究室 増田敬史 UMLモデルを利用したデザインパターン適用支援手法の提案と実現というタイトルで。 井上研究室の増田が発表します。 2019/5/30

リファクタリング ソフトウェアの外部的振る舞いを保ったままで内部の 構造を改善する[1] 将来の機能追加やデバッグ,再利用に備えることが可能 近年モデルに対するリファクタリングの研究が活発[2] デザインパターンを利用したリファクタリング 修正 関連を除去 クラスを抽象化 背景について説明します。 下の図はUMLモデルを複数回リファクタリングすることで徐々に設計が洗練されていく様子です。 またリファクタリング手法の中にはデザインパターンを利用したものがあります。 [1] M.Fowler.Refactoring:Improving the Design of Existing Code.Addison Wesley,1999 [2] T.Mens,G.Taentzer,and D.Muller.Challenges in Model Refactoring. Technical Report from University of Mons-Hainaut,Belgium,2005. 2019/5/30

デザインパターン 過去の開発者が経験的に得た汎用的な 設計パターン[3] 様々なプログラムで再利用可能 リファクタリングの際にデザインパターンを利用可能 デザインパターン適用には慎重な検討が必要 設計が複雑になる パターンA パターンB パターン適用 修正 下の図のようにリファクタリングの際にデザインパターンを利用することができます。 また一般にデザインパターンを適用適用できる箇所であっても将来的に変更が必要のない 箇所に対してはむやみに適用すべきでないという考えがあります。 よってデザインパターン適用には開発者による慎重な検討が必要となります。 [3] E.Gamma,R.Helm,R.Johnson,and J.Vlissides.Design Patterns Elements of Reusable Object-Oriented Software.Addison Wesley,1999. 2019/5/30

表と円グラフ間の変更通知を作り忘れている 例題:成績管理・表示システム(1/2) 複数のGUIから入力・閲覧が可能 データが変更されると,他のGUIに変更を通知する 成績データセット 書込 読込 書込 読込 書込 読込 変更通知 A君 B君 C君 算数 89 44 33 国語 88 99 29 理科 39 59 変更通知 デザインパターンを利用したリファクタリングの例として成績管理・表示システムが挙げられます。 このシステムは複数のGUIから入力・閲覧が可能です。 例えば、表形式のGUIの値が変更された場合、成績データセットに変更を書き込み、 棒グラフ形式のGUIに変更を通知します。 変更通知を受け取った棒グラフ形式のGUIは成績データセットから値を読み込みます。 この設計の場合、GUIの数だけ相互に変更通知機能を持つ必要があります。 こうした設計は変更に対する柔軟性がない設計だと思われます。 例えば、ここで円グラフ形式のGUIが追加されると、 変更箇所の多さから、表と円グラフの変更通知を作り忘れるなどバグの混入する 危険があります。 この設計に対してデザインパターンを利用し、リファクタリングします。 変更通知 変更通知 表形式のGUI 棒グラフ形式のGUI 円グラフ形式のGUI 表と円グラフ間の変更通知を作り忘れている 2019/5/30

円グラフが追加されても,他のGUIを変更する必要がない 例題:成績管理・表示システム(2/2) Observerパターンを適用 成績データセットは,書込が発生すると他のGUIに 変更を通知 成績データセット 書込 変更通知 読込 A君 B君 C君 算数 89 44 33 国語 88 99 29 理科 39 59 関連 なし 関連 なし 先ほどの設計にObserverパターンと呼ばれるデザインパターンを適用しました。 成績データセットが他のGUIに対して変更通知を一括して行います。 表形式のGUI、棒グラフ形式のGUIはお互いのデータ変更を知るひつようがありません。 二つのGUIはObserverとして成績データセットの変更を監視しています。 この場合に円グラフ形式のGUIが追加されても他のGUIを変更する必要がありません。 この設計は変更に対する柔軟性があるといえます。 表形式のGUI 棒グラフ形式のGUI 円グラフ形式のGUI 円グラフが追加されても,他のGUIを変更する必要がない 2019/5/30

リファクタリング候補検出 デザインパターンが適用可能な箇所には設計上の 欠点がある可能性がある 開発者が設計を確認可能 将来変更が必要になるかを検討しリファクタリングする 問題点 膨大な数のクラスを持つソフトウェアから 人間の目で探すことは困難 Observerパターンはオブジェクト間の相互関連を除去することで変更に対する柔軟性を もたせることが出来ました。 このように開発者はデザインパターン適用条件に合致する箇所を慎重に検討することで 実際にリファクタリングを行うかの判断をすることができます。 また実際にリファクタリングを行う必要がなかった場合も、適用可能箇所を検討することで 開発者が設計を小さな範囲で確認できるというメリットがある。 問題は大規模なソフトウェアからデザインパターン適用可能箇所を人間の 目で探すことは困難であるという点です。 よってデザインパターン適用可能箇所を自動的に検出し、開発者がスムーズにリファクタリングを 検討できる仕組みが必要と考えられます。 デザインパターン適用可能箇所を自動的に 検出する仕組みが必要 2019/5/30

提案手法の概要 UMLモデルを解析しリファクタリング候補を提示 手順1.デザインパターン適用可能箇所を検出し UMLモデルを修正 検出した部分 検証 開発者 適用するデザインパターン 提案手法 提案手法の概要について述べます。 UMLモデルを解析しリファクタリング候補を提示します。 まず、UMLモデル上のデザインパターンの適用条件に合致した箇所を検出し、 そのデザインパターンを適用した後のUMLモデルに修正します。 適用条件を変えることで、様々なデザインパターン適用可能箇所を見つけることが出来ます。 次にUMLモデルの集合から検出した箇所を抽出します。 これによりリファクタリングを行う開発者が小さな範囲で設計を確認し、リファクタリングの 検討を行うことが出来ます。 2019/5/30

手順1. デザインパターン適用可能箇所を検出し UMLモデルを修正 例 成績管理・表示システムにObserverパターンを適用 クラス間の相互関連を除去 Hyou ToukeiData BouGraph Observer Table ToukeiData BarGraph Observer EnGraph Hyou ToukeiData BouGraph Table ToukeiData BarGraph EnGraph 提案手法の手順について説明します。 まずUMLモデル上のデザインパターン適用可能箇所を検出し、適用後のUMLモデル に修正します。 例としてObserverパターンを適用した様子を示します。 下の図は先ほど説明した成績管理・表示システムを表すUMLモデルです。 ツール適用前のUMLモデルはToukeiDataクラスとTableクラス、BouGraphクラスが 相互に関連しており、複雑な設計になっています。 この場合EnGraphクラスが追加された場合に多くの変更が必要になります。 ツール適用後のUMLモデルはTableクラスとBouGraphクラスがObserverクラスを継承することで ToukeiDataクラスとの相互関連が取り除いてあります。 この場合、EnGraphクラスが追加されたときもObserverクラスを継承し、ToukeiDataクラスと 関連することで変更が完了できます。 一般にUMLモデルはXMLで表現されます。 よって実装したツールではXMLの木構造を利用し、UMLモデルを解析します。 次のスライドでUMLモデル解析について説明します。 設計が複雑 (b)ツール適用後のUMLモデル (a)ツール適用前のUMLモデル 一般にUMLモデルはXMLで表現される ⇒XMLの木構造を利用しUMLモデルを解析 2019/5/30

UMLモデルの解析・修正 XMLパーサを作成し,UMLモデルのXML表現を解析する 例:Observerパターンの適用条件 <Class> <name = “ToukeiData”> </Class> <name = “Hyou”> <AssociationData> <AssociationEnd> <Classname = “ToukeiData”> <Classname = “Hyou”> </AssociationData> </xml> 例:Observerパターンの適用条件 クラスが相互に関連している ToukeiData 適用条件に合致 関連記述を修正 <GeneralizationData> <ParentClass> <Classname = “ToukeiData”> <ChildClass> <Classname = “Hyou”> </GeneralizationData> Hyou BouGraph 実装したツールではXMLパーサを作成し、UMLモデルの木構造を解析します。 UMLモデルはUMLモデリングツールを利用してXML表現に変換することができます。 左図のToukeiDataクラスとHyouクラスをXMLで表現したものが右図に示されています。 二つのクラス間の相互の関連は右図のXML表現ではこのAssociationData記述で表されます。 今回はObserverパターンの適用条件をクラスが相互に関連していることと定義して 解析を行ったので、このUMLモデルは適用条件に合致しているといえます。 UMLモデルの修正は、XML表現を書き換えることで可能となります。 このようにAssociationData記述を除去することでUMLモデル上でも相互関連が除去されます。 GeneralizationData記述を追加することで、UMLモデル上でも親子関係が追加されます。 (a)UMLモデル (b)UMLモデルのXML表現 2019/5/30

手順2. 修正した箇所のUMLモデルを抽出 デザインパターンを適用すべき箇所をUMLモデル全体 から抽出 デザインパターンが適用できるクラスのあるパッケージを抽出 小さなUMLモデルで適用箇所を確認できる packageA packageB packageA packageB packageC packageB pacakgeB 次に、デザインパターン適用可能箇所をUMLモデルの集合から抽出します。 抽出はパッケージ単位で行います。 これにより開発者は少数のUMLもデルでリファクタリングの検討が行えます。 適用箇所の抽出は先ほどのスライドのようにXML表現を書き換えることで行います。 packageC XML表現を書き換え 適用箇所を抽出 2019/5/30

実験概要 目的 利用するソフトウェア 実験対象 実装したツールのリファクタリング候補特定に対する有効性を確認 JUDE UMLモデルとXML表現の変換を行う 実験対象 デジタル時計のUMLモデル(7クラス,1パッケージ) オージス総研が開発した業務システムのUMLモデル(104クラス,12パッケージ) ANTLR3.0のUMLモデル(178クラス,12パッケージ) ANTLRの説明 実験について説明します。 実験の目的は実装したツールのリファクタリング候補特定に対する有効性を確認することです。 利用するソフトウェアはUMLモデリングツールとしてJUDEを利用した。 UMLモデルとXML表現の変換を行います。 実験対象としては、画面に時刻を表示するプログラムをあらわすデジタル時計のUMLモデルで 小さなモデルに対するツールの機能を確認し、 オージス総研が開発した教務関係業務システムのUMLモデルと多くの言語に対応した コンパイラ・コンパイラとして知られるANTLRのversion3.0のソースコード から出力したUMLモデルについて実験を行い大規模なソフトウェアのUMLモデルに対して ツールの有効性を確認します。 今回は時間の関係上上の二つの実験についてのみ説明します。 2019/5/30

デジタル時計のUMLモデル UMLモデルに対するデザインパターン適用可能 箇所の検出・修正機能を確認 典型的なリファクタリング例[4] 適用したデザインパターン:Observerパターン 結果:TimeSourceクラスとClockDriverクラスの 相互関連を解消 UMLモデルに対するデザインパターン適用可能 箇所の検出・修正機能を確認 まずデジタル時計のUMLモデルに対して適用実験を行いました。 左のモデルは書籍にObserverパターンが適用可能なモデルとして紹介されており、 現在時刻のデータを持つTimeSourceクラスと現在の時刻をデジタルで表現する DigitalClockDriverクラスが相互に関連しています。 このモデルに実際にObserverパターンを適用しました。 右のツール適用後のモデルはObserverクラスが導入されることで TimeSourceクラスとDigitalClockDriverクラスの相互関連が解消されています。 よって実装したツールが小さなモデルに対するデザインパターン適用可能箇所の 検出機能を持つことが確認できました。 (a) ツール適用前 (b) ツール適用後 [4] R.C.Martin.Agile Software Development.Pearson Education,2004 2019/5/30

業務システムのUMLモデル 大規模な教務関係業務システム 適用したデザインパターン:Observerパターン 結果:104クラス中3組のクラスに適用条件合致 リファクタリング候補を検討 検出箇所が柔軟な設計を持つことがわかった 次にオージス総研が開発した業務システムのUMLモデルに対して適用実験を行いました。 適用したデザインパターンはObserverパターンです。 ツールを適用した結果、104クラス中3組のクラスに適用条件が合致しました。 そのうちの一つを示します。 JugyouKamokuクラスとGakuseiクラスが相互に関連しています。 仕様書を見てさらに細かく確認します。するとRishuuServiceクラスがJugyouKamokuクラスと Gakuseiクラスの間のデータを管理していることがわかりました。 これによりRishuServiceクラスを変更することで他のクラスの追加も出来ると考えられます。 結果としてこの箇所にObserverパターンを適用する必要がないことがわかりました。 これにより大規模なモデルにツールを適用することで開発者が小さな範囲で リファクタリング候補を検討することができるということがわかりました。 開発者が検出箇所に注目しリファクタリングを検討可能 RishuuServiceクラスがJugyouKamokuクラス とGakuseiクラスのデータを管理 2019/5/30

考察と評価 提案手法によりリファクタリング候補の検出を行うことが可能 他のデザインパターンについても同様の支援を行うことが出来ると考えられる 開発者は検出された小さな範囲で設計を確認可能なことがわかった 他のデザインパターンについても同様の支援を行うことが出来ると考えられる 実験に対しての考察と評価を行います。 提案手法によりリファクタリング候補の検出を行うことが出来ました。 実装したツールを適用することで開発者が小さな範囲で設計を確認できることが わかりました。 他の様々なデザインパターンの適用条件と合致する箇所を確認することで設計の特性を知ることが できると考えられます。 2019/5/30

まとめと今後の課題 UMLモデル上でのリファクタリング候補検出手法を提案 今後の課題 デザインパターン適用可能箇所を 開発者に提示 デザインパターン適用可能箇所を      開発者に提示 実装したツールを用いた適用実験 今後の課題 より多くの例題に適用し、定量的に評価 まとめと今後の課題です。 2019/5/30

最後までありがとうございました 2019/5/30