(57)【要約】【課題】データモデルから複数のインスタンスモデルを効率的に導出する。【解決手段】記憶部１１は、複数のクラスとクラス間の関連とを含むデータモデル１３を記憶する。処理部１２は、データモデル１３から、それぞれが、あるクラスを継承する子クラスの候補が複数存在する選択的継承、ある関連の多重度の候補が複数存在する選択的多重度、または、あるクラスに含まれる属性が取る属性値の候補が複数存在する選択的属性値を示す選択的要素１４ａ，１４ｂ，１４ｃを検出する。処理部１２は、選択的要素１４ａ，１４ｂ，１４ｃから１つずつ候補値を選択することで、選択された候補値の組み合わせを示す異なる複数のレコードを含むバリエーション情報１５を生成する。処理部１２は、バリエーション情報１５に基づいて、複数のレコードに対応する複数のインスタンスモデル１６ａ，１６ｂ，１６ｃ，１６ｄを生成する。【選択図】図１
2019066987.tif 000002
【特許請求の範囲】
【請求項１】
複数のクラスと前記複数のクラス間の関連とを含むデータモデルを記憶する記憶部と、
前記データモデルから、複数の候補値をもつ選択的要素であって、それぞれが、あるクラスを継承する子クラスの候補が複数存在する選択的継承、ある関連の多重度の候補が複数存在する選択的多重度、または、あるクラスに含まれる属性が取る属性値の候補が複数存在する選択的属性値を示す２以上の選択的要素を検出し、
前記２以上の選択的要素から１つずつ候補値を選択することで、選択された候補値の組み合わせを示す異なる複数のレコードを含むバリエーション情報を生成し、
前記バリエーション情報に基づいて、前記２以上の選択的要素それぞれを１つの候補値に限定することで前記データモデルから導出されるインスタンスモデルであって、前記複数のレコードに対応する複数のインスタンスモデルを生成する処理部と、
を有する解析装置。
【請求項２】
前記処理部は更に、前記２以上の選択的要素から、複数の第１の候補値をもつ第１の選択的要素を特定の第１の候補値に限定した場合に、複数の第２の候補値をもつ第２の選択的要素がインスタンスモデルに出現しなくなる依存関係を検出し、
前記バリエーション情報の生成では、前記特定の第１の候補値を含むレコードは前記複数の第２の候補値の何れも含まないように前記複数のレコードを生成する、
請求項１記載の解析装置。
【請求項３】
前記依存関係の検出では、前記第１の選択的要素および前記第２の選択的要素から、候補値として前記特定の第１の候補値および前記複数の第２の候補値をもち他の第１の候補値をもたない第３の選択的要素を合成し、
前記バリエーション情報の生成では、前記第１の選択的要素および前記第２の選択的要素に代えて前記第３の選択的要素から１つ候補値を選択する、
請求項２記載の解析装置。
【請求項４】
前記第１の選択的要素は、前記選択的継承であり、前記第２の選択的要素は、前記第１の選択的要素が示す複数の子クラスのうち特定の子クラスに含まれておらず他の子クラスに含まれている属性についての前記選択的属性値であり、
前記特定の第１の候補値は、前記特定の子クラスである、
請求項２記載の解析装置。
【請求項５】
前記第１の選択的要素は、多重度の候補にゼロを含む前記選択的多重度であり、前記第２の選択的要素は、前記第１の選択的要素が示す関連に接続されたクラスに含まれる属性についての前記選択的属性値であり、
前記特定の第１の候補値は、多重度がゼロであることである、
請求項２記載の解析装置。
【請求項６】
前記バリエーション情報は、前記２以上の選択的要素に対応する２以上の候補値集合の直積によって得られる全組み合わせ集合のうちの部分集合である、
請求項１記載の解析装置。
【請求項７】
コンピュータが実行する解析方法であって、
複数のクラスと前記複数のクラス間の関連とを含むデータモデルを取得し、
前記データモデルから、複数の候補値をもつ選択的要素であって、それぞれが、あるクラスを継承する子クラスの候補が複数存在する選択的継承、ある関連の多重度の候補が複数存在する選択的多重度、または、あるクラスに含まれる属性が取る属性値の候補が複数存在する選択的属性値を示す２以上の選択的要素を検出し、
前記２以上の選択的要素から１つずつ候補値を選択することで、選択された候補値の組み合わせを示す異なる複数のレコードを含むバリエーション情報を生成し、
前記バリエーション情報に基づいて、前記２以上の選択的要素それぞれを１つの候補値に限定することで前記データモデルから導出されるインスタンスモデルであって、前記複数のレコードに対応する複数のインスタンスモデルを生成する、
解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は解析装置および解析方法に関する。
【背景技術】
【０００２】
ソフトウェア開発では、データの静的構造を表すデータモデルを作成することがある。データモデルは、その表記方法に応じてクラス図やＥＲ（Entity Relationship）図などと言われることがある。データモデルは、概念的なデータ単位を示す複数のクラス（エンティティと言うこともある）と、クラス間の参照関係を示す複数の関連とを含む。クラスはノードとして表記され、関連はノード間のリンクとして表記されることがある。
【０００３】
データモデルは、想定される様々な具体的なデータ例が共通に有する特徴を記載したモデルである。１つのクラスからは、当該クラスの属性の値などを特定した具体的なデータ単位を示す様々なインスタンスを想定することが可能である。また、１つのデータモデルからは、複数のインスタンスとインスタンス間の具体的な参照関係を示す関連とを含む様々なインスタンスモデルを想定することが可能である。
【０００４】
なお、ＥＲ図から帳票のフォーマットを示すビューを生成するビュー合成装置が提案されている。提案のビュー合成装置は、ＥＲ図の中から１つのエンティティを主エンティティとして選択し、主エンティティの属性を繰り返し項目としてビューを合成する。
【０００５】
また、大規模なＥＲ図の編集を支援するＥＲ図作成支援装置が提案されている。提案のＥＲ図作成支援装置は、ユーザが１つのエンティティを選択すると、選択されたエンティティおよび選択されたエンティティと関連をもつ関連エンティティが強調されるように、各エンティティの位置や大きさや色などの表示方法を変更する。
【０００６】
また、コンピュータシステムの構成要素の間の依存関係の把握を支援する管理システムが提案されている。提案の管理システムは、サーバやＯＳ（Operating System）やＮＩＣ（Network Interface Card）などの構成要素の種類に対応するクラスを含み、構成要素の種類の間の概念的な関連を表したシステムスキーマを記憶する。管理システムは、具体的な２つの構成要素が指定されると、指定された構成要素がインスタンスとして派生するクラスを特定し、システムスキーマ上で２つのクラスの間に存在する関連を検索することで、指定された２つの構成要素の間の依存関係を推定する。
【０００７】
また、クラス図を簡略的に表示するクラス図作成装置が提案されている。提案のクラス図作成装置は、クラス図に記載された複数の関連を、継承関係を示す関連と継承関係以外の関連とに分類する。クラス図作成装置は、ユーザからの入力に応じて、継承関係以外の関連を表示するか否か切り替える。また、クラス図作成装置は、ユーザから下位クラスが指定されると、指定された下位クラスと継承関係にある上位クラスを特定し、上位クラスのノードの中に下位クラスのノードが包含されるようにクラス図を変形する。
【０００８】
また、それぞれ複数のデータ項目を含む２つのデータセットについて、結合して分析することが有用であるか否か判定するデータ処理システムが提案されている。提案のデータ処理システムは、一方のデータセットに含まれるデータ項目の項目名および項目値と、他方のデータセットに含まれるデータ項目の項目名および項目値との間で、類似関係や包含関係を判定して指標値を算出する。データ処理システムは、算出した指標値に基づいて、２つのデータセットの結合可能性を判定する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平６−３４２３８９号公報
【特許文献２】特開２０００−３３０８３７号公報
【特許文献３】特開２００５−２７５５３３号公報
【特許文献４】特開２０１３−１９６３５４号公報
【特許文献５】特開２０１６−７６１４５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ソフトウェア開発においてデータモデルを作成した場合、作成したデータモデルをレビューして不備がないか確認したいことがある。このとき、データモデルは様々なインスタンスを考慮して汎用的に作成されているため、データモデル自体を見るよりもデータモデルから導出されるインスタンスモデルを見る方が不具合に気付きやすいことがある。例えば、想定外の構造をもつデータを示すインスタンスモデルが導出された場合、データモデルに記載された制約に不備があることに気付くことができる。
【００１１】
しかし、１つのデータモデルから１つのインスタンスモデルまたは類似する少数のインスタンスモデルを作成するだけでは、データモデルのレビューに有用なインスタンスモデルにならない。一方、１つのデータモデルからレビューに有用な様々なバリエーションのインスタンスモデルを作成することは、負担が大きいという問題がある。
【００１２】
１つの側面では、本発明は、データモデルから複数のインスタンスモデルを効率的に導出できる解析装置および解析方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
１つの態様では、記憶部と処理部とを有する解析装置が提供される。記憶部は、複数のクラスと複数のクラス間の関連とを含むデータモデルを記憶する。処理部は、データモデルから、複数の候補値をもつ選択的要素であって、それぞれが、あるクラスを継承する子クラスの候補が複数存在する選択的継承、ある関連の多重度の候補が複数存在する選択的多重度、または、あるクラスに含まれる属性が取る属性値の候補が複数存在する選択的属性値を示す２以上の選択的要素を検出する。処理部は、２以上の選択的要素から１つずつ候補値を選択することで、選択された候補値の組み合わせを示す異なる複数のレコードを含むバリエーション情報を生成する。処理部は、バリエーション情報に基づいて、２以上の選択的要素それぞれを１つの候補値に限定することでデータモデルから導出されるインスタンスモデルであって、複数のレコードに対応する複数のインスタンスモデルを生成する。また、１つの態様では、コンピュータが実行する解析方法が提供される。
【発明の効果】
【００１４】
１つの側面では、データモデルから複数のインスタンスモデルを効率的に導出できる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態の解析装置を説明する図である。
【図２】第２の実施の形態の解析装置のハードウェア例を示すブロック図である。
【図３】クラス図の例を示す図である。
【図４】インスタンス図の例を示す図である。
【図５】第２の実施の形態の解析装置の機能例を示すブロック図である。
【図６】クラス情報に含まれるテーブルの例を示す図である。
【図７】多重度境界テーブルと要因水準テーブルの例を示す図である。
【図８】要因水準テーブルの更新例を示す図である。
【図９】インスタンスバリエーションテーブルの例を示す図である。
【図１０】バリエーション生成の手順例を示すフローチャートである。
【図１１】多重度境界値分析の手順例を示すフローチャートである。
【図１２】要因水準抽出の手順例を示すフローチャートである。
【図１３】要因水準抽出の手順例を示すフローチャート（続き）である。
【図１４】水準合成の手順例を示すフローチャートである。
【図１５】合成先判定の手順例を示すフローチャートである。
【図１６】組み合わせ生成の手順例を示すフローチャートである。
【図１７】クラス図の他の例を示す図である。
【図１８】要因水準テーブルの他の例を示す図である。
【図１９】インスタンスバリエーションテーブルの他の例を示す図である。
【図２０】インスタンス図の他の例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１７】
図１は、第１の実施の形態の解析装置を説明する図である。
第１の実施の形態の解析装置１０は、クラス図やＥＲ図などのデータモデルを解析し、当該データモデルが示す制約を満たす複数のインスタンスモデルを生成する。例えば、解析装置１０は、ソフトウェア開発において作成されたデータモデルに対応する複数のインスタンスモデルをユーザに提示し、ユーザによるデータモデルのレビューを支援する。解析装置１０は、クライアントコンピュータでもよいしサーバコンピュータでもよい。
【００１８】
解析装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）などの不揮発性のストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００１９】
記憶部１１は、データモデル１３を記憶する。データモデル１３は、例えば、ユーザによって作成されて解析装置１０に入力されたものである。データモデル１３は、概念的なデータ単位を示す複数のクラス（エンティティと言うこともある）と、クラス間の参照関係を示す複数の関連とを含む。データモデル１３を図形式で表す場合、クラスはノードとして表記されることがあり、関連はリンクとして表記されることがある。
【００２０】
クラスは属性を含むことがあり、データモデル１３において属性の取り得る値が限定されていることがある。また、関連には多重度が規定されていることがある。多重度は、一方のクラスのインスタンス１つが他方のクラスのインスタンスを幾つ参照するかを示す。多重度は１対１のように固定である場合もあるし、１対（０以上）や１対（１以上）や１対（０または１）のように可変である場合もある。多重度が１対０であることは、一方のクラスのインスタンスが他方のクラスのインスタンスを参照しないことを意味する。また、２つのクラス間に継承による親子関係が規定されていることがある。子クラスは親クラスの属性や関連を引き継ぐ。親クラスのインスタンスは実際には子クラスのインスタンスに相当する。１つの親クラスを継承する２以上の子クラスが存在してもよい。その場合、親クラスのインスタンスは実際には何れか１つの子クラスのインスタンスに相当する。
【００２１】
例えば、データモデル１３は、クラス１３ａ，１３ｂ，１３ｃ，１３ｄ，１３ｅを含む。クラス１３ａ（クラスＡ）は中心となるクラスである。クラス１３ｂ（クラスＢ）はクラス１３ａの子クラスである。クラス１３ｃ（クラスＣ）はクラス１３ａの子クラスである。クラス１３ｄ（クラスＤ）はクラス１３ａと関連をもつ。クラス１３ａとクラス１３ｄの間の多重度は１対（０または１）である。クラス１３ｅ（クラスＥ）は属性ａｔｔｒを含む。属性ａｔｔｒは属性値ｖ１または属性値ｖ２をとる。また、クラス１３ｅはクラス１３ａと関連をもつ。クラス１３ａとクラス１３ｅの間の多重度は１対１である。
【００２２】
また、記憶部１１は、後述するバリエーション情報１５と、インスタンスモデル１６ａ，１６ｂ，１６ｃ，１６ｄなどの複数のインスタンスモデルとを記憶する。バリエーション情報１５は、処理部１２がデータモデル１３を解析して生成する情報である。複数のインスタンスモデルは、データモデル１３の制約を満たすデータの具体例として生成されるモデルであり、処理部１２がバリエーション情報１５から生成するモデルである。
【００２３】
処理部１２は、データモデル１３から２以上の選択的要素を検出する。選択的要素は、インスタンスモデルを生成するにあたって複数の候補値をもつものである。２以上の選択的要素はそれぞれ、選択的継承、選択的多重度または選択的属性値を示すものである。選択的継承は、あるクラスを継承する子クラスの候補が複数存在することである。選択的多重度は、ある関連の多重度の候補が複数存在することである。選択的属性値は、あるクラスに含まれる属性が取る属性値の候補が複数存在することである。
【００２４】
例えば、データモデル１３から選択的要素１４ａ，１４ｂ，１４ｃが検出される。選択的要素１４ａは選択的継承に相当し、クラス１３ａを継承する子クラスが２つ存在することを示す。選択的要素１４ａは、クラス１３ｂを示す候補値「Ｂ」とクラス１３ｃを示す候補値「Ｃ」をもつ。選択的要素１４ｂは選択的多重度に相当し、クラス１３ａとクラス１３ｄの間の関連の多重度が２通り存在することを示す。選択的要素１４ｂは、多重度が１対０であることを示す候補値「０」と多重度が１対１であることを示す候補値「１」をもつ。選択的要素１４ｃは選択的属性値に相当し、クラス１３ｅに含まれる属性ａｔｔｒの値が２通り存在することを示す。選択的要素１４ｃは、属性値がｖ１であることを示す候補値「ｖ１」と属性値がｖ２であることを示す候補値「ｖ２」をもつ。
【００２５】
処理部１２は、検出した２以上の選択的要素に基づいて、複数のレコードを含むバリエーション情報１５を生成する。バリエーション情報１５に含まれる各レコードは、２以上の選択的要素から１つずつ選択した候補値の組み合わせを示す。バリエーション情報１５に含まれる複数のレコードは、異なる組み合わせを示すものである。ここで、バリエーション情報１５は、検出した２以上の選択的要素に対応する２以上の候補値集合の直積に相当する全組み合わせ集合でなくてもよく、全組み合わせ集合の部分集合でよい。選択的要素からの候補値の選択では、例えば、オールペア法や直交表を用いた方法などにより、できる限り類似しない組み合わせが抽出されることが好ましい。
【００２６】
例えば、選択的要素１４ａ，１４ｂ，１４ｃから、４つのレコードを含むバリエーション情報１５が生成される。１番目のレコードは、選択的要素１４ａの候補値「Ｂ］と選択的要素１４ｂの候補値「０」と選択的要素１４ｃの候補値「ｖ１」を含む。２番目のレコードは、選択的要素１４ａの候補値「Ｂ］と選択的要素１４ｂの候補値「１」と選択的要素１４ｃの候補値「ｖ２」を含む。３番目のレコードは、選択的要素１４ａの候補値「Ｃ］と選択的要素１４ｂの候補値「０」と選択的要素１４ｃの候補値「ｖ２」を含む。４番目のレコードは、選択的要素１４ａの候補値「Ｃ］と選択的要素１４ｂの候補値「１」と選択的要素１４ｃの候補値「ｖ１」を含む。
【００２７】
なお、上記のバリエーション情報１５の例は、オールペア法によって選択的要素１４ａ，１４ｂ，１４ｃから生成される最小の集合である。オールペア法では、任意の２つの項目に着目したときに、一方の項目の候補値と他方の項目の候補値の組み合わせが全通り出現するようにレコードの集合を生成する。上記のバリエーション情報１５の例では、選択的要素１４ａと選択的要素１４ｂについて、「Ｂ」と「０」、「Ｂ」と「１」、「Ｃ」と「０」、「Ｃ」と「１」という組み合わせが全てカバーされている。また、選択的要素１４ａと選択的要素１４ｃについて、「Ｂ」と「ｖ１」、「Ｂ」と「ｖ２」、「Ｃ」と「ｖ１」、「Ｃ」と「ｖ２」という組み合わせが全てカバーされている。また、選択的要素１４ｂと選択的要素１４ｃについて、「０」と「ｖ１」、「０」と「ｖ２」、「１」と「ｖ１」、「１」と「ｖ２」という組み合わせが全てカバーされている。
【００２８】
処理部１２は、バリエーション情報１５に基づいて、データモデル１３から導出可能な複数のインスタンスモデルを生成する。バリエーション情報１５に含まれる１つのレコードから１つのインスタンスモデルを生成することができる。１つのレコードに対応する１つのインスタンスモデルは、当該レコードに従ってデータモデル１３に含まれる選択的要素それぞれを１つの候補値に限定することで生成される。
【００２９】
例えば、バリエーション情報１５の１番目のレコードからインスタンスモデル１６ａが生成される。インスタンスモデル１６ａは、クラス１３ｂのインスタンスがクラス１３ｄのインスタンスと関連をもたず、属性ａｔｔｒの属性値がｖ１であるクラス１３ｅのインスタンスと関連をもつものである。また、バリエーション情報１５の２番目のレコードからインスタンスモデル１６ｂが生成される。インスタンスモデル１６ｂは、クラス１３ｂのインスタンスがクラス１３ｄのインスタンスと関連をもち、属性ａｔｔｒの属性値がｖ２であるクラス１３ｅのインスタンスと関連をもつものである。
【００３０】
また、バリエーション情報１５の３番目のレコードからインスタンスモデル１６ｃが生成される。インスタンスモデル１６ｃは、クラス１３ｃのインスタンスがクラス１３ｄのインスタンスと関連をもたず、属性ａｔｔｒの属性値がｖ２であるクラス１３ｅのインスタンスと関連をもつものである。また、バリエーション情報１５の４番目のレコードからインスタンスモデル１６ｄが生成される。インスタンスモデル１６ｄは、クラス１３ｃのインスタンスがクラス１３ｄのインスタンスと関連をもち、属性ａｔｔｒの属性値がｖ１であるクラス１３ｅのインスタンスと関連をもつものである。
【００３１】
第１の実施の形態の解析装置１０によれば、データモデル１３から２以上の選択的要素が検出され、選択的要素それぞれから１つの候補値を選択することで複数通りの候補値の組み合わせを示すバリエーション情報１５が生成される。そして、バリエーション情報１５に基づいて、データモデル１３の制約を満たすデータ例を示す複数のインスタンスモデルが生成される。これにより、様々なバリエーションのインスタンスモデルを効率的に生成することができる。よって、データモデル１３に関する作業を効率化できる。例えば、生成されたインスタンスモデルの中から想定外の構造をもつデータ例を示すインスタンスモデルを探すことで、データモデル１３の不備を効率的に発見することができる。
【００３２】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
第２の実施の形態の解析装置１００は、ソフトウェア開発において作成されたクラス図からデータ例を示す複数のインスタンス図を自動生成し、クラス図のレビューを支援する。解析装置１００は、クライアントコンピュータでもよいしサーバコンピュータでもよい。なお、解析装置１００は、第１の実施の形態の解析装置１０に対応する。
【００３３】
図２は、第２の実施の形態の解析装置のハードウェア例を示すブロック図である。
解析装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００３４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよく、解析装置１００は複数のプロセッサを有してもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、解析装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３６】
ＨＤＤ１０３は、ＯＳやミドルウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、解析装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、解析装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００３８】
入力信号処理部１０５は、解析装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス、タッチパネル、タッチパッド、トラックボール、キーボード、リモートコントローラ、ボタンスイッチなど、任意の種類の入力デバイスを用いることができる。また、解析装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００４０】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４１】
通信インタフェース１０７は、ネットワーク１１４を介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース１０７は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【００４２】
次に、クラス図からインスタンス図の導出について説明する。
図３は、クラス図の例を示す図である。
クラス図１４１は、解析装置１００に入力されるデータモデルの例である。クラス図１４１は、クラス１４１ａ，１４１ｂ，１４１ｃ，１４１ｄ，１４１ｅ，１４１ｆを含む。クラス１４１ａ（クラスＡ）は、整数型の属性ａｔｔｒＡを含む。クラス１４１ｂ（クラスＡ１）は、クラス１４１ａを継承する子クラスである。クラス１４１ｃ（クラスＡ２）は、クラス１４１ａを継承する子クラスである。クラス１４１ｄ（クラスＡ３）は、クラス１４１ａを継承する子クラスであり、列挙型の属性ａｔｔｒＡ３を含む。属性ａｔｔｒＡ３の値は、属性値ａ３−１，ａ３−２，ａ３−３の何れかである。
【００４３】
クラス１４１ｅ（クラスＢ）は、列挙型の属性ａｔｔｒＢを含む。属性ａｔｔｒＢの値は、属性値ｂ１，ｂ２，ｂ３の何れかである。クラス１４１ｅは、クラス１４１ａと関連をもつ。クラス１４１ａとクラス１４１ｅの間の関連について、クラス１４１ａ側の多重度は「１」でありクラス１４１ｅ側の多重度は「１．．＊」である。すなわち、クラス１４１ａの１つのインスタンスがクラス１４１ｅの１つ以上のインスタンスと関連をもつ。
【００４４】
クラス１４１ｆ（クラスＣ）は、列挙型の属性ａｔｔｒＣを含む。属性ａｔｔｒＣの値は、属性値ｃ１，ｃ２，ｃ３，ｃ４の何れかである。クラス１４１ｆは、クラス１４１ｅと関連をもつ。クラス１４１ｅとクラス１４１ｆの間の関連について、クラス１４１ｅ側の多重度は「１」でありクラス１４１ｆ側の多重度は「０．．１」である。すなわち、クラス１４１ｅの１つのインスタンスが、クラス１４１ｅのインスタンスと関連をもたないかまたはクラス１４１ｅの１つのインスタンスと関連をもつ。
【００４５】
クラス図１４１からインスタンス図を導出するにあたって、クラス図１４１には複数の候補値の中から１つを選択すべき選択的要素（ＯＲ要素と言うこともできる）が存在する。第２の実施の形態では、選択的要素を「要因」と言うことがあり、選択的要素がもつ候補値を「水準」と言うことがある。要因はパラメータと言うこともでき、水準はパラメータ値と言うこともできる。上記のクラス図１４１は、６つの要因を含む。
【００４６】
１番目の要因は、クラス１４１ａの継承に関する要因であり、子クラスを示す水準「Ａ１」、「Ａ２」、「Ａ３」をもつ。２番目の要因は、クラス１４１ｅの多重度に関する要因である。クラス１４１ｅの多重度は１以上と規定されているため、その候補値は無限に存在する。第２の実施の形態では、範囲指定された多重度については境界値がレビュー上重要であると考え、最低値と残りの範囲に分割して水準を設定することとする。よって、２番目の要因は、水準「１」、「２．．＊」をもつとみなす。
【００４７】
３番目の要因は、クラス１４１ｆの多重度に関する要因であり、水準「０」、「１」をもつ。４番目の要因は、クラス１４１ｅに含まれる属性ａｔｔｒＢの列挙型に関する要因であり、属性値を示す水準「ｂ１」、「ｂ２」、「ｂ３」をもつ。５番目の要因は、クラス１４１ｄに含まれる属性ａｒｒｔＡ３の列挙型に関する要因であり、属性値を示す水準「ａ３−１」、「ａ３−２」、「ａ３−３」をもつ。６番目の要因は、クラス１４１ｆに含まれる属性ａｔｔｒＣの列挙型に関する要因であり、属性値を示す水準「ｃ１」、「ｃ２」、「ｃ３」、「ｃ４」をもつ。
【００４８】
これら６つの要因から１つずつ水準を選択することで、クラス図１４１に対応する１つのインスタンス図を生成することができる。ただし、これら６つの要因の中には、互いに独立に水準を選択することができない依存関係をもつ要因が含まれている。
【００４９】
上記の１番目の要因と５番目の要因とは依存関係をもつ。クラス１４１ｄの属性ａｔｔｒＡ３の属性値は、クラス１４１ａの子クラスとしてクラス１４１ｂまたはクラス１４１ｃが選択された場合には無意味である。よって、水準「Ａ１」または「Ａ２」を選択することと、水準「ａ３−１」、「ａ３−２」または「ａ３−３」を選択することとは矛盾する。また、上記の３番目の要因と６番目の要因とは依存関係をもつ。クラス１４１ｆの属性ａｔｔｒＣの属性値は、クラス１４１ｆの多重度として「０」が選択された場合には無意味である。よって、水準「０」を選択することと、水準「ｃ１」、「ｃ２」、「ｃ３」または「ｃ４」を選択することとは矛盾する。
【００５０】
第２の実施の形態では、依存関係をもつ２つの要因について水準を合成して当該２つの要因を統合することで、矛盾する水準の組み合わせが選択されないようにする。
図４は、インスタンス図の例を示す図である。
【００５１】
クラス図１４１からは、選択する水準を変えることで、複数のインスタンス図を含むインスタンスバリエーション１５１を生成することができる。一例として、インスタンスバリエーション１５１は、インスタンス図１５２，１５３，１５４を含む。
【００５２】
インスタンス図１５２は、クラス１４１ｄから派生したインスタンス１５２ａと、クラス１４１ｅから派生したインスタンス１５２ｂとを含む。インスタンス１５２ａは、属性値ａ３−３を含む。インスタンス１５２ｂは、属性値ｂ３を含む。これは、上記１番目の要因の水準「Ａ３」を選択し、２番目の要因の水準「１」を選択し、３番目の要因の水準「０」を選択し、４番目の要因の水準「ｂ３」を選択し、５番目の要因の水準「ａ３−３」を選択したものである。
【００５３】
インスタンス図１５３は、クラス１４１ｄから派生したインスタンス１５３ａと、クラス１４１ｅから派生したインスタンス１５３ｂと、クラス１４１ｆから派生したインスタンス１５３ｃとを含む。インスタンス１５３ａは、属性値ａ３−３を含む。インスタンス１５３ｂは、属性値ｂ２を含む。インスタンス１５３ｃは、属性値ｃ３を含む。これは、上記１番目の要因の水準「Ａ３」を選択し、２番目の要因の水準「１」を選択し、３番目の要因の水準「１」を選択し、４番目の要因の水準「ｂ２」を選択し、５番目の要因の水準「ａ３−３」を選択し、６番目の要因の水準「ｃ３」を選択したものである。
【００５４】
インスタンス図１５４は、クラス１４１ｂから派生したインスタンス１５４ａと、クラス１４１ｅから派生したインスタンス１５４ｂ，１５４ｃとを含む。インスタンス１５４ｂは、属性値ｂ２を含む。インスタンス１５４ｃは、属性値ｂ２を含む。これは、上記１番目の要因の水準「Ａ１」を選択し、２番目の要因の水準「２．．＊」を選択し、３番目の要因の水準「０」を選択し、４番目の要因の水準「ｂ２」を選択したものである。
【００５５】
次に、解析装置１００の機能について説明する。
図５は、第２の実施の形態の解析装置の機能例を示すブロック図である。
解析装置１００は、クラス情報記憶部１２１、分析情報記憶部１２２、インスタンス情報記憶部１２３、多重度境界値分析部１２４、要因水準抽出部１２５、水準合成部１２６、組み合わせ生成部１２７およびインスタンス図生成部１２８を有する。クラス情報記憶部１２１、分析情報記憶部１２２およびインスタンス情報記憶部１２３は、例えば、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実装される。多重度境界値分析部１２４、要因水準抽出部１２５、水準合成部１２６、組み合わせ生成部１２７およびインスタンス図生成部１２８は、例えば、ＣＰＵ１０１やプログラムを用いて実装される。
【００５６】
クラス情報記憶部１２１は、ソフトウェア開発において作成されたクラス図を示すクラス情報を記憶する。クラス情報は、ユーザによって解析装置１００に対して入力されてもよいし、解析装置１００が他の装置から受信してもよい。クラス情報は、クラス、関連、継承、属性のデータ型などの情報を含む。クラス情報の詳細は後述する。
【００５７】
分析情報記憶部１２２は、クラス図からインスタンス図を導出する過程で生成される中間情報である分析情報を記憶する。分析情報は、クラス図から抽出される要因や水準などの情報を含む。分析情報の詳細は後述する。
【００５８】
インスタンス情報記憶部１２３は、クラス図から導出されるインスタンス図のバリエーションを示すインスタンス情報を記憶する。インスタンス情報は、複数のインスタンス図に対応する複数のレコードを含む。１つのレコードは、複数の要因から１つずつ選択された水準の組み合わせを示す。インスタンス情報の詳細は後述する。
【００５９】
多重度境界値分析部１２４は、クラス図から範囲指定された多重度を抽出し、抽出した多重度に対して境界値分析を行う。第２の実施の形態では、多重度として「０」、「１」、「０．．１」（０または１）、「０．．＊」（０以上）および「１．．＊」（１以上）を想定する。範囲指定された多重度は、単一固定値でない多重度であり、上記のうちの「０．．１」、「０．．＊」、「１．．＊」が該当する。クラス図の不備は多重度の境界値の指定誤りが原因である場合があるため、境界値分析では範囲指定された多重度を最低値と残りの範囲に分割し、最低値と残りの範囲の２つを水準として設定する。よって、多重度境界値分析部１２４は、多重度「０．．１」からは水準「０」、「１」を生成し、多重度「０．．＊」からは水準「０」、「１．．＊」を生成し、多重度「１．．＊」からは水準「１」、「２．．＊」を生成する。
【００６０】
要因水準抽出部１２５は、クラス図から複数の要因を抽出し、抽出した要因それぞれについて複数の水準を抽出し、要因水準を示す分析情報を生成して分析情報記憶部１２２に格納する。要因の種別には、１つの親クラスに対して複数の子クラスが存在することを示す「継承」と、多重度が単一固定値でないことを示す「多重度」と、属性の型が複数の属性値を列挙した集合であることを示す「列挙型」とが含まれる。継承については、各子クラスが水準に用いられる。多重度については、多重度境界値分析部１２４で設定された水準が用いられる。列挙型については、各属性値が水準に用いられる。
【００６１】
水準合成部１２６は、分析情報記憶部１２２に記憶された分析情報が示す複数の要因の中から、依存関係をもつ要因のペアを検出する。依存関係は、要因種別が継承である要因と要因種別が列挙型である要因との間で発生し得る。すなわち、複数の子クラスのうち一部の子クラスのみが列挙型の属性を含む場合、依存関係が生じる。また、依存関係は、要因種別が多重度である要因と要因種別が列挙型である要因との間で発生し得る。すなわち、多重度に「０」が含まれるクラスが列挙型の属性を含む場合、依存関係が生じる。
【００６２】
そして、水準合成部１２６は、依存関係をもつ２つの要因に含まれる水準を合成することで当該２つの要因を１つの要因に統合する。一方の要因に含まれる複数の水準のうちの一部の水準が、他方の要因に含まれる複数の水準と矛盾する場合、当該一方の要因の一部の水準と当該他方の要因の複数の水準とを合わせもつ新たな要因を生成すればよい。これにより、当該一方の要因の一部の水準と当該他方の要因の複数の水準とは同時に選択されなくなる。水準合成部１２６は、合成結果に基づいて分析情報を書き換える。
【００６３】
組み合わせ生成部１２７は、分析情報記憶部１２２に記憶された分析情報が示す複数の要因から１つずつ水準を選択することで、１つのインスタンス図相当の水準の組み合わせを生成する。組み合わせ生成部１２７は、異なる組み合わせを生成することで、インスタンス図のバリエーションを求めることができる。組み合わせ生成部１２７は、バリエーションを示すインスタンス情報を生成してインスタンス情報記憶部１２３に格納する。
【００６４】
このとき、組み合わせ生成部１２７は、複数の要因に対応する複数の水準集合の直積に相当する全組み合わせを生成しなくてもよい。全組み合わせを生成してしまうと、類似するインスタンス図が多数導出されて、かえってクラス図のレビューが非効率になってしまう可能性があるためである。クラス図のレビューという観点からは、できる限り類似しない限定された数のインスタンス図が導出されることが好ましい。限定された数の組み合わせを生成するために、組み合わせ生成部１２７は、ランダムに水準を選択することもできるし、所定の規則的方法によって水準を選択することもできる。
【００６５】
規則的方法としては、オールペア法や直交表を用いる方法などの組み合わせテスト技法を使用することができる。第２の実施の形態では、オールペア法を使用することとする。オールペア法では、任意の２つの要因に着目したときに（生成される組み合わせ集合から当該２つの要因を抜き出したときに）、当該２つの要因の間で全ての水準のペアが出現するように組み合わせ集合を生成する。よって、オールペア法によって生成される組み合わせ集合では、２つの要因について水準の組み合わせが網羅的にカバーされている。一方、３つ以上の要因については水準の組み合わせは網羅的にカバーされない。これは、単一の要因または２つの要因の組が不備の原因になることが多いためである。
【００６６】
インスタンス図生成部１２８は、インスタンス情報記憶部１２３に記憶されたインスタンス情報に基づいてインスタンス図を生成し、ユーザに対して出力する。このとき、インスタンス図生成部１２８は、インスタンス情報に含まれる１つのレコードから１つのインスタンス図を生成することができ、複数のレコードに対応する複数のインスタンス図を生成することができる。例えば、インスタンス図生成部１２８は、生成したインスタンス図をディスプレイ１１１に表示させる。ただし、インスタンス図生成部１２８は、インスタンス図をプリンタなどの他の出力デバイスに出力してもよいし、他の装置に送信してもよい。また、インスタンス図生成部１２８は、一度に全てのインスタンス図を出力してもよいし、要求に応じて１つまたは少数のインスタンス図を出力してもよい。
【００６７】
図６は、クラス情報に含まれるテーブルの例を示す図である。
クラス情報記憶部１２１は、クラステーブル１３１、関連テーブル１３２、継承テーブル１３３およびユーザ定義型テーブル１３４を記憶する。
【００６８】
クラステーブル１３１は、クラス番号、クラス名、属性名および型の項目を含む。クラス番号の項目には、クラス図に含まれるクラスを識別する識別番号が登録される。クラス名の項目には、クラスの名称が登録される。属性名の項目には、クラスに含まれる属性の名称が登録される。クラスが属性を含まないこともあるし、１つのクラスが２以上の属性を含むこともある。型の項目には、属性のデータ型が登録される。データ型としては、整数型（ｉｎｔ）や文字列型（ｓｔｒｉｎｇ）などが挙げられる。また、データ型として、ユーザが定義した列挙型が用いられることもある。ユーザが定義した列挙型についてはユーザ定義型テーブル１３４に登録される。
【００６９】
関連テーブル１３２は、関連番号、クラス名１、多重度１、クラス名２および多重度２の項目を含む。関連番号の項目には、クラス図に含まれる関連を識別する識別番号が登録される。クラス名１の項目には、関連によって接続された２つのクラスのうちの一方のクラスの名称が登録される。多重度１の項目には、クラス名１が示すクラスに対して付与された多重度が登録される。クラス名２の項目には、関連によって接続された２つのクラスのうちの他方のクラスの名称が登録される。多重度２の項目には、クラス名２が示すクラスに対して付与された多重度が登録される。
【００７０】
継承テーブル１３３は、継承番号、親クラスおよび子クラスの項目を含む。継承番号の項目には、クラス図に含まれる継承関係を識別する識別番号が登録される。親クラスの項目には、継承元のクラス（親クラス）の名称が登録される。子クラスの項目には、継承先（子クラス）の名称が登録される。なお、図３のクラス図１４１には、クラス１４１ａからクラス１４１ｂへの継承と、クラス１４１ａからクラス１４１ｃへの継承と、クラス１４１ａからクラス１４１ｄへの継承の３つの継承関係が含まれている。
【００７１】
ユーザ定義型テーブル１３４は、型番号、型名、型情報および列挙型フラグの項目を含む。型番号の項目には、クラス図に含まれるユーザ定義型を識別する識別番号が登録される。ユーザ定義型は、整数型や文字列型などの汎用的なデータ型ではないユーザによって独自に定義されたデータ型である。型名の項目には、ユーザ定義型の名称が登録される。型情報の項目には、ユーザ定義型の内容が登録される。ユーザ定義型が列挙型である場合、型情報の項目には当該ユーザ定義型が取り得る値が列挙される。列挙型フラグの項目には、ユーザ定義型が列挙型であるか否かを示すフラグが登録される。第２の実施の形態では、ユーザ定義型テーブル１３４には列挙型のみ登録されていればよい。
【００７２】
図７は、多重度境界テーブルと要因水準テーブルの例を示す図である。
分析情報記憶部１２２は、多重度境界テーブル１３５および要因水準テーブル１３６を記憶する。多重度境界テーブル１３５は、多重度境界値分析部１２４が、関連テーブル１３２から生成して分析情報記憶部１２２に格納するものである。要因水準テーブル１３６は、要因水準抽出部１２５が、継承テーブル１３３、ユーザ定義型テーブル１３４および多重度境界テーブル１３５から生成して分析情報記憶部１２２に格納するものである。
【００７３】
多重度境界テーブル１３５は、多重度番号、場所および境界情報の項目を含む。多重度番号の項目には、単一固定値でない多重度を識別する識別番号が登録される。場所の項目には、他のテーブルとのリンクを示す情報が登録される。境界情報の項目には、単一固定値でない多重度を分割して得られた水準が列挙される。
【００７４】
多重度境界値分析部１２４は、関連テーブル１３２から単一固定値でない多重度を検索する。多重度境界値分析部１２４は、検索された多重度に対応する関連番号と、検索された多重度に対応するクラス名と、検索された多重度とを含む３つ組を生成し、生成した３つ組を多重度境界テーブル１３５の場所として登録する。また、多重度境界値分析部１２４は、検索された多重度を最低値と残りの範囲とに分割して２つの水準を生成し、生成した２つの水準を多重度境界テーブル１３５の境界情報として登録する。
【００７５】
例えば、多重度境界値分析部１２４は、クラス１４１ｅの多重度「１．．＊」から（１，Ｂ，１．．＊）という場所を求め、「１」または「２．．＊」という境界情報を生成する。また、多重度境界値分析部１２４は、クラス１４１ｆの多重度「０．．１」から（２，Ｃ，０．．１）という場所を求め、「０」または「１」という境界情報を生成する。
【００７６】
要因水準テーブル１３６は、要因番号、要因種別、要因名、場所および水準の項目を含む。要因番号の項目には、要因を識別する識別番号が登録される。要因種別の項目には、要因の種別として「継承」、「多重度」または「列挙型」が登録される。要因名の項目には、所定の規則で生成された要因の名称が登録される。場所の項目には、他のテーブルとのリンクを示す情報が登録される。水準の項目には、要因がもつ水準が列挙される。
【００７７】
要因水準抽出部１２５は、継承テーブル１３３から親クラスが同じで子クラスが異なる複数の継承関係を検索する。要因水準抽出部１２５は、要因水準テーブル１３６の要因種別として「継承」を登録する。また、要因水準抽出部１２５は、「継承」と親クラスの名称とを連結した文字列を生成し、要因水準テーブル１３６の要因名として登録する。また、要因水準抽出部１２５は、継承テーブル１３３から検索された継承関係を示す複数の継承番号を、要因水準テーブル１３６の場所として登録する。また、要因水準抽出部１２５は、複数の子クラスの名称を要因水準テーブル１３６の水準として登録する。
【００７８】
例えば、要因水準抽出部１２５は、クラス１４１ａからクラス１４１ｂ，１４１ｃ，１４１ｄへの継承関係について、要因名「継承Ａ」を生成し、水準「Ａ１」、「Ａ２」、「Ａ３」を生成する。また、要因水準抽出部１２５は、継承番号１，２，３を場所とする。
【００７９】
また、要因水準抽出部１２５は、多重度境界テーブル１３５から境界情報を抽出し、境界情報を要因水準テーブル１３６の水準として登録する。また、要因水準抽出部１２５は、要因水準テーブル１３６の要因種別として「多重度」を登録する。また、要因水準抽出部１２５は、多重度境界テーブル１３５から場所の情報を抽出し、「多重度」とクラス名と関連番号とを連結した文字列を生成し、要因水準テーブル１３６の要因名として登録する。また、要因水準抽出部１２５は、抽出された境界情報に対応する多重度番号を、要因水準テーブル１３６の場所として登録する。
【００８０】
例えば、要因水準抽出部１２５は、クラス１４１ｅの多重度「１．．＊」について、要因名「多重度Ｂ１」を生成し、水準「１」、「２．．＊」を生成する。また、要因水準抽出部１２５は、多重度番号１を場所とする。また、要因水準抽出部１２５は、クラス１４１ｆの多重度「０．．１」について、要因名「多重度Ｃ２」を生成し、水準「０」、「１」を生成する。また、要因水準抽出部１２５は、多重度番号２を場所とする。
【００８１】
また、要因水準抽出部１２５は、ユーザ定義型テーブル１３４から列挙型についての型情報を検索し、型情報を要因水準テーブル１３６の水準として登録する。また、要因水準抽出部１２５は、要因水準テーブル１３６の要因種別として「列挙型」を登録する。また、要因水準抽出部１２５は、「列挙型」と型名とを連結した文字列を生成し、要因水準テーブル１３６の要因名として登録する。また、要因水準抽出部１２５は、検索された型情報に対応する型番号を、要因水準テーブル１３６の場所として登録する。
【００８２】
例えば、要因水準抽出部１２５は、クラス１４１ｅの属性ａｔｔｒＢについて、要因名「列挙型ｅｎｕｍＢ」を生成し、水準「ｂ１」、「ｂ２」、「ｂ３」を生成する。また、要因水準抽出部１２５は、型番号１を場所とする。また、要因水準抽出部１２５は、クラス１４１ｄの属性ａｔｔｒＡ３について、要因名「列挙型ｅｎｕｍＡ３」を生成し、水準「ａ３−１」、「ａ３−２」、「ａ３−３」を生成する。また、要因水準抽出部１２５は、型番号２を場所とする。また、要因水準抽出部１２５は、クラス１４１ｆの属性ａｔｔｒＣについて、要因名「列挙型ｅｎｕｍＣ」を生成し、水準「ｃ１」、「ｃ２」、「ｃ３」、「ｃ４」を生成する。また、要因水準抽出部１２５は、型番号３を場所とする。
【００８３】
図８は、要因水準テーブルの更新例を示す図である。
水準合成部１２６は、要因水準テーブル１３６を図８のように更新する。水準合成部１２６は、子クラスが列挙型の属性を含むために依存関係にある継承の要因と列挙型の要因とを統合する。また、水準合成部１２６は、「０」の多重度をもつクラスが列挙型の属性を含むために依存関係にある多重度の要因と列挙型の要因とを統合する。
【００８４】
すなわち、水準合成部１２６は、要因水準テーブル１３６から列挙型の要因を１つ選択する。水準合成部１２６は、要因水準テーブル１３６の場所の情報に基づいてユーザ定義型テーブル１３４から型名を検索し、クラステーブル１３１から型名に対応するクラス名を検索する。水準合成部１２６は、検索されたクラス名を水準に含む継承の要因が要因水準テーブル１３６に存在するか判断し、存在する場合には選択した列挙型の要因と当該継承の要因とを統合する。このとき、水準合成部１２６は、継承の要因がもつ水準の中の当該検索されたクラス名を、選択した列挙型の要因がもつ水準（属性値）に置換する。
【００８５】
例えば、水準合成部１２６は、図７の要因番号５の要因について、列挙型の型名ｅｎｕｍＡ３を検索し、その列挙型に対応するクラス名Ａ３を検索し、クラス名Ａ３を水準に含む要因番号１の要因を検出する。すると、水準合成部１２６は、要因番号１の水準「Ａ３」を要因番号５の水準「ａ３−１」、「ａ３−２」、「ａ３−３」に置換する。これにより、要因番号５の要因が要因番号１の要因に統合される。
【００８６】
また、水準合成部１２６は、要因水準テーブル１３６から列挙型の要因を１つ選択する。水準合成部１２６は、要因水準テーブル１３６の場所の情報に基づいてユーザ定義型テーブル１３４から型名を検索し、クラステーブル１３１から型名に対応するクラス名を検索し、関連テーブル１３２からクラス名に対応する多重度を検索する。水準合成部１２６は、検索された多重度が０を含むか判断し、０を含む場合には要因水準テーブル１３６から当該多重度についての要因を検索し、選択した列挙型の要因と検索された多重度の要因とを統合する。このとき、水準合成部１２６は、多重度の要因がもつ水準の中の「０」以外の水準を、選択した列挙型の要因がもつ水準（属性値）に置換する。
【００８７】
例えば、水準合成部１２６は、図７の要因番号６の要因について、列挙型の型名ｅｎｕｍＣを検索し、その列挙型に対応するクラス名Ｃを検索し、クラス名Ｃに対応する多重度を検索する。この多重度は０を含んでいるため、水準合成部１２６は、その多重度に関する要因番号３の要因を検出する。すると、水準合成部１２６は、要因番号３の水準「１」を要因番号６の水準「ｃ１」、「ｃ２」、「ｃ３」、「ｃ４」に置換する。これにより、要因番号６の要因が要因番号３の要因に統合される。図８は、水準合成部１２６による以上の処理が行われた後の要因水準テーブル１３６を示している。
【００８８】
図９は、インスタンスバリエーションテーブルの例を示す図である。
インスタンス情報記憶部１２３は、インスタンスバリエーションテーブル１３７を記憶する。インスタンスバリエーションテーブル１３７は、組み合わせ生成部１２７が、要因水準テーブル１３６から生成してインスタンス情報記憶部１２３に格納するものである。インスタンスバリエーションテーブル１３７は、複数の要因から１つずつ選択される水準の組み合わせについて、異なる組み合わせを示す複数のレコードを含む。
【００８９】
ここで、図９のインスタンスバリエーションテーブル１３７は、図８の要因水準テーブル１３６から生成される。要因番号１の要因は、水準「Ａ１」、「Ａ２」、「ａ３−１」、「ａ３−２」、「ａ３−３」という５つの水準をもつ。要因番号２の要因は、水準「１」、「２．．＊」という２つの水準をもつ。要因番号３の要因は、水準「０」、「ｃ１」、「ｃ２」、「ｃ３」、「ｃ４」という５つの水準をもつ。要因番号４の要因は、水準「ｂ１」、「ｂ２」、「ｂ３」という３つの水準をもつ。
【００９０】
これら４つの要因から１つずつ水準を選択した場合の異なる組み合わせは、全部で５×２×５×３＝１５０通り存在する。これに対し、図９のインスタンスバリエーションテーブル１３７はオールペア法を使用して生成されており、１５０通りの組み合わせのうちの２５通りの組み合わせのみを含んでいる。
【００９１】
オールペア法を使用していることから、要因番号１と要因番号２のペアに着目すれば、「Ａ１」と「１」、「Ａ１」と「２．．＊」、…、「ａ３−３」と「２．．＊」という５×２＝１０通りの全ての水準のペアが出現している。同様に、要因番号１と要因番号３のペアに着目すれば、「Ａ１」と「０」、「Ａ１」と「ｃ１」、…、「ａ３−３」と「ｃ４」という５×５＝２５通りの全ての水準のペアが出現している。要因番号１と要因番号４のペアに着目すれば、「Ａ１」と「ｂ１」、「Ａ１」と「ｂ２」、…、「ａ３−３」と「ｂ３」という５×３＝１５通りの全ての水準のペアが出現している。
【００９２】
また、要因番号２と要因番号３のペアに着目すれば、「１」と「０」、「１」と「ｃ１」、…、「２．．＊」と「ｃ４」という２×５＝１０通りの全ての水準のペアが出現している。要因番号２と要因番号４のペアに着目すれば、「１」と「ｂ１」、「１」と「ｂ２」、…、「２．．＊」と「ｂ３」という２×３＝６通りの全ての水準のペアが出現している。要因番号３と要因番号４のペアに着目すれば、「０」と「ｂ１」、「０」と「ｂ２」、…、「ｃ４」と「ｂ３」という５×３＝１５通りの全ての水準のペアが出現している。このように、２つの水準のペアについては全てのパターンがカバーされている。
【００９３】
なお、組み合わせ生成部１２７は、インスタンスバリエーションテーブル１３７に加えて、多重度境界テーブル１３５および要因水準テーブル１３６をインスタンス情報記憶部１２３に出力する。インスタンス図生成部１２８は、多重度境界テーブル１３５、要因水準テーブル１３６およびインスタンスバリエーションテーブル１３７を参照してインスタンス図のバリエーションを生成する。解析装置１００は、多重度境界テーブル１３５、要因水準テーブル１３６およびインスタンスバリエーションテーブル１３７を他の装置に出力して、他の装置にインスタンス図のバリエーションを生成させてもよい。
【００９４】
次に、解析装置１００の処理手順について説明する。
図１０は、バリエーション生成の手順例を示すフローチャートである。
（Ｓ１０）多重度境界値分析部１２４は、クラス図から単一固定値でない多重度を抽出し、抽出した多重度について境界値分析を行う。境界値分析では、多重度境界値分析部１２４は、範囲指定された多重度を最小値と残りの範囲とに分割し、２つの水準を生成する。多重度境界値分析の詳細については後述する。
【００９５】
（Ｓ１１）要因水準抽出部１２５は、クラス図から選択的要素である複数の要因を抽出し、抽出した要因それぞれについて複数の水準を抽出する。抽出する要因は、継承の要因、多重度の要因および列挙型の要因である。継承の要因がもつ水準は子クラスを示す。多重度の要因がもつ水準はステップＳ１０の多重度境界値分析で生成された水準である。列挙型の要因がもつ水準は属性値である。要因水準抽出の詳細は後述する。
【００９６】
（Ｓ１２）水準合成部１２６は、ステップＳ１１で抽出された複数の要因の中から依存関係をもつ２つの要因を検出し、検出した２つの要因の水準を合成して当該２つの要因を１つに統合する。依存関係は、継承の要因に関する子クラスが列挙型の要因に関する属性を含んでいる場合や、多重度の要因に関するクラスが列挙型の要因に関する属性を含んでいる場合に発生し得る。水準合成の詳細は後述する。
【００９７】
（Ｓ１３）組み合わせ生成部１２７は、ステップＳ１２の水準合成が行われた後の要因および水準に基づいて、複数通りの水準の組み合わせを生成する。このとき、組み合わせ生成部１２７は、複数の要因から１つずつ水準を選択することで、１つの組み合わせを生成することができる。組み合わせ生成部１２７は、オールペア法や直交表を用いる方法などの組み合わせテスト技法を用いて、できる限り類似しておらず数が限定された複数の組み合わせを生成する。組み合わせ生成の詳細は後述する。
【００９８】
（Ｓ１４）インスタンス図生成部１２８は、ステップＳ１３で生成された水準の組み合わせ毎に１つのインスタンス図を生成することで、複数の組み合わせに対応する複数のインスタンス図（インスタンス図のバリエーション）を生成する。インスタンス図は、クラス図の中の選択的要素それぞれを１つの候補値に限定したデータ例を示す。インスタンス図生成部１２８は、例えば、インスタンス図をディスプレイ１１１に表示させる。
【００９９】
図１１は、多重度境界値分析の手順例を示すフローチャートである。
多重度境界値分析は、上記のステップＳ１０で実行される。
（Ｓ２０）多重度境界値分析部１２４は、関連テーブル１３２から多重度（多重度１または多重度２）が単一固定値でないレコードを検索する。単一固定値でない多重度は、「０．．１」、「０．．＊」または「１．．＊」である。
【０１００】
（Ｓ２１）多重度境界値分析部１２４は、ステップＳ２０で検索されたレコードの全てを選択したか判断する。全てのレコードを選択した場合は多重度境界値分析が終了し、未選択のレコードがある場合はステップＳ２２に処理が進む。
【０１０１】
（Ｓ２２）多重度境界値分析部１２４は、ステップＳ２０で検索されたレコードを１つ選択する。多重度境界値分析部１２４は、選択したレコードから、場所の情報である３つ組を生成する。３つ組は、選択したレコードの関連番号、単一固定値でない多重度に対応するクラス名（クラス名１またはクラス名２）および当該多重度を含む。
【０１０２】
（Ｓ２３）多重度境界値分析部１２４は、単一固定値でない多重度が「ｘ．．ｙ」（ｘ，ｙは整数）の形式であるか判断する。多重度が「ｘ．．ｙ」の形式である場合、ステップＳ２４に処理が進む。多重度がそれ以外の形式、すなわち、「ｘ．．＊」の形式である場合、ステップＳ２５に処理が進む。
【０１０３】
（Ｓ２４）多重度境界値分析部１２４は、多重度「ｘ．．ｙ」から境界情報「ｘ  ｏｒ  ｙ」を生成する。例えば、多重度境界値分析部１２４は、多重度「０．．１」から境界情報「０  ｏｒ  １」を生成する。そして、ステップＳ２６に処理が進む。
【０１０４】
（Ｓ２５）多重度境界値分析部１２４は、多重度「ｘ．．＊」から境界情報「ｘ  ｏｒ  ｘ＋１．．＊」を生成する。例えば、多重度境界値分析部１２４は、多重度「０．．＊」から境界情報「０  ｏｒ  １．．＊」を生成する。また、多重度境界値分析部１２４は、多重度「１．．＊」から境界情報「１  ｏｒ  ２．．＊」を生成する。
【０１０５】
（Ｓ２６）多重度境界値分析部１２４は、多重度境界テーブル１３５に、ステップＳ２２で得られた場所の情報と、ステップＳ２４またはステップＳ２５で得られた境界情報とを登録する。そして、ステップＳ２１に処理が進む。
【０１０６】
図１２は、要因水準抽出の手順例を示すフローチャートである。
要因水準抽出は、上記のステップＳ１１で実行される。
（Ｓ３０）要因水準抽出部１２５は、継承テーブル１３３から親クラスを検索する。
【０１０７】
（Ｓ３１）要因水準抽出部１２５は、ステップＳ３０で検索された親クラスの全てを選択したか判断する。全ての親クラスを選択した場合はステップＳ３７に処理が進み、未選択の親クラスがある場合はステップＳ３２に処理が進む。
【０１０８】
（Ｓ３２）要因水準抽出部１２５は、ステップＳ３０で検索された親クラスの１つを選択する。要因水準抽出部１２５は、要因種別を「継承」に設定し、要因名として「継承」と選択した親クラスの親クラス名とを連結した文字列を生成する。
【０１０９】
（Ｓ３３）要因水準抽出部１２５は、継承テーブル１３３から、ステップＳ３２で選択した親クラスに対応付けられている子クラスを検索する。
（Ｓ３４）要因水準抽出部１２５は、ステップＳ３３で検索された子クラスの全てを選択したか判断する。全ての子クラスを選択した場合はステップＳ３６に処理が進み、未選択の子クラスがある場合はステップＳ３５に処理が進む。
【０１１０】
（Ｓ３５）要因水準抽出部１２５は、ステップＳ３３で検索された子クラスの１つを選択する。要因水準抽出部１２５は、選択した子クラスに対応する継承番号を場所の情報に追加する。また、要因水準抽出部１２５は、選択した子クラスの子クラス名を水準に追加する。そして、ステップＳ３４に処理が進む。
【０１１１】
（Ｓ３６）要因水準抽出部１２５は、要因水準テーブル１３６に、ステップＳ３２で得られた要因種別および要因名と、ステップＳ３５で得られた場所の情報および水準とを登録する。そして、ステップＳ３１に処理が進む。
【０１１２】
図１３は、要因水準抽出の手順例を示すフローチャート（続き）である。
（Ｓ３７）要因水準抽出部１２５は、多重度境界テーブル１３５の全てのレコードを選択したか判断する。全てのレコードを選択した場合はステップＳ４１に処理が進み、未選択のレコードがある場合はステップＳ３８に処理が進む。
【０１１３】
（Ｓ３８）要因水準抽出部１２５は、多重度境界テーブル１３５からレコードを１つ選択する。要因水準抽出部１２５は、選択したレコードに含まれる場所の情報からクラス名と関連番号を抽出する。要因水準抽出部１２５は、要因種別を「多重度」に設定し、要因名として「多重度」とクラス名と関連番号とを連結した文字列を生成する。
【０１１４】
（Ｓ３９）要因水準抽出部１２５は、ステップＳ３８で選択したレコードの多重度番号を場所として設定し、境界情報の各値を水準として設定する。
（Ｓ４０）要因水準抽出部１２５は、要因水準テーブル１３６に、ステップＳ３８で得られた要因種別および要因名と、ステップＳ３９で得られた場所の情報および水準とを登録する。そして、ステップＳ３７に処理が進む。
【０１１５】
（Ｓ４１）要因水準抽出部１２５は、ユーザ定義型テーブル１３４から列挙型フラグがＹｅｓであるレコードを検索する。
（Ｓ４２）要因水準抽出部１２５は、ステップＳ４１で検索されたレコードの全てを選択したか判断する。全てのレコードを選択した場合は要因水準抽出が終了し、未選択のレコードがある場合はステップＳ４３に処理が進む。
【０１１６】
（Ｓ４３）要因水準抽出部１２５は、ステップＳ４１で検索されたレコードの１つを選択する。要因水準抽出部１２５は、要因種別を「列挙型」に設定し、要因名として「列挙型」と選択したレコードの型名とを連結した文字列を生成する。
【０１１７】
（Ｓ４４）要因水準抽出部１２５は、ステップＳ４３で選択したレコードの型番号を場所として設定し、型情報の各属性値を水準として設定する。
（Ｓ４５）要因水準抽出部１２５は、要因水準テーブル１３６に、ステップＳ４３で得られた要因種別および要因名と、ステップＳ４４で得られた場所の情報および水準とを登録する。そして、ステップＳ４２に処理が進む。
【０１１８】
図１４は、水準合成の手順例を示すフローチャートである。
水準合成は、上記のステップＳ１２で実行される。
（Ｓ５０）水準合成部１２６は、要因水準テーブル１３６の全てのレコードを選択したか判断する。全てのレコードを選択した場合はステップＳ５４に処理が進み、未選択のレコードがある場合はステップＳ５１に処理が進む。
【０１１９】
（Ｓ５１）水準合成部１２６は、要因水準テーブル１３６からレコードを１つ選択する。水準合成部１２６は、選択したレコードと合成可能な他のレコードが要因水準テーブル１３６に存在するか判定する。合成先判定の詳細は後述する。
【０１２０】
（Ｓ５２）水準合成部１２６は、ステップＳ５１の判定結果がｔｒｕｅであるか判断する。判定結果がｔｒｕｅである場合（合成先となる他のレコードが存在する場合）、ステップＳ５３に処理が進む。判定結果がｆａｌｓｅである場合（合成先となる他のレコードが存在しない場合）、ステップＳ５０に処理が進む。
【０１２１】
（Ｓ５３）水準合成部１２６は、合成情報に３つ組のレコードを追加する。３つ組のレコードは、ステップＳ５１で選択した合成元レコードの要因番号と、ステップＳ５１で判定した合成先レコードの要因番号（合成先番号）と、合成先レコードの水準のうち合成元レコードと競合する水準（合成先水準）を含む。そして、ステップＳ５０に処理が進む。
【０１２２】
（Ｓ５４）水準合成部１２６は、ステップＳ５３で生成された合成情報のレコードの全てを選択したか判断する。全てのレコードを選択した場合は水準合成が終了し、未選択のレコードがある場合はステップＳ５５に処理が進む。
【０１２３】
（Ｓ５５）水準合成部１２６は、合成情報に含まれる３つ組のレコードを１つ選択する。水準合成部１２６は、要因水準テーブル１３６から合成先番号が示すレコードの中の合成先水準を特定し、要因番号が示すレコードの中の２以上の水準（合成元水準）を特定する。水準合成部１２６は、合成先水準を合成元水準で置換する。
【０１２４】
（Ｓ５６）水準合成部１２６は、要因水準テーブル１３６から要因番号が示すレコードを削除する。そして、ステップＳ５４に処理が進む。
図１５は、合成先判定の手順例を示すフローチャートである。
【０１２５】
合成先判定は、上記のステップＳ５１で実行される。
（Ｓ６０）水準合成部１２６は、選択した要因水準テーブル１３６のレコードの要因種別が「列挙型」であるか判断する。要因種別が「列挙型」である場合はステップＳ６１に処理が進み、要因種別が「列挙型」でない場合はステップＳ６３に処理が進む。
【０１２６】
（Ｓ６１）水準合成部１２６は、選択した要因水準テーブル１３６のレコードから場所の情報を型番号として抽出し、ユーザ定義型テーブル１３４から当該型番号に対応する型名を検索する。水準合成部１２６は、クラステーブル１３１から当該型名に対応するクラス名を検索する。これにより、当該列挙型を使用するクラスのクラス名が特定される。
【０１２７】
（Ｓ６２）水準合成部１２６は、ステップＳ６１のクラス名を接続クラス名に設定する。そして、ステップＳ６４に処理が進む。
（Ｓ６３）水準合成部１２６は、選択した要因水準テーブル１３６のレコードに含まれる要因名からクラス名を抽出し、抽出したクラス名を接続クラス名に設定する。なお、当該レコードは要因種別が「継承」または「多重度」であるレコードである。
【０１２８】
（Ｓ６４）水準合成部１２６は、要因水準テーブル１３６から、要因種別が「継承」であり、ステップＳ６２またはステップＳ６３の接続クラス名を水準に含むレコードを検索する。該当するレコードが存在する場合はステップＳ６５に処理が進み、該当するレコードが存在しない場合はステップＳ６６に処理が進む。
【０１２９】
（Ｓ６５）水準合成部１２６は、判定結果をｔｒｕｅに設定し、ステップＳ６４で検索されたレコードの要因番号を合成先番号に設定し、ステップＳ６２またはステップＳ６３の接続クラス名を合成先水準に設定する。そして、合成先判定が終了する。
【０１３０】
（Ｓ６６）水準合成部１２６は、関連テーブル１３２から、ステップＳ６２またはステップＳ６３の接続クラス名をクラス名（クラス名１またはクラス名２）に含み、多重度に０を含むレコードを検索する。該当するレコードが存在する場合はステップＳ６７に処理が進み、該当するレコードが存在しない場合はステップＳ６９に処理が進む。
【０１３１】
（Ｓ６７）水準合成部１２６は、「多重度」と、ステップＳ６２またはステップＳ６３の接続クラス名と、ステップＳ６６で検索されたレコードの関連番号とを連結した文字列を要因名として生成する。水準合成部１２６は、要因水準テーブル１３６から、生成した要因名を含むレコードを検索する。
【０１３２】
（Ｓ６８）水準合成部１２６は、判定結果をｔｒｕｅに設定し、ステップＳ６７で検索されたレコードの要因番号を合成先番号に設定し、当該レコードに含まれる水準の中の０以外の値を合成先水準に設定する。そして、合成先判定が終了する。
【０１３３】
（Ｓ６９）水準合成部１２６は、判定結果をｆａｌｓｅに設定する。
図１６は、組み合わせ生成の手順例を示すフローチャートである。
組み合わせ生成は、上記のステップＳ１３で実行される。
【０１３４】
（Ｓ７０）組み合わせ生成部１２７は、水準合成後の要因水準テーブル１３６から複数の要因名とそれら複数の要因名に対応する複数の水準集合とを抽出する。
（Ｓ７１）組み合わせ生成部１２７は、ステップＳ７０で抽出した複数の水準集合から１つずつ水準を選択することで１つの組み合わせを生成する。組み合わせ生成部１２７は、このようにして複数の組み合わせを生成する。このとき、組み合わせ生成部１２７は、オールペア法などの組み合わせテスト技法を用いて、全通りの組み合わせよりも十分に少ない数の組み合わせのみを生成するようにする。
【０１３５】
（Ｓ７２）組み合わせ生成部１２７は、ステップＳ７１の組み合わせ結果を示すインスタンスバリエーションテーブル１３７を生成する。
（Ｓ７３）組み合わせ生成部１２７は、インスタンスバリエーションテーブル１３７と要因水準テーブル１３６と多重度境界テーブル１３５を出力する。
【０１３６】
ところで、図３のクラス図１４１の例は依存関係のある選択的要素を含んでいる。そこで、解析装置１００はクラス図１４１から抽出した複数の要因に対して水準合成を行って依存関係を解消し、矛盾する水準の組み合わせを生成しないようにしている。これに対し、解析装置１００は、依存関係のない選択的要素のみを含むクラス図からは、水準合成をスキップしても矛盾のない組み合わせを生成することが可能である。以下では、そのようなクラス図やインスタンスバリエーションの例を説明する。
【０１３７】
図１７は、クラス図の他の例を示す図である。
クラス図１４２は、解析装置１００に入力されるデータモデルの他の例である。クラス図１４２は、クラス１４２ａ，１４２ｂ，１４２ｃ，１４２ｄ，１４２ｅ，１４２ｆを含む。クラス１４２ａ（クラスＡ）は、整数型の属性ａｔｔｒＡを含む。クラス１４２ｂ（クラスＡ１）は、クラス１４２ａを継承する子クラスである。クラス１４２ｃ（クラスＡ２）は、クラス１４２ａを継承する子クラスである。クラス１４２ｄ（クラスＡ３）は、クラス１４２ａを継承する子クラスであり、属性を含まない。
【０１３８】
クラス１４２ｅ（クラスＢ）は、列挙型の属性ａｔｔｒＢを含む。属性ａｔｔｒＢの値は、属性値ｂ１，ｂ２，ｂ３の何れかである。クラス１４２ｅは、クラス１４２ａと関連をもつ。クラス１４２ａとクラス１４２ｅの間の関連について、クラス１４２ａ側の多重度は「１」でありクラス１４２ｅ側の多重度は「１．．＊」である。クラス１４２ｆ（クラスＣ）は、文字列型の属性ａｔｔｒＣを含む。クラス１４２ｆは、クラス１４２ｅと関連をもつ。クラス１４２ｅとクラス１４２ｆの間の関連について、クラス１４２ｅ側の多重度は「１」でありクラス１４２ｆ側の多重度は「０．．１」である。
【０１３９】
クラス図１４２は、４つの要因を含む。１番目の要因は、クラス１４２ａの継承に関する要因であり、子クラスを示す水準「Ａ１」、「Ａ２」、「Ａ３」をもつ。２番目の要因は、クラス１４２ｅの多重度に関する要因であり、水準「１」、「２．．＊」をもつ。３番目の要因は、クラス１４２ｆの多重度に関する要因であり、水準「０」、「１」をもつ。４番目の要因は、クラス１４２ｅに含まれる属性ａｔｔｒＢの列挙型に関する要因であり、属性値を示す水準「ｂ１」、「ｂ２」、「ｂ３」をもつ。これら４つの要因は互いに独立に水準を選択することが可能であり、依存関係は存在しない。
【０１４０】
図１８は、要因水準テーブルの他の例を示す図である。
要因水準テーブル１３８は、クラス図１４２から生成されるものである。要因水準テーブル１３８は、上記の４つの要因を示す４つのレコードを含む。要因番号１のレコードは、要因種別が「継承」であり、水準が「Ａ１」、「Ａ２」、「Ａ３」である要因を示す。要因番号２のレコードは、要因種別が「多重度」であり、水準が「１」、「２．．＊」である要因を示す。要因番号３のレコードは、要因種別が「多重度」であり、水準が「０」、「１」である要因を示す。要因番号４のレコードは、要因種別が「列挙型」であり、水準が「ｂ１」、「ｂ２」、「ｂ３」である要因を示す。要因水準テーブル１３８に対しては、水準合成部１２６による更新は不要である。
【０１４１】
図１９は、インスタンスバリエーションテーブルの他の例を示す図である。
インスタンスバリエーションテーブル１３９は、要因水準テーブル１３８から生成されるものである。要因水準テーブル１３８が示す４つの要因から１つずつ水準を選択した場合の異なる組み合わせは、全部で３×２×２×３＝３６通り存在する。これに対し、インスタンスバリエーションテーブル１３９はオールペア法を使用して生成されており、３６通りの組み合わせのうちの９通りの組み合わせのみを含んでいる。
【０１４２】
オールペア法が使用されているため、要因番号１と要因番号２のペアに着目すれば、「Ａ１」と「１」、「Ａ１」と「２．．＊」、…、「Ａ３」と「２．．＊」という３×２＝６通りの全ての水準のペアが出現している。同様に、要因番号１と要因番号３のペアに着目すれば、「Ａ１」と「０」、「Ａ１」と「１」、…、「Ａ３」と「１」という３×２＝６通りの全ての水準のペアが出現している。要因番号１と要因番号４のペアに着目すれば、「Ａ１」と「ｂ１」、「Ａ１」と「ｂ２」、…、「Ａ３」と「ｂ３」という３×３＝９通りの全ての水準のペアが出現している。
【０１４３】
要因番号２と要因番号３のペアに着目すれば、「１」と「０」、「１」と「１」、「２．．＊」と「０」、「２．．＊」と「１」という２×２＝４通りの全ての水準のペアが出現している。要因番号２と要因番号４のペアに着目すれば、「１」と「ｂ１」、「１」と「ｂ２」、…、「２．．＊」と「ｂ３」という２×３＝６通りの全ての水準のペアが出現している。要因番号３と要因番号４のペアに着目すれば、「０」と「ｂ１」、「０」と「ｂ２」、…、「１」と「ｂ３」という２×３＝６通りの全ての水準のペアが出現している。このように、２つの水準のペアについては全てのパターンがカバーされている。
【０１４４】
図２０は、インスタンス図の他の例を示す図である。
インスタンスバリエーションテーブル１３９からは、インスタンス図１５６，１５７，１５８を含むインスタンスバリエーション１５５を生成することができる。
【０１４５】
インスタンス図１５６は、クラス１４２ｃから派生したインスタンス１５６ａと、クラス１４２ｅから派生したインスタンス１５６ｂとを含む。インスタンス１５６ｂは、属性値ｂ３を含む。インスタンス図１５７は、クラス１４２ｄから派生したインスタンス１５７ａと、クラス１４２ｅから派生したインスタンス１５７ｂと、クラス１４２ｆから派生したインスタンス１５７ｃとを含む。インスタンス１５７ｂは、属性値ｂ３を含む。インスタンス図１５８は、クラス１４２ｄから派生したインスタンス１５８ａと、クラス１４２ｅから派生したインスタンス１５８ｂ，１５８ｃとを含む。インスタンス１５８ｂは、属性値ｂ２を含む。インスタンス１５８ｃは、属性値ｂ２を含む。
【０１４６】
第２の実施の形態の解析装置１００によれば、クラス図に含まれる複数の選択的要素が複数の要因として抽出される。２つの要因の間に依存関係がある場合、水準が合成されて当該２つの要因が１つの要因に統合される。水準合成を行った後の複数の要因に対してオールペア法などの組み合わせテスト技法を用いてインスタンスバリエーションが生成され、クラス図から導出可能な複数のインスタンス図が提示される。
【０１４７】
これにより、様々なバリエーションのインスタンス図を効率的に生成することができる。このとき、クラス図から抽出された要因の間の依存関係が解消されるため、矛盾する水準の組み合わせに基づく不適切なインスタンス図が生成されてしまうことを抑制できる。また、オールペア法などの組み合わせテスト技法を利用するため、できる限り類似しておらずかつ多過ぎない数のインスタンス図を生成することができる。よって、ソフトウェア開発におけるクラス図のレビューを効率化することができる。
【符号の説明】
【０１４８】
１０  解析装置
１１  記憶部
１２  処理部
１３  データモデル
１３ａ，１３ｂ，１３ｃ，１３ｄ，１３ｅ  クラス
１４ａ，１４ｂ，１４ｃ  選択的要素
１５  バリエーション情報
１６ａ，１６ｂ，１６ｃ，１６ｄ  インスタンスモデル
【図１】
2019066987.tif 000003
【図２】
2019066987.tif 000004
【図３】
2019066987.tif 000005
【図４】
2019066987.tif 000006
【図５】
2019066987.tif 000007
【図６】
2019066987.tif 000008
【図７】
2019066987.tif 000009
【図８】
2019066987.tif 000010
【図９】
2019066987.tif 000011
【図１０】
2019066987.tif 000012
【図１１】
2019066987.tif 000013
【図１２】
2019066987.tif 000014
【図１３】
2019066987.tif 000015
【図１４】
2019066987.tif 000016
【図１５】
2019066987.tif 000017
【図１６】
2019066987.tif 000018
【図１７】
2019066987.tif 000019
【図１８】
2019066987.tif 000020
【図１９】
2019066987.tif 000021
【図２０】
2019066987.tif 000022