(57)【要約】【課題】熟練していない設計者でもデザインパターンが適用可能なソフトウェア設計支援装置を提供すること。【解決手段】ＵＭＬで規定された表記法を用いた各種ソフトウェア設計図を入力するための手段と、設計図の記述を支援するための手段と、入力された設計図を記憶装置に格納する手段と、記述された設計図から詳細な設計部品毎の情報を取り出す手段を有し、設計者が入力したクラス図及びシーケンス図から必要情報を抽出し、ソフトウェアデザインパターンの１つであるＦａｃａｄｅパターンが適用可能であるか自動的に判定を行う手段を備えたことを特徴とする。【選択図】図１
2006221293.tif 000002
【特許請求の範囲】
【請求項１】
ＵＭＬで規定された表記法を用いた各種ソフトウェア設計図を入力するための手段と、設計図の記述を支援するための手段と、入力された設計図を記憶装置に格納する手段と、記述された設計図から詳細な設計部品毎の情報を取り出す手段を有し、設計者が入力したクラス図及びシーケンス図から必要情報を抽出し、ソフトウェアデザインパターンの１つであるＦａｃａｄｅパターンが適用可能であるか自動的に判定を行う手段を備えたことを特徴とするソフトウェア設計支援装置。
【請求項２】
前記判定手段は、クラス図において各クラスが所属するパッケージの情報、クラスの関連情報、クラスのオペレーション情報及びシナリオ毎のシーケンス図におけるイベントの送信情報から判定されることを特徴とする請求項１記載のソフトウェア設計支援装置。
【請求項３】
前記判定手段においてＦａｃａｄｅパターンの適用が可能であると判定された場合は、Ｆａｃａｄｅパターンが適用されたクラス図及びシーケンス図を自動的に作成する手段を備えたことを特徴とする請求項１記載のソフトウェア設計支援装置。
【請求項４】
前記判定手段においてＦａｃａｄｅパターンの適用が可能であると判定された場合は、設計者に通知を行い、設計者がＦａｃａｄｅパターンの適用を行うと判断した場合にのみＦａｃａｄｅパターンが適用されたクラス図及びシーケンス図を作成する手段を備えたことを特徴とする請求項１記載のソフトウェア設計支援装置。
【請求項５】
上記請求項１〜４の何れかに記載のソフトウェア設計支援装置をコンピュータ上で動作させるための記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア設計にデザインパターンを自動的に適用するための支援装置及び記憶媒体に関するものである。
【背景技術】
【０００２】
近年、デジタル複合機等の組み込みソフトウェア開発の分野も、多機能化や大規模化が進んでいる。そのため、保守性や再利用性を高めるためにオブジェクト指向開発が導入されつつある。オブジェクト指向設計手法を用いたソフトウェア開発では一般に、ＵＭＬ（Unified Modeling Language ）と呼ばれる表記法を用いて様々な設計図を記述することになる。
【０００３】
しかし、保守性や再利用性に優れた設計ができるようになるためには熟練を要する。即ち、オブジェクト指向分析・設計手法に基づいてＵＭＬで規定された表記法で設計図を作成しても設計の質までが保証される訳ではない。
【０００４】
オブジェクト指向設計の分野では、優れた設計ノウハウをパターン化し、再利用し易い形式でまとめようとする動きがある。このパターン化された設計ノウハウは「デザインパターン」と呼ばれている（例えば、非特許文献１）。即ち、デザインパターンとは、オブジェクト指向分析・設計手法に基づいて開発されたソフトウェア開発において重要で且つ繰り返し現れる設計に体系的に名前付けし、説明を加えたものである。
【０００５】
従来の技術としてデザインパターンを利用してソフトウェア仕様書を作成する装置（特許文献１）やデザインパターンの適用が適切かどうかを判別する装置（特許文献２）等が開示されているが、これら方式では予め適用するデザインパターンを設計者が指定し、それに沿った設計を行わなければならない。その結果、作成された設計図が適用したデザインパターンの意図に沿っているかを検証可能な装置であるが、適用可能なデザインパターンを選定するためには熟練を要するため、非熟練者が利用するためにはデザインパターンのメリットを生かし切れない可能性がある。
【０００６】
【特許文献１】特開平９−２３７１８０号公報
【特許文献２】特開平９−１９８２４２号公報
【非特許文献１】「オブジェクト指向における再利用のためのデザインパターン」、ソフトバンク、1995、E.Gamma 他著
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ａ）デザインパターンをオブジェクト指向設計に適用するためには、設計者の熟練や経験が必要となるため非熟練者が適用するためには難易度が高い。このため、設計者が入力した設計情報から、Ｆａｃａｄｅパターンが適用可能な個所を検出し自動適用してくれることを目的とする。Ｆａｃａｄｅパターンを適用することでソフトウェア部品を他のソフトウェア部品やクライアントから切り離すことが可能になり、独立性や移植性に優れた設計が可能になる。
【０００８】
ｂ）非熟練者がこの装置を使用することでデザインパターンの適用例や、良い設計について学ぶことが出来ることを目的とする。
【０００９】
本発明は、上記問題に鑑みてなされたもので、上記従来例の欠点を解決して、熟練していない設計者でもデザインパターンが適用可能なソフトウェア設計支援装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、請求項１記載の発明は、ＵＭＬで規定された各種ソフトウェア設計図を入力するための手段と、設計図の記述を支援するための手段と、入力された設計図を記憶装置に格納する手段と、記述された設計図から詳細な設計部品毎の情報を取り出す手段を有し、設計者が入力したクラス図及びシーケンス図から必要情報を抽出し、ソフトウェアデザインパターンの１つであるＦａｃａｄｅパターンが適用可能であるか自動的に判定を行うことが可能であるのでソフトウェア設計の非熟練者であってもソフトウェアデザインパターンが適用可能であるか判定を行うことができる。
【００１１】
請求項２の発明は、請求項１記載のソフトウェア設計支援装置において、クラス図における各クラスが所属するパッケージの情報、クラスの関連情報、クラスのオペレーション情報及びシナリオ毎のシーケンス図におけるイベントの送信情報から判定されることが可能であるので自動的にＦａｃａｄｅパターンの適用が判定できる。
【００１２】
請求項３の発明は、請求項１記載のソフトウェア設計支援装置おいて、判定手段がＦａｃａｄｅパターンの適用が可能であると判定された場合に、Ｆａｃａｄｅパターンが適用されたクラス図及びシーケンス図を自動的に作成することによりソフトウェア設計の非熟練者であってもＦａｃａｄｅパターンが適用された設計図を作成することができる。
【００１３】
請求項４の発明は、請求項１記載のソフトウェア設計支援装置おいて、前記判定手段でＦａｃａｄｅパターンの適用が可能であると判定された場合に、設計者に通知を行い、設計者がＦａｃａｄｅパターンの適用を行うと判断した場合にのみＦａｃａｄｅパターンが適用されたクラス図及びシーケンス図を作成することにより、設計者が必要であると判断した設計図のみを作成することができる。
【００１４】
請求項５の発明は、請求項１記載のソフトウェア設計支援装置をコンピュータ上で動作させることが可能になる。
【発明の効果】
【００１５】
請求項１記載の発明によれば、ＵＭＬで規定された各種ソフトウェア設計図を入力するための手段と、設計図の記述を支援するための手段と、入力された設計図を記憶装置に格納する手段と、記述された設計図から詳細な設計部品毎の情報を取り出す手段を有し、設計者が入力したクラス図及びシーケンス図から必要情報を抽出し、ソフトウェアデザインパターンの１つであるＦａｃａｄｅパターンが適用可能であるか自動的に判定を行うことが可能であるので、ソフトウェア設計の非熟練者であってもソフトウェアデザインパターンが適用可能であるか判定を行うことができるとともに、良い設計について学ぶことができるという効果が得られる。
【００１６】
請求項２の記載の発明によれば、請求項１記載のソフトウェア設計支援装置において、クラス図における各クラスが所属するパッケージの情報、クラスの関連情報、クラスのオペレーション情報及びシナリオ毎のシーケンス図におけるイベントの送信情報から判定されることが可能であるので、自動的にＦａｃａｄｅパターンの適用が判定できる。
【００１７】
請求項３記載の発明によれば、請求項１記載のソフトウェア設計支援装置おいて、判定手段がＦａｃａｄｅパターンの適用が可能であると判定された場合に、Ｆａｃａｄｅパターンが適用されたクラス図及びシーケンス図を自動的に作成することによりソフトウェア設計の非熟練者であってもＦａｃａｄｅパターンが適用された設計図を作成することができるとともに、良い設計について学ぶことができるという効果が得られる。
【００１８】
請求項４記載の発明によれば、請求項１記載のソフトウェア設計支援装置おいて、前記判定手段でＦａｃａｄｅパターンの適用が可能であると判定された場合に、設計者に通知を行い、設計者がＦａｃａｄｅパターンの適用を行うと判断した場合にのみＦａｃａｄｅパターンが適用されたクラス図及びシーケンス図を作成することにより、設計者が必要であると判断した設計図のみを作成することができるという効果が得られる。
【００１９】
請求項５記載の発明によれば、請求項１記載のソフトウェア設計支援装置をコンピュータ上で動作させることが可能になるという効果が得られる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態を、ソフトウェア設計支援装置においてＦａｃａｄｅパターンの適用を支援する方法について説明する。
【００２１】
図１は本発明に係るソフトウェア設計支援装置の概観を示す図である。尚、ＵＭＬで規定されたダイアグラムを用いてオブジェクト指向設計図を作成するためのＵＭＬモデルエディタについては公知の技術であるため、詳細な説明は行わない。
【００２２】
Ｄ１は全体を示すものであり、Ｄ２〜Ｄ５で構成される。Ｄ２は実際に設計図を記述するための描画領域であり、例えばクラス図を記述する場合はクラス図用に、シーケンス図を記述する場合はシーケンス図用と適宜切り替わる。Ｄ３はＵＭＬダイアグラムが格納されているツールボックスであり、例えばクラス図を記述する場合はクラス図用のアイコンが並び、シーケンス図を記述する場合はシーケンス図用のアイコンが並ぶ。
【００２３】
設計者が描画領域D2に図を記述する場合は、このツールボックスＤ３からアイコンを選択し、描画領域D2に配置する。Ｄ４は作成された設計図の情報を一元管理及び表示するためのブラウズ領域である。新しい図を作成する場合や、既に記述した図を切り替えたりする場合はここで行う。ブラウズ領域で図が切り替えられた場合は、それに応じて描画領域Ｄ２及びツールボックスＤ３も切り替わる。更に、ブラウズ領域Ｄ３では、記述された設計図の詳細情報、例えばクラス図におけるクラス間の関連線の関連元クラス名、関連先クラス名、関連の方向、関連名等も管理されている。Ｄ５はログを表示するためのログ表示部である。設計者の操作結果等が適宜表示される。又、設計者が何らかの判断を行わなければならないときもログ表示部Ｄ５に選択肢が表示される。
【００２４】
図２は実施の形態に係るソフトウェア設計支援装置の機能構成を示すブロック図である。
【００２５】
図２において、Ｅ１は設計者から入力されたシナリオ毎のシーケンス図の保持部である。Ｅ２は設計者から入力されたクラス図情報の保持部である。Ｅ３は図３に示すフォーマットで記述されるパッケージに存在するクラスの対応テーブル（Ｅ４）及び図４に示すフォーマットで記述されるクラスが保持するオペレーションとの対応テーブル（Ｅ５）を作成するための装置である。Ｅ６は各パッケージに所属するクラスが受信するイベントを抽出し、図５に示すフォーマットで記述されるパッケージ／イベント対応テーブル（Ｅ９）を作成する装置である。Ｅ７はパッケージに所属するクラスが外部パッケージに所属するクラスから参照される関連を抽出し、図６示すフォーマットで記述されるパッケージ／関連対応テーブル（Ｅ１１）を作成する装置である。
【００２６】
Ｅ８はシナリオ毎にやり取りされるイベントを抽出し、図７に示すフォーマットで記述されるシナリオ／イベント対応テーブル（Ｅ１２）を作成する装置である。Ｅ１０はＥ９とＥ１１よりパッケージ毎にＦａｃａｄｅパターンが適用可能であるか判定を行い、図８に示すフォーマットで記述されるＦａｃａｄｅパターン適用判定結果格納テーブル（Ｅ１３）を作成する装置である。Ｅ１４はＥ４，Ｅ５，Ｅ６に基づいてＦａｃａｄｅクラスを作成する装置であり、Ｅ１５とＥ１６を作成する。
【００２７】
Ｅ１８はＥ１１にＦａｃａｄｅクラスを反映させてＥ１７を作成する装置である。Ｅ１９はＥ１７に基づいてＦａｃａｄｅパターンを適用したクラス図を出力装置に表示するための装置である。Ｅ２２はＥ１２にＦａｃａｄｅクラスを反映させてＥ２１を作成するための装置である。Ｅ２０はＥ２１に基づいてＦａｃａｄｅパターンを適用したシーケンス図を作成出力装置に表示するための装置である。
【００２８】
図９は図１のソフトウェア設計支援装置において入力された設計情報に対してＦａｃａｄｅパターンを自動適用するまでの処理を示すフローチャートである。
【００２９】
Ｓ１によって設計者からクラス図及びシナリオ毎に分けられたシーケンス図等の設計情報が入力さる。作成されるクラス図の例を図２１に、シーケンス図の例を図２２にそれぞれ示す。
【００３０】
Ｓ２では入力された設計情報の中からＦａｃａｄｅパターンを自動適用するために必要な情報を抽出し各種テーブルを作成する。各種テーブルの例を図２３〜図２６に示す。その詳細なアルゴリズムは図１０〜図１４に示す。Ｓ３では、Ｓ２により作成されたテーブル情報に基づいてＦａｃａｄｅパターンが適用可能であるかをパッケージ単位で判定を行う。その詳細なアルゴリズムは図１５に示す。Ｓ４では、Ｓ３の判定結果に基づいてパッケージ毎にＦａｃａｄｅクラスを自動作成し、適用されたクラス図及びシーケンス図を生成して表示する。その詳細なアルゴリズムは図１６〜図２０に示す。本装置を利用して自動的にＦａｃａｄｅパターンが適用されたクラス図及びシーケンス図の例を図３３〜図３４に示す。
【００３１】
図１０はクラス図情報E2からパッケージ／クラス対応テーブルE4の作成を行うパッケージ／クラス対応テーブル作成装置Ｅ３の詳細アルゴリズムを示すフローチャートである。
【００３２】
Ｓ５では、パッケージ／クラス対応テーブルＥ４を新規作成する。Ｓ６では、或るクラスについて所属するパッケージをクラス図Ｅ２より取得し、Ｐnameという変数に格納する。Ｓ７〜Ｓ８では、パッケージ／クラス対応テーブルＥ４のパッケージ名の列でＰnameを検索し、もし見つからない場合は新規にＰnameというパッケージ名を要素として追加する。Ｓ９では、現在処理中のクラス名をＰname行に追加する。Ｓ６〜Ｓ９を全てのクラスについて行うことによってパッケージ／クラス対応テーブルが完成する。図２１に示すクラス図の例から作成されるパッケージ／クラス対応テーブルＥ４の例を図２３に示す。
【００３３】
図１１はクラス図Ｅ２からクラス／オペレーション対応テーブルE5を作成するクラス／オペレーション対応テーブル作成装置Ｅ３の詳細アルゴリズムを示すフローチャートである。
【００３４】
Ｓ９では、クラス／オペレーション対応テーブルＥ５を新規作成する。Ｓ１０〜Ｓ１３では、クラス／オペレーション対応テーブルＥ５のクラス名の項目に処理中のクラス名を追加し、オペレーション名の項目に処理中のクラスが持つ全てのオペレーション名を追加する。これらの処理をクラス図Ｅ２上の全てのクラスについて行うことによってクラス／オペレーション対応テーブルＥ５が完成する。図２１に示すクラス図の例から作成されるクラス／オペレーション対応テーブルＥ５の例を図２４に示す。
【００３５】
図１２はパッケージ／イベント対応テーブルＥ９を作成するパッケージ／関連対応テーブル作成装置Ｅ７の詳細アルゴリズムを示すフローチャートである。
【００３６】
Ｓ１４では、パッケージ／イベント対応テーブルＥ９を新規作成する。その後、シナリオ毎のシーケンス図Ｅ１のシナリオ毎にループを回し、それぞれについて次の処理を行う。Ｓ１５では、シーケンス図Ｅ１の時系列毎（上から順番）にイベントを探し出し、見つかったイベントについてイベント名をEVName、送信元のクラス名をSrcClass、送信先のクラス名をDstClassに格納する。Ａ１６では、Ｓ１５においてDstClassという変数に記録されたクラス名をパッケージ／クラス対応テーブルのクラス名の列で検索し、見つかったクラスが所属するパッケージ名をＰnameという変数に格納する。
【００３７】
Ｓ１７では、Ｓ１６においてＰnameに格納したパッケージ名をパッケージ／イベント対応テーブルＥ６のパッケージ名の列で検索を行う。その結果、Ｐnameが存在した場合はその行をアクティブにする。もし、Ｐnameが存在しなかった場合は、Ｓ１８において、パッケージ／イベント対応テーブルのパッケージ名の列にＰnameを新規追加し、その行をアクティブにする。Ｓ１９では、パッケージ／イベント対応テーブルＥ６において現在アクティブになっている行のイベント名の項目に新たにEVNameを、送信元クラスの項目にSrcClassを、送信先クラスの項目にDstClassをそれぞれ新規追加する。Ｓ１５〜Ｓ１９の処理を全てのシナリオ毎のシーケンス図Ｅ１について行うことでパッケージ／イベント対応テーブルＥ９が完成する。図２１に示すクラス図の例及び図２２に示すシナリオ毎のシーケンス図の例から作成されるパッケージ／イベント対応テーブルＥ９の例を図２５に示す。
【００３８】
図１３はパッケージ／関連対応テーブルＥ１１を作成するパッケージ／関連対応テーブル作成装置Ｅ７の詳細アルゴリズムを示すフローチャートである。
【００３９】
Ｓ２０では、パッケージ／関連対応テーブルＥ１１を新規作成する。Ｓ２１以降は、パッケージ／クラス対応テーブルＥ４に記録されたパッケージ毎のループ（処理中のパッケージ名をＰnameという変数に格納）の中でそのパッケージに所属するクラス毎のループ（処理中のクラス名をDstClassという変数に格納）が回される。更に、DstClassのクラスがクラス図Ｅ２上で持っている関連毎にループが回される。Ｓ２１では、現在処理中の関連名をACNameに、関連の相手クラスの名前をSrcClassという変数にそれぞれ格納する。Ｓ２２では、処理中の関連が双方向であるかを調べる。                  Ｓ２３では、Ｓ２２の結果を判別する。Ｓ２３の結果が双方向であった場合は、Ｓ２４でパッケージ／関連対応テーブルの所属パッケージの列でＰnameを検索する。Ｓ２５においてＳ２４の結果を判別し、見つからなかった場合はＳ２６でパッケージ／関連対応テーブルＥ１１の所属パッケージの列に新たにＰnameを追加する。
【００４０】
Ｓ２７では、パッケージ／関連対応テーブルの所属パッケージがＰnameの項目に新しい行を追加し、関連名の項目にACNameを関連元クラスの項目にSrcClassを関連先クラスの項目にDstClassを双方向の項目に○を記入する。Ｓ２８は、Ｓ２３の判定結果がＮｏの時に行われるものであり、関連の方向がSrcClassからDstClassの方向であるかを調べる。Ｓ２９では、Ｓ２８の結果を判別し、もしＮｏの場合は現在処理中の関連のループから抜ける。Ｓ２９の結果がＹｅｓであった場合は、Ｓ３０でパッケージ／関連対応テーブルＥ１１の所属パッケージの列でＰnameを検索する。Ｓ３１においてＳ３０の結果を判別し、見つからなかった場合はＳ３２でパッケージ／関連対応テーブルの所属パッケージの列に新たにＰnameを追加する。
【００４１】
Ｓ３３では、パッケージ／関連対応テーブルの所属パッケージがＰnameの項目に新しい行を追加し、関連名の項目にACNameを関連元クラスの項目にSrcClassを関連先クラスの項目にDstClassを双方向の項目に×を記入する。Ｓ２２〜Ｓ３３の処理を全ての関連について繰り返すことでパッケージ／関連対応テーブルが完成する。図２３に示すパッケージ／クラス対応テーブルから作成される。図２３に示すパッケージ／クラス対応テーブルの例から作成されるパッケージ／関連対応テーブルの例を図２６に示す。
【００４２】
図１４はシナリオ／イベント対応テーブルＥ１２を作成するためのシナリオ／イベント対応テーブル作成装置Ｅ８の詳細アルゴリズムを示すフローチャートである。
【００４３】
Ｓ３４では、シナリオ／イベント対応テーブルＥ１２を新規作成する。Ｓ３５以降は未処理のシナリオ毎のシーケンス図Ｅ１がある限り繰り返される。Ｓ３５では、シナリオ／イベント対応テーブルｅ１２に新規シナリオ行を追加し、その行を選択する。Ｓ３６以降はシナリオ毎のシーケンス図Ｅ１に未処理のイベントがある限り繰り返される。Ｓ３６では、シナリオ毎のシーケンス図Ｅ１で未処理且つ時系列的に先頭（一番上）のイベントを検索して、イベント名をEVName、送信元クラス名をSrcClass、送信先クラスをDstClassという変数に格納する。
【００４４】
Ｓ３７では、シナリオ／イベント対応テーブルＥ１２で現在選択されているシナリオに新たな行を追加し、イベント名の項目にEVNameを送信元クラスの項目にSrcClassを送信先クラスの項目にDstClassを記入する。Ｓ３５〜Ｓ３７を繰り返すことでシナリオ／イベント対応テーブルＥ１２が完成する。図２２に示すシナリオ毎のシーケンス図の例から作成されるシナリオ／イベント対応テーブルの例を図２７に示す。
【００４５】
図１５は設計者が入力したモデルにＦａｃａｄｅパターンが適用可能であるか判定するＦａｃａｄｅクラス適用判定装置Ｅ１０の詳細を示したフローチャートである。
【００４６】
Ｓ３８では、Ｆａｃａｄｅパターン適用判定結果テーブルＥ１３を新規作成する。Ｓ３９以降は、パッケージ／イベント対応テーブルＥ９のパッケージ名列に未処理のパケージがある限り繰り返される。現在処理中のパッケージ名ををＰnameという変数に格納する。Ｓ３９では、パッケージ／イベント対応テーブルＥ９のパッケージ名の列がＰnameの項目のイベント数をカウントしてevCnt
という変数に格納する。Ｓ４０では、パッケージ／関連対応テーブルＥ１１のパッケージ名の列においてＰnameの項目を検索し、対応する関連数をカウントしてaccCntという変数に格納する。
【００４７】
Ｓ４１では、evCnt が２以上且つaccCntが２以上であるかを判別する。Ｓ４２はＳ４１の判別結果がＹｅｓだった場合に行われる処理であり、Ｆａｃａｄｅパターン適用判定結果テーブルＥ１３のパッケージ名の列にＰnameを追加し、Ｆａｃａｄｅクラス作成の可否の項目に○を記入する。Ｓ４３は、Ｓ４１の判別結果がＮｏだった場合に行われる処理であり、Ｆａｃａｄｅパターン適用判定結果テーブルＥ１３のパッケージ名の列にＰnameを追加し、Ｆａｃａｄｅクラス作成の可否の項目に×を記入する。
【００４８】
図２５に示すパッケージ／イベント対応テーブルの例及び図２６に示すパッケージ／関連対応テーブルの例から作成されるパターン適用判定結果テーブルの例を図２８に示す。
【００４９】
図１６はＦａｃａｄｅパターンが適用可能なパッケージに対してＦａｃａｄｅクラスを作成するＦａｃａｄｅクラス作成装置Ｅ１４の詳細アルゴリズムを示すフローチャートである。
【００５０】
先ず、パッケージ／クラス対応テーブルＥ４を開きパッケージ名の列に記述されているパッケージ数分ループを回す。このとき、ループ変数Ｐnameにパッケージ名を格納する。Ｓ４４では、Ｆａｃａｄｅパターン適用判定結果テーブルＥ１３を開き、パッケージ名の列からＰnameの項目を検索する。そして、Ｆａｃａｄｅクラス作成の可否列の○×から該当するパッケージがＦａｃａｄｅパターン適用可能であるか判断する。
【００５１】
Ｓ４５によってその判断が行われ、もし可能であると判断された場合はＳ４６の処理に進む。もしＦａｃａｄｅクラスの作成が不可と判断された場合は次のパッケージに処理が進む。Ｓ４６では、パッケージ／クラス対応テーブルＥ４を書き換えることにより、Ｆａｃａｄｅクラス適用後パッケージ／クラス対応テーブルＥ１５を作成する。その処理内容としてはＰnameに対応したクラス名の列にＰnameと同じ名前のクラスの追加を行う。
【００５２】
Ｓ４７では、クラス／オペレーション対応テーブルＥ５を書き換えることにより、Ｆａｃａｄｅクラス適用後クラス／オペレーション対応テーブルＥ１６を作成する。その処理内容とクラス名の列にＰnameと同じ名前のクラス名を追加する。図２３に示すパッケージ／クラス対応テーブルの例及び図２４に示すクラス／オペレーション対応テーブルの例及び図２８に示すＦａｃａｄｅパターン判定結果の例から作成されるＦａｃａｄｅクラス適用後のパッケージ／クラス対応テーブルの例を図２９に、Ｆａｃａｄｅクラス適用後のクラス／オペレーション対応テーブルの例を図３０にそれぞれ示す。
【００５３】
図１７はシナリオ／イベント対応テーブルＥ１２をＦａｃａｄｅパターンに対応させる装置Ｅ２２の詳細アルゴリズムを示すフローチャートである。
【００５４】
先ず、シナリオ／イベント対応テーブルＥ１２を開き、イベント名列に記述されているイベントでループを回す。このとき、ループ変数としてevNameを準備し、イベント名を格納する。Ｓ４８では、シナリオ／イベント対応テーブルＥ１２の現在ループを回しているイベントの送信元クラス名をSrcClassという変数に格納し、送信先クラス名をDstClassという変数に格納する。
【００５５】
Ｓ４９ではパッケージ／クラス対応テーブルＥ１５を開き、クラス名の列でSrcClassを検索し、SrcClassに対応するパッケージをSrcPという変数に格納する。同様にDstClassについても検索を行い、結果をDstPという変数に格納する。Ｓ５０では、SrcPとDstPが同じであるかを判断する。Ｓ５１はＳ５０の判断結果がＮｏの場合に実行される処理である。Ｓ５１では、Ｆａｃａｄｅパターン判定結果テーブルＥ１３のパッケージ名の列でDstPを検索し、○×よりDstPがＦａｃａｄｅパターン適用可能かどうか調べる。Ｓ５３では、その判断を行う。Ｓ５４はＳ５３の判断結果がＹｅｓだった場合に実行される処理である。Ｓ５４では、シナリオ／イベント対応テーブルＥ１２の現在処理中のイベントの行の下に新しく行を追加し、その行のイベント名の列にevNameを送信先クラスにDstClassをコピーする。
【００５６】
Ｓ５５では、シナリオ／イベント対応テーブルＥ１２の現在処理中の行の送信先クラス名の列の内容と、Ｓ５４で追加した行の送信元クラス名の列の内容をDstPと同じ名前のクラス名を追加する。Ｓ５６では、Ｆａｃａｄｅクラス適用後、クラス／オペレーション対応テーブルＥ１６を開き、クラス名の列でDstClassを検索し、見つかった項目にevNameを追加する。
【００５７】
以上のようなアルゴリズムによりＦａｃａｄｅクラス適用後シナリオ／イベント対応テーブルＥ２１が作成される。図２７に示すシナリオ／イベント対応テーブルの例及び図２９に示すＦａｃａｄｅクラス適用後パッケージ／クラス対応テーブルの例及び図３０に示すＦａｃａｄｅクラス適用後クラス／オペレーション対応テーブルの例から作成されるＦａｃａｄｅクラス適用後シナリオ／イベント対応テーブルの例を図３１に示す。
【００５８】
図１８はパッケージ／関連対応テーブルＥ１１をＦａｃａｄｅパターン対応化させる装置Ｅ１８の詳細アルゴリズムを示すフローチャートである。
【００５９】
先ず、パッケージ／関連対応テーブルＥ１１を開き、パッケージ名の列に記述されているパッケージ数分ループを回す。このとき、ループ変数としてＰnameを準備し、処理中のパッケージ名を格納する。Ｓ５７では、Ｆａｃａｄｅパターン適用判定結果テーブルＥ１３を開き、パッケージ名の列でＰnameを検索し、○×よりＰnameがＦａｃａｄｅパターン適用であるかを判定する。
【００６０】
Ｓ５８においてその判定が行われる。Ｓ５８でＹｅｓと判定されるとパッケージ関連対応テーブルＥ１１を開き、関連名の列に記述されている関連名の数でループを回す。このとき、ループ変数ACNameを準備し、処理中の関連名を格納する。Ｓ５９では、パッケージ関連テーブルＥ１１の現在処理中の関連名の行の下に新たに行を追加し、その行の関連先クラスの列に現在処理中の行の関連先クラス名をコピーする。Ｓ６０では、パッケージ関連テーブルＥ１１で現在処理中の行の関連先クラス名の列と、Ｓ５９で新たに追加した行の関連元クラス名の列にＦａｃａｄｅクラス（Ｐnameと同じ名前のクラス）を追加する。
【００６１】
以上のようなアルゴリズムによりＦａｃａｄｅクラス適用後パッケージ／関連対応テーブルＥ１７が作成される。図２６に示されるパッケージ／関連対応テーブルの例及び図２９に示されるＦａｃａｄｅクラス適用後パッケージ／クラス対応テーブルの例から作成されるＦａｃａｄｅクラス適用後パッケージ／関連対応テーブルの例を図３２に示す。
【００６２】
図１９はＦａｃａｄｅパターンを適用したクラス図を作成する装置Ｅ１９の詳細アルゴリズムを示すフローチャートである。
【００６３】
Ｓ６１では、ブラウズ部Ｄ４にクラス図を新規作成する。続いてＦａｃａｄｅクラス適用後パッケージ／クラス対応テーブルＥ１５を開き、パッケージ名の列に記述されているパッケージ数分ループを回す。このとき、ループ変数Ｐnameを準備し、処理中のパッケージ名を格納する。Ｓ６２では、Ｓ６１で新規作成したクラス図上にＰnameというパッケージを配置する。続いてＦａｃａｄｅクラス適用後パッケージ／クラス対応テーブルＥ１５の現在処理中のパッケージに対応した、クラス名の列に記述されているクラス数分ループを回す。このとき、ループ変数としてCname を準備し、処理中のクラス名を格納する。
【００６４】
Ｓ６３では、Ｓ６２で配置したパッケージの中にCname
という名前のクラスを配置する。これらループを抜けた後はＦａｃａｄｅクラス適用後、パッケージ／関連対応テーブルＥ１７を開き、パッケージ名の列に記述されたパッケージ数分ループを回す。このとき、ループ変数Ｐnameを準備し、処理中のパッケージ名を格納する。更に、処理中のパッケージに対応した関連名の列に記述された関連数分ループを回す。このとき、Ａnameというループ変数を準備し、処理中の関連名を格納する。
【００６５】
Ｓ６４では、関連元クラス名をSrcClass、関連先クラス名をDstClassという変数に格納する。Ｓ６５では、Ｓ６１で新規作成したクラス図上でSrcClassという名前のクラスとDstClassという名前のクラスを検索し、見つかったクラス同士にSrcClass→DstClassという方向で関連を記述し、関連名をＡnameと付ける。これらループを抜けると、続いてＦａｃａｄｅクラス適用後クラス／オペレーション対応テーブルＥ１６が開かれクラス名の列に記述されたクラス数分ループを回す。このとき、ループ変数Ｃnameを準備し、処理中のクラス名を格納する。
【００６６】
更に、処理中のクラスに対応したオペレーションの列に記述されたオペレーション数分ループを回す。このとき、Ｏnameというループ変数を準備し、処理中のオペレーション名を格納する。Ｓ６６では、Ｓ６１で新規作成したクラス図上でＣnameというクラスを検索し、見つかったクラスのオペレーションにＯnameを追加する。これらループを抜けるとＳ６７の処理が実行されるＳ６７では、Ｆａｃａｄｅクラスを適用する前のクラス図から、対応するクラスをそれぞれ検索し、各クラスの属性及びパッケージ内部の関連線をコピーする。
【００６７】
以上のようなアルゴリズムによりＦａｃａｄｅパターンが適用されたクラス図が作成される。
【００６８】
Ｆａｃａｄｅパターンが適用されたクラス図の例を図３３に示す。
【００６９】
図２０はＦａｃａｄｅパターンを適用したシーケンス図を作成する装置Ｅ２０の詳細アルゴリズムを示すフローチャートである。
【００７０】
先ず、Ｆａｃａｄｅパターン適用後シナリオ／イベント対応テーブルＥ２１を開き、シナリオ名の列に記述されているシナリオ数分ループを回す。Ｓ６８では、ブラウズ部Ｄ４にシーケンス図を新規作成する。続いて現在処理中のシナリオに対応したイベント名の列に記述されているイベント数分ループを回す。このとき、ループ変数evNmaeを準備し、処理中のイベント名を格納する。
【００７１】
Ｓ６９では、現在処理中のイベントの送信元クラスをSrcClassという変数に格納し、送信先クラスをDstClassという変数に格納する。Ｓ７０では、Ｓ６８で新規作成したシーケンス図上にSrcClassのインスタンスアイコンが記述されているか判定する。Ｓ７１はＳ７０の判定結果がＮｏだった場合の処理である。Ｓ７１では、SrcClassという名前のインスタンスアイコンをシーケンス図上に配置する。Ｓ７２及びＳ７３でも同様にDstClassについて検索を行い、見つからなければDstClassという名前のクラスをシーケンス図上に配置する。Ｓ７４では、SrcClassという名前のインスタンスからDstClassという名前のインスタンスに向かってイベントを送信し、evNmaeという名前を付ける。
【００７２】
以上のようなアルゴリズムによりＦａｃａｄｅパターンが適用されたシーケンス図が作成される。Ｆａｃａｄｅパターンが適用されたシーケンス図の例を図３４に示す。
【図面の簡単な説明】
【００７３】
【図１】概観図である。
【図２】全体構成を示すブロック図である。
【図３】パッケージ／クラス対応テーブルのフォーマットを示す図である。
【図４】クラス／オペレーション対応テーブルのフォーマットを示す図である。
【図５】パッケージ／イベント対応テーブルのフォーマットを示す図である。
【図６】クラス／関連対応テーブルのフォーマットを示す図である。
【図７】シナリオ／イベント対応テーブルのフォーマットを示す図である。
【図８】Ｆａｃａｄｅパターン適用判定結果格納テーブルを示す図である。
【図９】動作の概略を表すフローチャートである。
【図１０】パッケージ／クラス対応テーブル作成のフローチャートである。
【図１１】クラス／オペレーション対応テーブル作成フローチャートである。
【図１２】パッケージ／イベント対応テーブル作成のフローチャートである。
【図１３】パッケージ／関連対応テーブル作成のフローチャートである。
【図１４】シナリオ／イベント対応テーブル作成のフローチャートである。
【図１５】Ｆａｃａｄｅパターン適用判定のフローチャートである。
【図１６】Ｆａｃａｄｅクラス作成のフローチャートである。
【図１７】シナリオ／イベント対応テーブルをＦａｃａｄｅ対応させるフローチャートである。
【図１８】パッケージ／関連対応テーブルをＦａｃａｄｅ対応させるフローチャートである。
【図１９】Ｆａｃａｄｅパターンを適用したクラス図を表示させるフローチャートである。
【図２０】Ｆａｃａｄｅパターン適用したシーケンス図を表示させるフローチャートである。
【図２１】クラス図である。
【図２２】シナリオ毎のシーケンス図である。
【図２３】パッケージ／クラス対応テーブルの例を示す図である。
【図２４】クラス／オペレーション対応テーブルの例を示す図である。
【図２５】パッケージ／イベント対応テーブルの例を示す図である。
【図２６】パッケージ／関連対応テーブルの例を示す図である。
【図２７】シナリオ／イベント対応テーブルの例を示す図である。
【図２８】Ｆａｃａｄｅパターン適用判定結果テーブルの例を示す図である。
【図２９】Ｆａｃａｄｅクラス適用後パッケージ／クラス対応テーブルの例を示す図である。
【図３０】Ｆａｃａｄｅクラス適用後クラス／オペレーション対応テーブルの例を示す図である。
【図３１】Ｆａｃａｄｅクラス適用後シナリオ／イベント対応テーブルの例を示す図である。
【図３２】Ｆａｃａｄｅクラス適用後パッケージ／関連対応テーブルの例を示す図である。
【図３３】Ｆａｃａｄｅパターンが適用されたクラス図の例を示す図である。
【図３４】Ｆａｃａｄｅパターンが適用されたシーケンス図の例を示す図である。
【符号の説明】
【００７４】
Ｄ１  装置概観
Ｄ２  描画領域
Ｄ３  ツールボックス
Ｄ４  ブラウズ部
Ｄ５  ログ表示部
【図１】
2006221293.tif 000003
【図２】
2006221293.tif 000004
【図３】
2006221293.tif 000005
【図４】
2006221293.tif 000006
【図５】
2006221293.tif 000007
【図６】
2006221293.tif 000008
【図７】
2006221293.tif 000009
【図８】
2006221293.tif 000010
【図９】
2006221293.tif 000011
【図１０】
2006221293.tif 000012
【図１１】
2006221293.tif 000013
【図１２】
2006221293.tif 000014
【図１３】
2006221293.tif 000015
【図１４】
2006221293.tif 000016
【図１５】
2006221293.tif 000017
【図１６】
2006221293.tif 000018
【図１７】
2006221293.tif 000019
【図１８】
2006221293.tif 000020
【図１９】
2006221293.tif 000021
【図２０】
2006221293.tif 000022
【図２１】
2006221293.tif 000023
【図２２】
2006221293.tif 000024
【図２３】
2006221293.tif 000025
【図２４】
2006221293.tif 000026
【図２５】
2006221293.tif 000027
【図２６】
2006221293.tif 000028
【図２７】
2006221293.tif 000029
【図２８】
2006221293.tif 000030
【図２９】
2006221293.tif 000031
【図３０】
2006221293.tif 000032
【図３１】
2006221293.tif 000033
【図３２】
2006221293.tif 000034
【図３３】
2006221293.tif 000035
【図３４】
2006221293.tif 000036