(57)【要約】【課題】システムを設計する際の作業効率の低下を抑制すること。【解決手段】システム構成設計支援装置１０は、要件テーブル１３ｆの登録内容を参照し、同一の重要度が対応付けられた複数の要件を取得する。システム構成設計支援装置１０は、取得した複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、ペアとされた２つの要件が属するカテゴリについてのカテゴリ距離を算出する。システム構成設計支援装置１０は、ペアとされた２つの要件の適否に影響を及ぼすコンポーネントについての使用コンポーネント距離を算出する。システム構成設計支援装置１０は、カテゴリ距離及び使用コンポーネント距離から算出された距離に基づいて、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。【選択図】図１
2014199620.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のコンポーネントを組み合わせて構成されるシステムの要件と、該要件の適否に影響を及ぼすコンポーネントが適否に影響を及ぼす要件の数を評価した評価値とが対応付けられて記憶された記憶部を参照して、同一の評価値が対応付けられた複数の要件を取得し、
取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件が属するカテゴリと他方の要件が属するカテゴリとの第１の類似度を算出し、
取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの第２の類似度を算出し、
前記第１の類似度及び前記第２の類似度に基づいて、要件のペアとされたそれぞれの要件が提示される順序が近くなるように、前記要件を提示する順序を決定する
処理を実行させることを特徴とするシステム構成設計支援プログラム。
【請求項２】
前記要件を提示する順序を決定する処理は、前記第１の類似度及び前記第２の類似度を所定の重み付けをした値に基づいて、要件のペアとされたそれぞれの要件が提示される順序が近くなるように、前記要件を提示する順序を決定するｗ
ことを特徴とする請求項１に記載のシステム構成設計支援プログラム。
【請求項３】
前記コンピュータに、
前記要件の適否に影響を及ぼすコンポーネントについて、ハードウェアであるかまたはアプリケーションであるかを示す種類が同一でない場合には、該コンポーネントの該種類が同一である場合よりも大きな値となるように前記評価値を算出する
処理を更に実行させることを特徴とする請求項１または請求項２に記載のシステム構成設計支援プログラム。
【請求項４】
複数のコンポーネントを組み合わせて構成されるシステムの要件と、該要件の適否に影響を及ぼすコンポーネントが適否に影響を及ぼす要件の数を評価した評価値とが対応付けられて記憶された記憶部と、
前記記憶部の記憶内容を参照し、同一の評価値が対応付けられた複数の要件を取得する取得部と、
前記取得部により取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件が属するカテゴリと他方の要件が属するカテゴリとの第１の類似度を算出する第１の算出部と、
取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの第２の類似度を算出する第２の算出部と、
前記第１の類似度及び前記第２の類似度に基づいて、要件のペアとされたそれぞれの要件が提示される順序が近くなるように、前記要件を提示する順序を決定する決定部と
を有することを特徴とするシステム構成設計支援装置。
【請求項５】
コンピュータが、
複数のコンポーネントを組み合わせて構成されるシステムの要件と、該要件の適否に影響を及ぼすコンポーネントが適否に影響を及ぼす要件の数を評価した評価値とが対応付けられて記憶された記憶部を参照して、同一の評価値が対応付けられた複数の要件を取得し、
取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件が属するカテゴリと他方の要件が属するカテゴリとの第１の類似度を算出し、
取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの第２の類似度を算出し、
前記第１の類似度及び前記第２の類似度に基づいて、要件のペアとされたそれぞれの要件が提示される順序が近くなるように、前記要件を提示する順序を決定する
処理を実行することを特徴とするシステム構成設計支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム構成設計支援プログラム、システム構成設計支援装置及びシステム構成設計支援方法に関する。
【背景技術】
【０００２】
従来、システムを設計する際に、システムの要件に合致する各種のサーバ、各種のソフトウェアなどのコンポーネントを決定するシステム構成設計支援装置がある。例えば、従来のシステム構成設計支援装置は、各要件に対して要件の影響範囲の大きさを示す重要度を算出する。そして、従来のシステム構成設計支援装置は、重要度の高い要件から順に、ユーザ、例えば、システムを設計する設計者から、要件のレベルの指定を受け付け、受け付けたレベルに応じたコンポーネントを決定する。このように、従来のシステム構成設計支援装置は、重要度の高い要件を先に満たすようにシステムのコンポーネントを決定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２０５５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述したシステム構成設計支援装置では、システムを設計する作業効率が良好でない場合があるという問題がある。例えば、従来のシステム構成設計支援装置は、重要度が同一の要件が複数ある場合には、ユーザに、重要度が同一の複数の要件の順序を指定させる。そして、従来のシステム構成設計支援装置は、指定された順序で、ユーザに対して、要件のレベルの指定を受け付け、受け付けたレベルに応じたコンポーネントを決定する。このように、従来のシステム構成設計支援装置では、重要度が同一の要件が複数ある場合には、ユーザに順序を指定させるため、システムを設計する際の作業効率が低下する。
【０００５】
１つの側面では、本発明は、システムを設計する際の作業効率の低下を抑制することを目的とする。
【課題を解決するための手段】
【０００６】
本願の開示するシステム構成設計支援プログラムは、コンピュータに、次の処理を実行させる。すなわち、システム構成設計支援プログラムは、コンピュータに、複数のコンポーネントを組み合わせて構成されるシステムの要件と、後述の評価値とが対応付けられて記憶された記憶部を参照して、同一の評価値が対応付けられた複数の要件を取得する処理を実行させる。ここで、評価値とは、要件の適否に影響を及ぼすコンポーネントが適否に影響を及ぼす要件の数を評価した値である。システム構成設計支援プログラムは、コンピュータに、取得された複数の要件の集合の中から取り得る全ての要件のペアについて、一方の要件が属するカテゴリと他方の要件が属するカテゴリとの第１の類似度を算出する処理を実行させる。システム構成設計支援プログラムは、コンピュータに、取得された複数の要件の集合の中から取り得る全ての要件のペアについて、次の処理を実行させる。すなわち、システム構成設計支援プログラムは、コンピュータに、一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの第２の類似度を算出する処理を実行させる。システム構成設計支援プログラムは、コンピュータに、第１の類似度及び第２の類似度に基づいて、要件のペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する処理を実行させる。
【発明の効果】
【０００７】
システムを設計する際の作業効率の低下を抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１に係るシステム構成設計支援装置の機能構成の一例を示す図である。
【図２】図２は、レベル受付画面の一例を示す図である。
【図３】図３は、要件リストのデータ構造の一例を示す図である。
【図４Ａ】図４Ａは、コンポーネントリストのデータ構造の一例を示す図である。
【図４Ｂ】図４Ｂは、コンポーネントリストのデータ構造の一例を示す図である。
【図４Ｃ】図４Ｃは、コンポーネントリストのデータ構造の一例を示す図である。
【図５】図５は、要件−コンポーネント関連リストのデータ構造の一例を示す図である。
【図６】図６は、影響リストのデータ構造の一例を示す図である。
【図７】図７は、要件間距離内部テーブルのデータ構造の一例を示す図である。
【図８】図８は、要件テーブルのデータ構造の一例を示す図である。
【図９】図９は、有向グラフの一例を示す図である。
【図１０】図１０は、実施例１に係るシステム構成設計支援処理の手順を示すフローチャートである。
【図１１】図１１は、実施例１に係る距離算出処理の手順を示すフローチャートである。
【図１２】図１２は、実施例１に係るカテゴリ距離算出処理の手順を示すフローチャートである。
【図１３】図１３は、実施例１に係る使用コンポーネント距離算出処理の手順を示すフローチャートである。
【図１４】図１４は、実施例１に係る順序付け処理の手順を示すフローチャートである。
【図１５】図１５は、実施例１に係る有向グラフ生成処理の手順を示すフローチャートである。
【図１６】図１６は、実施例２に係るシステム構成設計支援装置の機能構成の一例を示す図である。
【図１７】図１７は、コンポーネント種別テーブルのデータ構造の一例を示す図である。
【図１８】図１８は、実施例２に係るシステム構成設計支援処理の手順を示すフローチャートである。
【図１９】図１９は、システム構成設計支援プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【０００９】
以下に、本願の開示するシステム構成設計支援プログラム、システム構成設計支援装置及びシステム構成設計支援方法の各実施例を図面に基づいて詳細に説明する。なお、各実施例は開示の技術を限定するものではない。
【実施例１】
【００１０】
実施例１に係るシステム構成設計支援装置について説明する。図１は、実施例１に係るシステム構成設計支援装置の機能構成の一例を示す図である。
【００１１】
［システム構成設計支援装置の機能構成］
図１に示すように、システム構成設計支援装置１０は、入力部１１と、出力部１２と、記憶部１３と、制御部１４とを有する。
【００１２】
入力部１１は、各種情報を制御部１４に入力する。例えば、入力部１１は、ユーザから、後述のシステム構成設計支援処理を実行するための指示を受け付けて、受け付けた指示を制御部１４に入力する。また、入力部１１は、出力部１２において後述のレベル受付画面が表示されている場合に、レベル受付画面に表示された複数のレベルのうち、いずれかのレベルをユーザから受け付けて、受け付けたレベルを制御部１４に入力する。例えば、入力部１１は、名称が「ユーザ数」という要件についてのレベルの指定を受け付けるためのレベル受付画面に表示された複数のレベル（０：特定ユーザのみ、１：上限が決まっている、２：不特定多数のユーザ）のうち、何れかのレベルの指定を受け付ける。かかるレベル受付画面については後述する。そして、入力部１１は、受け付けたレベルを制御部１４に入力する。入力部１１のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
【００１３】
出力部１２は、各種の情報を出力する。例えば、出力部１２は、後述の設計部１４ｆの制御により、各要件のレベルを受け付けるレベル受付画面を表示する。図２は、レベル受付画面の一例を示す図である。図２の例は、名称が「ユーザ数」という要件のレベルを受け付けるレベル受付画面１５の一例を示す。図２の例では、複数のレベル（０：特定ユーザのみ、１：上限が決まっている、２：不特定多数のユーザ）の中から、１つのレベルがユーザによって指定可能なレベル受付画面１５が出力部１２に表示された場合を示す。図２の例では、ユーザによってレベル「１」が指定された場合を示す。出力部１２のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
【００１４】
図１の説明に戻り、記憶部１３は、各種情報を記憶する。例えば、記憶部１３は、要件リスト１３ａ、コンポーネントリスト１３ｂ、要件−コンポーネント関連リスト１３ｃ、影響リスト１３ｄ、要件間距離内部テーブル１３ｅ、要件テーブル１３ｆ及び有向グラフ１３ｇを記憶する。
【００１５】
要件リスト１３ａには、ソフトウェアやハードウェアなどのコンポーネントを組み合わせて構成されるシステムの要件の各種のデータが登録される。図３は、要件リストのデータ構造の一例を示す図である。図３の例に示すように、要件リスト１３ａは、「ＩＤ（Identification）」、「大項目」、「中項目」、「小項目」、「要件名」及び「レベル」の各項目を有する。また、「レベル」の項目は、複数のレベル「０」〜「５」の項目を有する。要件リスト１３ａには、要件ごとにレコードが登録される。
【００１６】
「ＩＤ」の項目には、要件を識別するためのＩＤが登録される。「大項目」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件が属する大まかなカテゴリが登録される。「中項目」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件が属するカテゴリであって、「大項目」の項目に登録されたカテゴリを細分化したカテゴリが登録される。「小項目」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件が属するカテゴリであって、「中項目」の項目に登録されたカテゴリを細分化したカテゴリが登録される。「要件名」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の名称が登録される。「レベル」の「０」〜「５」の各項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件のレベルが登録される。
【００１７】
例えば、図３に示す要件リスト１３ａの１番目のレコードは、名称が「運用時間（通常）」の要件であって、ＩＤ「Ａ．１．１．１」によって識別される要件が、次のカテゴリに属することを示す。すなわち、要件リスト１３ａの１番目のレコードは、ＩＤ「Ａ．１．１．１」によって識別される要件が、大項目「可用性」−中項目「継続性」−小項目「運用スケジュール」というカテゴリに属することを示す。なお、ＩＤ「Ａ．１．１．１」によって識別される要件は、図３の例に示すように、ＩＤ「Ａ．１．１．２」によって識別される要件、及び、ＩＤ「Ａ．１．１．３」によって識別される要件と同一のカテゴリに属する。また、図３に示す要件リスト１３ａの１番目のレコードは、ＩＤ「Ａ．１．１．１」によって識別される要件のレベルが、「０」〜「５」の６段階であることを示す。ここで、図３の例に示す１番目のレコードにおけるレベル「０」の「規定無し」は、システムの固定のサービス時間が存在しないことを示す。例えば、「規定無し」は、通常停止しているシステムをユーザが起動させるような場合を示す。レベル「０」の「規定無し」が適用されるシステムの一例としては、障害発生に備えた予備システムや、開発または検証用のシステムなどが挙げられる。また、図３の例に示す１番目のレコードにおけるレベル「１」の「定時内（９時〜１７時）」は、システムが９時から１７時まで稼働することを示す。また、図３の例に示す１番目のレコードにおけるレベル「２」の「夜間のみ停止（９時〜２１時）」は、システムが９時から２１時まで稼働し、２１時から翌日の９時までは停止することを示す。また、図３の例に示す１番目のレコードにおけるレベル「３」の「１時間程度の停止有り（９時〜翌朝８時）」は、システムが、９時から翌朝８時までの間に、１時間程度停止することを示す。また、図３の例に示す１番目のレコードにおけるレベル「４」の「若干の停止あり（９時〜翌朝８時５５分）」は、システムが、９時から翌朝８時５５分までの間に、１時間未満の時間だけ停止することを示す。また、図３の例に示す１番目のレコードにおけるレベル「５」の「２４時間無停止」は、システムが、２４時間無停止であることを示す。レベル「５」の「２４時間無停止」が適用されるシステムの一例としては、オンライン業務が稼働していない時間にバッチ処理を行うような、常に稼働して処理を行うシステムが挙げられる。
【００１８】
また、図３に示す要件リスト１３ａの２番目のレコードは、名称が「運用時間（特定日）」の要件であって、ＩＤ「Ａ．１．１．２」によって識別される要件が、次のような運用スケジュールについての要件であることを示す。すなわち、要件リスト１３ａの２番目のレコードは、ＩＤ「Ａ．１．１．２」によって識別される要件が、休日、祝祭日、月末、月初などの通常の運用スケジュールとは異なる日（特定日）の運用スケジュールについての要件であることを示す。また、要件リスト１３ａの２番目のレコードは、ＩＤ「Ａ．１．１．２」によって識別される要件が、大項目「可用性」−中項目「継続性」−小項目「運用スケジュール」というカテゴリに属することを示す。また、図３に示す要件リスト１３ａの２番目のレコードは、ＩＤ「Ａ．１．１．２」によって識別される要件のレベルが、「０」〜「５」の６段階であることを示す。ここで、図３の例に示す２番目のレコードにおけるレベル「０」の「規定無し」は、特定日において、システムの固定のサービス時間が存在しないことを示す。また、図３の例に示す２番目のレコードにおけるレベル「１」の「定時内（９時〜１７時）」は、特定日において、システムが９時から１７時まで稼働することを示す。また、図３の例に示す２番目のレコードにおけるレベル「２」の「夜間のみ停止（９時〜２１時）」は、特定日において、システムが９時から２１時まで稼働し、２１時から翌日の９時までは停止することを示す。また、図３の例に示す２番目のレコードにおけるレベル「３」の「１時間程度の停止有り（９時〜翌朝８時）」は、特定日において、システムが、９時から翌朝８時までの間に、１時間程度停止することを示す。また、図３の例に示す２番目のレコードにおけるレベル「４」の「若干の停止あり（９時〜翌朝８時５５分）」は、特定日において、システムが、９時から翌朝８時５５分までの間に、１時間未満の時間だけ停止することを示す。また、図３の例に示す２番目のレコードにおけるレベル「５」の「２４時間無停止」は、特定日において、システムが、２４時間無停止であることを示す。
【００１９】
また、図３に示す要件リスト１３ａの３番目のレコードは、名称が「計画停止の有無」の要件であって、ＩＤ「Ａ．１．１．３」によって識別される要件が、次のカテゴリに属することを示す。すなわち、要件リスト１３ａの３番目のレコードは、ＩＤ「Ａ．１．１．３」によって識別される要件が、大項目「可用性」−中項目「継続性」−小項目「運用スケジュール」というカテゴリに属することを示す。また、図３に示す要件リスト１３ａの３番目のレコードは、ＩＤ「Ａ．１．１．３」によって識別される要件のレベルが、「０」〜「２」の３段階であることを示す。ここで、図３の例に示すレベル「０」の「計画停止有り（運用スケジュールの変更可）」は、運用スケジュールを変更して、システムを計画停止させることを示す。また、図３の例に示すレベル「１」の「計画停止有り（運用スケジュールの変更不可）」は、運用スケジュールを変更せずに、システムを計画停止させることを示す。また、図３の例に示すレベル「２」の「計画停止無し」は、システムを計画停止させないことを示す。
【００２０】
図３に示す要件リスト１３ａの４番目のレコードは、名称が「対象業務範囲」の要件であって、ＩＤ「Ａ．１．２．１」によって識別される要件が、次のカテゴリに属することを示す。すなわち、要件リスト１３ａの４番目のレコードは、ＩＤ「Ａ．１．２．１」によって識別される要件が、大項目「可用性」−中項目「継続性」−小項目「業務継続性」というカテゴリに属することを示す。また、ＩＤ「Ａ．１．２．１」によって識別される要件は、図３の例に示すように、ＩＤ「Ａ．１．２．２」によって識別される要件と同一のカテゴリに属する。なお、ＩＤ「Ａ．１．２．１」によって識別される要件は、稼働率を算出する際の対象範囲についての要件である。また、図３に示す要件リスト１３ａの４番目のレコードは、ＩＤ「Ａ．１．２．１」によって識別される要件のレベルが、「０」〜「５」の６段階であることを示す。ここで、図３の例に示すレベル「０」の「内部向けバッチ系業務」は、稼働率を算出する際の対象範囲が、内部向けバッチ系業務であることを示す。また、図３の例に示すレベル「１」の「内部向けオンライン系業務」は、稼働率を算出する際の対象範囲が、内部向けオンライン系業務であることを示す。また、図３の例に示すレベル「２」の「内部向け全業務」は、稼働率を算出する際の対象範囲が、内部向け全業務であることを示す。また、図３の例に示すレベル「３」の「外部向けバッチ系業務」は、稼働率を算出する際の対象範囲が、外部向けバッチ系業務であることを示す。また、図３の例に示すレベル「４」の「外部向けオンライン系業務」は、稼働率を算出する際の対象範囲が、外部向けオンライン系業務であることを示す。また、図３の例に示すレベル「５」の「全ての業務」は、稼働率を算出する際の対象範囲が、全ての業務であることを示す。
【００２１】
図３に示す要件リスト１３ａの５番目のレコードは、名称が「サービス切替時間」の要件であって、ＩＤ「Ａ．１．２．２」によって識別される要件が、次のカテゴリに属することを示す。すなわち、要件リスト１３ａの５番目のレコードは、ＩＤ「Ａ．１．２．２」によって識別される要件が、大項目「可用性」−中項目「継続性」−小項目「業務継続性」というカテゴリに属することを示す。なお、ＩＤ「Ａ．１．２．２」によって識別される要件は、システムに障害が発生して業務が中断してから、障害の発生に対して対策を施すことにより業務が再開されるまでの時間についての要件である。障害の発生としては、例えば、ハードウェアの故障が挙げられる。また、対策としては、クラスタ構成でのサーバの切り替えなどが挙げられる。また、図３に示す要件リスト１３ａの５番目のレコードは、ＩＤ「Ａ．１．２．２」によって識別される要件のレベルが、「０」〜「５」の６段階であることを示す。ここで、図３の例に示すレベル「０」の「２４時間以上」は、業務が中断してから再開するまでの時間が２４時間以上であることを示す。図３の例に示すレベル「１」の「２４時間未満」は、業務が中断してから再開するまでの時間が、２４時間未満であり、かつ、２時間以上であることを示す。図３の例に示すレベル「２」の「２時間未満」は、業務が中断してから再開するまでの時間が、２時間未満であり、かつ、６０分以上であることを示す。図３の例に示すレベル「３」の「６０分未満」は、業務が中断してから再開するまでの時間が、６０分未満であり、かつ、１０分以上であることを示す。図３の例に示すレベル「４」の「１０分未満」は、業務が中断してから再開するまでの時間が、１０分未満であり、かつ、６０秒以上であることを示す。図３の例に示すレベル「５」の「６０秒未満」は、業務が中断してから再開するまでの時間が６０秒未満であることを示す。
【００２２】
図１の説明に戻り、コンポーネントリスト１３ｂには、システムを構成するソフトウェアやハードウェアなどのコンポーネントの各種のデータが登録される。図４Ａ〜図４Ｃは、コンポーネントリストのデータ構造の一例を示す。図４Ａは、アプリケーションサーバ（ＡＰサーバ）に関するデータが登録されたコンポーネントリスト１３ｂの一例を示す。図４Ａの例に示すように、コンポーネントリスト１３ｂは、「ＩＤ」、「ベンダ」、「型番」、「仕様」、「価格」及び「所見」の各項目を有する。図４Ａの例に示すコンポーネントリスト１３ｂには、コンポーネントであるＡＰサーバごとにレコードが登録される。図４Ａの例に示す「ＩＤ」の項目には、ＡＰサーバを識別するためのＩＤが登録される。図４Ａの例に示す「ベンダ」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＡＰサーバを製造したベンダが登録される。図４Ａの例に示す「型番」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＡＰサーバの型番が登録される。図４Ａの例に示す「仕様」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＡＰサーバの仕様が登録される。図４Ａの例に示す「価格」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＡＰサーバの価格が登録される。図４Ａの例に示す「所見」には、「ＩＤ」の項目に登録されたＩＤによって識別されるＡＰサーバについての所見が登録される。例えば、図４Ａの例に示す１番目のレコードは、ＩＤ「Ａ１」によって識別されるＡＰサーバを製造したベンダが「Ａ社」であり、ＩＤ「Ａ１」によって識別されるＡＰサーバの型番が「Ａ−０１−１１１１」であることを示す。他のレコードについても同様である。
【００２３】
図４Ｂは、データベースサーバ（ＤＢサーバ）に関するデータが登録されたコンポーネントリスト１３ｂの一例を示す。図４Ｂの例に示すコンポーネントリスト１３ｂには、コンポーネントであるＤＢサーバごとにレコードが登録される。図４Ｂの例に示す「ＩＤ」の項目には、ＤＢサーバを識別するためのＩＤが登録される。図４Ｂの例に示す「ベンダ」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＤＢサーバを製造したベンダが登録される。図４Ｂの例に示す「型番」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＤＢサーバの型番が登録される。図４Ｂの例に示す「仕様」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＤＢサーバの仕様が登録される。図４Ｂの例に示す「価格」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるＤＢサーバの価格が登録される。図４Ｂの例に示す「所見」には、「ＩＤ」の項目に登録されたＩＤによって識別されるＤＢサーバについての所見が登録される。例えば、図４Ｂの例に示す１番目のレコードは、ＩＤ「Ｂ１」によって識別されるＤＢサーバを製造したベンダが「Ａ社」であり、ＩＤ「Ｂ１」によって識別されるＤＢサーバの型番が「Ａ−９０−１２３４」であることを示す。他のレコードについても同様である。
【００２４】
図４Ｃは、ストレージに関するデータが登録されたコンポーネントリスト１３ｂの一例を示す。図４Ｃの例に示すコンポーネントリスト１３ｂには、コンポーネントであるストレージごとにレコードが登録される。図４Ｃの例に示す「ＩＤ」の項目には、ストレージを識別するためのＩＤが登録される。図４Ｃの例に示す「ベンダ」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるストレージを製造したベンダが登録される。図４Ｃの例に示す「型番」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるストレージの型番が登録される。図４Ｃの例に示す「仕様」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるストレージの仕様が登録される。図４Ｃの例に示す「価格」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別されるストレージの価格が登録される。図４Ｃの例に示す「所見」には、「ＩＤ」の項目に登録されたＩＤによって識別されるストレージについての所見が登録される。例えば、図４Ｃの例に示す１番目のレコードは、ＩＤ「Ｃ１」によって識別されるストレージを製造したベンダが「Ｘ社」であり、ＩＤ「Ｃ１」によって識別されるストレージの型番が「Ａ−０１−１１１１」であることを示す。他のレコードについても同様である。なお、図４Ａの１番目に登録されたレコードが示すＡＰサーバの型番と、図４Ｃの１番目に登録されたレコードが示すストレージの型番とが同一である。このように、ベンダが異なれば、同一の型番が異なるコンポーネントに付与される場合がある。
【００２５】
図１の説明に戻り、要件−コンポーネント関連リスト１３ｃには、要件のレベルと、要件のレベルを満たすシステムのコンポーネント（またはコンポーネントの組み合わせ）とが対応付けて登録される。図５は、要件−コンポーネント関連リストのデータ構造の一例を示す図である。以下の説明では、「要件−コンポーネント関連リスト」を、「関連リスト」と略記する。図５の例に示すように、関連リスト１３ｃは、「ＩＤ」、「要件名」、「レベル」、「コンポーネント」及び「所見」の項目を有する。「ＩＤ」の項目には、要件のＩＤが登録される。「要件名」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の名称が登録される。「レベル」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件のレベルが登録される。「コンポーネント」の項目には、「レベル」の項目に登録されたレベルを満たすシステムのコンポーネントまたはコンポーネントの組み合わせが登録される。「所見」の項目には、「コンポーネント」の項目に登録されたコンポーネントまたはコンポーネントの組み合わせについての所見が登録される。
【００２６】
例えば、図５の例に示す１番目のレコードは、ＩＤ「Ａ．１．１．１」によって識別される要件であって、名称が「運用時間（通常）」である要件のレベル「０：規定無し」を満たすコンポーネントの組み合わせが、次の組み合わせであることを示す。すなわち、図５の例に示す１番目のレコードは、レベル「０：規定無し」を満たすコンポーネントの組み合わせが、ＩＤ「Ａ１」、「Ｂ１」及び「Ｃ１」のそれぞれによって識別されるＡＰサーバ、ＤＢサーバ及びストレージの組み合わせであることを示す。他のレコードについても同様である。
【００２７】
また、図５の例では、名称が「ユーザ数」であり、ＩＤ「Ｂ．１．１．１」によって識別される要件が登録されている。名称が「ユーザ数」である要件は、システムを利用可能なユーザの人数についての要件である。名称が「ユーザ数」である要件のレベルは、「０：特定ユーザのみ」、「１：上限が決まっている」、「２：不特定多数のユーザ」の３段階である。レベル「０：特定ユーザのみ」は、システムを利用できるユーザが、特定のユーザのみであることを示す。レベル「１：上限が決まっている」は、システムを利用できるユーザの人数の上限が定められていることを示す。レベル「２：不特定多数のユーザ」は、不特定多数のユーザがシステムを利用できることを示す。
【００２８】
また、図５の例では、名称が「同時アクセス数」であり、ＩＤ「Ｂ．１．１．２」によって識別される要件が登録されている。名称が「同時アクセス数」である要件は、システムに同時にアクセス可能なユーザの人数についての要件である。名称が「同時アクセス数」である要件のレベルは、「０：特定利用者の限られたアクセスのみ」、「１：同時アクセスの上限が決まっている」、「２：不特定多数のアクセス有り」の３段階である。レベル「０：特定利用者の限られたアクセスのみ」は、システムにアクセスできるユーザが、特定のユーザのみであることを示す。レベル「１：同時アクセスの上限が決まっている」は、システムに同時にアクセスできるユーザの人数の上限が定められていることを示す。レベル「２：不特定多数のアクセス有り」は、不特定多数のユーザがシステムにアクセスできることを示す。
【００２９】
図１の説明に戻り、影響リスト１３ｄには、要件の適否に影響を及ぼすコンポーネントまたはコンポーネントの組み合わせが登録される。図６は、影響リストのデータ構造の一例を示す図である。図６の例に示す影響リスト１３ｄは、「ＩＤ」、「要件名」及び「コンポーネント」の項目を有する。影響リスト１３ｄには、要件の適否に影響を及ぼすコンポーネントまたはコンポーネントの組み合わせが要件ごとに登録される。「ＩＤ」の項目には、要件のＩＤが登録される。「要件名」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の名称が登録される。「コンポーネント」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の適否に影響を及ぼすコンポーネントまたはコンポーネントの組み合わせが登録される。
【００３０】
図６の例に示す１番目のレコードは、ＩＤ「Ａ．１．１．１」によって識別される要件であって、名称が「運用時間（通常）」である要件の適否に影響を及ぼすコンポーネントの組み合わせが、ＡＰサーバ、ＤＢサーバ及びストレージであることを示す。他のレコードについても同様である。なお、名称が「対象業務範囲」である要件の適否には、コンポーネントまたはコンポーネントの組み合わせが影響しない。このため、図６の例に示すように、名称が「対象業務範囲」である要件のレコードの「コンポーネント」の項目には、何も登録されていない。
【００３１】
図１の説明に戻る。要件間距離内部テーブル１３ｅには、後述する「重要度」が同一である要件、及び、後述する有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、ペアとされた２つの要件間の後述する「距離」が登録される。図７は、要件間距離内部テーブルのデータ構造の一例を示す図である。以下の説明では、「要件間距離内部テーブル」を「距離テーブル」と略記する。図７の例に示す距離テーブル１３ｅは、「Ｒ１」、「Ｒ２」、「カテゴリ距離」、「使用コンポーネント距離」及び「距離」の項目を有する。「Ｒ１」及び「Ｒ２」の項目には、「重要度」が同一である要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、ペアとされた２つの要件のＩＤのそれぞれが、後述の第１の算出部１４ｂにより登録される。「カテゴリ距離」の項目には、「Ｒ１」及び「Ｒ２」の項目に登録された２つの要件間の後述する「カテゴリ距離」が後述の第１の算出部１４ｂにより登録される。「使用コンポーネント距離」の項目には、「Ｒ１」及び「Ｒ２」の項目に登録された２つの要件間の後述の「使用コンポーネント距離」が後述の第２の算出部１４ｃにより登録される。「距離」の項目には、「Ｒ１」及び「Ｒ２」の項目に登録された２つの要件間の後述の「距離」が後述の第３の算出部１４ｄにより登録される。
【００３２】
図１の説明に戻り、要件テーブル１３ｆには、要件ごとに、要件の重要度が登録されている。ここで、重要度について説明する。重要度とは、例えば、要件の適否に影響を及ぼすコンポーネントが適否に影響を及ぼす要件の数を評価した評価値である。重要度は、特開２００９−２０５５０３号公報などに記載された公知技術を用いて算出される。例えば、先の図６に示す影響リスト１３ｄを用いて、名称が「運用時間（通常）」である要件の重要度について算出する場合について説明する。図６の例では、名称が「運用時間（通常）」である要件の適否に影響を及ぼすコンポーネントの組み合わせは、ＡＰサーバ、ＤＢサーバ及びストレージの組み合わせである。そして、図６の影響リスト１３ｄが示すように、ＡＰサーバは、７つの要件の適否に影響を及ぼす。また、ＤＢサーバは、７つの要件の適否に影響を及ぼす。また、ストレージは、５つの要件の適否に影響を及ぼす。そのため、名称が「運用時間（通常）」である要件の重要度は、「１９（７＋７＋５）」である。同様に、図６の例に示す場合では、名称が「運用時間（特定日）」である要件の重要度、名称が「計画停止の有無」である要件の重要度、及び、名称が「バッチ処理件数」である要件のそれぞれの重要度は、「１９（７＋７＋５）」である。また、図６の例に示す影響リスト１３ｄを用いて算出した、名称が「対象業務範囲」である要件の重要度は、「０」である。また、図６の例に示す影響リスト１３ｄを用いて算出した、名称が「ユーザ数」である要件の重要度は、「７」である。また、図６の例に示す影響リスト１３ｄを用いて算出した、名称が「同時アクセス数」である要件の重要度は、「１４（７＋７）」である。同様に、図６の例に影響リスト１３ｄを用いて算出した、名称が「サービス切替時間」である要件の重要度は、「１４（７＋７）」である。また、図６の例に示す影響リスト１３ｄを用いて算出した、名称が「データ量」である要件の重要度は、「１２（７＋５）」である。
【００３３】
要件テーブル１３ｆには、上述したような方法で算出された重要度が要件ごとに予め登録される。図８は、要件テーブルのデータ構造の一例を示す図である。図８の例に示す要件テーブル１３ｆは、「ＩＤ」、「要件名」、「カテゴリ」、「重要度」及び「順序」の項目を有する。「ＩＤ」の項目には、要件のＩＤが登録される。「要件名」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の名称が登録される。「カテゴリ」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件が属するカテゴリ（大項目、中項目、小項目）が登録される。「重要度」の項目には、「ＩＤ」の項目に登録されたＩＤによって識別される要件の上述した重要度が登録される。「順序」の項目には、後述の生成部１４ｅによって後述の「順序」が登録される。
【００３４】
図１の説明に戻り、有向グラフ１３ｇは、後述の生成部１４ｅにより生成され、記憶部１３に登録される。有向グラフ１３ｇは、システムの設計者などにレベルを問い合わせる要件の順番を示す。
【００３５】
図９は、有向グラフの一例を示す図である。図９の例に示す有向グラフ１３ｇは、９つのノード１６ａ〜１６ｉを有する。ノード１６ａには、ＩＤ「Ａ．１．１．１」によって識別される要件のＩＤ「Ａ．１．１．１」及び名称「運用時間（通常）」が含まれる。ノード１６ｂには、ＩＤ「Ａ．１．１．２」によって識別される要件のＩＤ「Ａ．１．１．２」及び名称「運用時間（特定日）」が含まれる。ノード１６ｃには、ＩＤ「Ａ．１．１．３」によって識別される要件のＩＤ「Ａ．１．１．３」及び名称「計画停止の有無」が含まれる。ノード１６ｄには、ＩＤ「Ｂ．１．１．４」によって識別される要件のＩＤ「Ｂ．１．１．４」及び名称「バッチ処理件数」が含まれる。ノード１６ｅには、ＩＤ「Ａ．１．２．２」によって識別される要件のＩＤ「Ａ．１．２．２」及び名称「サービス切替時間」が含まれる。ノード１６ｆには、ＩＤ「Ｂ．１．１．２」によって識別される要件のＩＤ「Ｂ．１．１．２」及び名称「同時アクセス数」が含まれる。ノード１６ｇには、ＩＤ「Ｂ．１．１．３」によって識別される要件のＩＤ「Ｂ．１．１．３」及び名称「データ量」が含まれる。ノード１６ｈには、ＩＤ「Ｂ．１．１．１」によって識別される要件のＩＤ「Ｂ．１．１．１」及び名称「ユーザ数」が含まれる。ノード１６ｉには、ＩＤ「Ａ．１．２．１」によって識別される要件のＩＤ「Ａ．１．２．１」及び名称「対象業務範囲」が含まれる。
【００３６】
図９の有向グラフ１３ｇは、ノード１６ａから、ノード１６ｉまでの各ノードに含まれる要件のレベルを順番にユーザに問い合わせることを示す。すなわち、図９の有向グラフ１３ｇは、最初に、ＩＤ「Ａ．１．１．１」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ａ．１．１．２」によって識別される要件のレベルを問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ａ．１．１．２」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ａ．１．１．３」によって識別される要件のレベルを問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ａ．１．１．３」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ｂ．１．１．４」によって識別される要件のレベルをユーザに問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ｂ．１．１．４」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ａ．１．２．２」によって識別される要件のレベルをユーザに問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ａ．１．２．２」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ｂ．１．１．２」によって識別される要件のレベルをユーザに問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ｂ．１．１．２」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ｂ．１．１．３」によって識別される要件のレベルをユーザに問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ｂ．１．１．３」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ｂ．１．１．１」によって識別される要件のレベルをユーザに問い合わせることを示す。また、図９の有向グラフ１３ｇは、ＩＤ「Ｂ．１．１．１」によって識別される要件のレベルをユーザに問い合わせた後、次に、ＩＤ「Ａ．１．２．１」によって識別される要件のレベルをユーザに問い合わせることを示す。
【００３７】
図１の説明に戻り、記憶部１３は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部１３は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）であってもよい。
【００３８】
制御部１４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１に示すように、制御部１４は、取得部１４ａと、第１の算出部１４ｂと、第２の算出部１４ｃと、第３の算出部１４ｄと、生成部１４ｅと、設計部１４ｆとを有する。
【００３９】
取得部１４ａは、各種データを取得する。例えば、取得部１４ａは、コンポーネントを組み合わせて構成されるシステムの要件と、重要度とが対応付けられて登録された要件テーブル１３ｆの登録内容を参照し、同一の重要度が対応付けられた複数の要件を取得する。
【００４０】
取得部１４ａの一態様について説明する。例えば、入力部１１からシステム構成設計支援処理を実行するための指示が入力された場合には、取得部１４ａは、要件テーブル１３ｆの登録内容を参照する。そして、取得部１４ａは、要件テーブル１３ｆに登録された重要度の最大値を変数ＭａｘＪに設定する。例えば、先の図８に示す要件テーブル１３ｆの登録内容を参照した場合には、取得部１４ａは、重要度の最大値「１９」を変数ＭａｘＪに設定する。
【００４１】
続いて、取得部１４ａは、変数ＭａｘＪに設定された値を変数ｊに設定する。例えば、変数ＭａｘＪに設定された値が「１９」である場合には、取得部１４ａは、変数ｊに「１９」を設定する。
【００４２】
そして、取得部１４ａは、変数ｊの値が０以上であるか否かを判定する。変数ｊの値が０以上である場合には、取得部１４ａは、参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがあるか否かを判定する。
【００４３】
参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがある場合には、取得部１４ａは、あると判定したレコードの件数が２件以上であるか否かを判定する。あると判定したレコードの件数が２件以上である場合には、取得部１４ａは、あると判定したレコードを全て取得する。
【００４４】
また、取得部１４ａは、後述の生成部１４ｅにより変数ｊの値が１ずつデクリメントされるたびに、変数ｊの値が０未満となるまで上述した処理を繰り返し行う。すなわち、取得部１４ａは、変数ｊの値が０未満となるまで、変数ｊの値が１ずつデクリメントされるたびに、変数ｊの値が０以上であるか否かを判定する上述した処理を行う。そして、変数ｊの値が０以上である場合には、取得部１４ａは、参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがあるか否かを判定する上述した処理を行う。そして、参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがある場合には、取得部１４ａは、あると判定したレコードの件数が２件以上であるか否かを判定する上述した処理を行う。あると判定したレコードの件数が２件以上である場合には、取得部１４ａは、あると判定したレコードを全て取得する上述した処理を行う。
【００４５】
上述した各処理を実行することにより、取得部１４ａは、参照した要件テーブル１３ｆの全レコードのうち、登録された重要度が同一となる複数のレコードを取得する。
【００４６】
図１の説明に戻り、第１の算出部１４ｂは、取得部１４ａにより取得された複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次の処理を行う。すなわち、第１の算出部１４ｂは、ペアとされた一方の要件が属するカテゴリと他方の要件が属するカテゴリとの類似度であるカテゴリ距離を算出する。ここで、カテゴリ距離は、第１の類似度の一例である。
【００４７】
第１の算出部１４ｂの一態様について説明する。例えば、第１の算出部１４ｂは、取得部１４ａにより重要度が同一となる複数のレコードが取得されるたびに、次の処理を行う。すなわち、第１の算出部１４ｂは、取得部１４ａにより取得された複数のレコードの「ＩＤ」の項目にＩＤが登録された複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合から、２つの要件（ペアとなる要件）の組み合わせを生成する。例えば、取得部１４ａにより、先の図８の例に示す要件テーブル１３ｆの登録内容から、重要度が「１９」である４つのレコードが取得され、有向グラフ１３ｇがノードを有しない場合には、第１の算出部１４ｂは、６通りのペアの組み合わせを生成する。例えば、第１の算出部１４ｂは、ＩＤ「Ａ．１．１．１」によって識別される要件とＩＤ「Ａ．１．１．２」によって識別される要件とのペア、ＩＤ「Ａ．１．１．１」によって識別される要件とＩＤ「Ａ．１．１．３」によって識別される要件とのペアを生成する。また、第１の算出部１４ｂは、ＩＤ「Ａ．１．１．１」によって識別される要件とＩＤ「Ａ．１．１．４」によって識別される要件とのペア、ＩＤ「Ａ．１．１．２」によって識別される要件とＩＤ「Ａ．１．１．３」によって識別される要件とのペアを生成する。また、第１の算出部１４ｂは、ＩＤ「Ａ．１．１．２」によって識別される要件とＩＤ「Ａ．１．１．４」によって識別される要件とのペア、ＩＤ「Ａ．１．１．３」によって識別される要件とＩＤ「Ａ．１．１．４」によって識別される要件とのペアを生成する。
【００４８】
そして、第１の算出部１４ｂは、生成したペアの個数分のレコードを、新たに距離テーブル１３ｅに追加し、追加したレコードのそれぞれの「Ｒ１」及び「Ｒ２」の項目に、ペアとなる要件のＩＤのそれぞれを登録する。例えば、取得部１４ａにより図８の例に示す要件テーブル１３ｆの登録内容から重要度が「１９」である４つのレコードが取得され、有向グラフ１３ｇがノードを有せず、第１の算出部１４ｂが６通りのペアの組み合わせを生成した場合について説明する。この場合、第１の算出部１４ｂは、生成したペアの個数分、すなわち、６個分のレコードを、新たに距離テーブル１３ｅに追加する。そして、第１の算出部１４ｂは、先の図７の例に示すように、新たに追加した１つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．１」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．２」を登録する。また、第１の算出部１４ｂは、図７の例に示すように、新たに追加した２つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．１」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．３」を登録する。また、第１の算出部１４ｂは、図７の例に示すように、新たに追加した３つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．１」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．４」を登録する。また、第１の算出部１４ｂは、図７の例に示すように、新たに追加した４つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．２」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．３」を登録する。また、第１の算出部１４ｂは、図７の例に示すように、新たに追加した５つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．２」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．４」を登録する。また、第１の算出部１４ｂは、図７の例に示すように、新たに追加した６つ目のレコードの「Ｒ１」の項目に、ＩＤ「Ａ．１．１．３」を登録し、「Ｒ２」の項目に、ＩＤ「Ａ．１．１．４」を登録する。上述した処理を実行することにより、第１の算出部１４ｂは、重要度が同一となる２つの要件のＩＤを距離テーブル１３ｅに登録する。なお、第１の算出部１４ｂにより「Ｒ１」及び「Ｒ２」の各項目に要件のＩＤが登録された時点では、「カテゴリ距離」、「使用コンポーネント距離」及び「距離」の各項目には何も登録されていない。
【００４９】
そして、第１の算出部１４ｂは、全てのペアについて、カテゴリ距離を算出する。ここで、カテゴリ距離とは、例えば、ペアにおける一方の要件が属するカテゴリと、他方の要件が属するカテゴリとの類似度である。カテゴリ距離の値が小さくなるほど、一方の要件が属するカテゴリと、他方の要件が属するカテゴリとが類似することとなる。
【００５０】
カテゴリ距離を算出する方法の一例について説明する。例えば、第１の算出部１４ｂは、距離テーブル１３ｅに登録されたレコードのうち、未選択のレコードがあるか否かを判定する。未選択のレコードがある場合には、第１の算出部１４ｂは、未選択のレコードを処理対象のレコードとして１つ選択する。
【００５１】
そして、第１の算出部１４ｂは、処理対象のレコードの「Ｒ１」及び「Ｒ２」の各項目に設定された要件のＩＤを取得する。例えば、第１の算出部１４ｂは、処理対象のレコードの「Ｒ１」の項目にＩＤ「Ａ．１．１．１」が登録され、「Ｒ２」の項目にＩＤ「Ａ．１．１．２」が登録されている場合には、ＩＤ「Ａ．１．１．１」及びＩＤ「Ａ．１．１．２」を取得する。
【００５２】
続いて、第１の算出部１４ｂは、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを要件テーブル１３ｆに登録された全レコードの中から特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ１を取得する。例えば、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「Ａ．１．１．１」である場合には、第１の算出部１４ｂは、次の処理を行う。すなわち、第１の算出部１４ｂは、先の図８の例に示す要件テーブル１３ｆの全レコードの中から、「ＩＤ」の項目に「Ａ．１．１．１」が登録された１番目のレコードを特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ１「可用性，継続性，運用スケジュール」を取得する。
【００５３】
また、第１の算出部１４ｂは、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを要件テーブル１３ｆに登録された全レコードの中から特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ２を取得する。例えば、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「Ａ．１．１．２」である場合には、第１の算出部１４ｂは、次の処理を行う。すなわち、第１の算出部１４ｂは、図８の例に示す要件テーブル１３ｆの全レコードの中から、「ＩＤ」の項目に「Ａ．１．１．２」が登録された２番目のレコードを特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ２「可用性，継続性，運用スケジュール」を取得する。
【００５４】
そして、第１の算出部１４ｂは、カテゴリＬ１に含まれる項目の数ｌｅｎｇｔｈ１を特定する。例えば、カテゴリＬ１が「可用性，継続性，運用スケジュール」である場合には、カテゴリＬ１に含まれる項目の数が「３」（大項目、中項目、小項目）であるので、第１の算出部１４ｂは、カテゴリＬ１に含まれる項目の数ｌｅｎｇｔｈ１「３」を特定する。
【００５５】
また、第１の算出部１４ｂは、カテゴリＬ２に含まれる項目の数ｌｅｎｇｔｈ２を特定する。例えば、カテゴリＬ２が「可用性，継続性，運用スケジュール」である場合には、カテゴリＬ２の項目の数が「３」（大項目、中項目、小項目）であるので、第１の算出部１４ｂは、カテゴリＬ２に含まれる項目の数ｌｅｎｇｔｈ２「３」を特定する。
【００５６】
続いて、第１の算出部１４ｂは、カテゴリＬ１とカテゴリＬ２との一致する項目の数を示す変数ｉの値を０に設定し、変数ｉの値を初期化する。
【００５７】
そして、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能か否かを判定する。例えば、カテゴリＬ１及びカテゴリＬ２が「可用性，継続性，運用スケジュール」であり、変数ｉの値が「０」である場合には、（ｉ＋１）は「１」となり、カテゴリＬ１及びカテゴリＬ２には、１番目の項目「可用性」が存在する。そこで、この場合には、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能であると判定する。
【００５８】
カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能である場合には、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２のそれぞれの（ｉ＋１）番目の項目を取得する。例えば、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２のそれぞれの１番目の項目「可用性」を取得する。そして、第１の算出部１４ｂは、取得したカテゴリＬ１の（ｉ＋１）番目の項目と、取得したカテゴリＬ２の（ｉ＋１）番目の項目とが一致するか否かを判定する。一致する場合には、第１の算出部１４ｂは、変数ｉの値を１インクリメントする。
【００５９】
そして、第１の算出部１４ｂは、変数ｉの値を１インクリメントするたびに、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能か否かを判定する上述した処理を再び行う。そして、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能である場合には、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２のそれぞれの（ｉ＋１）番目の項目を取得する上述した処理を再び行う。そして、第１の算出部１４ｂは、取得したカテゴリＬ１の（ｉ＋１）番目の項目と、取得したカテゴリＬ２の（ｉ＋１）番目の項目とが一致するか否かを判定する上述した処理を再び行う。一致する場合には、第１の算出部１４ｂは、変数ｉの値を１インクリメントする上述した処理を再び行う。
【００６０】
また、取得したカテゴリＬ１の（ｉ＋１）番目の項目と、取得したカテゴリＬ２の（ｉ＋１）番目の項目とが一致しない場合には、第１の算出部１４ｂは、下記の式（１）に従って、カテゴリ距離を算出する。
カテゴリ距離＝（ｌｅｎｇｔｈ１−ｉ）＋（ｌｅｎｇｔｈ２−ｉ）    （１）
【００６１】
また、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能でない場合にも、第１の算出部１４ｂは、同様の方法で、カテゴリ距離を算出する。例えば、カテゴリＬ１及びカテゴリＬ２が「可用性，継続性，運用スケジュール」であり、変数ｉの値が「３」である場合には、（ｉ＋１）は「４」となり、カテゴリＬ１及びカテゴリＬ２には、４番目の項目が存在しない。そこで、この場合には、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能でないと判定し、カテゴリ距離として「０」（（３−３）＋（３−３））を算出する。
【００６２】
そして、第１の算出部１４ｂは、算出したカテゴリ距離を、処理対象のレコードの「カテゴリ距離」の項目に登録する。例えば、算出したカテゴリ距離が「０」である場合には、先の図７に示すように、１番目のレコードの「カテゴリ距離」の項目に「０」を登録する。なお、第１の算出部１４ｂにより「カテゴリ距離」の項目にカテゴリ距離が登録された時点では、「使用コンポーネント距離」及び「距離」の各項目には何も登録されていない。
【００６３】
そして、第１の算出部１４ｂは、距離テーブル１３ｅに登録されたレコードの中から、未選択のレコードを処理対象のレコードとして１つ選択するたびに、上述した各処理を行って、距離テーブル１３ｅに登録された全レコードについてカテゴリ距離を登録する。
【００６４】
図１の説明に戻り、第２の算出部１４ｃは、取得部１４ａにより取得された複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次のような処理を行う。すなわち、第２の算出部１４ｃは、ペアとされた一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの類似度である使用コンポーネント距離を算出する。ここで、使用コンポーネント距離は、第２の類似度の一例である。
【００６５】
第２の算出部１４ｃの一態様について説明する。例えば、第２の算出部１４ｃは、第１の算出部１４ｂにより生成された全てのペアについて、使用コンポーネント距離を算出する。ここで、使用コンポーネント距離とは、例えば、ペアにおける一方の要件の適否に影響を及ぼすコンポーネント（またはコンポーネントの組み合わせ）と、他方の要件の適否に影響を及ぼすコンポーネント（またはコンポーネントの組み合わせ）との類似度である。使用コンポーネント距離の値が小さくなるほど、一方の要件の適否に影響を及ぼすコンポーネント（またはコンポーネントの組み合わせ）と、他方の要件の適否に影響を及ぼすコンポーネント（またはコンポーネントの組み合わせ）とが類似することとなる。
【００６６】
使用コンポーネント距離を算出する方法の一例について説明する。例えば、第２の算出部１４ｃは、距離テーブル１３ｅに登録されたレコードのうち、未選択のレコードがあるか否かを判定する。未選択のレコードがある場合には、第２の算出部１４ｃは、未選択のレコードを処理対象のレコードとして１つ選択する。ここでいう未選択のレコードとは、第２の算出部１４ｃにより選択されていないレコードのことを指す。
【００６７】
そして、第２の算出部１４ｃは、処理対象のレコードの「Ｒ１」及び「Ｒ２」の各項目に設定された要件のＩＤを取得する。例えば、第２の算出部１４ｃは、処理対象のレコードの「Ｒ１」の項目にＩＤ「Ａ．１．１．１」が登録され、「Ｒ２」の項目にＩＤ「Ａ．１．１．２」が登録されている場合には、ＩＤ「Ａ．１．１．１」及びＩＤ「Ａ．１．１．２」を取得する。
【００６８】
続いて、第２の算出部１４ｃは、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを影響リスト１３ｄに登録された全レコードの中から特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ１を取得する。例えば、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「Ａ．１．１．１」である場合には、第２の算出部１４ｃは、次の処理を行う。すなわち、第２の算出部１４ｃは、先の図６の例に示す影響リスト１３ｄの全レコードの中から、「ＩＤ」の項目に「Ａ．１．１．１」が登録された１番目のレコードを特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ１「ＡＰサーバ−ＤＢサーバ−ストレージ」を取得する。
【００６９】
また、第２の算出部１４ｃは、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを影響リスト１３ｄに登録された全レコードの中から特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ２を取得する。例えば、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「Ａ．１．１．２」である場合には、第２の算出部１４ｃは、次の処理を行う。すなわち、第２の算出部１４ｃは、図６の例に示す影響リスト１３ｄの全レコードの中から、「ＩＤ」の項目に「Ａ．１．１．２」が登録された２番目のレコードを特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ２「ＡＰサーバ−ＤＢサーバ−ストレージ」を取得する。
【００７０】
そして、第２の算出部１４ｃは、コンポーネントＣ１の冪集合Ｐｓｅｔ１を生成する。例えば、コンポーネントＣ１が「ＡＰサーバ−ＤＢサーバ−ストレージ」である場合には、第２の算出部１４ｃは、次の冪集合Ｐｓｅｔ１を生成する。すなわち、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１｛Φ，ＡＰサーバ，ＤＢサーバ，ストレージ，｛ＡＰサーバ，ＤＢサーバ｝，｛ＡＰサーバ，ストレージ｝，｛ＤＢサーバ，ストレージ｝，｛ＡＰサーバ，ＤＢサーバ，ストレージ｝｝を生成する。
【００７１】
また、第２の算出部１４ｃは、コンポーネントＣ２の冪集合Ｐｓｅｔ２を生成する。例えば、コンポーネントＣ２が「ＡＰサーバ−ＤＢサーバ−ストレージ」である場合には、第２の算出部１４ｃは、次の冪集合Ｐｓｅｔ２を生成する。すなわち、第２の算出部１４ｃは、冪集合Ｐｓｅｔ２｛Φ，ＡＰサーバ，ＤＢサーバ，ストレージ，｛ＡＰサーバ，ＤＢサーバ｝，｛ＡＰサーバ，ストレージ｝，｛ＤＢサーバ，ストレージ｝，｛ＡＰサーバ，ＤＢサーバ，ストレージ｝｝を生成する。
【００７２】
ここで、冪集合Ｐｓｅｔ１及びＰｓｅｔ２は、使用コンポーネントを算出する際に下記の処理で用いられるが、冪集合Ｐｓｅｔ１及びＰｓｅｔ２の各集合から空集合Φを除いた冪集合Ｐｓｅｔ１及びＰｓｅｔ２を下記の処理で用いるようにしてもよい。これにより、処理が簡易となるため、処理速度が良好となる。
【００７３】
続いて、第２の算出部１４ｃは、冪集合内の要素（集合）の順番を示す変数ｉの値を１に設定し、変数ｉの値を初期化する。また、第２の算出部１４ｃは、変数Ｓｉｍの値を０に設定し、変数Ｓｉｍの値を初期化する。
【００７４】
そして、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能か否かを判定する。例えば、冪集合Ｐｓｅｔ１が｛ＡＰサーバ，ＤＢサーバ，ストレージ，｛ＡＰサーバ，ＤＢサーバ｝，｛ＡＰサーバ，ストレージ｝，｛ＤＢサーバ，ストレージ｝，｛ＡＰサーバ，ＤＢサーバ，ストレージ｝｝である場合について説明する。この場合に、ｉが「１」であるときには、１番目の要素「ＡＰサーバ」が存在する。そこで、この場合には、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能であると判定する。
【００７５】
冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能である場合には、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅを取得する。例えば、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１の１番目の要素Ｅ「ＡＰサーバ」を取得する。そして、第２の算出部１４ｃは、取得した冪集合Ｐｓｅｔ１のｉ番目の要素Ｅが、冪集合Ｐｓｅｔ２に含まれるか否かを判定する。含まれる場合には、第２の算出部１４ｃは、変数Ｓｉｍの値に、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅの要素数を加えた値を、変数Ｓｉｍに設定し、変数ｉの値を１インクリメントする。また、含まれない場合には、第２の算出部１４ｃは、変数ｉの値を１インクリメントする。
【００７６】
そして、第２の算出部１４ｃは、変数ｉの値を１インクリメントするたびに、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能か否かを判定する上述した処理を再び行う。そして、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能である場合には、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅを取得する上述した処理を再び行う。そして、第２の算出部１４ｃは、取得した冪集合Ｐｓｅｔ１のｉ番目の要素Ｅが、冪集合Ｐｓｅｔ２に含まれるか否かを判定する上述した処理を再び行う。含まれる場合には、第２の算出部１４ｃは、変数Ｓｉｍの値に、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅの要素数を加えた値を、変数Ｓｉｍに設定し、変数ｉの値を１インクリメントする上述した処理を再び行う。また、含まれない場合には、第２の算出部１４ｃは、変数ｉの値を１インクリメントする上述した処理を再び行う。
【００７７】
また、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能でない場合には、第２の算出部１４ｃは、使用コンポーネント距離を算出する。例えば、第２の算出部１４ｃは、変数Ｓｉｍの値が「０」でない場合には、下記の式（２）に従って、使用コンポーネント距離を算出する。
使用コンポーネント距離＝１／Ｓｉｍ      （２）
【００７８】
また、第２の算出部１４ｃは、変数Ｓｉｍの値が「０」である場合には、非常に大きな値、例えば、「１００００」を使用コンポーネント距離として算出する。
【００７９】
そして、第２の算出部１４ｃは、算出した使用コンポーネント距離を、処理対象のレコードの「使用コンポーネント距離」の項目に登録する。例えば、算出した使用コンポーネント距離が「１／９」である場合には、処理対象のレコードの「使用コンポーネント距離」の項目に「１／９」を登録する。なお、第２の算出部１４ｃにより「使用コンポーネント距離」の項目に使用コンポーネント距離が登録された時点では、「距離」の項目には何も登録されていない。また、第２の算出部１４ｃは、算出した使用コンポーネント距離に対して所定の正規化を行い、正規化が行われた使用コンポーネント距離を処理対象のレコードの「使用コンポーネント距離」の項目に登録することもできる。例えば、第２の算出部１４ｃは、算出した使用コンポーネント距離「１／９」に対して所定の正規化を行い、正規化が行われた使用コンポーネント距離「１２」を、図７に示すように、１番目のレコードに登録することもできる。
【００８０】
そして、第２の算出部１４ｃは、距離テーブル１３ｅに登録されたレコードの中から、未選択のレコードを処理対象のレコードとして１つ選択するたびに、上述した各処理を行って、距離テーブル１３ｅに登録された全レコードについてカテゴリ距離を登録する。
【００８１】
図１の説明に戻り、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードについて距離を算出する。例えば、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、「カテゴリ距離」の項目に登録されたカテゴリ距離と、「使用コンポーネント距離」の項目に登録された使用コンポーネント距離と取得する。そして、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、下記の式（３）にしたがって、距離を算出する。
距離＝Ｗ１×カテゴリ距離＋Ｗ２×使用コンポーネント距離      （３）
ただし、Ｗ１及びＷ２は、所定の重み付けを行うための係数であり、例えば、正の値である。
【００８２】
ここで、距離とは、ペアにおける一方の要件と、他方の要件との類似度である。距離の値が小さくなるほど、一方の要件と、他方の要件とが類似することとなる。
【００８３】
そして、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、算出した距離を「距離」の項目に登録する。例えば、図７の例に示す距離テーブル１３ｅの１番目のレコードについて、距離「１」を算出した場合には、図７の例に示すように、１番目のレコードの「距離」の項目に「１」を設定する。
【００８４】
図１の説明に戻り、生成部１４ｅは、カテゴリ距離及び使用コンポーネント距離から算出された距離に基づいて、類似性が高い要件のペアほど、ペアとされたそれぞれの要件を含む２つのノードが近接して配置されるように有向グラフ１３ｇを生成する。このようにして、生成部１４ｅは、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。生成部１４ｅは、決定部の一例である。
【００８５】
例えば、生成部１４ｅは、有向グラフ１３ｇにノードが含まれている場合には、有向グラフの末尾のノードが示す要件に最も類似する要件の順序を「１」に設定し、順序が「Ｎ」である要件に最も類似する要件の順序を「Ｎ＋１」として設定する。そして、生成部１４ｅは、順序にしたがって、有向グラフ１３ｇを生成する。
【００８６】
生成部１４ｅの一態様について説明する。例えば、生成部１４ｅは、順序を表す変数ｏｒｄｅｒに「１」を設定して、変数ｏｒｄｅｒの値を初期化する。そして、生成部１４ｅは、有向グラフ１３ｇにノードが含まれている場合には、変数ＰｒｅＮｏｄｅＩＤに、有向グラフ１３ｇの末尾のノードが示す要件のＩＤを設定する。また、生成部１４ｅは、有向グラフ１３ｇにノードが含まれていない場合には、重要度が変数ｊの値である要件の中からいずれかの要件のＩＤを変数ＰｒｅＮｏｄｅＩＤに設定する。
【００８７】
そして、生成部１４ｅは、「Ｒ１」または「Ｒ２」の項目に登録されたＩＤが、変数ＰｒｅＮｏｄｅＩＤの値と一致するレコード群を、距離テーブル１３ｅの全レコードから抽出し、抽出したレコード群を変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定する。
【００８８】
続いて、生成部１４ｅは、距離テーブル１３ｅの全レコードから、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群を除いたレコードを変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定する。
【００８９】
続いて、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群の中で、「距離」の項目に登録された距離が最小のレコードを変数ＮｅｘｔＲｅｃｏｒｄに設定する。
【００９０】
そして、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ１」の項目に設定されたＩＤが、変数ＰｒｅＮｏｄｅＩＤに設定されたＩＤと一致する場合には、次の処理を行う。すなわち、生成部１４ｅは、変数ＮｅｘｔＩＤに、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ２」の項目に設定されたＩＤを設定する。
【００９１】
また、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ２」の項目に設定されたＩＤが、変数ＰｒｅＮｏｄｅＩＤに設定されたＩＤと一致する場合には、次の処理を行う。すなわち、生成部１４ｅは、変数ＮｅｘｔＩＤに、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ１」の項目に設定されたＩＤを設定する。
【００９２】
そして、生成部１４ｅは、変数ＮｅｘｔＩＤに設定されたＩＤが「ＩＤ」の項目に登録された要件テーブル１３ｆのレコードを特定し、特定したレコードの「順序」の項目に、変数ｏｒｄｅｒの値を設定する。そして、生成部１４ｅは、変数ｏｒｄｅｒの値を１インクリメントする。
【００９３】
そして、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、「Ｒ１」または「Ｒ２」の項目に設定されたＩＤが変数ＮｅｘｔＩＤに設定されたＩＤと一致するレコードの件数を算出する。そして、生成部１４ｅは、算出した件数が１件以上であるか否かを判定する。
【００９４】
取得した件数が１件以上である場合には、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、「Ｒ１」または「Ｒ２」の項目に設定されたＩＤが変数ＮｅｘｔＩＤに設定されたＩＤと一致するレコード群を抽出する。そして、生成部１４ｅは、抽出したレコード群を変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定する。
【００９５】
そして、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群を除いたレコードを、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定する。そして、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群の中で、「距離」の項目に登録された距離が最小のレコードを変数ＮｅｘｔＲｅｃｏｒｄに設定する上述した処理を再び行い、かかる処理以降の上述した処理を再び行う。
【００９６】
上述した処理を行うことによって、生成部１４ｅは、各要件の順序を設定する。
【００９７】
そして、生成部１４ｅは、変数ｊの値を重要度の値とした場合に、同一の重要度の要件が複数あるときには、次の処理を行う。すなわち、生成部１４ｅは、要件テーブル１３ｆの全レコードのうち、変数ｊの値が「重要度」の項目に登録された複数のレコードを取得し、取得したレコードの「順序」の項目に登録された順序をキーにして、取得した複数のレコードを昇順にソートする。
【００９８】
続いて、生成部１４ｅは、変数Ｒｎｕｍに、取得した複数のレコードの件数を設定する。続いて、生成部１４ｅは、変数ｐに「１」を設定して、変数ｐの値を初期化する。
【００９９】
そして、生成部１４ｅは、変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値（Ｒｎｕｍ＋１）よりも小さいか否かを判定する。変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値（Ｒｎｕｍ＋１）よりも小さい場合には、生成部１４ｅは、要件テーブル１３ｆのｐ番目のレコードの「ＩＤ」の項目に登録されたＩＤを、変数Ｒｉｄに設定する。
【０１００】
そして、生成部１４ｅは、変数Ｒｉｄに設定されたＩＤ、及び、変数Ｒｉｄに設定されたＩＤによって識別される要件の名称を含むノードを生成する。続いて、生成部１４ｅは、生成したノードを有向グラフ１３ｇの末尾に追加することにより、有向グラフ１３ｇを更新する。
【０１０１】
続いて、生成部１４ｅは、変数ｐの値を１インクリメントする。そして、生成部１４ｅは、変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値（Ｒｎｕｍ＋１）よりも小さいか否かを判定する上述した処理を再び実行し、その後、かかる処理以降の上述した各処理を実行する。
【０１０２】
上述した処理を実行することにより、生成部１４ｅは、ある２つの要件について、類似する度合いが高くなるほど、２つの要件のそれぞれを含む２つのノードが近くなるように配置された有向グラフ１３ｇを生成する。
【０１０３】
また、生成部１４ｅは、変数ｊの値を重要度の値とした場合に、同一の重要度の要件の数が１つである場合には、かかる要件の「ＩＤ」及び名称を含むノードを生成し、生成したノードを有向グラフ１３ｇの末尾に追加することにより、有向グラフ１３ｇを更新する。
【０１０４】
そして、生成部１４ｅは、変数ｊの値を１デクリメントする。
【０１０５】
図１の説明に戻り、設計部１４ｆは、システムを構成する要件を設計する。設計部１４ｆの一態様について説明する。例えば、設計部１４ｆは、取得部１４ａにより変数ｊの値が０以上でないと判定された場合に、有向グラフ１３ｇのノードの順番が示す要件の順番にしたがって、レベル受付画面を表示するように出力部１２の表示を制御する。例えば、設計部１４ｆは、有向グラフ１３ｇが示す重要度の降順に並んだノードのうち、未選択のノードがある場合には、未選択のノードのうち最上位に並んだノードを１つ選択する。そして、設計部１４ｆは、選択したノードに含まれる要件のレベルを受け付けるためのレベル受付画面を表示するように出力部１２の表示を制御する。
【０１０６】
そして、設計部１４ｆは、ユーザから要件のレベルが入力されたか否かを判定する。要件のレベルが入力されていない場合には、設計部１４ｆは、再び、ユーザから要件のレベルが入力されたか否かを判定する。一方、要件のレベルが入力された場合には、設計部１４ｆは、入力されたレベルに対応するコンポーネントまたはコンポーネントの組み合わせを関連リスト１３ｃから取得する。そして、設計部１４ｆは、前回設定されたコンポーネントと、新たに取得されたコンポーネントとが矛盾するか否かを判定する。例えば、設計部１４ｆは、前回設定されたコンポーネントと、新たに取得されたコンポーネントとが同時に使用できないコンポーネントである場合には、前回設定されたコンポーネントと、新たに取得されたコンポーネントとが矛盾すると判定する。
【０１０７】
矛盾する場合には、設計部１４ｆは、新たに入力された要件のレベルを変更することを示すメッセージを表示するように出力部１２を制御する。そして、設計部１４ｆは、ユーザから変更後のレベルが入力されたか否かを判定する。変更後のレベルが入力されていない場合には、設計部１４ｆは、再び、ユーザから変更後のレベルが入力されたか否かを判定する。変更後のレベルが入力された場合には、設計部１４ｆは、再び、入力されたレベルに対応するコンポーネントまたはコンポーネントの組み合わせを関連リスト１３ｃから取得する上述した処理を行い、その後、かかる処理以降の各処理を再び実行する。
【０１０８】
一方、矛盾しない場合には、設計部１４ｆは、前回設定されたコンポーネントに、新たに取得されたコンポーネントを追加して、新たにコンポーネントを設定する。そして、設計部１４ｆは、有向グラフ１３ｇのノードに含まれる全ての要件についてレベル受付画面を表示したか否かを判定する。全ての要件についてレベル受付画面を表示していない場合には、設計部１４ｆは、次の処理を実行する。すなわち、設計部１４ｆは、有向グラフ１３ｇのノードの順番が示す要件の順番にしたがって、レベル受付画面を表示するように出力部１２の表示を制御する上述した処理を再び実行し、そして、かかる処理以降の各処理を再び実行する。一方、全ての要件についてレベル受付画面を表示した場合には、設計部１４ｆは、設定されたコンポーネントの型番や仕様、ベンダなどをコンポーネントリスト１３ｂから取得し、取得した型番や仕様、ベンダなどを表示するように出力部１２を制御する。
【０１０９】
制御部１４は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）などの回路である。
【０１１０】
［処理の流れ］
次に、本実施例に係るシステム構成設計支援装置１０の処理の流れについて説明する。図１０は、実施例１に係るシステム構成設計支援処理の手順を示すフローチャートである。実施例１に係るシステム構成設計支援処理は、例えば、入力部１１から、システム構成設計支援処理を実行するための指示を制御部１４が受け付けたタイミングで、実行される。
【０１１１】
図１０に示すように、取得部１４ａは、要件テーブル１３ｆの登録内容を参照する（Ｓ１０１）。そして、取得部１４ａは、要件テーブル１３ｆに登録された重要度の最大値を変数ＭａｘＪに設定する（Ｓ１０２）。続いて、取得部１４ａは、変数ＭａｘＪに設定された値を変数ｊに設定する（Ｓ１０３）。
【０１１２】
そして、取得部１４ａは、変数ｊの値が０以上であるか否かを判定する（Ｓ１０４）。変数ｊの値が０以上である場合（Ｓ１０４；Ｙｅｓ）には、取得部１４ａは、参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがあるか否かを判定する（Ｓ１０５）。参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがない場合（Ｓ１０５；Ｎｏ）には、Ｓ１１１へ進む。
【０１１３】
一方、参照した要件テーブル１３ｆの全レコードの中に、変数ｊの値が「重要度」の項目に登録されたレコードがある場合（Ｓ１０５；Ｙｅｓ）には、取得部１４ａは、あると判定したレコードの件数が２件以上であるか否かを判定する（Ｓ１０６）。あると判定したレコードの件数が２件以上である場合（Ｓ１０６；Ｙｅｓ）には、取得部１４ａは、あると判定したレコードを全て取得する（Ｓ１０７）。
【０１１４】
そして、第１の算出部１４ｂは、距離算出処理を実行する（Ｓ１０８）。図１１は、実施例１に係る距離算出処理の手順を示すフローチャートである。図１１に示すように、第１の算出部１４ｂは、取得部１４ａにより取得された複数のレコードにＩＤが登録された複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合から、２つの要件の組み合わせを生成する（Ｓ２０１）。
【０１１５】
そして、第１の算出部１４ｂは、生成したペアの個数分のレコードを、新たに距離テーブル１３ｅに追加し、追加したレコードのそれぞれの「Ｒ１」及び「Ｒ２」の項目に、ペアとなる要件のＩＤのそれぞれを登録する（Ｓ２０２）。そして、第１の算出部１４ｂは、カテゴリ距離算出処理を実行する（Ｓ２０３）。
【０１１６】
図１２は、実施例１に係るカテゴリ距離算出処理の手順を示すフローチャートである。図１２に示すように、第１の算出部１４ｂは、距離テーブル１３ｅに登録されたレコードのうち、未選択のレコードがあるか否かを判定する（Ｓ３０１）。未選択のレコードがある場合（Ｓ３０１；Ｙｅｓ）には、第１の算出部１４ｂは、未選択のレコードを処理対象のレコードとして１つ選択する（Ｓ３０２）。
【０１１７】
そして、第１の算出部１４ｂは、処理対象のレコードの「Ｒ１」及び「Ｒ２」の各項目に設定された要件のＩＤを取得する（Ｓ３０３）。
【０１１８】
続いて、第１の算出部１４ｂは、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを要件テーブル１３ｆに登録された全レコードの中から特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ１を取得する。また、第１の算出部１４ｂは、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを要件テーブル１３ｆに登録された全レコードの中から特定する。そして、第１の算出部１４ｂは、特定したレコードの「カテゴリ」の項目に登録されたカテゴリＬ２を取得する（Ｓ３０４）。
【０１１９】
そして、第１の算出部１４ｂは、カテゴリＬ１に含まれる項目の数ｌｅｎｇｔｈ１を特定する。また、第１の算出部１４ｂは、カテゴリＬ２に含まれる項目の数ｌｅｎｇｔｈ２を特定する（Ｓ３０５）。
【０１２０】
続いて、第１の算出部１４ｂは、カテゴリＬ１とカテゴリＬ２との一致する項目の数を示す変数ｉの値を０に設定し、変数ｉの値を初期化する（Ｓ３０６）。そして、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能か否かを判定する（Ｓ３０７）。
【０１２１】
カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能である場合（Ｓ３０７；Ｙｅｓ）には、第１の算出部１４ｂは、カテゴリＬ１及びカテゴリＬ２のそれぞれの（ｉ＋１）番目の項目を取得する（Ｓ３０８）。そして、第１の算出部１４ｂは、取得したカテゴリＬ１の（ｉ＋１）番目の項目と、取得したカテゴリＬ２の（ｉ＋１）番目の項目とが一致するか否かを判定する（Ｓ３０９）。一致する場合（Ｓ３０９；Ｙｅｓ）には、第１の算出部１４ｂは、変数ｉの値を１インクリメントし（Ｓ３１０）、Ｓ３０７に戻る。
【０１２２】
一方、カテゴリＬ１及びカテゴリＬ２の（ｉ＋１）番目の項目が取得することが可能でない場合（Ｓ３０７；Ｎｏ）には、第１の算出部１４ｂは、上記の式（１）に従って、カテゴリ距離を算出する。また、取得したカテゴリＬ１の（ｉ＋１）番目の項目と、取得したカテゴリＬ２の（ｉ＋１）番目の項目とが一致しない場合（Ｓ３０９；Ｎｏ）にも、第１の算出部１４ｂは、上記の式（１）に従って、カテゴリ距離を算出する（Ｓ３１１）。
【０１２３】
そして、第１の算出部１４ｂは、算出したカテゴリ距離を、処理対象のレコードの「カテゴリ距離」の項目に登録し（Ｓ３１２）、Ｓ３０１に戻る。
【０１２４】
また、未選択のレコードがない場合（Ｓ３０１；Ｎｏ）には、第１の算出部１４ｂは、処理結果を制御部１４の内部メモリに格納し、リターンする。
【０１２５】
図１１の説明に戻り、第２の算出部１４ｃは、使用コンポーネント距離算出処理を実行する（Ｓ２０４）。図１３は、実施例１に係る使用コンポーネント距離算出処理の手順を示すフローチャートである。図１３に示すように、第２の算出部１４ｃは、距離テーブル１３ｅに登録されたレコードのうち、未選択のレコードがあるか否かを判定する（Ｓ４０１）。未選択のレコードがある場合（Ｓ４０１；Ｙｅｓ）には、第２の算出部１４ｃは、未選択のレコードを処理対象のレコードとして１つ選択する（Ｓ４０２）。
【０１２６】
そして、第２の算出部１４ｃは、処理対象のレコードの「Ｒ１」及び「Ｒ２」の各項目に設定された要件のＩＤを取得する（Ｓ４０３）。続いて、第２の算出部１４ｃは、処理対象のレコードの「Ｒ１」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを影響リスト１３ｄに登録された全レコードの中から特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ１を取得する。また、第２の算出部１４ｃは、処理対象のレコードの「Ｒ２」の項目に設定された要件のＩＤが「ＩＤ」の項目に登録されたレコードを影響リスト１３ｄに登録された全レコードの中から特定する。そして、第２の算出部１４ｃは、特定したレコードの「コンポーネント」の項目に登録されたコンポーネントＣ２を取得する（Ｓ４０４）。
【０１２７】
そして、第２の算出部１４ｃは、コンポーネントＣ１の冪集合Ｐｓｅｔ１を生成する。また、第２の算出部１４ｃは、コンポーネントＣ２の冪集合Ｐｓｅｔ２を生成する（Ｓ４０５）。
【０１２８】
続いて、第２の算出部１４ｃは、冪集合内の要素（集合）の順番を示す変数ｉの値を１に設定し、変数ｉの値を初期化する（Ｓ４０６）。そして、第２の算出部１４ｃは、変数Ｓｉｍの値を０に設定し、変数Ｓｉｍの値を初期化する（Ｓ４０７）。
【０１２９】
そして、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能か否かを判定する（Ｓ４０８）。冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能である場合（Ｓ４０８；Ｙｅｓ）には、第２の算出部１４ｃは、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅを取得する（Ｓ４０９）。そして、第２の算出部１４ｃは、取得した冪集合Ｐｓｅｔ１のｉ番目の要素Ｅが、冪集合Ｐｓｅｔ１に含まれるか否かを判定する（Ｓ４１０）。含まれる場合（Ｓ４１０；Ｙｅｓ）には、第２の算出部１４ｃは、変数Ｓｉｍの値に、冪集合Ｐｓｅｔ１のｉ番目の要素Ｅの要素数を加えた値を、変数Ｓｉｍに設定する（Ｓ４１１）。そして、第２の算出部１４ｃは、変数ｉの値を１インクリメントし（Ｓ４１２）、Ｓ４０８に戻る。一方、含まれない場合（Ｓ４１０；Ｎｏ）には、第２の算出部１４ｃは、Ｓ４１２へ進む。
【０１３０】
また、冪集合Ｐｓｅｔ１のｉ番目の要素を取得することが可能でない場合（Ｓ４０８；Ｎｏ）には、第２の算出部１４ｃは、使用コンポーネント距離を算出する（Ｓ４１３）。そして、第２の算出部１４ｃは、算出した使用コンポーネント距離を、処理対象のレコードの「使用コンポーネント距離」の項目に登録し（Ｓ４１４）、Ｓ４０１に戻る。
【０１３１】
また、未選択のレコードがない場合（Ｓ４０１；Ｎｏ）には、第２の算出部１４ｃは、処理結果を制御部１４の内部メモリに格納し、リターンする。
【０１３２】
図１１の説明に戻り、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、「カテゴリ距離」の項目に登録されたカテゴリ距離と、「使用コンポーネント距離」の項目に登録された使用コンポーネント距離と取得する。そして、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、上記の式（３）にしたがって、距離を算出する（Ｓ２０５）。そして、第３の算出部１４ｄは、距離テーブル１３ｅの全レコードのそれぞれについて、算出した距離を「距離」の項目に登録し（Ｓ２０６）、処理結果を制御部１４の内部メモリに格納し、リターンする。
【０１３３】
図１０の説明に戻り、生成部１４ｅは、順序付け処理を実行する（Ｓ１０９）。図１４は、実施例１に係る順序付け処理の手順を示すフローチャートである。図１４に示すように、生成部１４ｅは、順序を表す変数ｏｒｄｅｒに「１」を設定して、変数ｏｒｄｅｒの値を初期化する（Ｓ５０１）。そして、生成部１４ｅは、有向グラフ１３ｇにノードが含まれている場合には、変数ＰｒｅＮｏｄｅＩＤに、有向グラフ１３ｇの末尾のノードが示す要件のＩＤを設定する。また、生成部１４ｅは、有向グラフ１３ｇにノードが含まれていない場合には、重要度が変数ｊの値である要件の中からいずれかの要件のＩＤを変数ＰｒｅＮｏｄｅＩＤに設定する（Ｓ５０２）。
【０１３４】
そして、生成部１４ｅは、「Ｒ１」または「Ｒ２」の項目に登録されたＩＤが、変数ＰｒｅＮｏｄｅＩＤの値と一致するレコード群を、距離テーブル１３ｅの全レコードから抽出し、次の処理を行う。すなわち、生成部１４ｅは、抽出したレコード群を変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定する（Ｓ５０３）。
【０１３５】
続いて、生成部１４ｅは、距離テーブル１３ｅの全レコードから、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群を除いたレコードを変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定する（Ｓ５０４）。
【０１３６】
続いて、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群の中で、「距離」の項目に登録された距離が最小のレコードを変数ＮｅｘｔＲｅｃｏｒｄに設定する（Ｓ５０５）。
【０１３７】
そして、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ１」の項目に設定されたＩＤが、変数ＰｒｅＮｏｄｅＩＤに設定されたＩＤと一致する場合には、次の処理を行う。すなわち、生成部１４ｅは、変数ＮｅｘｔＩＤに、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ２」の項目に設定されたＩＤを設定する。また、生成部１４ｅは、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ２」の項目に設定されたＩＤが、変数ＰｒｅＮｏｄｅＩＤに設定されたＩＤと一致する場合には、次の処理を行う。すなわち、生成部１４ｅは、変数ＮｅｘｔＩＤに、変数ＮｅｘｔＲｅｃｏｒｄに設定されたレコードの「Ｒ１」の項目に設定されたＩＤを設定する（Ｓ５０６）。
【０１３８】
そして、生成部１４ｅは、変数ＮｅｘｔＩＤに設定されたＩＤが「ＩＤ」の項目に登録された要件テーブル１３ｆのレコードを特定し、特定したレコードの「順序」の項目に、変数ｏｒｄｅｒの値を設定する（Ｓ５０７）。そして、生成部１４ｅは、変数ｏｒｄｅｒの値を１インクリメントする（Ｓ５０８）。
【０１３９】
そして、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、「Ｒ１」または「Ｒ２」の項目に設定されたＩＤが変数ＮｅｘｔＩＤに設定されたＩＤと一致するレコードの件数を算出する。そして、生成部１４ｅは、算出した件数が１件以上であるか否かを判定する（Ｓ５０９）。
【０１４０】
取得した件数が１件以上である場合（Ｓ５０９；Ｙｅｓ）には、生成部１４ｅは、次の処理を行う。すなわち、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、「Ｒ１」または「Ｒ２」の項目に設定されたＩＤが変数ＮｅｘｔＩＤに設定されたＩＤと一致するレコード群を抽出する。そして、生成部１４ｅは、抽出したレコード群を変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定する（Ｓ５１０）。
【０１４１】
そして、生成部１４ｅは、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコードの中から、変数ＮｅｘｔＲｅｃｏｒｄｓＴａｂｌｅに設定されたレコード群を除いたレコードを、変数ＲｅｓｔＲｅｃｏｒｄｓＴａｂｌｅに設定する（Ｓ５１１）。そして、生成部１４ｅは、Ｓ５０５に戻る。
【０１４２】
また、取得した件数が１件以上でない場合（Ｓ５０９；Ｎｏ）には、生成部１４ｅは、処理結果を制御部１４の内部メモリに格納し、リターンする。
【０１４３】
図１０の説明に戻り、生成部１４ｅは、有向グラフ生成処理を実行する（Ｓ１１０）。図１５は、実施例１に係る有向グラフ生成処理の手順を示すフローチャートである。図１５に示すように、生成部１４ｅは、要件テーブル１３ｆの全レコードのうち、変数ｊの値が「重要度」の項目に登録された複数のレコードを取得し、次の処理を行う。すなわち、生成部１４ｅは、取得したレコードの「順序」の項目に登録された順序をキーにして、取得した複数のレコードを昇順にソートする（Ｓ６０１）。
【０１４４】
続いて、生成部１４ｅは、変数Ｒｎｕｍに、取得した複数のレコードの件数を設定する（Ｓ６０２）。続いて、生成部１４ｅは、変数ｐに「１」を設定して、変数ｐの値を初期化する（Ｓ６０３）。
【０１４５】
そして、生成部１４ｅは、変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値（Ｒｎｕｍ＋１）よりも小さいか否かを判定する（Ｓ６０４）。変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値よりも小さい場合（Ｓ６０４；Ｙｅｓ）には、生成部１４ｅは、要件テーブル１３ｆのｐ番目のレコードの「ＩＤ」の項目に登録されたＩＤを、変数Ｒｉｄに設定する（Ｓ６０５）。
【０１４６】
そして、生成部１４ｅは、変数Ｒｉｄに設定されたＩＤ、及び、変数Ｒｉｄに設定されたＩＤによって識別される要件の名称を含むノードを生成する（Ｓ６０６）。続いて、生成部１４ｅは、生成したノードを有向グラフ１３ｇの末尾に追加することにより、有向グラフ１３ｇを更新する（Ｓ６０７）。続いて、生成部１４ｅは、変数ｐの値を１インクリメントし（Ｓ６０８）、Ｓ６０４に戻る。
【０１４７】
また、変数ｐの値が、変数Ｒｎｕｍの値に１を加えた値以上である場合（Ｓ６０４；Ｎｏ）には、生成部１４ｅは、処理結果を制御部１４の内部メモリに格納し、リターンする。
【０１４８】
図１０の説明に戻り、生成部１４ｅは、変数ｊの値を１デクリメントし（Ｓ１１１）、Ｓ１０４に戻る。また、第１の算出部１４ｂによりあると判定されたレコードの件数が２件以上でない場合（Ｓ１０６；Ｎｏ）には、生成部１４ｅは、あると判定されたレコードの「ＩＤ」の項目に登録されたＩＤ、及び、「要件名」の項目に登録された名称を含むノードを生成する。そして、生成部１４ｅは、生成したノードを有向グラフ１３ｇの末尾に追加することにより、有向グラフ１３ｇを更新し（Ｓ１１２）、Ｓ１１１へ進む。
【０１４９】
また、変数ｊの値が０以上でないと判定された場合（Ｓ１０４；Ｎｏ）には、設計部１４ｆは、有向グラフ１３ｇのノードの順番が示す要件の順番にしたがって、レベル受付画面を表示するように出力部１２の表示を制御する（Ｓ１１３）。
【０１５０】
そして、設計部１４ｆは、ユーザから要件のレベルが入力されたか否かを判定する（Ｓ１１４）。要件のレベルが入力されていない場合（Ｓ１１４；Ｎｏ）には、設計部１４ｆは、再び、Ｓ１１４の処理を行う。一方、要件のレベルが入力された場合（Ｓ１１４；Ｙｅｓ）には、設計部１４ｆは、入力されたレベルに対応するコンポーネントまたはコンポーネントの組み合わせを関連リスト１３ｃから取得する（Ｓ１１５）。そして、設計部１４ｆは、前回設定されたコンポーネントと、新たに取得されたコンポーネントとが矛盾するか否かを判定する（Ｓ１１６）。
【０１５１】
矛盾する場合（Ｓ１１６；Ｙｅｓ）には、設計部１４ｆは、新たに入力された要件のレベルを変更することを示すメッセージを表示するように出力部１２を制御する（Ｓ１１７）。そして、設計部１４ｆは、ユーザから変更後のレベルが入力されたか否かを判定する（Ｓ１１８）。変更後のレベルが入力されていない場合（Ｓ１１８；Ｎｏ）には、設計部１４ｆは、再び、Ｓ１１８の処理を行う。変更後のレベルが入力された場合（Ｓ１１８；Ｙｅｓ）には、設計部１４ｆは、Ｓ１１５に戻る。
【０１５２】
一方、矛盾しない場合（Ｓ１１６；Ｎｏ）には、設計部１４ｆは、前回設定されたコンポーネントに、新たに取得されたコンポーネントを追加して、新たにコンポーネントを設定する（Ｓ１１９）。そして、設計部１４ｆは、有向グラフ１３ｇのノードに含まれる全ての要件についてレベル受付画面を表示したか否かを判定する（Ｓ１２０）。全ての要件についてレベル受付画面を表示していない場合（Ｓ１２０；Ｎｏ）には、設計部１４ｆは、Ｓ１１３に戻る。一方、全ての要件についてレベル受付画面を表示した場合（Ｓ１２０；Ｙｅｓ）には、設計部１４ｆは、次の処理を行う。すなわち、設計部１４ｆは、設定されたコンポーネントの型番や仕様、ベンダなどをコンポーネントリスト１３ｂから取得し、取得した型番や仕様、ベンダなどを表示するように出力部１２を制御し（Ｓ１２１）、処理を終了する。
【０１５３】
上述してきたように、システム構成設計支援装置１０は、複数のコンポーネントを組み合わせて構成されるシステムの要件と、重要度とが対応付けられて登録された要件テーブル１３ｆの登録内容を参照し、同一の重要度が対応付けられた複数の要件を取得する。システム構成設計支援装置１０は、取得した複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次の処理を行う。すなわち、システム構成設計支援装置１０は、ペアとされた一方の要件が属するカテゴリと他方の要件が属するカテゴリとの類似度であるカテゴリ距離を算出する。システム構成設計支援装置１０は、取得した複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次のような処理を行う。すなわち、システム構成設計支援装置１０は、ペアとされた一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの類似度である使用コンポーネント距離を算出する。システム構成設計支援装置１０は、カテゴリ距離及び使用コンポーネント距離から算出された距離に基づいて、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。したがって、システム構成設計支援装置１０は、同一の重要度が対応付けられた複数の要件を提示する順序については、従来のシステム構成設計支援装置のようにユーザに問い合わせることなく、距離に基づいて決定する。それゆえ、システム構成設計支援装置１０によれば、システムを設計する際の作業効率の低下を抑制することができる。
【０１５４】
また、システム構成設計支援装置１０は、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。したがって、システム構成設計支援装置１０は、類似性が高く関連性があるような順序で要件を提示する。それゆえ、システム構成設計支援装置１０によれば、ユーザにとって検討しやすい順序で要件を提示することができる。
【０１５５】
また、システム構成設計支援装置１０は、カテゴリ距離と使用コンポーネント距離という２種類の距離からペアとされた要件間の距離を算出する。それゆえ、システム構成設計支援装置１０は、ペアごとの距離が異なる可能性が高くなるように、距離を算出する。したがって、システム構成設計支援装置１０によれば、同一の重要度が対応付けられた複数の要件に同一の順序が設定される可能性を低減させることができる。
【実施例２】
【０１５６】
次に、実施例２に係るシステム構成設計支援装置について説明する。実施例１では、あらかじめ算出された重要度が要件テーブル１３ｆに登録された場合について説明した。実施例２では、システム構成設計支援装置が、重要度を算出し、算出した重要度を要件テーブル１３ｆに登録する場合について説明する。
【０１５７】
図１６は、実施例２に係るシステム構成設計支援装置の機能構成の一例を示す図である。ここで、先の図１に示す実施例１に係るシステム構成設計支援装置１０と同様の機能構成については、同一の符号を付し、説明を省略する。
【０１５８】
［システム構成設計支援装置の機能構成］
図１６の例に示すように、システム構成設計支援装置７０の記憶部７３は、実施例１に係る記憶部１３が記憶する内容に加えて、更に、コンポーネント種別テーブル７３ａを記憶する。また、制御部７４は、実施例１に係る制御部１４が有する各部に加えて、第４の算出部７４ａを有する。
【０１５９】
コンポーネント種別テーブル７３ａは、コンポーネントの種別と、コンポーネントの区分を示す情報とを対応付けて記憶する。コンポーネントの区分を示す情報の一例としては、コンポーネントがハードウェア、ＯＳ（Operating  System）、ミドルウェア等のシステム基盤を実現するコンポーネントであることを示す情報が挙げられる。また、コンポーネントの区分を示す情報の他の例としては、コンポーネントが開発対象の業務アプリケーションであることを示す情報が挙げられる。図１７は、コンポーネント種別テーブルのデータ構造の一例を示す図である。図１７の例に示すように、コンポーネント種別テーブル７３ａは、「コンポーネント種別」及び「区分」の各項目を有する。「コンポーネント種別」の項目には、コンポーネントの種別が登録される。コンポーネントの種別の一例としては、ＡＰサーバ、ＤＢサーバ、ストレージ、アクセス権限機能、パスワード変更機能などが挙げられる。「区分」の項目には、「コンポーネント種別」の項目に登録された種別のコンポーネントが、システム基盤を実現するコンポーネントである場合には、「システム基盤」が登録される。また、「区分」の項目には、「コンポーネント種別」の項目に登録された種別のコンポーネントが、開発対象の業務アプリケーションである場合には、「業務アプリケーション」が登録される。図１７の例に示す１番目のレコードは、種別がＡＰサーバであるコンポーネントが、システム基盤を実現するコンポーネントであることを示す。また、図１７の例に示す２番目のレコードは、種別がＤＢサーバであるコンポーネントが、システム基盤を実現するコンポーネントであることを示す。また、図１７の例に示す３番目のレコードは、種別がストレージであるコンポーネントが、システム基盤を実現するコンポーネントであることを示す。また、図１７の例に示す４番目のレコードは、種別がアクセス権限機能であるコンポーネントが、開発対象の業務アプリケーションのコンポーネントであることを示す。また、図１７の例に示す５番目のレコードは、種別がパスワード変更機能であるコンポーネントが、開発対象の業務アプリケーションのコンポーネントであることを示す。
【０１６０】
図１６の説明に戻り、記憶部７３は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部７３は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ、ＲＯＭであってもよい。
【０１６１】
ここで、ある要件の適否に影響を及ぼす複数のコンポーネントの中に、システム基盤を実現するコンポーネント、及び、業務アプリケーションのコンポーネントの両方のコンポーンネントが含まれる場合について説明する。この場合に、ユーザによって指定されたレベルを満たすようにコンポーネントの組み合わせを設計することは、次の場合と比較して難易度が高い。すなわち、単に、システム基盤を実現するコンポーネント、または、業務アプリケーションのコンポーネントについて、ユーザによって指定されたレベルを満たすようにコンポーネントを設計する場合と比較して、難易度が高い。そこで、本実施例では、ある要件の適否に影響を及ぼす複数のコンポーネントの中に、上述した両方のコンポーンネントが含まれる場合には、両方が含まれていない場合に比べて、値が大きくなるように重要度を算出する。これにより、本実施例では、ある要件の適否に影響を及ぼす複数のコンポーネントの中に、上述した両方のコンポーンネントが含まれる場合には、両方が含まれていない場合に比べて、優先的に要件を満たすことができる。
【０１６２】
第４の算出部７４ａは、ある要件の適否に影響を及ぼすコンポーネントについて、ハードウェアであるかまたはアプリケーションであるかを示す種類が同一でない場合には、コンポーネントの種類が同一である場合よりも大きな値となるように重要度を算出する。そして、第４の算出部７４ａは、算出した重要度を要件テーブル１３ｆに登録する。
【０１６３】
第４の算出部７４ａによる重要度の算出方法の一例について説明する。第４の算出部７４ａは、要件テーブル１３ｆ及びコンポーネント種別テーブル７３ａを参照し、下記の式（４）に従って、要件Ｒの重要度を示す重要度（Ｒ）を算出する。
重要度（Ｒ）＝Ｗ（Ｇ（Ｒ））×Ｅ（Ｇ（Ｒ））
＝Ｗ（Ｇ（Ｒ））×｛Ｅ（Ｃ１）＋・・・＋Ｅ（Ｃｎ）｝  （４）
【０１６４】
ここで、Ｅ（Ｃ）は、コンポーネントＣによって影響を受ける要件の数を示す。例えば、先の図６の例では、ＡＰサーバは、７つの要件の適否に影響を及ぼす。そのため、Ｅ（ＡＰサーバ）＝７となる。また、Ｇ（Ｒ）は、要件Ｒによって影響を受けるコンポーネントの種別の集合である。例えば、先の図６の例では、名称が「運用時間（通常）」である要件は、ＡＰサーバ、ＤＢサーバ及びストレージという３つのコンポーネントに影響を与える。そのため、Ｇ（運用時間（通常））＝｛ＡＰサーバ，ＤＢサーバ，ストレージ｝となる。また、Ｅ（｛Ｃ１，Ｃ２，・・・，Ｃｎ｝）＝Ｅ（Ｃ１）＋・・・＋Ｅ（Ｃｎ）とする。また、関数Ｗに次のような関数である。例えば、Ｇ（Ｒ）が示す集合に含まれる全てのコンポーネントの区分が同一である場合には、Ｗ（Ｇ（Ｒ））＝α、例えば、「１」となる。また、Ｇ（Ｒ）が示す集合に含まれるコンポーネントの区分が同一でない場合には、Ｗ（Ｇ（Ｒ））＝βとなる。ここで、βはαよりも大きい数で、例えば、「１０」である。
【０１６５】
そして、第４の算出部７４ａは、要件テーブル１３ｆの「重要度」の項目に、算出した重要度を登録する。第４の算出部７４ａは、上述した処理を、要件テーブル１３ｆの全てのレコードに対して行って、要件テーブル１３ｆの全てのレコードの「重要度」の項目に重要度を登録する。
【０１６６】
制御部７４は、ＡＳＩＣ、ＦＰＧＡ、ＣＰＵ、ＭＰＵなどの回路である。
【０１６７】
［処理の流れ］
次に、本実施例に係るシステム構成設計支援装置７０の処理の流れについて説明する。図１８は、実施例２に係るシステム構成設計支援処理の手順を示すフローチャートである。実施例２に係るシステム構成設計支援処理は、実施例１に係るシステム構成設計支援処理と同様のタイミングで実行される。また、下記の説明では、実施例１に係るシステム構成設計支援処理と同様のステップの処理については、実施例１と同一のステップの番号を付し、説明を省略する。
【０１６８】
図１８に示すように、第４の算出部７４ａは、要件テーブル１３ｆ及びコンポーネント種別テーブル７３ａを参照し、上記の式（４）に従って、要件Ｒの重要度を示す重要度（Ｒ）を要件テーブル１３ｆのレコードごとに算出する。そして、第４の算出部７４ａは、要件テーブル１３ｆの全てのレコードの「重要度」の項目に重要度を登録する（Ｓ７０１）。そして、Ｓ１０１に進む。
【０１６９】
上述してきたように、システム構成設計支援装置７０は、コンポーネントを組み合わせて構成されるシステムの要件と、重要度とが対応付けられて登録された要件テーブル１３ｆの登録内容を参照し、同一の重要度が対応付けられた複数の要件を取得する。システム構成設計支援装置７０は、取得した複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次の処理を行う。すなわち、システム構成設計支援装置７０は、ペアとされた一方の要件が属するカテゴリと他方の要件が属するカテゴリとの類似度であるカテゴリ距離を算出する。システム構成設計支援装置７０は、取得した複数のレコードが示す複数の要件、及び、有向グラフ１３ｇの末尾のノードが示す要件の集合の中から取り得る全ての要件のペアについて、次のような処理を行う。すなわち、システム構成設計支援装置７０は、ペアとされた一方の要件の適否に影響を及ぼすコンポーネントと他方の要件の適否に影響を及ぼすコンポーネントとの類似度である使用コンポーネント距離を算出する。システム構成設計支援装置７０は、カテゴリ距離及び使用コンポーネント距離から算出された距離に基づいて、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。したがって、システム構成設計支援装置７０は、同一の重要度が対応付けられた複数の要件を提示する順序については、従来のシステム構成設計支援装置のようにユーザに問い合わせることなく、距離に基づいて決定する。それゆえ、システム構成設計支援装置７０によれば、システムを設計する際の作業効率の低下を抑制することができる。
【０１７０】
また、システム構成設計支援装置７０は、類似性が高い要件のペアほど、ペアとされたそれぞれの要件が提示される順序が近くなるように、要件を提示する順序を決定する。したがって、システム構成設計支援装置７０は、類似性が高く関連性があるような順序で要件を提示する。それゆえ、システム構成設計支援装置７０によれば、ユーザにとって検討しやすい順序で要件を提示することができる。
【０１７１】
また、システム構成設計支援装置７０は、カテゴリ距離と使用コンポーネント距離という２種類の距離からペアとされた要件間の距離を算出する。それゆえ、システム構成設計支援装置７０は、ペアごとの距離が異なる可能性が高くなるように、距離を算出する。したがって、システム構成設計支援装置７０によれば、同一の重要度が対応付けられた複数の要件に同一の順序が設定される可能性を低減させることができる。
【０１７２】
また、システム構成設計支援装置７０は、ある要件の適否に影響を及ぼす複数のコンポーネントの中に、区分が「システム基盤」及び「業務アプリケーション」の両方の区分のコンポーンネントが含まれる場合には、次の処理を行う。すなわち、システム構成設計支援装置７０は、両方の区分のコンポーネントが含まれていない場合に比べて、値が大きくなるように重要度を算出する。これにより、システム構成設計支援装置７０は、ある要件の適否に影響を及ぼす複数のコンポーネントの中に、上述した両方のコンポーンネントが含まれる場合には、両方が含まれていない場合に比べて、優先的に要件を満たすことができる。
【０１７３】
さて、これまで開示の装置に関する各実施例について説明したが、本発明は上述した各実施例以外にも、種々の異なる形態にて実施されてよいものである。例えば、各実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、各実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【０１７４】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【０１７５】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【０１７６】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１７７】
［システム構成設計支援プログラム］
また、上記の各実施例で説明したシステム構成設計支援装置１０，７０の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図１９を用いて、上記の各実施例で説明したシステム構成設計支援装置１０，７０と同様の機能を有するシステム構成設計支援プログラムを実行するコンピュータの一例を説明する。図１９は、システム構成設計支援プログラムを実行するコンピュータを示す図である。
【０１７８】
図１９に示すように、コンピュータ３００は、ＣＰＵ３１０、ＲＯＭ３２０、ＨＤＤ（Hard  Disk  Drive）３３０、ＲＡＭ３４０を有する。これら各機器３１０〜３４０は、バス３５０を介して接続されている。
【０１７９】
ＲＯＭ３２０には、ＯＳなどの基本プログラムが記憶されている。また、ＨＤＤ３３０には、上記の実施例１で示す各部１４ａ〜１４ｆと同様の機能を発揮するシステム構成設計支援プログラム３３０ａが予め記憶される。または、ＨＤＤ３３０に、上記の実施例２で示す各部１４ａ〜１４ｆ、７４ａと同様の機能を発揮するシステム構成設計支援プログラム３３０ａが予め記憶される。なお、システム構成設計支援プログラム３３０ａについては、適宜分離しても良い。また、ＨＤＤ３３０には、記憶部１３または記憶部７３に記憶された各リスト、各テーブル、有向グラフが設けられる。
【０１８０】
そして、ＣＰＵ３１０が、システム構成設計支援プログラム３３０ａをＨＤＤ３３０から読み出して実行する。
【０１８１】
そして、ＣＰＵ３１０は、各リスト、各テーブル、有向グラフを読み出してＲＡＭ３４０に格納する。さらに、ＣＰＵ３１０は、ＲＡＭ３４０に格納された各リスト、各テーブル、有向グラフを用いて、システム構成設計支援プログラム３３０ａを実行する。なお、ＲＡＭ３４０に格納されるデータは、常に全てのデータがＲＡＭ３４０に格納されなくともよい。処理に用いられるデータがＲＡＭ３４０に格納されれば良い。
【０１８２】
なお、上記したシステム構成設計支援プログラム３３０ａについては、必ずしも最初からＨＤＤ３３０に記憶させておく必要はない。
【０１８３】
例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にシステム構成設計支援プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらからシステム構成設計支援プログラム３３０ａを読み出して実行するようにしてもよい。  
【０１８４】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３００に接続される「他のコンピュータ（またはサーバ）」などにシステム構成設計支援プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらからシステム構成設計支援プログラム３３０ａを読み出して実行するようにしてもよい。
【符号の説明】
【０１８５】
１０      システム構成設計支援装置
１１      入力部
１２      出力部
１３      記憶部
１３ａ    要件リスト
１３ｂ    コンポーネントリスト
１３ｃ    要件−コンポーネント関連リスト
１３ｄ    影響リスト
１３ｅ    要件間距離内部テーブル
１３ｆ    要件テーブル
１３ｇ    有向グラフ
７３ａ    コンポーネント種別テーブル
７４ａ    第４の算出部
【図１】
2014199620.tif 000003
【図２】
2014199620.tif 000004
【図３】
2014199620.tif 000005
【図４Ａ】
2014199620.tif 000006
【図４Ｂ】
2014199620.tif 000007
【図４Ｃ】
2014199620.tif 000008
【図５】
2014199620.tif 000009
【図６】
2014199620.tif 000010
【図７】
2014199620.tif 000011
【図８】
2014199620.tif 000012
【図９】
2014199620.tif 000013
【図１０】
2014199620.tif 000014
【図１１】
2014199620.tif 000015
【図１２】
2014199620.tif 000016
【図１３】
2014199620.tif 000017
【図１４】
2014199620.tif 000018
【図１５】
2014199620.tif 000019
【図１６】
2014199620.tif 000020
【図１７】
2014199620.tif 000021
【図１８】
2014199620.tif 000022
【図１９】
2014199620.tif 000023