(57)【要約】【課題】インスタンスが略均等に分割されたインスタンス図を作成可能なクラス図の分割を支援すること。【解決手段】クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて、前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを判定する基準クラス判定手順と、前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを有する。【選択図】図４
2010271900.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行するクラス図分割支援方法であって、
クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて、前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを判定する基準クラス判定手順と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを有するクラス図分割支援方法。
【請求項２】
前記推定量算出手順は、関係元のクラスの前記推定量に関係先のクラスの多重度を乗じた値を該関係先のクラスの前記推定量とする請求項１記載のクラス図分割支援方法。
【請求項３】
前記推定量算出手順は、前記多重度が不定値のときは、該多重度の関数として前記推定量を算出し、
前記選択手順は、前記多重度の次数が相対的に小さい分割パターンを選択する請求項１又は２記載のクラス図分割支援方法。
【請求項４】
一つ以上の前記分割点の組み合わせついて、前記クラス図を二分割可能か否かを判定する判定手順と、
二分割可能な前記分割点の組み合わせを分割線とし、前記分割線の組み合わせによって分割パターンが形成される請求項１乃至３いずれか一項記載のクラス図分割支援方法。
【請求項５】
前記関係情報は、関係の種別を含み、
分割対象となる関係を前記種別に基づいて判定可能な分割規則情報を記憶した分割記憶情報記憶手段に基づいて分割対象とされる関係を前記分割点とする請求項１乃至４いずれか一項記載のクラス図分割支援方法。
【請求項６】
クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段と、
前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを前記関係情報に基づいて判定する基準クラス判定手段と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手段と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手段と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手段とを有するクラス図分割支援装置。
【請求項７】
コンピュータに、
クラス間の関係をクラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを該クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて判定する基準クラス判定手順と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラス図を分割するクラス図分割支援方法、クラス図分割支援装置、及びプログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発手法の一つとしてモデルベース開発と呼ばれる手法が存在する。図１は、モデルベース開発の流れを示す図である。モデルベース開発では、まず、メタモデルが作成される。メタモデルは、開発対象のシステムの各要素の定義と要素間の関係の定義とを含む情報である。メタモデルの具体例として、クラス図が挙げられる。したがって、例えば、ＵＭＬ（Unified Modeling Language）等の表記法に従ってメタモデルが作成される。
【０００３】
続いて、メタモデルに準拠してモデルが作成される。モデルは、メタモデルがより具体化されたものであり、クラス図における各クラスのインスタンスに関する定義である。したがって、モデルは、例えば、ＵＭＬ等の表記法に従ったインスタンス図（又はオブジェクト図）として作成される。
【０００４】
続いて、モデルに基づいてソースコード等が生成される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２７２３６９号公報
【非特許文献】
【０００６】
【非特許文献１】志田隆弘“ＥｃｌｉｐｓｅとＥＭＦを使用した簡易ＸＭＬエディタの作成”、[online］、2005年6月21日、［平成21年4月8日検索］、インターネット（URL:http://codezine.jp/article/detail/100?p=1）
【非特許文献２】永持, “グラフの最小分割問題に対するアルゴリズム,” 電子情報通信学会論文誌．D、vol.J86-D1、no.2、pp.53-68、2003年2月
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以上のようなモデルベース開発では一般的に対象システムが大きくなるにつれてメタモデルやモデルも大きくなる。従来のモデル作成エディタ（例えば、非引用文献１）は、対象システム全体に対するインスタンス図を編集対象とし、一度の編集でモデル全体を扱う。したがって、ファイルへのモデルの書き込み、ファイルからのモデルの読み込み、読み込まれたモデルの画面上への描画等の処理に時間がかかってしまうという問題があった。斯かる問題は、クラス図をいくつかの範囲に分割して編集範囲を狭めることで、扱うモデルの量を減らし、改善することができる。クラス図（メタモデル）の分割単位は、インスタンス図（モデル）にも引き継がれるからである。
【０００８】
クラス図を一種のグラフとみなすことで、クラス図の分割にグラフの分割方法（例えば、特許文献１、非特許文献２）を適用することが考えられる。すなわち、クラスを点、クラス間の関係を辺とみなすのである。しかしながら、グラフの分割方法を単純に適用しただけでは、分割後の各クラス図に基づいて作成される各インスタンス図のインスタンス数の間に著しい不均衡が生じる可能性がある。例えば、グラフの分割方法によってクラス図を２分割した場合、当該２分割に従って作成された二つのインスタンス図の一方には一つのインスタンスのみが含まれ、他方には他の全てのインスタンスが含まれてしまうという可能性がある。クラス間の関係は、グラフの辺と異なり、多重度等の属性を有していることに起因する。すなわち、クラス図において２つのクラスを１つずつ分割したとしても、当該クラス間の関係が１対ｎの多重度を有する場合、インスタンスとしては１個とｎ個とに分割されてしまうからである。
【０００９】
本発明は、上記の点に鑑みてなされたものであって、インスタンスが略均等に分割されたインスタンス図を作成可能なクラス図の分割を支援することのできるクラス図分割支援方法、クラス図分割支援装置、及びプログラムの提供を目的とする。
【課題を解決するための手段】
【００１０】
そこで上記課題を解決するため、クラス図分割支援方法は、クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて、前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを判定する基準クラス判定手順と、前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを有する。
【発明の効果】
【００１１】
インスタンスが略均等に分割されたインスタンス図を作成可能なクラス図の分割を支援することができる。
【図面の簡単な説明】
【００１２】
【図１】モデルベース開発の流れを示す図である。
【図２】本発明の実施の形態におけるクラス図分割支援装置のハードウェア構成例を示す図である。
【図３】本発明の実施の形態におけるクラス図分割支援装置の機能構成例を示す図である。
【図４】クラス図分割支援装置による処理手順の概要を説明するためのフローチャートである。
【図５】本実施の形態において分割対象とする全体クラス図である。
【図６】全体クラス図データの構成例を示す図である。
【図７】分割ルールデータの構成例を示す図である。
【図８】分割点の例を示す図である。
【図９】分割線の例を示す図である。
【図１０】全体クラス図のパスの例を示す図である。
【図１１】全体クラス図の分割結果の例を示す図である。
【図１２】部分クラス図のパスの例を示す図である。
【図１３】モデル量計算ルールデータの構成例を示す図である。
【図１４】モデル量加算ルールデータの構成例を示す図である。
【図１５】分割点の探索処理の処理手順を説明するためのフローチャートである。
【図１６】分割線の作成処理の処理手順を説明するためのフローチャートである。
【図１７】全体クラス図の分割処理の処理手順を説明するためのフローチャートである。
【図１８】作業用テーブルＡの例を示す図である。
【図１９】作業用テーブルＢの例を示す図である。
【図２０】作業用テーブルの分割処理の処理手順を説明するためのフローチャートである。
【図２１】作業用テーブルＢの分割結果の例を示す図である。
【図２２】パスの作成処理を説明するためのフローチャートである。
【図２３】部分クラス図の作成処理の処理手順を説明するためのフローチャートである。
【図２４】部分クラス図の基準クラスの判定処理の処理手順を説明するためのフローチャートである。
【図２５】部分クラス図の各クラスのモデル量の算出処理の処理手順を説明するためのフローチャートである。
【図２６】一つの分割パターンにおける各部分クラス図の各クラスのモデル量の算出結果の例を示す図である。
【図２７】各部分クラス図に含まれるクラスのモデル量の総和の算出処理の処理手順を説明するためのフローチャートである。
【図２８】別の分割パターンのモデル量を示す図である。
【図２９】モデル量が最小の分割パターンの選択処理の処理手順を説明するためのフローチャートである。
【図３０】二つのモデル量総和データの比較処理の処理手順を説明するためのフローチャートである。
【図３１】より複雑な全体クラス図の例を示す図である。
【図３２】一部の分割パターンのそれぞれのモデル量の総和を示す図である。
【図３３】分割パターン４による分割例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を説明する。図２は、本発明の実施の形態におけるクラス図分割支援装置のハードウェア構成例を示す図である。図２のクラス図分割支援装置１０は、それぞれバスBで相互に接続されているドライブ装置１００と、補助記憶装置１０２と、メモリ装置１０３と、ＣＰＵ１０４と、表示装置１０５と、入力装置１０６とを有する。
【００１４】
クラス図分割支援装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１５】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってクラス図分割支援装置１０に係る機能を実現する。表示装置１０５はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０６はキーボード及びマウス等であり、様々な操作指示を入力させるために用いられる。
【００１６】
なお、ネットワークを介して遠隔的に操作される場合、クラス図分割支援装置１０は、表示装置１０５及び入力装置１０６を備えていなくてもよい。
【００１７】
図３は、本発明の実施の形態におけるクラス図分割支援装置の機能構成例を示す図である。同図において、クラス図分割支援装置１０は、入力部１１１、分割点探索部１１２、分割線作成部１１３、全体クラスパス作成部１１４、クラス図分割部１１５、部分クラス図作成部１１６、部分基準クラス判定部１１７、部分クラスパス作成部１１８、部分クラスモデル量算出部１１９、部分モデル量総和算出部１２０、分割パターン選択部１２１、及びモデル量比較部１２２等を有する。これら各部は、クラス図分割支援装置１０にインストールされたプログラムがＣＰＵ１０４に実行させる処理によって実現されるソフトウェアである。クラス図分割支援装置１０は、また、分割ルールデータ１５１、モデル量計算ルールデータ１５２、及びモデル量加算ルールデータ１５３等を有する。これら各データは、例えば、補助記憶装置１０２に予め保存（記憶）されている。但し、クラス図分割支援装置１０とネットワークを介して通信可能な記憶装置内に保存されていてもよい。
【００１８】
図３に示される各部の機能を説明しつつ、クラス図分割支援装置１０の処理概要を説明する。図４は、クラス図分割支援装置による処理手順の概要を説明するためのフローチャートである。
【００１９】
ステップＳ１１において、入力部１１１は、ユーザより入力情報の指定を受け付ける。入力情報には、全体クラス図データ４１０の識別名及び全体クラス図の分割数が含まれる。入力部１１１は、全体クラス当該識別名によって識別される全体クラス図データ４１０をメモリ装置１０３に読み込む。
【００２０】
本実施の形態では、図５に示される全体クラス図を分割対象として説明する。図５は、本実施の形態において分割対象とする全体クラス図である。本実施の形態においてクラス図の表記はＵＭＬ（Unified Modeling Language）に従う。
【００２１】
同図において、全体クラス図５１０は、クラスＡ、Ａ１、Ａ２、ａ１、ａ２、ａ３、Ｂ、及びＢ１を含む。クラスＡは、１対ｎの多重度でクラスＡ１を集約し、１対１の多重度でクラスＡ２を集約する。クラスＡは、また、１対ｎの多重度でクラスＢを参照する。クラスＡ１は、１対１の多重度でクラスａ１を集約する。クラスＡ２は、それぞれ１対ｎの多重度でクラスａ２及びａ３を集約する。クラスａ２とクラスａ３とは、ｎ対１の多重度で相互参照の関係を有する。クラスＢ１は、クラスＢを継承する。
【００２２】
図５に示される全体クラス図の全体クラス図データ４１０は、例えば、図６に示されるような構成を有する。図６は、全体クラス図データの構成例を示す図である。
【００２３】
同図において、全体クラス図データ４１０は、全体クラステーブル４１１及び全体関係テーブル４１２を含む。全体クラステーブル４１１は、全体クラス図に含まれるクラスごとに、クラスＩＤ及びクラス名が記録されたテーブルである。クラスＩＤは、各クラスを識別するためのＩＤ（識別子）である。クラス名は、クラスの名前である。
【００２４】
全体関係テーブル４１２は、全体クラス図におけるクラス間の関係ごとに関係ＩＤ、関係元クラスＩＤ、関係先クラスＩＤ、関係種別、関係元多重度、関係先多重度、及び単方向フラグが記録されたテーブルである。関係ＩＤは、各関係を識別するためのＩＤ（識別子）である。関係元クラスＩＤ及び関係先クラスＩＤは、関係の一方と他方のクラスのクラスＩＤである。当該関係が単方向（一方向）である場合、関係元クラスＩＤに係るクラス（関係元クラス）は参照元、集約元、又は継承元となり、関係先クラスＩＤに係るクラス（関係先クラス）は参照先、集約先、又は継承先となる。関係種別は、関係の種別（参照、集約、継承等の別）である。関係元多重度は、関係元クラスの多重度である。関係先多重度は、関係先クラスの多重度である。単方向フラグは、関係が単方向であるか否かを示す情報である。「ｔｒｕｅ」は単方向を示し、「ｆａｌｓｅ」は双方向を示す。
【００２５】
なお、図５の全体クラス図５１０には、図６の全体クラステーブル４１１又は全体関係テーブル４１２において対応するクラス又は関係のクラスＩＤ又は関係ＩＤが示されている。
【００２６】
続いて、分割点探索部１１２は、分割ルールデータ１５１に基づいて、全体クラス図５１０におけるクラス間の関係の中で分割可能な関係（以下、「分割点」という。）を探索する。分割点探索部１１２は、探索された関係の関係ＩＤの集合を分割点リスト３１１としてメモリ装置１０３に記録する（Ｓ１２）。
【００２７】
図７は、分割ルールデータの構成例を示す図である。同図に示されるように、分割ルールデータ１５１には、関係種別ごとに分割の可否（分割対象であるか否か）が記録されている。同図では、継承関係については分割対象とされていない。継承関係の場合、サブクラス（継承先のクラス）の実体（オブジェクト）は、継承元のクラスと同一であるため、分割することによる利益よりも不利益の方が大きいと考えられるからである。但し、同図に示されるルールは絶対的なものではない。当該ルールは、運用に応じて適宜変更されてもよい。
【００２８】
図７の分割ルールデータ１５１に基づく場合、全体クラス図５１０において分割点とされる関係は、図８に示される通りである。
【００２９】
図８は、分割点の例を示す図である。同図において、破線Ｐ１〜Ｐ７が横切っている関係が分割点とされた関係である。全体クラス図５１０では、クラスＢとクラスＢ１との関係のみが継承関係でるため、それ以外の関係は分割点とされている。したがって、ステップＳ２１では、関係ＩＤ１〜７を含むリストが分割リストとして出力される。
【００３０】
続いて、分割線作成部１１３は、探索された分割点の組み合わせよって形成される線の中から、全体クラス図５１０を二つに分割することができる線（以下、「分割線」という。）を探索する。分割線作成部１１３は、探索された分割線（分割点の組み合わせ）のリストを分割線リスト３１２としてメモリ装置１０３に記録する（Ｓ１３）。
【００３１】
図９は、分割線の例を示す図である。同図では、分割線Ｌ１、Ｌ２、Ｌ３、及びＬ４が示されている。分割線Ｌ１は分割点Ｐ１によって形成される分割線である。分割線Ｌ２は、分割点Ｐ２によって形成される分割線である。分割線Ｌ３は分割点Ｐ３によって形成される分割線である。分割線Ｌ４は、分割点Ｐ７によって形成される分割線である。いずれの分割線によっても全体クラス図５１０は、二分割されることが分かる。なお、仮に、分割点Ｐ１及びＰ２によって形成される線で分割された場合、全体クラス図５１０は、三つに分割されてしまう。また、分割点Ｐ４、Ｐ５、又はＰ６のいずれか一つの分割点によって形成される線によって分割された場合、全体クラス図５１０は分割されない。このように、三つ以上に分割されてしまったり、分割されなかったりするような分割点の組み合わせは分割線とはされない。したがって、ステップＳ２２では、分割線Ｌ１〜Ｌ４を示すデータが分割線リスト３１２として出力される。分割不可能な分割点の組み合わせが除外されることにより、以降の処理の冗長性を排除することができる。なお、一つの分割線を示すデータは、当該分割線を形成する分割点のリスト（すなわち、関係ＩＤのリスト）である。
【００３２】
続いて、全体クラスパス作成部１１４は、全体クラス図５１０における全てのパスを作成し、当該パスのリストを含むデータを全体パスリスト３２１としてメモリ装置１０３に記録する（Ｓ１４）。ここで、パスとは、基準となるクラスから関係先となるクラスが無くなるまで（クラス間の関係が行き止まりとなるまで）クラス間の関係を辿ることにより形成される経路をいう。全体クラス図５１０において、基準となるクラスは既定であり、本実施の形態ではクラスＡであるとする。例えば、基準となるクラスは、入力部１１１がユーザに指定させてもよい。または、全体クラスパス作成部１１４が、他のいずれのクラスの関係先とされていないクラスを基準クラスとして自動的に選択してもよい。基準クラスがクラスＡである場合、全体クラス図５１０において作成されるパスは図１０の通りとなる。
【００３３】
図１０は、全体クラス図のパスの例を示す図である。同図では、パスＴ１〜Ｔ４の四つのパスが示されている。パスＴ１は、Ａ→Ａ１→ａ１を経路とするパスである。パスＴ２は、Ａ→Ａ２→ａ２→ａ３を経路とするパスである。パスＴ３は、Ａ→Ａ２→ａ３→ａ２を経路とするパスである。パスＴ４は、Ａ→Ｂ→Ｂ１を経路とするパスである。なお、クラスａ２とクラスａ３との関係は双方向であるため、当該関係については二つのパス（Ｔ２及びＴ３）によって異なる方向の部分経路として利用されている。各パスは、当該パスが通過するクラスＩＤの一覧によって表現される。したがって、全体パスリスト３２１は、それぞれがクラスＩＤの一覧であるパスを要素とする一覧である。
【００３４】
続くステップＳ１５〜Ｓ１９は、分割パターンごとのループとなる。分割パターンとは、分割数−１の本数の分割線の組み合わせをいう。本実施の形態では、分割数は「２」であるとする。したがって、２−１＝１本の分割線の全ての組み合わせごとにステップＳ１５〜Ｓ２０が実行される。ループごとに処理対象とされた分割線の組み合わせ（分割パターン）を、以下「カレント分割パターン」という。なお、分割線は分割点の組み合わせである。したがって、分割線の組み合わせである分割パターンは、分割点の組み合わせとして捉えることもできる。
【００３５】
ところで、図３において、部分クラス図作成部１１６、部分基準クラス判定部１１７、部分クラスパス作成部１１８、部分クラスモデル量算出部１１９、及び部分モデル量総和算出部１２０のそれぞれは、同一名称のデータを複数個出力している。これは、ループが繰り返されることによって、分割パターンごとに各データが出力されることが示す。したがって、１回のループ処理において各手段より出力されるデータは、１つ又は１セットずつである。
【００３６】
ステップＳ１５において、部分クラス図作成部１１６は、カレント分割パターンに基づいて全体クラス図を部分クラス図に分割し、当該部分クラス図の集合を示す分割結果データ３１３を生成する。すなわち、分割結果データ３１３は、分割パターンと１対１に対応し、分割された複数の部分クラス図の情報を含む。
【００３７】
図１１は、全体クラス図の分割結果の例を示す図である。同図では、カレント分割パターンに含まれる分割線が分割線Ｌ１である場合の分割結果を示す。すなわち、部分クラス図５１１は、分割された一方の範囲に含まれる部分クラス図であり、部分クラス図５１２は、分割された他方の範囲に含まれる部分クラス図である。また、関係クラス図５１３は、部分クラス図５１１と部分クラス図５１２との関係を示すクラス図である。すなわち、部分クラス図５１１及び５１２のみでは、クラスＡとクラスＡ１との関係を示す情報が失われてしまう。そこで、当該情報を保持するために関係クラス図５１３が作成されるのである。したがって、関係クラス図は、部分クラス図間の関係ごとに作成される。１つの分割結果データ３１３には、部分クラス図５１１及び５１２と、関係クラス図５１３とに関する情報が含まれる。なお、ステップＳ１６以降において、関係クラス図は一つの部分クラス図として処理される。すなわち、ステップＳ１６以降において「部分クラス図」というとき、特に明記されない限り、関係クラス図も含まれる。
【００３８】
続いて、部分基準クラス判定部１１７は、分割結果データ３１３に含まれている部分クラス図ごとに、基準クラスを判定する（Ｓ１６）。基準クラスとは、部分クラス図内の関係において基準となるクラスをいう。基本的に部分クラス図内において最も関係元に位置するクラスが基準クラスとして選択される。すなわち、分割線に含まれる分割点において関係先に位置するクラスである。したがって、図１１の例において、部分クラス図５１１についてはクラスＡ１が基準クラスとして判定される。また、部分クラス図５１２については全体クラス図５１０の基準クラスであるクラスＡが基準クラスとして判定される。同様に、関係クラス図５１３についても、全体クラス図５１０の基準クラスであるクラスＡが基準くらすとして判定される。部分基準クラス判定部１１７による判定結果は、基準クラス一覧データ３１４としてメモリ装置１０３に記録される。基準クラス一覧データ３１４は、分割パターンと１対１に対応し、分割された複数の部分クラス図のそれぞれの基準クラスのクラスＩＤを要素として含む。
【００３９】
続いて、部分クラスパス作成部１１８は、カレント分割パターンに係る部分クラス図ごとにパスを作成し、当該パスのリストを含むデータを部分パスリスト３１５としてメモリ装置１０３に記録する（Ｓ１７）。ここでいうパスは、部分クラス図における基準クラスからのパスである。
【００４０】
図１２は、部分クラス図のパスの例を示す図である。同図には、部分クラス図５１２のパスの例が示されている。部分パスリスト３１５は、部分クラス図ごとに作成され、対応する部分クラス図のパスの一覧を含む。したがって、部分クラス図５１２に関しては、三つのパスに関する情報（クラスＩＤの一覧）が一つの部分パスリスト３１５に含まれる。ステップＳ１７では、カレント分割パターンに基づいて分割された他の部分クラス図（例えば、部分クラス図５１１）についても同様に部分パスリスト３１５が作成される。
【００４１】
続いて、部分クラスモデル量算出部１１９は、カレント分割パターンに係る部分パスリスト３１５群と、モデル量計算ルールデータ１５２とに基づいて、部分クラス図ごとに、当該部分クラス図に含まれるクラスのモデル量を算出する（Ｓ１８）。
【００４２】
図１３は、モデル量計算ルールデータの構成例を示す図である。同図に示されるように、モデル量計算ルールデータ１５２には、関係種別、関係元多重度、及び関係先多重度ごとに、関係先モデル量（関係先クラスのモデル量）が記録されている。例えば、同図では、集約関係及び参照関係については、多重度が１対１の場合の関係先モデル量は「ａ」、多重度が１対ｎの場合の関係先モデル量は「ａｎ」（ａにｎを乗じた値）とされている。また、継承関係については、関係先モデル量は「ａ」とされている。「ａ」は、関係元のクラスのモデル量（関係元モデル量）である。すなわち、同図において関係先モデル量は、関係元のモデル量に対する相対値として示されている。なお、本実施の形態にいて、基準クラスのモデル量は「１」とする。但し、基準クラスのモデル量の値は、各部分クラス図間において統一された所定値である限りにおいて、どのような値であってもよい。
【００４３】
ここで、モデル量とは、クラスがインスタンス化された場合の、インスタンス数の推定量（又は推定値）を示す指標である。したがって、多重度が大きいほどモデル量は大きくなる傾向に有る。
【００４４】
部分クラスモデル量算出部１１９は、図１３に示されるモデル量計算ルールデータ１５２に基づいて、部分クラス図内の各クラスのモデル量を算出する。算出結果は、部分クラス図ごとにモデル量リスト３１６としてメモリ装置１０３に記録される。したがって、カレント分割パターンに関して複数のモデル量リスト３１６が生成される。
【００４５】
続いて、部分モデル量総和算出部１２０は、カレント分割パターンに係るモデル量リスト３１６群とモデル量加算ルールデータ１５３とに基づいて、カレント分割パターンに係る各部分クラス図に含まれるクラスのモデル量の総和を算出する（Ｓ１９）。
【００４６】
図１４は、モデル量加算ルールデータの構成例を示す図である。同図に示されるように、モデル量加算ルールデータ１５３は、関係種別、関係元多重度、及び関係先多重度ごとに、加算ルールが記録されている。加算ルールは、関係元モデル量と関係先モデル量との和を算出するための演算ルールである。「＋」は、関係先モデル量に対して関係先モデル量を足すことを示す。「＝」は、関係元モデル量に一致することを示す。すなわち、継承関係の場合、関係元モデル量と関係先モデル量との和は、関係元モデル量に等しい。
【００４７】
部分モデル量総和算出部１２０は、図１４に示されるモデル量加算ルールデータ１５３に基づいて、各クラスのモデル量の総和を算出する。算出結果は、モデル量総和データ３１７としてメモリ装置１０３に記録される。モデル量総和データ３１７は、カレント分割パターンに対して一つ生成される。
【００４８】
上記ステップＳ１５〜Ｓ２０が全ての分割パターンについて実行されると（Ｓ２０でＹｅｓ）、分割パターン選択部１２１は、分割パターンごとに生成されたモデル量総和データを比較して、モデル量の総和が最も小さい分割パターンを選択する（Ｓ２１）。分割パターン選択部１２１は、選択の結果として、例えば、選択された分割パターンに係る部分クラス図データを補助記憶装置１０２に記録する。または、分割する部分（例えば、関連）を識別可能な情報を補助記憶装置１０２が記録されてもよいし、表示装置１０５に表示されてもよい。この場合、ユーザは、他のツール等を利用して、当該情報に従って全体クラス図を分割すればよい。
【００４９】
上記の通り、本実施の形態では、インスタンス数の推定量であるモデル量という概念を用いて全体クラス図の分割パターンを比較し、モデル量の総和が最小となる分割パターンを推薦する。したがって、モデルデータ（インスタンスレベルの情報（インスタンス図））の編集時において、分割単位ごとのインスタンス数の偏り（ばらつき）を小さくすることができる。
【００５０】
続いて、図４の各ステップの詳細について説明する。まず、ステップＳ１２の詳細について説明する。
【００５１】
図１５は、分割点の探索処理の処理手順を説明するためのフローチャートである。
【００５２】
ステップＳ１２１において、分割点探索部１１２は、空の分割点リスト３１１をメモリ装置１０３に生成する。分割点リスト３１１は、例えば、関係ＩＤを要素とするリスト構造のデータである。続いて、分割点探索部１１２は、全体関係テーブル４１２の最初の行を処理対象の行（以下、「カレント行」という。）とする。続いて、分割点探索部１１２は、カレント行の関係種別を分割ルールデータ１５１に当てはめることにより、カレント行に係る関係は分割可能であるか否か（すなわち、分割点となるか否か）を判定する（Ｓ１２３）。カレント行に係る関係が分割点となる場合（Ｓ１２３でＹｅｓ）、分割点探索部１１２は、カレント行の関係ＩＤを分割点リスト３１１に追加する（Ｓ１２４）。続いて、分割点探索部１１２は、全体関係テーブル４１２においてカレント行の次の行をカレント行とし（Ｓ１２５）、ステップＳ１２３以降を繰り返す（Ｓ１２６）。全体関係テーブル４１２の全ての行に関して（すなわち、全体クラス図５１０の全ての関係に関して）処理が完了すると（Ｓ１２６でＮｏ）、分割点探索部１１２は、図１５の処理を終了させる。
【００５３】
続いて、図４のステップＳ１３の詳細について説明する。図１６は、分割線の作成処理の処理手順を説明するためのフローチャートである。
【００５４】
ステップＳ１３１において、分割線作成部１１３は、分割点リスト３１１に含まれている関係ＩＤのベキ集合（以下、「分割点ベキ集合」という。）を生成する。ベキ集合の各要素は、分割点の組み合わせである。したがって、当該要素は、分割線の候補である。
【００５５】
続いて、分割線作成部１１３は、空の分割線リスト３１２をメモリ装置１０３に生成する（Ｓ１３２）。分割線リスト３１２は、例えば、分割点の組み合わせ（関係ＩＤの組み合わせ）を要素とするリスト構造のデータである。続いて、分割点ベキ集合に含まれている要素ごとに処理が実行される（Ｓ１３３）。
【００５６】
ステップＳ１３４において、分割線作成部１１３は、分割点ベキ集合より要素を一つ取り出し、処理対象（カレント要素）とする。続いて、分割線作成部１１３は、カレント要素による全体クラス図５１０の分割をクラス図分割部１１５に実行させる（Ｓ１３５）。クラス図分割部１１５は、分割対象とするクラス図のクラステーブル、関係テーブル、及び分割線の一覧を入力情報とする。クラステーブルとは、全体クラス図５１０の全体クラステーブル４１１に相当するテーブルである。関係テーブルとは、全体クラス図５１０の全体関係テーブル４１２に相当するテーブルである。クラス図分割部１１５は、入力情報に含まれる分割線の一覧に基づいて分割対象のクラス図を部分クラス図に分割し、部分クラス図ごとに部分クラステーブル及び部分関係テーブルを作成する。部分クラステーブルは、クラステーブルが部分クラス図単位で分割されたテーブルである。部分関係テーブルは、関係テーブルが部分クラス図単位で分割されたテーブルである。
【００５７】
したがって、分割線作成部１１３は、全体クラス図５１０の全体クラステーブル４１１及び全体関係テーブル４１２を分割対象のクラス図に関する情報としてクラス図分割部１１５に入力する。また、分割線作成部１１３は、カレント要素（一つの分割線）を分割線の一覧としてクラス図分割部１１５に入力する。
【００５８】
続いて、分割線作成部１１３は、クラス図分割部１１５の処理結果に基づいて、全体クラス図５１０が二分割されたか否かを判定する（Ｓ１３６）。二分割された場合（Ｓ１３６でＹｅｓ）、分割線作成部１１３は、カレント要素を一つの分割線を示すデータとして分割線リスト３１２に追加する（Ｓ１３７）。二分割されない場合、すなわち、分割されない場合又は三分割以上される場合（Ｓ１３６）、カレント要素は、分割線リスト３１２には追加されない。
【００５９】
ステップＳ１３４以降の処理が、分割点ベキ集合に含まれる全ての要素に対して完了すると（Ｓ１３３でＮｏ）、図１６の処理は終了さする。
【００６０】
続いて、図１６のステップＳ１３５の詳細について説明する。図１７は、全体クラス図の分割処理の処理手順を説明するためのフローチャートである。
【００６１】
ステップＳ５０１において、クラス図分割部１１５は、全体クラステーブル４１１、全体関係テーブル４１２、及び分割線一覧等の入力情報を受け付ける。続いて、クラス図分割部１１５は、入力された分割線一覧より未処理の分割線に係るデータを取り出し、当該データを処理対象（以下、「カレント分割線」という。）とする（Ｓ５０２）。なお、ステップＳ５０２からＳ５０７は、分割線一覧に含まれる分割線ごとのループ処理となる。但し、図１５のステップＳ１３５より呼び出された場合、分割線一覧には一つ分割線に関するデータ（ステップＳ１３５におけるカレント要素）のみが含まれている。したがって、ループ回数は１回となる。
【００６２】
続いて、ステップＳ５０３〜Ｓ５０６は、カレント分割線に含まれる分割点ごとのループ処理となる。ステップＳ５０３において、クラス図分割部１１５は、カレント分割線より分割点を示すデータ（すなわち、関係ＩＤ）を一つ取り出し、当該分割点を処理対象（以下、「カレント分割点」という。）とする。続いて、クラス図分割部１１５は、カレント分割点の関係元クラス及び関係先クラスの双方の情報（クラス名及びクラスＩＤ）を作業用クラステーブルＡ１に追加する（Ｓ５０４）。カレント分割点の関係元クラス及び関係先クラスのそれぞれのクラスＩＤは、カレント分割点の関係ＩＤと全体関係テーブル４１２とに基づいて判定される。当該クラスＩＤに対応するクラス名は、全体クラステーブル４１１に基づいて判定される。続いて、クラス図分割部１１５は、カレント分割点に関する情報を作業用関係テーブルＡ２に追加する（Ｓ５０５）。カレント分割点に関する情報は、カレント分割点の関係ＩＤに基づいて全体関係テーブル４１２より取得される。なお、ステップＳ５０４又はＳ５０５において、作業用クラステーブルＡ１又は作業用関係テーブルＡ２におけるデータ（レコード）の重複は排除される。すなわち、追加対象とされたクラス又は関係に関するデータが既に作業用クラステーブルＡ１又は作業用関係テーブルＡ２に登録されている場合、当該クラス又は当該関係に関するデータの追加は行われない。
【００６３】
作業用クラステーブルＡ１及び作業用関係テーブルＡ２（以下、二つのテーブルを総称する場合、「作業用テーブルＡ」という。）は、関係クラス図（図１１参照）の部分クラステーブル及び部分関係テーブルを作成するための作業用のテーブルである。
【００６４】
例えば、入力情報とされた全体クラステーブル４１１及び全体関係テーブル４１２が、図６に示される通りであり、カレント分割線の内容が｛（１）｝である場合、作業用テーブルＡは、図１８に示される通りとなる。なお、｛（１）｝は、関係ＩＤの集合を示す。したがって、ここでは、カレント分割線は、関係１（関係ＩＤが「１」の関係）における分割点のみによって形成される分割線である。
【００６５】
図１８は、作業用テーブルＡの例を示す図である。同図において、作業用関係テーブルＡ２には、関係１のデータが登録されている。作業用クラステーブルＡ１には、関係１の関係元クラス又は関係先クラスに関するデータが登録されている。
【００６６】
カレント分割線に含まれる全ての分割点についてステップＳ５０３からＳ５０５が実行されると（Ｓ５０６でＮｏ）、クラス図分割部１１５は、分割線一覧に含まれる次の分割線を処理対象（カレント分割線）としてステップＳ５０２以降の処理を繰り返す（Ｓ５０７）。分割線一覧に含まれる全ての分割線についてステップＳ５０２からＳ５０６が実行されると（Ｓ５０７でＮｏ）、クラス図分割部１１５は、入力情報に指定されている全体クラステーブル４１１の内容を作業用クラステーブルＢ１にコピーする（Ｓ５０８）。続いて、クラス図分割部１１５は、入力情報に指定されている全体関係テーブル４１２から、作業用関係テーブルＡ２に登録された関係を除いた関係に関するデータを作業用関係テーブルＢ２に登録する（Ｓ５０９）。作業用クラステーブルＢ１及び作業用関係テーブルＢ２（以下、二つのテーブルを総称する場合、「作業用テーブルＢ」という。）は、部分クラス図（図１１参照）に関する部分クラステーブル及び部分関係テーブルを作成するための作業用のテーブルである。
【００６７】
例えば、図１９は、作業用テーブルＢの例を示す図である。同図の作業用クラステーブルＢ１は、図６の全体クラステーブル４１１の内容がコピーされた結果である。また、作業用関係テーブルＢ２は、図７の全体関係テーブル４１２より、図１８の作業用関係テーブルＡ２に登録されているデータが除外された結果である。
【００６８】
続いて、クラス図分割部１１５は、作業用テーブルＡを、分割線一覧に含まれている分割線によって分割される部分クラス図間の関係クラス図ごとに分割する（Ｓ５１０）。続いて、クラス図分割部１１５は、作業用テーブルＢを、分割線一覧に含まれている分割線によって分割される部分クラス図ごとに分割する（Ｓ５１１）。
【００６９】
続いて、ステップＳ５１０及びＳ５１１の詳細について説明する。図２０は、作業用テーブルの分割処理の処理手順を説明するためのフローチャートである。同図の処理は、ステップＳ５１０及びＳ５１１において共用される。すなわち、ステップＳ５１０及びＳ５１１は、処理対象となる作業用テーブルが異なるだけである。したがって、図２０の説明では、作業用クラステーブルＡ１又はＢ１を単に「作業用クラステーブル」という。同様に、作業用関係テーブルＡ２又はＢ２を単に「作業用関係テーブル」という。
【００７０】
ステップＳ５５１において、クラス図分割部１１５は、作業用クラステーブルは空であるか否かを判定する。作業用クラステーブルは空でない場合（Ｓ５５１でＮｏ）、クラス図分割部１１５は、空のサブクラステーブル及び空のサブ関係テーブルを一つずつメモリ装置１０３に生成する（Ｓ５５２）。サブクラステーブルは、作業用クラステーブルの一つの分割結果を格納するためのテーブルである。サブ関係テーブルは、作業用関係テーブルの一つの分割結果を格納するためのテーブルである。続いて、クラス図分割部１１５は、作業用クラステーブルからクラス（行）を一つ取得し、処理対象（以下、「カレントクラス」という。）とする（Ｓ５５３）。
【００７１】
続いて、クラス図分割部１１５は、カレントクラスをサブクラステーブルに追加し、作業用クラステーブルより削除する（Ｓ５５４）。続いて、クラス図分割部１１５は、作業用関係テーブルに、カレントクラスが関係元クラス又は関係先クラスとして登録されている関係（行）が有るか否かを判定する（Ｓ５５５）。当該関係が有る場合（Ｓ５５５でＹｅｓ）、クラス図分割部１１５は、当該関係においてカレントクラスの関係先又は関係元のクラスを新たなカレントクラスとする（Ｓ５５６）。すなわち、関係が辿られて処理対象のクラスが更新される。続いて、クラス図分割部１１５は、当該関係をサブ関係テーブルに追加し、作業用関係テーブルより削除する（Ｓ５５７）。
【００７２】
続いて、クラス図分割部１１５は、新たなカレントクラスについてステップＳ５５４以降の処理を繰り返す。当該処理を繰り返す過程において、作業用関係テーブルが空となると、ステップＳ５５５においてＮｏと判定される。その結果、サブクラステーブル及びサブ関係テーブルは、一つの部分クラス図の部分クラステーブル若しくは部分関係テーブル又は一つの関係クラス図の部分クラステーブル若しくは部分関係テーブルとして確定される。
【００７３】
続けて、作業用クラステーブルが空となるまでステップＳ５５１以降が実行されることにより、他の部分クラス図又は関係クラス図について、部分クラステーブル又は部分関係テーブルが作成される。
【００７４】
例えば、図１８の作業用テーブルＡについて図２０の処理が実行されると、図１８と同様の構成を有する部分クラステーブル及び部分関係テーブルが作成される。すなわち、関係図については分割されない。
【００７５】
また、図１９の作業用テーブルＢについて図２０の処理が実行されると、図２１に示されるような部分クラステーブル及び部分関係テーブルが作成される。
【００７６】
図２１は、作業用テーブルＢの分割結果の例を示す図である。同図において、作業用テーブルＢは二つに分割されている。すなわち、作業用クラステーブルＢ１は、部分クラステーブルＢ１−１及びＢ１−２に、作業用関係テーブルＢ２は、部分関係テーブルＢ２−１及びＢ２−２に、それぞれ分割されている。
【００７７】
なお、図１６のステップＳ１３６において、分割線作成部１１３は、作業用テーブルＢが二つに分割された場合、全体クラス図５１０は二分割されたと判定する。
【００７８】
続いて、図４のステップＳ１４（すなわち、図１０に例示されるパスの作成処理）の詳細について説明する。図２２は、パスの作成処理を説明するためのフローチャートである。
【００７９】
ステップＳ１４０１において、全体クラスパス作成部１１４は、全体クラス図５１０の基準クラス（クラスＡ）を処理対象（以下、「カレントクラス」という。）とする。続いて、全体クラスパス作成部１１４は、空の全体パスリスト３２１をメモリ装置１０３に生成する（Ｓ１４０２）。続いて、全体クラスパス作成部１１４は、変数ｎｅｗＰａｔｈの値をｆａｌｓｅに初期化する（Ｓ１４０３）。変数ｎｅｗＰａｔｈは、処理の流れを制御するためのフラグ変数である。
【００８０】
続いて、全体クラスパス作成部１１４は、全体関係テーブル４１２内において、カレントクラスを関係元とする関係で未処理（パスの探索において辿られていない）の関係（行）の有無を判定する（Ｓ１４０４）。未処理の関係が有る場合（Ｓ１４０３でＹｅｓ）、全体クラスパス作成部１１４は、カレントクラスを関係元とする未処理の関係を処理対象（以下、「カレント関係」という。）とする（Ｓ１４０５）。例えば、カレントクラスがクラスＡ（クラスＩＤ＝１）である場合、関係１がカレント関係とされる。
【００８１】
続いて、全体クラスパス作成部１１４は、変数ｎｅｗＰａｔｈの値がｆａｌｓｅであるか否かを判定する（Ｓ１４０６）。変数ｎｅｗＰａｔｈの初期値はｆａｌｓｅであるため、最初にこのステップが実行される際の判定結果はＹｅｓとなる。変数ｎｅｗＰａｔｈの値がｆａｌｓｅの場合（Ｓ１４０６でＹｅｓ）、全体クラスパス作成部１１４は、パスデータをメモリ装置１０３に生成する（Ｓ１４０７）。パスデータは、一本分のパスを格納するためのデータである。一本分のパスは、当該パスに係るクラスのクラスＩＤのリストによって表現される。
【００８２】
続いて、全体クラスパス作成部１１４は、新たなパスの作成が開始されたことを示すため、変数ｎｅｗＰａｔｈの値をｔｒｕｅに更新する（Ｓ１４０８）。続いて、全体クラスパス作成部１１４は、基準クラスからカレントクラスまでのパスに係るクラスのクラスＩＤをパスデータに追加する（Ｓ１４０９）。最初は、カレントクラスは基準クラスである。したがって、基準クラスのクラスＩＤがパスデータに追加される。続いて、全体クラスパス作成部１１４は、カレント関係の関係先クラスを新たなカレントクラスとする（Ｓ１４１０）。続いて、全体クラスパス作成部１１４は、パスデータにカレントクラスのクラスＩＤを追加する（Ｓ１４１１）。
【００８３】
上記ステップＳ１４０５〜Ｓ１４１１は、ステップＳ１４０４の判定結果がＮｏとなるまで繰り返される。全体クラス図５１０については、クラスＡ、Ａ１、ａ１の順でカレントクラスとされ、当該各クラスのクラスＩＤ（１、２、３）がパスデータに格納される。クラスａ１についてステップＳ１４０４の判定が行われると、当該判定結果はＮｏとなり、ステップＳ１４１２に進む。クラスａ１を関係元とする関係は無いからである。
【００８４】
ステップＳ１４１２において、全体クラスパス作成部１１４は、カレントクラスは基準クラスであるか否かを判定する。カレントクラスが基準クラスでない場合（Ｓ１４１２でＮｏ）、全体クラスパス作成部１１４は、変数ｎｅｗＰａｔｈの値はｔｒｕｅであるか否かを判定する。すなわち、一つのパスの作成中であるか否かが判定される。なお、カレントクラスがクラスａ１である場合、クラスａ１は基準クラスでないため（基準クラスはクラスＡである）、ステップＳ１４１３が実行される。
【００８５】
変数ｎｅｗＰａｔｈの値がｔｒｕｅである場合（Ｓ１４１３でＹｅｓ）、全体クラスパス作成部１１４は、一つのパス（図１０のパスＴ１）の作成が完了したとし、現在処理対象とされているパスデータを全体パスリスト３２１に追加する（Ｓ１４１４）。なお、全体パスリスト３２１は、パスデータのリスト（一覧）を格納するための構造を有する。続いて、全体クラスパス作成部１１４は、一つのパスの作成が完了したことを示すため、変数ｎｅｗＰａｔｈの値をｆａｌｓｅに更新する（Ｓ１４１５）。続いて、全体クラスパス作成部１１４は、現在処理対象とされているパスデータにおいてカレントクラスの一つ前の要素に係るクラスをカレントクラスとする（Ｓ１４１６）。すなわち、関係が逆方向に辿られてカレントクラスが更新される。具体的には、クラスａ１からクラスＡ１にカレントクラスが更新される。
【００８６】
続いて、更新されたカレントクラスについてステップＳ１４０４が実行される。クラスＡ１を関係元とする未処理の関係は無く（Ｓ１４０４でＮｏ）、クラスＡ１は基準クラスではなく（Ｓ１４１２でＮｏ）、変数ｎｅｗＰａｔｈの値はｆａｌｓｅであるため（Ｓ１４１３でＮｏ）、ステップＳ１４１６が実行される。すなわち、更に関係が逆方向に辿られ、クラスＡがカレントクラスとなる。
【００８７】
クラスＡについては、未処理のパスが有る。したがって、図１０のパスＴ２、Ｔ３、及びＴ４のそれぞれに対応するパスデータが上述した手順によって生成され、全体パスリスト３２１に追加される。パスＴ４の作成完了後、クラスＢ１→Ｂ→Ａの順でカレントクラスが逆に辿られ、再びクラスＡがカレントクラスとなると、ステップＳ１４０４の判定結果はＮｏとなる。クラスＡを関係元とする未処理の関係は無いからである。続いて、カレントクラスは基準クラスであるため（Ｓ１４１２でＹｅｓ）、図２２の処理は終了する。
【００８８】
続いて、図４のステップＳ１５（すなわち、図１１に示される部分クラス図の作成処理）の詳細について説明する。図２３は、部分クラス図の作成処理の処理手順を説明するためのフローチャートである。
【００８９】
ステップＳ１５１において、部分クラス図作成部１１６は、カレント分割パターンを分割線一覧としてクラス図分割部１１５に入力し、カレント分割パターンによる全体クラス図５１０の分割をクラス図分割部１１５に実行させる（Ｓ１５１）。したがって、ステップＳ１５１では、図１７及び図２０において説明した処理手順が、カレント分割パターン、全体クラステーブル４１１、及び全体関係テーブル４１２等に基づいて実行される。
【００９０】
続いて、部分クラス図作成部１１６は、クラス図分割部１１５によって作成された、部分クラステーブル及び部分関係テーブルの集合を分割結果データ３１３としてメモリ装置１０３に記録する（Ｓ１５２）。すなわち、一つの分割結果データ３１３には、一つの分割パターンによって分割された結果として作成される、部分クラステーブル及び部分関係テーブルが含まれる。なお、分割結果に応じて同種のテーブルが複数含まれうる。例えば、二つの部分クラス図に分割された場合、部分クラス図ごとに部分クラステーブル及び部分関係テーブルが作成され、同じ分割結果データ３１３に含まれる。
【００９１】
続いて、図４のステップＳ１６の詳細について説明する。図２４は、部分クラス図の基準クラスの判定処理の処理手順を説明するためのフローチャートである。
【００９２】
ステップＳ１６１において、部分基準クラス判定部１１７は、空の基準クラス一覧データ３１４をメモリ装置１０３に生成する。基準クラス一覧データ３１４は、一つの分割パターンによって分割される部分クラス図ごとに基準クラスのリスト（後述される基準クラス部分リスト）を格納可能なデータ構造を有する。一つの部分クラス図について、基準クラスのリスト（一覧）を対応させるのは、分割点を複数有する部分クラス図が作成されうるためである。すなわち、部分クラス図の基準クラスは、分割点ごとに存在する可能性が有るからである。
【００９３】
続いて、部分基準クラス判定部１１７は、空の基準クラス部分リストをメモリ装置１０３に生成する（Ｓ１６２）。基準クラス部分リストは、一つの部分クラス図における基準クラスの一覧を格納するためのデータである。続いて、部分基準クラス判定部１１７は、全体クラス図の基準クラス（クラスＡ）のクラスＩＤを基準クラス部分リストに追加する（Ｓ１６３）。続いて、部分基準クラス判定部１１７は、基準クラス一覧データ３１４に基準クラス部分リストを追加する（Ｓ１６４）。すなわち、全体クラス図５１０の基準クラスは、当該基準クラスを含む部分クラス図において基準クラスとなる。したがって、ステップＳ１６３及びＳ１６４は、全体クラス図５１０の基準クラスを一つの部分クラス図の基準クラスとして基準クラス一覧データ３１４に登録するための処理である。
【００９４】
続いて、部分基準クラス判定部１１７は、カレント分割パターン内に含まれる分割線ごとにステップＳ１６６以降の処理を実行する（Ｓ１６５）。ステップＳ１６６において、部分基準クラス判定部１１７は、カレント分割パターン内において、未処理の分割線を処理対象（以下、「カレント分割線」という。）とする。続いて、部分基準クラス判定部１１７は、空の基準クラス部分リストをメモリ装置１０３に生成する（Ｓ１６７）。
【００９５】
続いて、部分基準クラス判定部１１７は、カレント分割線に含まれる分割点（関係ＩＤ）ごとにステップＳ１６９以降の処理を実行する（Ｓ１６８）。ステップＳ１６９において、部分基準クラス判定部１１７は、カレント分割線内において、未処理の分割点を処理対象（以下、「カレント分割点」という。）とする。続いて、部分基準クラス判定部１１７は、カレント分割点の関係元クラスＩＤを含むパスデータを全体パスリスト３２１の中から検索する（Ｓ１７０）。カレント分割点の関係元クラスＩＤは、カレント分割点の関係ＩＤに基づいて全体関係テーブル４１２より取得することができる。続いて、部分基準クラス判定部１１７は、検索されたパスデータにおいてカレント分割点の関係元クラスＩＤの次に格納されているクラスＩＤ（パスの経路順において次のクラスのクラスＩＤ）を基準クラス部分リストに追加する（Ｓ１７１）。すなわち、当該クラスＩＤに係るクラスが、カレント分割線によって分割される関係先の部分クラス図の基準クラスとなる。
【００９６】
ステップＳ１６９以降の処理がカレント分割線に含まれる全ての分割点について完了すると（Ｓ１６８でＮｏ）、一つの分割線に係る各分割点に対応する基準クラスについて基準クラス部分リストへの登録が完了する。このことは、カレント分割線によって分割された一つの部分クラス図における基準クラスの登録の完了を意味する。そこで、部分基準クラス判定部１１７は、基準クラス部分リストをカレント分割線と対応付けて基準クラス一覧データ３１４に追加する（Ｓ１７２）。したがって、例えば、基準クラス一覧データ３１４は、ｍａｐ形式のデータとしてもよい。この場合、ｋｅｙにカレント分割線を登録し、ｖａｌｕｅに基準クラス部分リストを登録すればよい。なお、全体クラス図５１０の基準クラスには対応する分割線は無い。したがって、ステップＳ１６４においては分割線との対応付けは行われない。
【００９７】
続いて、カレント分割パターンに含まれる他の分割線のそれぞれについてステップＳ１６６以降が実行される（Ｓ１６５）。その結果、基準クラス一覧データ３１４は、カレント分割パターンによって分割された部分クラス図ごとに、基準クラス部分データが登録された状態となる。
【００９８】
なお、図２４の処理は、分割結果データ３１３を用いて行ってもよい。具体的には、部分クラス図ごとの部分クラステーブル及び部分関係テーブル（例えば、図２１参照）に基づいて、各部分クラス図の基準クラスが判定されてもよい。この場合、部分クラステーブルに登録されているクラスＩＤの中で、部分関係テーブルの関係先クラスＩＤとして登録されていないクラスＩＤに係るクラスを、部分クラス図の基準クラスとすればよい。
【００９９】
続いて、図４のステップＳ１７の詳細について説明する。ステップＳ１７において、部分クラスパス作成部１１８は、基準クラス一覧データ３１４に含まれている基準クラスごとに、図２２と同様の処理手順を実行する。すなわち、全体クラスパス作成部１１４は、全体クラス図５１０の基準クラスからのパスを作成したが、部分クラスパス作成部１１８は、同じ処理手順によって部分クラス図の基準クラスごとにパスを作成する。したがって、ステップＳ１４０１における基準クラスは、処理対象とされた基準クラスとなる。また、全体関係テーブル４１２の代わりに、処理対象とされた基準クラス（部分クラス図）に係る部分関係テーブル（例えば、図２１参照）が利用される。当該部分関係テーブルに基づいて、ステップＳ１４０１の判定や、カレントクラスの関係先クラス等の判定等が行われる。また、ステップＳ１４０２では、空の部分パスリスト３１５が生成され、ステップＳ１４１４では当該部分パスリスト３１５にパスデータが追加される。
【０１００】
その結果、カレント分割パターンによって分割された部分クラス図ごとに部分パスリスト３１５がメモリ装置１０３に生成される。なお、一つの部分パスリスト３１５は、一つの部分クラス図におけるパスの一覧を示すデータである。例えば、図１２に例示される部分クラス図５１２であれば、３つのパスに関するパスデータが一つの部分パスリスト３１５に格納される。
【０１０１】
続いて、図４のステップＳ１８の詳細について説明する。図２５は、部分クラス図の各クラスのモデル量の算出処理の処理手順を説明するためのフローチャートである。同図の処理手順は、一つの部分クラス図に含まれている各クラスのモデル量を算出するものである。したがって、ステップＳ１８では、カレント分割パターンによって分割された部分クラス図ごとに（部分パスリスト３１５ごとに）同図の処理手順がくり返し実行される。図２５の説明において、「部分パスリスト３１５」は、処理対象とされた部分クラス図に対応する一つの部分パスリスト３１５をいう。
【０１０２】
ステップＳ１８０１において、部分クラスモデル量算出部１１９は、空のモデル量リスト３１６をメモリ装置１０３に生成する。続いて、処理対象とされている部分クラス図の基準クラスのモデル量を（１，０）とし、当該モデル量と基準クラスのクラスＩＤとが対応付けられたデータをモデル量リスト３１６の要素として追加する（Ｓ１８０２）。すなわち、モデル量リスト３１６は、クラスＩＤとモデル量との組の一覧を格納可能なデータ構造を有する。したがって、モデル量リスト３１６は、クラスＩＤをｋｅｙとし、モデル量をｖａｌｕｅとするｍａｐ形式のデータとしてもよい。なお、処理対象とされている部分クラス図の基準クラスとは、部分パスリスト３１５内のパスデータにおいて先頭の要素である。各パスの基準クラスが重複する場合（例えば、図１２では、３つの全てのパスの基準クラスはクラスＡである。）、重複は排除されて基準クラス一つ分のモデル量がモデル量リスト３１６に追加される。また、本実施の形態において、モデル量は、（ａ，ｂ）と表記される。ａは係数であり、ｂは次数である。したがって、基準クラスのモデル量は「１」となる。なお、モデル量の表現の仕方は任意である。例えば、多重度が整数で特定されている場合は、モデル量は単に整数によって表現してもよい。本実施の形態では、多重度は不定値（ｎ）である。したがって、モデル量は、ｎの関数として表現される。
【０１０３】
続いて、部分クラスモデル量算出部１１９は、部分パスリスト３１５内に未処理のパスデータ（一つ分のパスに関するクラスＩＤのリスト）が残っているか否かを判定する（Ｓ１８０３）。未処理のパスデータが残っている場合、部分クラスモデル量算出部１１９は、未処理のパスデータの一つを処理対象（以下、「カレントパスデータ」という。）とする（Ｓ１８０４）。続いて、部分クラスモデル量算出部１１９は、カレントパスデータ内で未処理のクラスＩＤの有無を判定する（Ｓ１８０５）。未処理のクラスＩＤが有る場合（Ｓ１８０４でＹｅｓ）、部分クラスモデル量算出部１１９は、カレント部分パスリスト３１５内の並び順において基準クラス側から順に一つのクラスＩＤを処理対象（以下、「カレントクラスＩＤ」という。）とする（Ｓ１８０６）。したがって、最初にステップＳ１８０４が実行されるときは、基準クラスのクラスＩＤがカレントクラスＩＤとされる。
【０１０４】
続いて、部分クラスモデル量算出部１１９は、処理対象の部分クラス図の部分関係テーブルより関係元クラスＩＤがカレントクラスＩＤであり、関係先クラスＩＤがカレントクラスＩＤの次のクラスＩＤであるデータ（行）を取得する（Ｓ１８０７）。なお、カレントクラスＩＤの次のクラスＩＤとは、カレントパスデータの並び順においてカレントクラスＩＤの次のクラスＩＤをいう。
【０１０５】
続いて、部分クラスモデル量算出部１１９は、取得されたデータに含まれている関係種別、関係元多重度、及び関係先多重とモデル量計算ルールデータ１５２とに基づいて、カレントクラスＩＤに係るクラス（カレントクラス）の関係先のクラスのモデル量を算出する（Ｓ１８０８）。より詳しくは、部分クラスモデル量算出部１１９は、取得されたデータに含まれている関係種別、関係元多重度、及び関係先多重に対応する関係先モデル量をモデル量計算ルールデータ１５２（図１３参照）より取得する。取得された関係先モデル量の「ａ」にカレントクラスのモデル量を代入することにより、当該関係先クラスのモデル量を算出する。したがって、例えば、カレントクラスのモデル量が「１」であり、カレントクラスと関係先のクラスとが１対ｎの多重度による集約関係を有する場合、当該関係先のクラスのモデル量はｎとなる。
【０１０６】
続いて、部分クラスモデル量算出部１１９は、当該関係先のクラスのモデル量について、算出された結果と既にモデル量リスト３１６に登録されているモデル量とを比較する（Ｓ１８０９）。ステップＳ１８０８でモデル量が算出されたクラスと同一のクラスについて既にモデル量リスト３１６にモデル量が登録されているケースとしては、当該クラスが二つ以上のパスに含まれているケースが挙げられる。例えば、図１２において、クラスａ１及びａ２は、それぞれ二つのパスに含まれている。このようなクラスについては、各パスにおいて算出されたモデル量のうちの最大値が採用される。したがって、部分クラスモデル量算出部１１９は、新たに算出されたモデル量の方が大きい場合に（Ｓ１８０９でＹｅｓ）、当該モデル量と当該関係先のクラスのクラスＩＤとが対応付けられたデータをモデル量リスト３１６の要素として追加する（Ｓ１８１０）。なお、当該関係先のクラスに対するモデル量がモデル量リスト３１６に登録されていない場合もステップＳ１８１０は実行される。例えば、モデル量がｎである場合、（ｎ，１）を含む要素がモデル量リスト３１６に登録される。
【０１０７】
ステップ１８０６以降がカレントパスデータ内の全てクラスＩＤについて実行されると（Ｓ１８０５でＮｏ）、次のパスデータがカレントパスデータとされてステップＳ１８０５以降が実行される。更に、部分パスリスト３１５内の全てのパスデータについてステップＳ１８０３以降が実行されると（Ｓ１８０３でＮｏ）、図２５の処理は終了する。
【０１０８】
図２５の処理がカレント分割パターンの部分クラス図ごとに実行されることにより、図２６に示されるように、各部分クラス図に含まれる各クラスのモデル量が算出され、算出結果が各モデル量リスト３１６に格納される。
【０１０９】
図２６は、一つの分割パターンにおける各部分クラス図の各クラスのモデル量の算出結果の例を示す図である。図２６中、図１１と同一部分には同一符号を付している。
【０１１０】
図２６において、各クラスの矩形内の括弧内にモデル量が記載されている。例えば、部分クラス図５１１において、クラスＡ１のモデル量は１であり、クラスａ１のモデル量は１である。部分クラス図５１２において、クラスＡ、Ａ２、ａ１、ａ２、Ｂ、Ｂ１のモデル量は、それぞれ、１、ｎ、ｎ３、ｎ３、ｎ、ｎである。関係クラス図５１３において、クラスＡ、Ａ１のモデル量は、それぞれ、１、ｎである。図２６の分割パターンの場合、部分クラス図５１１、部分クラス図５１２、関係クラス図５１３のそれぞれについてモデル量リスト３１６が生成され、各部分クラス図（関係クラス図も含む）の各クラスのモデル量が各モデル量リスト３１６に格納される。
【０１１１】
続いて、図４のステップＳ１９の詳細について説明する。図２７は、各部分クラス図に含まれるクラスのモデル量の総和の算出処理の処理手順を説明するためのフローチャートである。同図の処理手順は、一つの分割パターンに係る全部分クラス図に含まれている各クラスのモデル量の総和を算出するものである。なお、本実施の形態において、モデル量は（係数，次数）の形式で表現されている。したがって、図２７の処理は、単純な整数の足し算ではなく、モデル量リスト３１６に格納されているモデル量の中で次数が共通するモデル量同士を統合する処理となる。但し、モデル量を整数で表現している場合、図２７の処理は、各クラスのモデル量をモデル量加算ルールデータ１５３に従って足し算すればよい。
【０１１２】
ステップＳ１９０１において、部分モデル量総和算出部１２０は、空のモデル量総和データ３１７をカレント分割パターンに関連付けてメモリ装置１０３に生成する。モデル量総和データ３１７は、次数が共通する同士が統合されたモデル量の一覧を格納可能なデータ構造を有する。続いて、部分モデル量総和算出部１２０は、カレント分割パターンに係るモデル量リスト３１６ごとにステップＳ１９０３以降の処理を実行する（Ｓ１９０２）。ステップＳ１９０３において、部分モデル量総和算出部１２０は、モデル量リスト３１６のうち、未処理のモデル量リスト３１６を処理対象（以下、「カレントモデル量リスト３１６」という。）とする。
【０１１３】
続いて、部分モデル量総和算出部１２０は、カレントモデル量リスト３１６に含まれる要素ごとにステップＳ１９０５以降の処理を実行する（Ｓ１９０４）。なお、要素とは、クラスＩＤとモデル量とが対応付けられたデータである。ステップＳ１９０５において、部分モデル量総和算出部１２０は、カレントモデル量における未処理の要素を一つ処理対象（以下、「カレント要素」という。）とする。続いて、部分モデル量総和算出部１２０は、カレント要素のクラスＩＤが関係先クラスＩＤであるデータ（行）をカレントモデル量リスト３１６に対応する部分関係テーブルより取得する（Ｓ１９０６）。なお、カレントモデル量リスト３１６に対応する部分関係テーブルとは、カレントモデル量リスト３１６に対応する部分クラス図の部分関係テーブルをいう。
【０１１４】
続いて、部分モデル量総和算出部１２０は、取得されたデータとモデル量加算ルールデータ１５３（図１４参照）とに基づいて、カレント要素のモデル量は加算対象であるか否かを判定する（Ｓ１９０７）。例えば、図１４のモデル量加算ルールデータ１５３に基づく場合、取得されたデータに含まれている関係種別が継承以外であれば、加算対象であると判定される。当該関係種別が継承であれば加算対象ではないと判定される。なお、カレント要素が基準クラスに対応する場合、無条件に加算対象とされる。カレント要素が基準クラスに対応する場合とは、カレント要素のクラスＩＤが部分クラス図の関係先クラスＩＤとして登録されていない場合である。
【０１１５】
カレント要素のモデル量が加算対象でない場合（Ｓ１９０７でＮｏ）、カレントモデル量リスト３１６における次の要素が処理対象とされる。カレント要素のモデル量が加算対象である場合（Ｓ１９０７でＹｅｓ）、部分モデル量総和算出部１２０は、モデル量総和データ３１７に既に登録されているモデル量の中で、カレント要素のモデル量と次数が一致するモデル量を取得する（Ｓ１９０８）。なお、取得されたモデル量はモデル量総和データ３１７より除去（削除）される。
【０１１６】
該当するモデル量が取得されなかった場合（Ｓ１９０９でＮｏ）、部分モデル量総和算出部１２０は、カレント要素のモデル量をモデル量総和データ３１７の要素として追加する（Ｓ１９１０）。該当するモデル量が取得された場合（Ｓ１９０９でＹｅｓ）、部分モデル量総和算出部１２０は、取得されたモデル量の係数とカレント要素のモデル量の係数を合算する（Ｓ１９１１）。なお、該当するモデル量は複数存在する場合が有る。この場合、複数の全てのモデル量の係数が合算される。続いて、部分モデル量総和算出部１２０は、合算された係数を係数とし、カレント要素のモデル量の次数を次数とするモデル量をモデル量総和データ３１７の要素として追加する（Ｓ１９１２）。
【０１１７】
ステップＳ１９１０又はＳ１９１２に続いて、カレントモデル量リスト３１６における他の要素についてステップＳ１９０４以降の処理が実行される。カレントモデル量リスト３１６に含まれる全ての要素についてステップＳ１９０５以降の処理が完了すると（Ｓ１９０４でＮｏ）、カレント分割パターンに係る他の部分クラス図に係るモデル量リスト３１６をカレントモデル量リスト３１６としてステップＳ１９０３以降の処理が実行される。カレント分割パターンに係る全てのモデル量リスト３１６についてステップＳ１９０３以降の処理が完了すると（Ｓ１９０２でＮｏ）、図２７の処理は終了する。
【０１１８】
図２７の処理の結果、モデル量総和データ３１７には、カレント分割パターンに係る全ての部分クラス図に含まれるクラスのモデル量の総和が格納される。したがって、モデル量総和データ３１７は分割パターンと１対１に対応する。例えば、図２６の分割パターンの場合、１＋１＋１＋ｎ＋ｎ３＋ｎ３＋ｎ＋１＋ｎの総和として４＋３ｎ＋２ｎ３が算出され、各項（４、３ｎ、２ｎ３）がモデル量総和データ３１７の要素となる。
【０１１９】
また、図２８は、別の分割パターンのモデル量を示す図である。同図は、関係３を分割点とする分割線による分割パターンを示す。この場合、部分クラス図５１４、部分クラス図５１５、関係クラス図５１６に関する分割結果データ３１３が生成される。同図の各クラスのモデル量の総和は、１＋１＋ｎ＋ｎ＋ｎ＋１＋ｎ２＋ｎ２＋１＋ｎ＝４＋３ｎ＋２ｎ２となる。したがって、当該分割パターンついては、４、３ｎ、２ｎ２がモデル量総和データ３１７の要素となる。
【０１２０】
続いて、図４のステップＳ２１の詳細について説明する。図２９は、モデル量が最小の分割パターンの選択処理の処理手順を説明するためのフローチャートである。なお、図４より明らかなように、ステップＳ２１（図２９の処理）は、全ての分割パターン（全ての分割線の組み合わせ）ごとにモデル量総和データ３１７が生成された後に実行される。
【０１２１】
ステップＳ２１１において、分割パターン選択部１２１は、全てのモデル量総和データ３１７のうちの一つのモデル量総和データ３１７を最小モデル量とする。続いて、分割パターン選択部１２１は、全てのモデル量総和データ３１７について比較が行われたか否かを判定する（Ｓ２１２）。比較されていないモデル量総和データ３１７が存在する場合（Ｓ２１２でＮｏ）、分割パターン選択部１２１は、比較されていないモデル量総和データ３１７のうちの一つを比較対象とする（Ｓ２１３）。続いて、分割パターン選択部１２１は、最小モデル量と比較対象とをモデル量比較部１２２に入力し、二つのモデル量の比較をモデル量比較部１２２に実行させる（Ｓ２１４）。
【０１２２】
モデル量比較部１２２によって、最小モデル量より比較対象の方が小さいと判定された場合（Ｓ２１５でＹｅｓ）、分割パターン選択部１２１は、比較対象によって最小モデル量を更新する（Ｓ２１６）。最小モデル量より比較対象の方が小さいと判定されなかった場合（Ｓ２１５でＮｏ）、最小モデル量の更新は行われない。
【０１２３】
全てのモデル量総和データ３１７についてステップＳ２１３以降の処理が完了すると（Ｓ２１２でＹｅｓ）、分割パターン選択部１２１は、当該処理の完了時点における最小モデル量に対応する分割パターンを示す情報を出力する（Ｓ２１７）。例えば、当該分割パターンを示す情報を表示装置１０５に表示させてもよいし、補助記憶装置１０２に記憶させてもよい。また、当該分割パターンに対応する部分クラス図データ、部分クラス図データ（部分クラステーブル、部分関係テーブル、関係図テーブル）が補助記憶装置１０２を記憶させてもよい。また、選択される分割パターンはモデル量の総和が最小のものに限定されなくてもよい。相対的にモデル量の総和が小さい数件の分割パターンを分割候補として提示し、いずれの分割パターンを採用するかはユーザに選択させるようにしてもよい。そうすることにより、ユーザの都合をも勘案した分割パターンに基づいて、全体クラス図５１０の分割を行うことができる。
【０１２４】
続いて、図２９のステップＳ２１４の詳細について説明する。図３０は、二つのモデル量総和データの比較処理の処理手順を説明するためのフローチャートである。
【０１２５】
ステップＳ６０１において、モデル量比較部１２２は、比較される二つのモデル量総和データ３１７の入力を受け付ける。ここでは、一方をモデル量総和データＡと呼び、他方をモデル量総和データＢと呼ぶ。続いて、モデル量比較部１２２は、モデル量総和データＡ及びＢの双方について、各要素（各項）を次数の降順にソートする（Ｓ６０２）。続いて、モデル量比較部１２２は、変数ｋの値を１に初期化する（Ｓ６０３）。変数ｋは、二つのモデル量総和データ３１７の間で比較対象とする要素を示す変数である。
【０１２６】
続いて、モデル量比較部１２２は、モデル量総和データＡにおけるｋ番目の要素の有無を確認する（Ｓ６０４）。モデル量総和データＡにｋ番目の要素が有る場合（Ｓ６０４でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＢにおけるｋ番目の要素の有無を確認する（Ｓ６０５）。モデル量総和データＢにｋ番目の要素が無い場合（Ｓ６０５でＮｏ）、モデル量比較部１２２は、モデル量総和データＢの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６０６）。
【０１２７】
モデル量総和データＢにｋ番目の要素が有る場合（Ｓ６０５でＹｅｓ）、モデル量比較部１２２は、二つのモデル量総和データ３１７のｋ番目の要素について比較を行う。以下の説明における次数又は係数は、ｋ番目の要素に関するものである。
【０１２８】
モデル量総和データＢの次数の方がモデル量総和データＡの次数より小さい場合（Ｓ６０７でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＢの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６０８）。モデル量総和データＡの次数の方がモデル量総和データＡの次数より小さい場合（Ｓ６０９でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＡの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６１０）。
【０１２９】
双方のモデル量総和データ３１７の次数が等しい場合（Ｓ６０９でＮｏ）、モデル量比較部１２２は係数を比較する。すなわち、モデル量総和データＢの係数の方がモデル量総和データＡの係数より小さい場合（Ｓ６１１でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＢの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６１２）。モデル量総和データＡの係数の方がモデル量総和データＡの係数より小さい場合（Ｓ６１３でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＡの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６１４）。
【０１３０】
双方のモデル量総和データ３１７の係数も等しい場合（Ｓ６１３でＮｏ）、モデル量比較部１２２は、変数ｋの値をインクリメントし、次の要素（項）を処理対象とする（Ｓ６１５）。
【０１３１】
また、モデル量総和データＡにｋ番目の要素が無い場合（Ｓ６０４でＮｏ）、モデル量比較部１２２は、モデル量総和データＢにおけるｋ番目の要素の有無を確認する（Ｓ６１６）。モデル量総和データＢにｋ番目の要素が有る場合（Ｓ６１６でＹｅｓ）、モデル量比較部１２２は、モデル量総和データＡの方が小さいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６１７）。モデル量総和データＢもｋ番目の要素が無い場合（Ｓ６１６でＮｏ）、モデル量比較部１２２は、双方のモデル量総和データ３１７は等しいと判定し、判定結果を分割パターン選択部１２１に通知する（Ｓ６１８）。
【０１３２】
例えば、図２６の分割パターンのモデル量総和データ３１７の要素を次数で降順にソートすると、２ｎ３、３ｎ、４となる。また、図２８の分割パターンのモデル量総和データ３１７の要素を次数で降順にソートすると、２ｎ２、３ｎ、４となる。二つのモデル量総和データ３１７の１番目の要素の次数は図２８の分割パターンの方が小さい。したがって、この場合、図２８の分割パターンのモデル量総和データ３１７の方が小さいと判定される。このように、本実施の形態では、ｎを十分大きくしたときにおいてモデル量総和データ３１７の大小関係が比較される。
【０１３３】
なお、モデル量が整数によって表現されている場合は、二つのモデル量総和データ３１７の比較は、単純に整数の大小の判定に基づいて行えばよい。
【０１３４】
続いて、より複雑な全体クラス図について、クラス図分割支援装置１０による分割の具体例を示す。図３１は、より複雑な全体クラス図の例を示す図である。同図には、各クラスとクラス間の関係とが全体クラス図６１０として示されている。全体クラス図６１０において、分割点となりうる関係は、分割点Ｐ１１〜Ｐ３４として示されている。分割点Ｐ１１〜Ｐ３４のベキ集合の要素の中で、クラス図６１０を二分割できるものが分割線とされる。また、分割数−１個分の分割線の組み合わせが分割パターンとされる。
【０１３５】
ここでは、クラス図６１０を２分割する例について示す。したがって、１つの分割線によって１つの分割パターンが形成される。なお、クラス図６１０において、画面クラス６１１が基準クラス図であるとする。
【０１３６】
図３２は、一部の分割パターンのそれぞれのモデル量の総和を示す図である。同図には、クラス図６１０に対する一部の分割パターンごとに、モデル量の総和が示されている。分割パターンの表記において、一つの（）は、一つの分割線を示す。（）内の記号は、分割線を形成する分割点を示す。同図に示される分割パターンの中では、分割パターン４（４は識別番号）のモデル量の総和が最小である。したがって、同図の中では分割パターン４が選択される。
【０１３７】
図３３は、分割パターン４による分割例を示す図である。同図に示されるように、分割パターン４の場合、全体クラス図６１０は、部分クラス図６５１と部分クラス図６５２とに分割される。また、部分クラス図６５１と部分クラス図６５２との関係を保持するための関係クラス図６５３が生成される。
【０１３８】
上述したように、本実施の形態によれば、クラス図を分割可能な複数のパターン（分割パターン）の中で、モデル量の総和が最小となるものが適切な分割パターンとして選択される。ここで、モデル量は、多重度に基づいて算出される値であり、多重度がｎの関係先クラスのモデル量は、関係元クラスのモデル量に対してｎを乗じた値となる。したがって、多重度が１対ｎの関係がｍ段階に形成された場合、末端のクラスのモデル量はｎｍとなる。すなわち、ｎの値が十分大きいと仮定すれば、クラス図の分割において、１対ｎの関係や多段階の関係を解消することでモデル量の総和を小さくすることができる。このことは、結果としてモデル量の総和が最小となる分割パターンによって分割された各部分クラス図のモデル量の差は、他の分割パターンの場合に比べて小さくなることを意味する。そして、モデル量はインスタンス数を推定する値であることに鑑みれば、モデル量の総和が最小となる分割パターンによって分割された各クラス図に基づいて作成される各インスタンス図において、インスタンス数は略均等に配分される可能性が高いといえる。
【０１３９】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１４０】
以上の説明に関し、更に以下の項を開示する。
（付記１）
コンピュータが実行するクラス図分割支援方法であって、
クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて、前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを判定する基準クラス判定手順と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを有するクラス図分割支援方法。
（付記２）
前記推定量算出手順は、関係元のクラスの前記推定量に関係先のクラスの多重度を乗じた値を該関係先のクラスの前記推定量とする付記１記載のクラス図分割支援方法。
（付記３）
前記推定量算出手順は、前記多重度が不定値のときは、該多重度の関数として前記推定量を算出し、
前記選択手順は、前記多重度の次数が相対的に小さい分割パターンを選択する付記１又は２記載のクラス図分割支援方法。
（付記４）
一つ以上の前記分割点の組み合わせついて、前記クラス図を二分割可能か否かを判定する判定手順と、
二分割可能な前記分割点の組み合わせを分割線とし、前記分割線の組み合わせによって分割パターンが形成される付記１乃至３いずれか一項記載のクラス図分割支援方法。
（付記５）
前記関係情報は、関係の種別を含み、
分割対象となる関係を前記種別に基づいて判定可能な分割規則情報を記憶した分割記憶情報記憶手段に基づいて分割対象とされる関係を前記分割点とする付記１乃至４いずれか一項記載のクラス図分割支援方法。
（付記６）
前記分割規則情報において、継承関係は分割対象とされない付記５記載のクラス図分割支援方法。
（付記７）
クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段と、
前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを前記関係情報に基づいて判定する基準クラス判定手段と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手段と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手段と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手段とを有するクラス図分割支援装置。
（付記８）
コンピュータに、
クラス図のクラス間の関係ごとに関係元及び関係先のクラスの識別子、関係の多重度を示す関係情報を記憶した関係情報記憶手段を用いて、前記関係を前記クラス図の分割点とする分割パターンごとに、分割された各部分クラス図内の関係において基準となる基準クラスを判定する基準クラス判定手順と、
前記分割パターンごとに、各部分クラス図内の各クラスのインスタンス数の推定量を、前記基準クラスから当該クラスまでに係る各関係の多重度に基づいて、該基準クラスのインスタンス数の推定量を所定値として算出する推定量算出手順と、
前記分割パターンごとに、算出された前記推定量の総和を算出する総和算出手順と、
前記推定量の総和が相対的に小さい分割パターンを選択する選択手順とを実行させるためのプログラム。
【符号の説明】
【０１４１】
１０          クラス図分割支援装置
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        表示装置
１０６        入力装置
１１１        入力部
１１２        分割点探索部
１１３        分割線作成部
１１４        全体クラスパス作成部
１１５        クラス図分割部
１１６        部分クラス図作成部
１１７        部分基準クラス判定部
１１８        部分クラスパス作成部
１１９        部分クラスモデル量算出部
１２０        部分モデル量総和算出部
１２１        分割パターン選択部
１２２        モデル量比較部
１５１        分割ルールデータ
１５２        モデル量計算ルールデータ
１５３        モデル量加算ルールデータ
Ｂ            バス
【図１】
2010271900.tif 000003
【図２】
2010271900.tif 000004
【図３】
2010271900.tif 000005
【図４】
2010271900.tif 000006
【図５】
2010271900.tif 000007
【図６】
2010271900.tif 000008
【図７】
2010271900.tif 000009
【図８】
2010271900.tif 000010
【図９】
2010271900.tif 000011
【図１０】
2010271900.tif 000012
【図１１】
2010271900.tif 000013
【図１２】
2010271900.tif 000014
【図１３】
2010271900.tif 000015
【図１４】
2010271900.tif 000016
【図１５】
2010271900.tif 000017
【図１６】
2010271900.tif 000018
【図１７】
2010271900.tif 000019
【図１８】
2010271900.tif 000020
【図１９】
2010271900.tif 000021
【図２０】
2010271900.tif 000022
【図２１】
2010271900.tif 000023
【図２２】
2010271900.tif 000024
【図２３】
2010271900.tif 000025
【図２４】
2010271900.tif 000026
【図２５】
2010271900.tif 000027
【図２６】
2010271900.tif 000028
【図２７】
2010271900.tif 000029
【図２８】
2010271900.tif 000030
【図２９】
2010271900.tif 000031
【図３０】
2010271900.tif 000032
【図３１】
2010271900.tif 000033
【図３２】
2010271900.tif 000034
【図３３】
2010271900.tif 000035