以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の解析装置を説明する図である。
第1の実施の形態の解析装置10は、クラス図やER図などのデータモデルを解析し、当該データモデルが示す制約を満たす複数のインスタンスモデルを生成する。例えば、解析装置10は、ソフトウェア開発において作成されたデータモデルに対応する複数のインスタンスモデルをユーザに提示し、ユーザによるデータモデルのレビューを支援する。解析装置10は、クライアントコンピュータでもよいしサーバコンピュータでもよい。
解析装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)などの不揮発性のストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
記憶部11は、データモデル13を記憶する。データモデル13は、例えば、ユーザによって作成されて解析装置10に入力されたものである。データモデル13は、概念的なデータ単位を示す複数のクラス(エンティティと言うこともある)と、クラス間の参照関係を示す複数の関連とを含む。データモデル13を図形式で表す場合、クラスはノードとして表記されることがあり、関連はリンクとして表記されることがある。
クラスは属性を含むことがあり、データモデル13において属性の取り得る値が限定されていることがある。また、関連には多重度が規定されていることがある。多重度は、一方のクラスのインスタンス1つが他方のクラスのインスタンスを幾つ参照するかを示す。多重度は1対1のように固定である場合もあるし、1対(0以上)や1対(1以上)や1対(0または1)のように可変である場合もある。多重度が1対0であることは、一方のクラスのインスタンスが他方のクラスのインスタンスを参照しないことを意味する。また、2つのクラス間に継承による親子関係が規定されていることがある。子クラスは親クラスの属性や関連を引き継ぐ。親クラスのインスタンスは実際には子クラスのインスタンスに相当する。1つの親クラスを継承する2以上の子クラスが存在してもよい。その場合、親クラスのインスタンスは実際には何れか1つの子クラスのインスタンスに相当する。
例えば、データモデル13は、クラス13a,13b,13c,13d,13eを含む。クラス13a(クラスA)は中心となるクラスである。クラス13b(クラスB)はクラス13aの子クラスである。クラス13c(クラスC)はクラス13aの子クラスである。クラス13d(クラスD)はクラス13aと関連をもつ。クラス13aとクラス13dの間の多重度は1対(0または1)である。クラス13e(クラスE)は属性attrを含む。属性attrは属性値v1または属性値v2をとる。また、クラス13eはクラス13aと関連をもつ。クラス13aとクラス13eの間の多重度は1対1である。
また、記憶部11は、後述するバリエーション情報15と、インスタンスモデル16a,16b,16c,16dなどの複数のインスタンスモデルとを記憶する。バリエーション情報15は、処理部12がデータモデル13を解析して生成する情報である。複数のインスタンスモデルは、データモデル13の制約を満たすデータの具体例として生成されるモデルであり、処理部12がバリエーション情報15から生成するモデルである。
処理部12は、データモデル13から2以上の選択的要素を検出する。選択的要素は、インスタンスモデルを生成するにあたって複数の候補値をもつものである。2以上の選択的要素はそれぞれ、選択的継承、選択的多重度または選択的属性値を示すものである。選択的継承は、あるクラスを継承する子クラスの候補が複数存在することである。選択的多重度は、ある関連の多重度の候補が複数存在することである。選択的属性値は、あるクラスに含まれる属性が取る属性値の候補が複数存在することである。
例えば、データモデル13から選択的要素14a,14b,14cが検出される。選択的要素14aは選択的継承に相当し、クラス13aを継承する子クラスが2つ存在することを示す。選択的要素14aは、クラス13bを示す候補値「B」とクラス13cを示す候補値「C」をもつ。選択的要素14bは選択的多重度に相当し、クラス13aとクラス13dの間の関連の多重度が2通り存在することを示す。選択的要素14bは、多重度が1対0であることを示す候補値「0」と多重度が1対1であることを示す候補値「1」をもつ。選択的要素14cは選択的属性値に相当し、クラス13eに含まれる属性attrの値が2通り存在することを示す。選択的要素14cは、属性値がv1であることを示す候補値「v1」と属性値がv2であることを示す候補値「v2」をもつ。
処理部12は、検出した2以上の選択的要素に基づいて、複数のレコードを含むバリエーション情報15を生成する。バリエーション情報15に含まれる各レコードは、2以上の選択的要素から1つずつ選択した候補値の組み合わせを示す。バリエーション情報15に含まれる複数のレコードは、異なる組み合わせを示すものである。ここで、バリエーション情報15は、検出した2以上の選択的要素に対応する2以上の候補値集合の直積に相当する全組み合わせ集合でなくてもよく、全組み合わせ集合の部分集合でよい。選択的要素からの候補値の選択では、例えば、オールペア法や直交表を用いた方法などにより、できる限り類似しない組み合わせが抽出されることが好ましい。
例えば、選択的要素14a,14b,14cから、4つのレコードを含むバリエーション情報15が生成される。1番目のレコードは、選択的要素14aの候補値「B]と選択的要素14bの候補値「0」と選択的要素14cの候補値「v1」を含む。2番目のレコードは、選択的要素14aの候補値「B]と選択的要素14bの候補値「1」と選択的要素14cの候補値「v2」を含む。3番目のレコードは、選択的要素14aの候補値「C]と選択的要素14bの候補値「0」と選択的要素14cの候補値「v2」を含む。4番目のレコードは、選択的要素14aの候補値「C]と選択的要素14bの候補値「1」と選択的要素14cの候補値「v1」を含む。
なお、上記のバリエーション情報15の例は、オールペア法によって選択的要素14a,14b,14cから生成される最小の集合である。オールペア法では、任意の2つの項目に着目したときに、一方の項目の候補値と他方の項目の候補値の組み合わせが全通り出現するようにレコードの集合を生成する。上記のバリエーション情報15の例では、選択的要素14aと選択的要素14bについて、「B」と「0」、「B」と「1」、「C」と「0」、「C」と「1」という組み合わせが全てカバーされている。また、選択的要素14aと選択的要素14cについて、「B」と「v1」、「B」と「v2」、「C」と「v1」、「C」と「v2」という組み合わせが全てカバーされている。また、選択的要素14bと選択的要素14cについて、「0」と「v1」、「0」と「v2」、「1」と「v1」、「1」と「v2」という組み合わせが全てカバーされている。
処理部12は、バリエーション情報15に基づいて、データモデル13から導出可能な複数のインスタンスモデルを生成する。バリエーション情報15に含まれる1つのレコードから1つのインスタンスモデルを生成することができる。1つのレコードに対応する1つのインスタンスモデルは、当該レコードに従ってデータモデル13に含まれる選択的要素それぞれを1つの候補値に限定することで生成される。
例えば、バリエーション情報15の1番目のレコードからインスタンスモデル16aが生成される。インスタンスモデル16aは、クラス13bのインスタンスがクラス13dのインスタンスと関連をもたず、属性attrの属性値がv1であるクラス13eのインスタンスと関連をもつものである。また、バリエーション情報15の2番目のレコードからインスタンスモデル16bが生成される。インスタンスモデル16bは、クラス13bのインスタンスがクラス13dのインスタンスと関連をもち、属性attrの属性値がv2であるクラス13eのインスタンスと関連をもつものである。
また、バリエーション情報15の3番目のレコードからインスタンスモデル16cが生成される。インスタンスモデル16cは、クラス13cのインスタンスがクラス13dのインスタンスと関連をもたず、属性attrの属性値がv2であるクラス13eのインスタンスと関連をもつものである。また、バリエーション情報15の4番目のレコードからインスタンスモデル16dが生成される。インスタンスモデル16dは、クラス13cのインスタンスがクラス13dのインスタンスと関連をもち、属性attrの属性値がv1であるクラス13eのインスタンスと関連をもつものである。
第1の実施の形態の解析装置10によれば、データモデル13から2以上の選択的要素が検出され、選択的要素それぞれから1つの候補値を選択することで複数通りの候補値の組み合わせを示すバリエーション情報15が生成される。そして、バリエーション情報15に基づいて、データモデル13の制約を満たすデータ例を示す複数のインスタンスモデルが生成される。これにより、様々なバリエーションのインスタンスモデルを効率的に生成することができる。よって、データモデル13に関する作業を効率化できる。例えば、生成されたインスタンスモデルの中から想定外の構造をもつデータ例を示すインスタンスモデルを探すことで、データモデル13の不備を効率的に発見することができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の解析装置100は、ソフトウェア開発において作成されたクラス図からデータ例を示す複数のインスタンス図を自動生成し、クラス図のレビューを支援する。解析装置100は、クライアントコンピュータでもよいしサーバコンピュータでもよい。なお、解析装置100は、第1の実施の形態の解析装置10に対応する。
図2は、第2の実施の形態の解析装置のハードウェア例を示すブロック図である。
解析装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよく、解析装置100は複数のプロセッサを有してもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、解析装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OSやミドルウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、解析装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、解析装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、解析装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス、タッチパネル、タッチパッド、トラックボール、キーボード、リモートコントローラ、ボタンスイッチなど、任意の種類の入力デバイスを用いることができる。また、解析装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク114を介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
次に、クラス図からインスタンス図の導出について説明する。
図3は、クラス図の例を示す図である。
クラス図141は、解析装置100に入力されるデータモデルの例である。クラス図141は、クラス141a,141b,141c,141d,141e,141fを含む。クラス141a(クラスA)は、整数型の属性attrAを含む。クラス141b(クラスA1)は、クラス141aを継承する子クラスである。クラス141c(クラスA2)は、クラス141aを継承する子クラスである。クラス141d(クラスA3)は、クラス141aを継承する子クラスであり、列挙型の属性attrA3を含む。属性attrA3の値は、属性値a3−1,a3−2,a3−3の何れかである。
クラス141e(クラスB)は、列挙型の属性attrBを含む。属性attrBの値は、属性値b1,b2,b3の何れかである。クラス141eは、クラス141aと関連をもつ。クラス141aとクラス141eの間の関連について、クラス141a側の多重度は「1」でありクラス141e側の多重度は「1..*」である。すなわち、クラス141aの1つのインスタンスがクラス141eの1つ以上のインスタンスと関連をもつ。
クラス141f(クラスC)は、列挙型の属性attrCを含む。属性attrCの値は、属性値c1,c2,c3,c4の何れかである。クラス141fは、クラス141eと関連をもつ。クラス141eとクラス141fの間の関連について、クラス141e側の多重度は「1」でありクラス141f側の多重度は「0..1」である。すなわち、クラス141eの1つのインスタンスが、クラス141eのインスタンスと関連をもたないかまたはクラス141eの1つのインスタンスと関連をもつ。
クラス図141からインスタンス図を導出するにあたって、クラス図141には複数の候補値の中から1つを選択すべき選択的要素(OR要素と言うこともできる)が存在する。第2の実施の形態では、選択的要素を「要因」と言うことがあり、選択的要素がもつ候補値を「水準」と言うことがある。要因はパラメータと言うこともでき、水準はパラメータ値と言うこともできる。上記のクラス図141は、6つの要因を含む。
1番目の要因は、クラス141aの継承に関する要因であり、子クラスを示す水準「A1」、「A2」、「A3」をもつ。2番目の要因は、クラス141eの多重度に関する要因である。クラス141eの多重度は1以上と規定されているため、その候補値は無限に存在する。第2の実施の形態では、範囲指定された多重度については境界値がレビュー上重要であると考え、最低値と残りの範囲に分割して水準を設定することとする。よって、2番目の要因は、水準「1」、「2..*」をもつとみなす。
3番目の要因は、クラス141fの多重度に関する要因であり、水準「0」、「1」をもつ。4番目の要因は、クラス141eに含まれる属性attrBの列挙型に関する要因であり、属性値を示す水準「b1」、「b2」、「b3」をもつ。5番目の要因は、クラス141dに含まれる属性arrtA3の列挙型に関する要因であり、属性値を示す水準「a3−1」、「a3−2」、「a3−3」をもつ。6番目の要因は、クラス141fに含まれる属性attrCの列挙型に関する要因であり、属性値を示す水準「c1」、「c2」、「c3」、「c4」をもつ。
これら6つの要因から1つずつ水準を選択することで、クラス図141に対応する1つのインスタンス図を生成することができる。ただし、これら6つの要因の中には、互いに独立に水準を選択することができない依存関係をもつ要因が含まれている。
上記の1番目の要因と5番目の要因とは依存関係をもつ。クラス141dの属性attrA3の属性値は、クラス141aの子クラスとしてクラス141bまたはクラス141cが選択された場合には無意味である。よって、水準「A1」または「A2」を選択することと、水準「a3−1」、「a3−2」または「a3−3」を選択することとは矛盾する。また、上記の3番目の要因と6番目の要因とは依存関係をもつ。クラス141fの属性attrCの属性値は、クラス141fの多重度として「0」が選択された場合には無意味である。よって、水準「0」を選択することと、水準「c1」、「c2」、「c3」または「c4」を選択することとは矛盾する。
第2の実施の形態では、依存関係をもつ2つの要因について水準を合成して当該2つの要因を統合することで、矛盾する水準の組み合わせが選択されないようにする。
図4は、インスタンス図の例を示す図である。
クラス図141からは、選択する水準を変えることで、複数のインスタンス図を含むインスタンスバリエーション151を生成することができる。一例として、インスタンスバリエーション151は、インスタンス図152,153,154を含む。
インスタンス図152は、クラス141dから派生したインスタンス152aと、クラス141eから派生したインスタンス152bとを含む。インスタンス152aは、属性値a3−3を含む。インスタンス152bは、属性値b3を含む。これは、上記1番目の要因の水準「A3」を選択し、2番目の要因の水準「1」を選択し、3番目の要因の水準「0」を選択し、4番目の要因の水準「b3」を選択し、5番目の要因の水準「a3−3」を選択したものである。
インスタンス図153は、クラス141dから派生したインスタンス153aと、クラス141eから派生したインスタンス153bと、クラス141fから派生したインスタンス153cとを含む。インスタンス153aは、属性値a3−3を含む。インスタンス153bは、属性値b2を含む。インスタンス153cは、属性値c3を含む。これは、上記1番目の要因の水準「A3」を選択し、2番目の要因の水準「1」を選択し、3番目の要因の水準「1」を選択し、4番目の要因の水準「b2」を選択し、5番目の要因の水準「a3−3」を選択し、6番目の要因の水準「c3」を選択したものである。
インスタンス図154は、クラス141bから派生したインスタンス154aと、クラス141eから派生したインスタンス154b,154cとを含む。インスタンス154bは、属性値b2を含む。インスタンス154cは、属性値b2を含む。これは、上記1番目の要因の水準「A1」を選択し、2番目の要因の水準「2..*」を選択し、3番目の要因の水準「0」を選択し、4番目の要因の水準「b2」を選択したものである。
次に、解析装置100の機能について説明する。
図5は、第2の実施の形態の解析装置の機能例を示すブロック図である。
解析装置100は、クラス情報記憶部121、分析情報記憶部122、インスタンス情報記憶部123、多重度境界値分析部124、要因水準抽出部125、水準合成部126、組み合わせ生成部127およびインスタンス図生成部128を有する。クラス情報記憶部121、分析情報記憶部122およびインスタンス情報記憶部123は、例えば、RAM102またはHDD103の記憶領域を用いて実装される。多重度境界値分析部124、要因水準抽出部125、水準合成部126、組み合わせ生成部127およびインスタンス図生成部128は、例えば、CPU101やプログラムを用いて実装される。
クラス情報記憶部121は、ソフトウェア開発において作成されたクラス図を示すクラス情報を記憶する。クラス情報は、ユーザによって解析装置100に対して入力されてもよいし、解析装置100が他の装置から受信してもよい。クラス情報は、クラス、関連、継承、属性のデータ型などの情報を含む。クラス情報の詳細は後述する。
分析情報記憶部122は、クラス図からインスタンス図を導出する過程で生成される中間情報である分析情報を記憶する。分析情報は、クラス図から抽出される要因や水準などの情報を含む。分析情報の詳細は後述する。
インスタンス情報記憶部123は、クラス図から導出されるインスタンス図のバリエーションを示すインスタンス情報を記憶する。インスタンス情報は、複数のインスタンス図に対応する複数のレコードを含む。1つのレコードは、複数の要因から1つずつ選択された水準の組み合わせを示す。インスタンス情報の詳細は後述する。
多重度境界値分析部124は、クラス図から範囲指定された多重度を抽出し、抽出した多重度に対して境界値分析を行う。第2の実施の形態では、多重度として「0」、「1」、「0..1」(0または1)、「0..*」(0以上)および「1..*」(1以上)を想定する。範囲指定された多重度は、単一固定値でない多重度であり、上記のうちの「0..1」、「0..*」、「1..*」が該当する。クラス図の不備は多重度の境界値の指定誤りが原因である場合があるため、境界値分析では範囲指定された多重度を最低値と残りの範囲に分割し、最低値と残りの範囲の2つを水準として設定する。よって、多重度境界値分析部124は、多重度「0..1」からは水準「0」、「1」を生成し、多重度「0..*」からは水準「0」、「1..*」を生成し、多重度「1..*」からは水準「1」、「2..*」を生成する。
要因水準抽出部125は、クラス図から複数の要因を抽出し、抽出した要因それぞれについて複数の水準を抽出し、要因水準を示す分析情報を生成して分析情報記憶部122に格納する。要因の種別には、1つの親クラスに対して複数の子クラスが存在することを示す「継承」と、多重度が単一固定値でないことを示す「多重度」と、属性の型が複数の属性値を列挙した集合であることを示す「列挙型」とが含まれる。継承については、各子クラスが水準に用いられる。多重度については、多重度境界値分析部124で設定された水準が用いられる。列挙型については、各属性値が水準に用いられる。
水準合成部126は、分析情報記憶部122に記憶された分析情報が示す複数の要因の中から、依存関係をもつ要因のペアを検出する。依存関係は、要因種別が継承である要因と要因種別が列挙型である要因との間で発生し得る。すなわち、複数の子クラスのうち一部の子クラスのみが列挙型の属性を含む場合、依存関係が生じる。また、依存関係は、要因種別が多重度である要因と要因種別が列挙型である要因との間で発生し得る。すなわち、多重度に「0」が含まれるクラスが列挙型の属性を含む場合、依存関係が生じる。
そして、水準合成部126は、依存関係をもつ2つの要因に含まれる水準を合成することで当該2つの要因を1つの要因に統合する。一方の要因に含まれる複数の水準のうちの一部の水準が、他方の要因に含まれる複数の水準と矛盾する場合、当該一方の要因の一部の水準と当該他方の要因の複数の水準とを合わせもつ新たな要因を生成すればよい。これにより、当該一方の要因の一部の水準と当該他方の要因の複数の水準とは同時に選択されなくなる。水準合成部126は、合成結果に基づいて分析情報を書き換える。
組み合わせ生成部127は、分析情報記憶部122に記憶された分析情報が示す複数の要因から1つずつ水準を選択することで、1つのインスタンス図相当の水準の組み合わせを生成する。組み合わせ生成部127は、異なる組み合わせを生成することで、インスタンス図のバリエーションを求めることができる。組み合わせ生成部127は、バリエーションを示すインスタンス情報を生成してインスタンス情報記憶部123に格納する。
このとき、組み合わせ生成部127は、複数の要因に対応する複数の水準集合の直積に相当する全組み合わせを生成しなくてもよい。全組み合わせを生成してしまうと、類似するインスタンス図が多数導出されて、かえってクラス図のレビューが非効率になってしまう可能性があるためである。クラス図のレビューという観点からは、できる限り類似しない限定された数のインスタンス図が導出されることが好ましい。限定された数の組み合わせを生成するために、組み合わせ生成部127は、ランダムに水準を選択することもできるし、所定の規則的方法によって水準を選択することもできる。
規則的方法としては、オールペア法や直交表を用いる方法などの組み合わせテスト技法を使用することができる。第2の実施の形態では、オールペア法を使用することとする。オールペア法では、任意の2つの要因に着目したときに(生成される組み合わせ集合から当該2つの要因を抜き出したときに)、当該2つの要因の間で全ての水準のペアが出現するように組み合わせ集合を生成する。よって、オールペア法によって生成される組み合わせ集合では、2つの要因について水準の組み合わせが網羅的にカバーされている。一方、3つ以上の要因については水準の組み合わせは網羅的にカバーされない。これは、単一の要因または2つの要因の組が不備の原因になることが多いためである。
インスタンス図生成部128は、インスタンス情報記憶部123に記憶されたインスタンス情報に基づいてインスタンス図を生成し、ユーザに対して出力する。このとき、インスタンス図生成部128は、インスタンス情報に含まれる1つのレコードから1つのインスタンス図を生成することができ、複数のレコードに対応する複数のインスタンス図を生成することができる。例えば、インスタンス図生成部128は、生成したインスタンス図をディスプレイ111に表示させる。ただし、インスタンス図生成部128は、インスタンス図をプリンタなどの他の出力デバイスに出力してもよいし、他の装置に送信してもよい。また、インスタンス図生成部128は、一度に全てのインスタンス図を出力してもよいし、要求に応じて1つまたは少数のインスタンス図を出力してもよい。
図6は、クラス情報に含まれるテーブルの例を示す図である。
クラス情報記憶部121は、クラステーブル131、関連テーブル132、継承テーブル133およびユーザ定義型テーブル134を記憶する。
クラステーブル131は、クラス番号、クラス名、属性名および型の項目を含む。クラス番号の項目には、クラス図に含まれるクラスを識別する識別番号が登録される。クラス名の項目には、クラスの名称が登録される。属性名の項目には、クラスに含まれる属性の名称が登録される。クラスが属性を含まないこともあるし、1つのクラスが2以上の属性を含むこともある。型の項目には、属性のデータ型が登録される。データ型としては、整数型(int)や文字列型(string)などが挙げられる。また、データ型として、ユーザが定義した列挙型が用いられることもある。ユーザが定義した列挙型についてはユーザ定義型テーブル134に登録される。
関連テーブル132は、関連番号、クラス名1、多重度1、クラス名2および多重度2の項目を含む。関連番号の項目には、クラス図に含まれる関連を識別する識別番号が登録される。クラス名1の項目には、関連によって接続された2つのクラスのうちの一方のクラスの名称が登録される。多重度1の項目には、クラス名1が示すクラスに対して付与された多重度が登録される。クラス名2の項目には、関連によって接続された2つのクラスのうちの他方のクラスの名称が登録される。多重度2の項目には、クラス名2が示すクラスに対して付与された多重度が登録される。
継承テーブル133は、継承番号、親クラスおよび子クラスの項目を含む。継承番号の項目には、クラス図に含まれる継承関係を識別する識別番号が登録される。親クラスの項目には、継承元のクラス(親クラス)の名称が登録される。子クラスの項目には、継承先(子クラス)の名称が登録される。なお、図3のクラス図141には、クラス141aからクラス141bへの継承と、クラス141aからクラス141cへの継承と、クラス141aからクラス141dへの継承の3つの継承関係が含まれている。
ユーザ定義型テーブル134は、型番号、型名、型情報および列挙型フラグの項目を含む。型番号の項目には、クラス図に含まれるユーザ定義型を識別する識別番号が登録される。ユーザ定義型は、整数型や文字列型などの汎用的なデータ型ではないユーザによって独自に定義されたデータ型である。型名の項目には、ユーザ定義型の名称が登録される。型情報の項目には、ユーザ定義型の内容が登録される。ユーザ定義型が列挙型である場合、型情報の項目には当該ユーザ定義型が取り得る値が列挙される。列挙型フラグの項目には、ユーザ定義型が列挙型であるか否かを示すフラグが登録される。第2の実施の形態では、ユーザ定義型テーブル134には列挙型のみ登録されていればよい。
図7は、多重度境界テーブルと要因水準テーブルの例を示す図である。
分析情報記憶部122は、多重度境界テーブル135および要因水準テーブル136を記憶する。多重度境界テーブル135は、多重度境界値分析部124が、関連テーブル132から生成して分析情報記憶部122に格納するものである。要因水準テーブル136は、要因水準抽出部125が、継承テーブル133、ユーザ定義型テーブル134および多重度境界テーブル135から生成して分析情報記憶部122に格納するものである。
多重度境界テーブル135は、多重度番号、場所および境界情報の項目を含む。多重度番号の項目には、単一固定値でない多重度を識別する識別番号が登録される。場所の項目には、他のテーブルとのリンクを示す情報が登録される。境界情報の項目には、単一固定値でない多重度を分割して得られた水準が列挙される。
多重度境界値分析部124は、関連テーブル132から単一固定値でない多重度を検索する。多重度境界値分析部124は、検索された多重度に対応する関連番号と、検索された多重度に対応するクラス名と、検索された多重度とを含む3つ組を生成し、生成した3つ組を多重度境界テーブル135の場所として登録する。また、多重度境界値分析部124は、検索された多重度を最低値と残りの範囲とに分割して2つの水準を生成し、生成した2つの水準を多重度境界テーブル135の境界情報として登録する。
例えば、多重度境界値分析部124は、クラス141eの多重度「1..*」から(1,B,1..*)という場所を求め、「1」または「2..*」という境界情報を生成する。また、多重度境界値分析部124は、クラス141fの多重度「0..1」から(2,C,0..1)という場所を求め、「0」または「1」という境界情報を生成する。
要因水準テーブル136は、要因番号、要因種別、要因名、場所および水準の項目を含む。要因番号の項目には、要因を識別する識別番号が登録される。要因種別の項目には、要因の種別として「継承」、「多重度」または「列挙型」が登録される。要因名の項目には、所定の規則で生成された要因の名称が登録される。場所の項目には、他のテーブルとのリンクを示す情報が登録される。水準の項目には、要因がもつ水準が列挙される。
要因水準抽出部125は、継承テーブル133から親クラスが同じで子クラスが異なる複数の継承関係を検索する。要因水準抽出部125は、要因水準テーブル136の要因種別として「継承」を登録する。また、要因水準抽出部125は、「継承」と親クラスの名称とを連結した文字列を生成し、要因水準テーブル136の要因名として登録する。また、要因水準抽出部125は、継承テーブル133から検索された継承関係を示す複数の継承番号を、要因水準テーブル136の場所として登録する。また、要因水準抽出部125は、複数の子クラスの名称を要因水準テーブル136の水準として登録する。
例えば、要因水準抽出部125は、クラス141aからクラス141b,141c,141dへの継承関係について、要因名「継承A」を生成し、水準「A1」、「A2」、「A3」を生成する。また、要因水準抽出部125は、継承番号1,2,3を場所とする。
また、要因水準抽出部125は、多重度境界テーブル135から境界情報を抽出し、境界情報を要因水準テーブル136の水準として登録する。また、要因水準抽出部125は、要因水準テーブル136の要因種別として「多重度」を登録する。また、要因水準抽出部125は、多重度境界テーブル135から場所の情報を抽出し、「多重度」とクラス名と関連番号とを連結した文字列を生成し、要因水準テーブル136の要因名として登録する。また、要因水準抽出部125は、抽出された境界情報に対応する多重度番号を、要因水準テーブル136の場所として登録する。
例えば、要因水準抽出部125は、クラス141eの多重度「1..*」について、要因名「多重度B1」を生成し、水準「1」、「2..*」を生成する。また、要因水準抽出部125は、多重度番号1を場所とする。また、要因水準抽出部125は、クラス141fの多重度「0..1」について、要因名「多重度C2」を生成し、水準「0」、「1」を生成する。また、要因水準抽出部125は、多重度番号2を場所とする。
また、要因水準抽出部125は、ユーザ定義型テーブル134から列挙型についての型情報を検索し、型情報を要因水準テーブル136の水準として登録する。また、要因水準抽出部125は、要因水準テーブル136の要因種別として「列挙型」を登録する。また、要因水準抽出部125は、「列挙型」と型名とを連結した文字列を生成し、要因水準テーブル136の要因名として登録する。また、要因水準抽出部125は、検索された型情報に対応する型番号を、要因水準テーブル136の場所として登録する。
例えば、要因水準抽出部125は、クラス141eの属性attrBについて、要因名「列挙型enumB」を生成し、水準「b1」、「b2」、「b3」を生成する。また、要因水準抽出部125は、型番号1を場所とする。また、要因水準抽出部125は、クラス141dの属性attrA3について、要因名「列挙型enumA3」を生成し、水準「a3−1」、「a3−2」、「a3−3」を生成する。また、要因水準抽出部125は、型番号2を場所とする。また、要因水準抽出部125は、クラス141fの属性attrCについて、要因名「列挙型enumC」を生成し、水準「c1」、「c2」、「c3」、「c4」を生成する。また、要因水準抽出部125は、型番号3を場所とする。
図8は、要因水準テーブルの更新例を示す図である。
水準合成部126は、要因水準テーブル136を図8のように更新する。水準合成部126は、子クラスが列挙型の属性を含むために依存関係にある継承の要因と列挙型の要因とを統合する。また、水準合成部126は、「0」の多重度をもつクラスが列挙型の属性を含むために依存関係にある多重度の要因と列挙型の要因とを統合する。
すなわち、水準合成部126は、要因水準テーブル136から列挙型の要因を1つ選択する。水準合成部126は、要因水準テーブル136の場所の情報に基づいてユーザ定義型テーブル134から型名を検索し、クラステーブル131から型名に対応するクラス名を検索する。水準合成部126は、検索されたクラス名を水準に含む継承の要因が要因水準テーブル136に存在するか判断し、存在する場合には選択した列挙型の要因と当該継承の要因とを統合する。このとき、水準合成部126は、継承の要因がもつ水準の中の当該検索されたクラス名を、選択した列挙型の要因がもつ水準(属性値)に置換する。
例えば、水準合成部126は、図7の要因番号5の要因について、列挙型の型名enumA3を検索し、その列挙型に対応するクラス名A3を検索し、クラス名A3を水準に含む要因番号1の要因を検出する。すると、水準合成部126は、要因番号1の水準「A3」を要因番号5の水準「a3−1」、「a3−2」、「a3−3」に置換する。これにより、要因番号5の要因が要因番号1の要因に統合される。
また、水準合成部126は、要因水準テーブル136から列挙型の要因を1つ選択する。水準合成部126は、要因水準テーブル136の場所の情報に基づいてユーザ定義型テーブル134から型名を検索し、クラステーブル131から型名に対応するクラス名を検索し、関連テーブル132からクラス名に対応する多重度を検索する。水準合成部126は、検索された多重度が0を含むか判断し、0を含む場合には要因水準テーブル136から当該多重度についての要因を検索し、選択した列挙型の要因と検索された多重度の要因とを統合する。このとき、水準合成部126は、多重度の要因がもつ水準の中の「0」以外の水準を、選択した列挙型の要因がもつ水準(属性値)に置換する。
例えば、水準合成部126は、図7の要因番号6の要因について、列挙型の型名enumCを検索し、その列挙型に対応するクラス名Cを検索し、クラス名Cに対応する多重度を検索する。この多重度は0を含んでいるため、水準合成部126は、その多重度に関する要因番号3の要因を検出する。すると、水準合成部126は、要因番号3の水準「1」を要因番号6の水準「c1」、「c2」、「c3」、「c4」に置換する。これにより、要因番号6の要因が要因番号3の要因に統合される。図8は、水準合成部126による以上の処理が行われた後の要因水準テーブル136を示している。
図9は、インスタンスバリエーションテーブルの例を示す図である。
インスタンス情報記憶部123は、インスタンスバリエーションテーブル137を記憶する。インスタンスバリエーションテーブル137は、組み合わせ生成部127が、要因水準テーブル136から生成してインスタンス情報記憶部123に格納するものである。インスタンスバリエーションテーブル137は、複数の要因から1つずつ選択される水準の組み合わせについて、異なる組み合わせを示す複数のレコードを含む。
ここで、図9のインスタンスバリエーションテーブル137は、図8の要因水準テーブル136から生成される。要因番号1の要因は、水準「A1」、「A2」、「a3−1」、「a3−2」、「a3−3」という5つの水準をもつ。要因番号2の要因は、水準「1」、「2..*」という2つの水準をもつ。要因番号3の要因は、水準「0」、「c1」、「c2」、「c3」、「c4」という5つの水準をもつ。要因番号4の要因は、水準「b1」、「b2」、「b3」という3つの水準をもつ。
これら4つの要因から1つずつ水準を選択した場合の異なる組み合わせは、全部で5×2×5×3=150通り存在する。これに対し、図9のインスタンスバリエーションテーブル137はオールペア法を使用して生成されており、150通りの組み合わせのうちの25通りの組み合わせのみを含んでいる。
オールペア法を使用していることから、要因番号1と要因番号2のペアに着目すれば、「A1」と「1」、「A1」と「2..*」、…、「a3−3」と「2..*」という5×2=10通りの全ての水準のペアが出現している。同様に、要因番号1と要因番号3のペアに着目すれば、「A1」と「0」、「A1」と「c1」、…、「a3−3」と「c4」という5×5=25通りの全ての水準のペアが出現している。要因番号1と要因番号4のペアに着目すれば、「A1」と「b1」、「A1」と「b2」、…、「a3−3」と「b3」という5×3=15通りの全ての水準のペアが出現している。
また、要因番号2と要因番号3のペアに着目すれば、「1」と「0」、「1」と「c1」、…、「2..*」と「c4」という2×5=10通りの全ての水準のペアが出現している。要因番号2と要因番号4のペアに着目すれば、「1」と「b1」、「1」と「b2」、…、「2..*」と「b3」という2×3=6通りの全ての水準のペアが出現している。要因番号3と要因番号4のペアに着目すれば、「0」と「b1」、「0」と「b2」、…、「c4」と「b3」という5×3=15通りの全ての水準のペアが出現している。このように、2つの水準のペアについては全てのパターンがカバーされている。
なお、組み合わせ生成部127は、インスタンスバリエーションテーブル137に加えて、多重度境界テーブル135および要因水準テーブル136をインスタンス情報記憶部123に出力する。インスタンス図生成部128は、多重度境界テーブル135、要因水準テーブル136およびインスタンスバリエーションテーブル137を参照してインスタンス図のバリエーションを生成する。解析装置100は、多重度境界テーブル135、要因水準テーブル136およびインスタンスバリエーションテーブル137を他の装置に出力して、他の装置にインスタンス図のバリエーションを生成させてもよい。
次に、解析装置100の処理手順について説明する。
図10は、バリエーション生成の手順例を示すフローチャートである。
(S10)多重度境界値分析部124は、クラス図から単一固定値でない多重度を抽出し、抽出した多重度について境界値分析を行う。境界値分析では、多重度境界値分析部124は、範囲指定された多重度を最小値と残りの範囲とに分割し、2つの水準を生成する。多重度境界値分析の詳細については後述する。
(S11)要因水準抽出部125は、クラス図から選択的要素である複数の要因を抽出し、抽出した要因それぞれについて複数の水準を抽出する。抽出する要因は、継承の要因、多重度の要因および列挙型の要因である。継承の要因がもつ水準は子クラスを示す。多重度の要因がもつ水準はステップS10の多重度境界値分析で生成された水準である。列挙型の要因がもつ水準は属性値である。要因水準抽出の詳細は後述する。
(S12)水準合成部126は、ステップS11で抽出された複数の要因の中から依存関係をもつ2つの要因を検出し、検出した2つの要因の水準を合成して当該2つの要因を1つに統合する。依存関係は、継承の要因に関する子クラスが列挙型の要因に関する属性を含んでいる場合や、多重度の要因に関するクラスが列挙型の要因に関する属性を含んでいる場合に発生し得る。水準合成の詳細は後述する。
(S13)組み合わせ生成部127は、ステップS12の水準合成が行われた後の要因および水準に基づいて、複数通りの水準の組み合わせを生成する。このとき、組み合わせ生成部127は、複数の要因から1つずつ水準を選択することで、1つの組み合わせを生成することができる。組み合わせ生成部127は、オールペア法や直交表を用いる方法などの組み合わせテスト技法を用いて、できる限り類似しておらず数が限定された複数の組み合わせを生成する。組み合わせ生成の詳細は後述する。
(S14)インスタンス図生成部128は、ステップS13で生成された水準の組み合わせ毎に1つのインスタンス図を生成することで、複数の組み合わせに対応する複数のインスタンス図(インスタンス図のバリエーション)を生成する。インスタンス図は、クラス図の中の選択的要素それぞれを1つの候補値に限定したデータ例を示す。インスタンス図生成部128は、例えば、インスタンス図をディスプレイ111に表示させる。
図11は、多重度境界値分析の手順例を示すフローチャートである。
多重度境界値分析は、上記のステップS10で実行される。
(S20)多重度境界値分析部124は、関連テーブル132から多重度(多重度1または多重度2)が単一固定値でないレコードを検索する。単一固定値でない多重度は、「0..1」、「0..*」または「1..*」である。
(S21)多重度境界値分析部124は、ステップS20で検索されたレコードの全てを選択したか判断する。全てのレコードを選択した場合は多重度境界値分析が終了し、未選択のレコードがある場合はステップS22に処理が進む。
(S22)多重度境界値分析部124は、ステップS20で検索されたレコードを1つ選択する。多重度境界値分析部124は、選択したレコードから、場所の情報である3つ組を生成する。3つ組は、選択したレコードの関連番号、単一固定値でない多重度に対応するクラス名(クラス名1またはクラス名2)および当該多重度を含む。
(S23)多重度境界値分析部124は、単一固定値でない多重度が「x..y」(x,yは整数)の形式であるか判断する。多重度が「x..y」の形式である場合、ステップS24に処理が進む。多重度がそれ以外の形式、すなわち、「x..*」の形式である場合、ステップS25に処理が進む。
(S24)多重度境界値分析部124は、多重度「x..y」から境界情報「x or y」を生成する。例えば、多重度境界値分析部124は、多重度「0..1」から境界情報「0 or 1」を生成する。そして、ステップS26に処理が進む。
(S25)多重度境界値分析部124は、多重度「x..*」から境界情報「x or x+1..*」を生成する。例えば、多重度境界値分析部124は、多重度「0..*」から境界情報「0 or 1..*」を生成する。また、多重度境界値分析部124は、多重度「1..*」から境界情報「1 or 2..*」を生成する。
(S26)多重度境界値分析部124は、多重度境界テーブル135に、ステップS22で得られた場所の情報と、ステップS24またはステップS25で得られた境界情報とを登録する。そして、ステップS21に処理が進む。
図12は、要因水準抽出の手順例を示すフローチャートである。
要因水準抽出は、上記のステップS11で実行される。
(S30)要因水準抽出部125は、継承テーブル133から親クラスを検索する。
(S31)要因水準抽出部125は、ステップS30で検索された親クラスの全てを選択したか判断する。全ての親クラスを選択した場合はステップS37に処理が進み、未選択の親クラスがある場合はステップS32に処理が進む。
(S32)要因水準抽出部125は、ステップS30で検索された親クラスの1つを選択する。要因水準抽出部125は、要因種別を「継承」に設定し、要因名として「継承」と選択した親クラスの親クラス名とを連結した文字列を生成する。
(S33)要因水準抽出部125は、継承テーブル133から、ステップS32で選択した親クラスに対応付けられている子クラスを検索する。
(S34)要因水準抽出部125は、ステップS33で検索された子クラスの全てを選択したか判断する。全ての子クラスを選択した場合はステップS36に処理が進み、未選択の子クラスがある場合はステップS35に処理が進む。
(S35)要因水準抽出部125は、ステップS33で検索された子クラスの1つを選択する。要因水準抽出部125は、選択した子クラスに対応する継承番号を場所の情報に追加する。また、要因水準抽出部125は、選択した子クラスの子クラス名を水準に追加する。そして、ステップS34に処理が進む。
(S36)要因水準抽出部125は、要因水準テーブル136に、ステップS32で得られた要因種別および要因名と、ステップS35で得られた場所の情報および水準とを登録する。そして、ステップS31に処理が進む。
図13は、要因水準抽出の手順例を示すフローチャート(続き)である。
(S37)要因水準抽出部125は、多重度境界テーブル135の全てのレコードを選択したか判断する。全てのレコードを選択した場合はステップS41に処理が進み、未選択のレコードがある場合はステップS38に処理が進む。
(S38)要因水準抽出部125は、多重度境界テーブル135からレコードを1つ選択する。要因水準抽出部125は、選択したレコードに含まれる場所の情報からクラス名と関連番号を抽出する。要因水準抽出部125は、要因種別を「多重度」に設定し、要因名として「多重度」とクラス名と関連番号とを連結した文字列を生成する。
(S39)要因水準抽出部125は、ステップS38で選択したレコードの多重度番号を場所として設定し、境界情報の各値を水準として設定する。
(S40)要因水準抽出部125は、要因水準テーブル136に、ステップS38で得られた要因種別および要因名と、ステップS39で得られた場所の情報および水準とを登録する。そして、ステップS37に処理が進む。
(S41)要因水準抽出部125は、ユーザ定義型テーブル134から列挙型フラグがYesであるレコードを検索する。
(S42)要因水準抽出部125は、ステップS41で検索されたレコードの全てを選択したか判断する。全てのレコードを選択した場合は要因水準抽出が終了し、未選択のレコードがある場合はステップS43に処理が進む。
(S43)要因水準抽出部125は、ステップS41で検索されたレコードの1つを選択する。要因水準抽出部125は、要因種別を「列挙型」に設定し、要因名として「列挙型」と選択したレコードの型名とを連結した文字列を生成する。
(S44)要因水準抽出部125は、ステップS43で選択したレコードの型番号を場所として設定し、型情報の各属性値を水準として設定する。
(S45)要因水準抽出部125は、要因水準テーブル136に、ステップS43で得られた要因種別および要因名と、ステップS44で得られた場所の情報および水準とを登録する。そして、ステップS42に処理が進む。
図14は、水準合成の手順例を示すフローチャートである。
水準合成は、上記のステップS12で実行される。
(S50)水準合成部126は、要因水準テーブル136の全てのレコードを選択したか判断する。全てのレコードを選択した場合はステップS54に処理が進み、未選択のレコードがある場合はステップS51に処理が進む。
(S51)水準合成部126は、要因水準テーブル136からレコードを1つ選択する。水準合成部126は、選択したレコードと合成可能な他のレコードが要因水準テーブル136に存在するか判定する。合成先判定の詳細は後述する。
(S52)水準合成部126は、ステップS51の判定結果がtrueであるか判断する。判定結果がtrueである場合(合成先となる他のレコードが存在する場合)、ステップS53に処理が進む。判定結果がfalseである場合(合成先となる他のレコードが存在しない場合)、ステップS50に処理が進む。
(S53)水準合成部126は、合成情報に3つ組のレコードを追加する。3つ組のレコードは、ステップS51で選択した合成元レコードの要因番号と、ステップS51で判定した合成先レコードの要因番号(合成先番号)と、合成先レコードの水準のうち合成元レコードと競合する水準(合成先水準)を含む。そして、ステップS50に処理が進む。
(S54)水準合成部126は、ステップS53で生成された合成情報のレコードの全てを選択したか判断する。全てのレコードを選択した場合は水準合成が終了し、未選択のレコードがある場合はステップS55に処理が進む。
(S55)水準合成部126は、合成情報に含まれる3つ組のレコードを1つ選択する。水準合成部126は、要因水準テーブル136から合成先番号が示すレコードの中の合成先水準を特定し、要因番号が示すレコードの中の2以上の水準(合成元水準)を特定する。水準合成部126は、合成先水準を合成元水準で置換する。
(S56)水準合成部126は、要因水準テーブル136から要因番号が示すレコードを削除する。そして、ステップS54に処理が進む。
図15は、合成先判定の手順例を示すフローチャートである。
合成先判定は、上記のステップS51で実行される。
(S60)水準合成部126は、選択した要因水準テーブル136のレコードの要因種別が「列挙型」であるか判断する。要因種別が「列挙型」である場合はステップS61に処理が進み、要因種別が「列挙型」でない場合はステップS63に処理が進む。
(S61)水準合成部126は、選択した要因水準テーブル136のレコードから場所の情報を型番号として抽出し、ユーザ定義型テーブル134から当該型番号に対応する型名を検索する。水準合成部126は、クラステーブル131から当該型名に対応するクラス名を検索する。これにより、当該列挙型を使用するクラスのクラス名が特定される。
(S62)水準合成部126は、ステップS61のクラス名を接続クラス名に設定する。そして、ステップS64に処理が進む。
(S63)水準合成部126は、選択した要因水準テーブル136のレコードに含まれる要因名からクラス名を抽出し、抽出したクラス名を接続クラス名に設定する。なお、当該レコードは要因種別が「継承」または「多重度」であるレコードである。
(S64)水準合成部126は、要因水準テーブル136から、要因種別が「継承」であり、ステップS62またはステップS63の接続クラス名を水準に含むレコードを検索する。該当するレコードが存在する場合はステップS65に処理が進み、該当するレコードが存在しない場合はステップS66に処理が進む。
(S65)水準合成部126は、判定結果をtrueに設定し、ステップS64で検索されたレコードの要因番号を合成先番号に設定し、ステップS62またはステップS63の接続クラス名を合成先水準に設定する。そして、合成先判定が終了する。
(S66)水準合成部126は、関連テーブル132から、ステップS62またはステップS63の接続クラス名をクラス名(クラス名1またはクラス名2)に含み、多重度に0を含むレコードを検索する。該当するレコードが存在する場合はステップS67に処理が進み、該当するレコードが存在しない場合はステップS69に処理が進む。
(S67)水準合成部126は、「多重度」と、ステップS62またはステップS63の接続クラス名と、ステップS66で検索されたレコードの関連番号とを連結した文字列を要因名として生成する。水準合成部126は、要因水準テーブル136から、生成した要因名を含むレコードを検索する。
(S68)水準合成部126は、判定結果をtrueに設定し、ステップS67で検索されたレコードの要因番号を合成先番号に設定し、当該レコードに含まれる水準の中の0以外の値を合成先水準に設定する。そして、合成先判定が終了する。
(S69)水準合成部126は、判定結果をfalseに設定する。
図16は、組み合わせ生成の手順例を示すフローチャートである。
組み合わせ生成は、上記のステップS13で実行される。
(S70)組み合わせ生成部127は、水準合成後の要因水準テーブル136から複数の要因名とそれら複数の要因名に対応する複数の水準集合とを抽出する。
(S71)組み合わせ生成部127は、ステップS70で抽出した複数の水準集合から1つずつ水準を選択することで1つの組み合わせを生成する。組み合わせ生成部127は、このようにして複数の組み合わせを生成する。このとき、組み合わせ生成部127は、オールペア法などの組み合わせテスト技法を用いて、全通りの組み合わせよりも十分に少ない数の組み合わせのみを生成するようにする。
(S72)組み合わせ生成部127は、ステップS71の組み合わせ結果を示すインスタンスバリエーションテーブル137を生成する。
(S73)組み合わせ生成部127は、インスタンスバリエーションテーブル137と要因水準テーブル136と多重度境界テーブル135を出力する。
ところで、図3のクラス図141の例は依存関係のある選択的要素を含んでいる。そこで、解析装置100はクラス図141から抽出した複数の要因に対して水準合成を行って依存関係を解消し、矛盾する水準の組み合わせを生成しないようにしている。これに対し、解析装置100は、依存関係のない選択的要素のみを含むクラス図からは、水準合成をスキップしても矛盾のない組み合わせを生成することが可能である。以下では、そのようなクラス図やインスタンスバリエーションの例を説明する。
図17は、クラス図の他の例を示す図である。
クラス図142は、解析装置100に入力されるデータモデルの他の例である。クラス図142は、クラス142a,142b,142c,142d,142e,142fを含む。クラス142a(クラスA)は、整数型の属性attrAを含む。クラス142b(クラスA1)は、クラス142aを継承する子クラスである。クラス142c(クラスA2)は、クラス142aを継承する子クラスである。クラス142d(クラスA3)は、クラス142aを継承する子クラスであり、属性を含まない。
クラス142e(クラスB)は、列挙型の属性attrBを含む。属性attrBの値は、属性値b1,b2,b3の何れかである。クラス142eは、クラス142aと関連をもつ。クラス142aとクラス142eの間の関連について、クラス142a側の多重度は「1」でありクラス142e側の多重度は「1..*」である。クラス142f(クラスC)は、文字列型の属性attrCを含む。クラス142fは、クラス142eと関連をもつ。クラス142eとクラス142fの間の関連について、クラス142e側の多重度は「1」でありクラス142f側の多重度は「0..1」である。
クラス図142は、4つの要因を含む。1番目の要因は、クラス142aの継承に関する要因であり、子クラスを示す水準「A1」、「A2」、「A3」をもつ。2番目の要因は、クラス142eの多重度に関する要因であり、水準「1」、「2..*」をもつ。3番目の要因は、クラス142fの多重度に関する要因であり、水準「0」、「1」をもつ。4番目の要因は、クラス142eに含まれる属性attrBの列挙型に関する要因であり、属性値を示す水準「b1」、「b2」、「b3」をもつ。これら4つの要因は互いに独立に水準を選択することが可能であり、依存関係は存在しない。
図18は、要因水準テーブルの他の例を示す図である。
要因水準テーブル138は、クラス図142から生成されるものである。要因水準テーブル138は、上記の4つの要因を示す4つのレコードを含む。要因番号1のレコードは、要因種別が「継承」であり、水準が「A1」、「A2」、「A3」である要因を示す。要因番号2のレコードは、要因種別が「多重度」であり、水準が「1」、「2..*」である要因を示す。要因番号3のレコードは、要因種別が「多重度」であり、水準が「0」、「1」である要因を示す。要因番号4のレコードは、要因種別が「列挙型」であり、水準が「b1」、「b2」、「b3」である要因を示す。要因水準テーブル138に対しては、水準合成部126による更新は不要である。
図19は、インスタンスバリエーションテーブルの他の例を示す図である。
インスタンスバリエーションテーブル139は、要因水準テーブル138から生成されるものである。要因水準テーブル138が示す4つの要因から1つずつ水準を選択した場合の異なる組み合わせは、全部で3×2×2×3=36通り存在する。これに対し、インスタンスバリエーションテーブル139はオールペア法を使用して生成されており、36通りの組み合わせのうちの9通りの組み合わせのみを含んでいる。
オールペア法が使用されているため、要因番号1と要因番号2のペアに着目すれば、「A1」と「1」、「A1」と「2..*」、…、「A3」と「2..*」という3×2=6通りの全ての水準のペアが出現している。同様に、要因番号1と要因番号3のペアに着目すれば、「A1」と「0」、「A1」と「1」、…、「A3」と「1」という3×2=6通りの全ての水準のペアが出現している。要因番号1と要因番号4のペアに着目すれば、「A1」と「b1」、「A1」と「b2」、…、「A3」と「b3」という3×3=9通りの全ての水準のペアが出現している。
要因番号2と要因番号3のペアに着目すれば、「1」と「0」、「1」と「1」、「2..*」と「0」、「2..*」と「1」という2×2=4通りの全ての水準のペアが出現している。要因番号2と要因番号4のペアに着目すれば、「1」と「b1」、「1」と「b2」、…、「2..*」と「b3」という2×3=6通りの全ての水準のペアが出現している。要因番号3と要因番号4のペアに着目すれば、「0」と「b1」、「0」と「b2」、…、「1」と「b3」という2×3=6通りの全ての水準のペアが出現している。このように、2つの水準のペアについては全てのパターンがカバーされている。
図20は、インスタンス図の他の例を示す図である。
インスタンスバリエーションテーブル139からは、インスタンス図156,157,158を含むインスタンスバリエーション155を生成することができる。
インスタンス図156は、クラス142cから派生したインスタンス156aと、クラス142eから派生したインスタンス156bとを含む。インスタンス156bは、属性値b3を含む。インスタンス図157は、クラス142dから派生したインスタンス157aと、クラス142eから派生したインスタンス157bと、クラス142fから派生したインスタンス157cとを含む。インスタンス157bは、属性値b3を含む。インスタンス図158は、クラス142dから派生したインスタンス158aと、クラス142eから派生したインスタンス158b,158cとを含む。インスタンス158bは、属性値b2を含む。インスタンス158cは、属性値b2を含む。
第2の実施の形態の解析装置100によれば、クラス図に含まれる複数の選択的要素が複数の要因として抽出される。2つの要因の間に依存関係がある場合、水準が合成されて当該2つの要因が1つの要因に統合される。水準合成を行った後の複数の要因に対してオールペア法などの組み合わせテスト技法を用いてインスタンスバリエーションが生成され、クラス図から導出可能な複数のインスタンス図が提示される。
これにより、様々なバリエーションのインスタンス図を効率的に生成することができる。このとき、クラス図から抽出された要因の間の依存関係が解消されるため、矛盾する水準の組み合わせに基づく不適切なインスタンス図が生成されてしまうことを抑制できる。また、オールペア法などの組み合わせテスト技法を利用するため、できる限り類似しておらずかつ多過ぎない数のインスタンス図を生成することができる。よって、ソフトウェア開発におけるクラス図のレビューを効率化することができる。