以下、図面を参照して、実施形態について説明する。
図1は、本実施形態に係る仕様入力支援装置のハードウェア構成を示すブロック図である。図1に示すように、コンピュータ10は、例えばハードディスクドライブ(HDD:Hard Disk Drive)のような外部記憶装置20と接続されている。この外部記憶装置20は、コンピュータ10によって実行されるプログラム21を格納する。コンピュータ10および外部記憶装置20は、仕様入力支援装置30を構成する。
図2は、図1に示す仕様入力支援装置30の主として機能構成を示すブロック図である。
図2に示すように、仕様入力支援装置30は、ユーザインタフェース31、仕様データ入力部32および入力支援部33を含む。本実施形態において、これらの各部31〜33は、図1に示すコンピュータ10が外部記憶装置20に格納されているプログラム21を実行することにより実現されるものとする。このプログラム21は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム21が、例えばネットワークを介してコンピュータ10にダウンロードされても構わない。
また、仕様入力支援装置30は、データベース22および仕様データ一時格納部23を含む。本実施形態において、データベース22および仕様データ一時格納部23は、例えば外部記憶装置20に格納される。なお、データベース22は、メタモデル格納部221、参照関係データ格納部222、仕様データ格納部223および不整合参照関係格納部224を含む。
メタモデル格納部221は、例えばソフトウェアまたはシステムの仕様書(ソフトウェアまたはシステム開発の上流工程における仕様書)に記述される項目(および当該項目間の関連)を表す、モデルクラス(以下、単にクラスと表記)および当該クラスに属する属性を含む設計メタ情報(メタモデル)を格納する。換言すれば、メタモデル格納部221には、仕様書に記述されるべき項目を、属性および当該属性が属するクラスという形式で表記した、仕様書の内容の雛形を表すメタモデルが格納される。なお、メタモデル格納部221に格納されている設計メタ情報には、クラスの名称(以下、クラス名と表記)および属性の名称(以下、属性名と表記)等の情報が含まれている。
参照関係データ格納部222は、メタモデル格納部221に格納されている設計メタ情報に含まれる各クラスに属する属性間の参照関係を示す参照関係データを格納する。具体的には、参照関係データ格納部222には、設計メタ情報が有する属性のうち、他の属性の属性値を参照している属性(以下、参照元の属性と表記)と、当該属性が参照している先となる属性(以下、参照先の属性と表記)との2つの属性の組み合わせ(の全て)のデータ(参照関係データ)が格納されている。具体的には、参照関係データ格納部222に格納されている参照関係データには、参照関係が示される2つの属性の各々が属するクラス名が含まれる。
なお、メタモデル格納部221に格納されている設計メタ情報および参照関係データ格納部222に格納されている参照関係データは、例えばユーザによってカスタマイズ可能である。
仕様データ格納部223には、ソフトウェアまたはシステムの仕様に関するデータ(以下、仕様データと表記)が格納される。仕様データ格納部223に格納される仕様データには、例えばメタモデル格納部221に格納されている設計メタ情報に含まれるクラスのモデルインスタンス(当該クラスによって作成されるデータの実体)等が含まれる。
ユーザインタフェース31は、ユーザからの入力情報を入力する機能を有する。また、ユーザインタフェース31は、各種情報をユーザに対して表示する機能を有する。
仕様データ入力部32は、例えばユーザインタフェース31を介して、ユーザによる仕様データの入力を受け付ける機能を有する。
仕様データ入力部32は、メタモデル格納部221に格納されている設計メタ情報に含まれるクラスのクラス名および当該クラスに属する全ての属性の属性名を取得し、当該クラス名および属性名を当該クラス単位で表示する。なお、クラス名および属性名は、ユーザインタフェース31を介して表示される。
また、仕様データ入力部32は、仕様データ格納部223に格納されている仕様データに基づいてクラスのモデルインスタンスを取得し、当該モデルインスタンスをユーザインタフェース31を介して表示する。
ユーザは、仕様データ入力部32によって表示された画面(モデル入力画面)を介して、モデルインスタンスの内容を更新することができる。
仕様データ入力部32は、ユーザによるモデルインスタンスの更新内容(のデータ)を仕様データ一時格納部23に格納する。なお、仕様データ一時格納部23に格納された更新内容は、例えばユーザの指示に応じて仕様データ格納部223に格納(反映)される。
入力支援部33は、入力支援対象判定部331、参照関係提示部332、入力候補表示選択部333および不整合警告部334を含む。
入力支援対象判定部331は、仕様データ入力部32によって表示されたモデルインスタンスに対するユーザの操作、メタモデル格納部221に格納されている設定メタ情報および参照関係データ格納部222に格納されている参照関係データに基づいて、第1〜第7のデータを取得し、参照関係提示部332、入力候補表示選択部333、不整合警告部334へ渡す。
第1のデータは、仕様データ入力部32によって表示されたモデルインスタンスにおいてユーザによって指定された箇所(以下、指定箇所と表記)の位置を示すデータである。第2のデータは、指定箇所に対応する属性(以下、対象属性と表記)を示すデータ(当該対象属性の属性名)である。第3のデータは、対象属性が属するクラスを示すデータ(当該クラスのクラス名)である。第4のデータは、対象属性が参照先の属性であるか否かを示すデータである。第5のデータは、対象属性が参照元の属性であるか否かを示すデータである。第6のデータは、対象属性の参照相手の属性を示すデータ(当該参照相手の属性の属性名)を示す。対象属性が参照先の属性である場合、参照相手の属性は、当該対象属性(の属性値)を参照している属性である。一方、対象属性が参照元の属性である場合、参照相手の属性は、当該対象属性(の属性値)が参照している先となる属性である。第7のデータは、第6のデータによって示される属性(参照相手の属性)が属するクラスを示すデータ(当該クラスのクラス名)である。
以下、参照関係提示部332、入力候補表示選択部333、不整合警告部334について説明するが、これらの各部332〜334が取得または特定すると記述している第1〜第7のデータは、入力支援対象判定部331が取得し、当該各部332〜334に渡されたものである。
参照関係提示部332は、仕様データ入力部32によるモデル入力画面において表示されるクラスに属する属性と参照関係にある属性を参照関係データ格納部222に格納されている参照関係データに基づいて特定し、当該特定された属性が属するクラス名をメタモデル格納部221に格納されている設計メタ情報から取得し、当該特定された属性および当該取得されたクラス名を当該モデル入力画面において提示する機能を有する。
参照関係提示部332は、メタモデル格納部221に格納されている設計メタ情報に基づいて、上記した対象属性(入力支援対象判定部331によって取得された第2のデータによって示される属性)と同一のクラスに属する属性(以下、同一クラス属性と表記)を特定する。参照関係提示部332は、参照関係データ格納部222に格納されている参照関係データに基づいて、特定された同一クラス属性について各種データを取得する。
具体的には、参照関係提示部332は、同一クラス属性(の属性名)が参照関係データ格納部222内に存在する(つまり、当該同一クラス属性の属性名が参照関係データに含まれる)か否か、同一クラス属性が参照先の属性であるか否か、同一クラス属性が参照元の属性であるか否か、同一クラス属性の参照相手の属性の属性名、当該参照相手の属性が属するクラスのクラス名を示すデータを取得する。
参照関係提示部332は、同一クラス属性が参照先の属性である場合、当該同一クラス属性を参照している属性(参照元の属性)を、当該参照元の属性が属するクラスのクラス名とともに含む文章を作成する。なお、参照元の属性が属するクラスのクラス名は、メタモデル格納部221に格納されている設計メタ情報から取得される。
また、参照関係提示部332は、同一クラス属性が参照元の属性である場合、当該同一クラス属性が参照している先となる属性(参照先の属性)の属性名を、当該参照先の属性が属するクラスのクラス名とともに含む文章を作成する。なお、参照先の属性が属するクラスのクラス名は、メタモデル格納部221に格納されている設計メタ情報から取得される。
なお、参照関係提示部332は、当該参照関係提示部332に予め保持されているフォーマットに従って文章を作成する。
参照関係提示部332は、作成された文章をリンクとしてユーザに対して提示する機能を有する。この提示された文章(リンク)がユーザによって指定された場合、参照関係提示部332は、例えば仕様データ格納部223に格納されている仕様データに基づいて、同一クラス属性の参照相手の属性(当該同一クラス属性の参照先の属性または参照元の属性)が属するクラスのモデルインスタンスを表示する。
入力候補表示選択部333は、仕様データ入力部32によって表示されたモデル入力画面において仕様データがユーザによって入力される際に、参照関係データ格納部222に格納されている参照関係データに基づいて当該仕様データとして入力される属性値の候補を提示し、当該提示された属性値の候補のうちユーザによって選択された属性値を仕様データとして入力する機能を有する。
入力候補表示選択部333は、上記した対象属性が参照元の属性である場合、当該対象属性の参照相手の属性(ここでは、参照先の属性)の属性名および当該参照先の属性が属するクラスのクラス名を取得する。
入力候補表示選択部333は、取得された対象属性の参照先の属性が所属するクラスのモデルインスタンスを、仕様データ格納部223に格納されている仕様データに基づいて取得する。この場合、入力候補表示選択部333は、仕様データ一時格納部23に格納されている更新内容(のデータ)が反映された仕様データに基づいて最新の内容のモデルインスタンスを取得する。
また、入力候補表示選択部333は、取得された対象属性の参照先の属性と同一のクラスに属し、当該対象属性の参照先となる属性と関連のある属性(例えば、名称または説明等)の属性名を、メタモデル格納部221に格納されている設計メタ情報に基づいて取得する。
入力候補表示選択部333は、取得されたこれらの情報をもとに、対象属性の参照先の属性が属するクラスの最新のモデルインスタンスを表示するためのポップアップ画面を生成する。このポップアップ画面においては、対象属性の参照先の属性に加え、当該参照先の属性と同一のクラスに属し、当該参照先の属性と関連のある属性が表示される。入力候補表示選択部333によって生成されたポップアップ画面は、ユーザインタフェース31を介してユーザに対して表示される。
なお、ユーザインタフェース31を介して表示されたポップアップ画面においてユーザによってモデルインスタンスが選択された場合、当該選択されたモデルインスタンスの主キー属性、つまり、対象属性の参照先の属性の属性値が指定箇所に入力される。
また、入力候補表示選択部333は、入力支援対象判定部331によって取得された第1のデータに基づいて、指定箇所の位置を取得し、仕様データ格納部223および仕様データ一時格納部23から当該指定箇所に入力されている属性値を取得する。
更に、入力候補表示選択部333は、入力支援対象判定部331によって取得された第6のデータによって示される対象属性の参照相手の属性(ここでは、参照先の属性)の属性名および第7のデータによって示される当該参照先の属性が属するクラスのクラス名に基づいて、仕様データ格納部223および仕様データ一時格納部23から当該参照先の属性の属性値からなる集合を取得する。
入力候補表示選択部333は、取得されたこれらの情報をもとに、指定箇所に入力されている属性値が対象属性の参照先の属性の属性値として存在するか否かを判定する。
入力候補表示選択部333は、上記したポップアップ画面において表示されているモデルインスタンスのうち、対象属性の参照先の属性の属性値として指定箇所に入力されているモデルインスタンスを選択済みにする。また、入力候補表示選択部333は、指定箇所に入力されている属性値のうち、対象属性の参照先の属性の属性値として存在しないものを、当該入力候補表示選択部333に予め保持されているフォーマットに従ってポップアップ画面内に表示(列挙)する。
入力候補表示選択部333は、ポップアップ画面においてユーザによって選択されているモデルインスタンスを取得する。これにより、入力候補表示選択部333は、取得されたモデルインスタンスについて、対象属性の参照先の属性の属性値を取得し、当該取得された属性値を指定箇所に自動複写する。
不整合警告部334は、仕様データ入力部32によって表示されたモデル入力画面において仕様データとして入力された属性値がユーザによって変更された際、当該属性値が変更された属性と参照関係にある属性の属性値を参照関係データ格納部222に格納されている参照関係データおよび仕様データ格納部223に格納されている仕様データに基づいて取得し、当該属性値が変更された属性の属性値と当該取得された属性値とを比較することによって、当該属性間の不整合を警告する機能を有する。
不整合警告部334は、対象属性が参照元の属性である場合、入力支援対象判定部331によって取得された第6のデータによって示される当該対象属性の参照相手の属性(ここでは、参照先の属性)の属性名および第7のデータによって示される当該参照先の属性が属するクラスのクラス名を取得する。
不整合警告部334は、対象属性が参照先の属性である場合、仕様データ一時格納部23を参照して、ユーザによる更新内容がモデルインスタンスの削除であるか否かを判定する。ここで、ユーザによる入力がモデルインスタンスの削除であると判定された場合、入力支援対象判定部331によって取得された第6のデータによって示される当該対象属性の参照相手の属性(ここでは、参照元の属性)の属性名および第7のデータによって示される当該参照元の属性が属するクラスのクラス名を取得する。
なお、対象属性が参照元の属性であるか、または、参照先の属性であるかは、入力支援対象判定部331によって取得された第4および第5のデータに基づいて判定される。
不整合警告部334は、対象属性の参照先の属性の属性値の最新の入力値を求めるため、仕様データ格納部223から当該参照先の属性が属するクラスのモデルインスタンスを取得し、当該モデルインスタンスから当該参照先の属性の属性値からなる集合(参照先の集合)を求める。また、不整合警告部334は、仕様データ一時格納部23から対象属性の参照先の属性の属性値の更新内容(つまり、入力または削除等の履歴のデータ)を取得し、求められた参照先の集合に当該履歴のデータを反映させる。
同様に、不整合警告部334は、対象属性の参照元の属性の属性値の最新の入力値を求めるため、仕様データ格納部223から当該参照元の属性が属するクラスのモデルインスタンスを取得し、当該モデルインスタンスから当該参照元の属性の属性値からなる集合(参照元の集合)を求める。また、不整合警告部334は、仕様データ一時格納部23から対象属性の参照元の属性の属性値の更新内容(履歴のデータ)を取得し、求められた参照元の集合に当該履歴のデータを反映させる。
また、不整合警告部334は、上記した参照元の集合の属性値毎に、当該属性値が参照先の集合に含まれるか否かを判定する。不整合警告部334は、参照元の集合の属性値が参照先の集合に含まれないと判定された場合、当該参照元の集合の属性値を参照元の属性の属性値として持つ、当該参照元の属性が属するクラスのモデルインスタンスを求める。更に、不整合警告部334は、対象属性の参照元の属性の各属性値について求めたモデルインスタンスの和集合を求め、不整合が発生しているモデルインスタンス(不整合データを持つモデルインスタンス)の集合を得る。このモデルインスタンスの和集合と、対象属性の参照元の属性の属性名および当該属性が属するクラスのクラス名は、一組のデータとして不整合参照関係格納部224に格納される。
具体的には、不整合参照関係格納部224は、不整合が発生している参照元の属性および参照先の属性の各組み合わせについて、当該参照元の属性の属性名と、当該参照元の属性が属するクラスのクラス名と、当該参照先の属性の属性名と、当該参照先の属性が属するクラスのクラス名と、当該参照元の属性が属するクラスのモデルインスタンスのうち、参照元の属性と参照先の属性との間で属性値の不整合が発生している全てのモデルインスタンスとを不整合データとして格納する。
不整合警告部334は、不整合参照関係格納部224に格納されているデータの各組に対して、当該データの組に含まれる参照先の属性が属するクラスがユーザインタフェース31を介して現在表示されているか否かを判定する。データの組に含まれる参照先の属性が属するクラスが表示されていると判定された場合、不整合警告部334は、当該データの組から参照元の属性の属性名および当該属性が属するクラスの名称を取得する。
不整合警告部334は、上記したデータの組に含まれる参照先の属性が属するクラスがユーザインタフェース31を介して現在表示されているか否かを判定する。データの組に含まれる参照先の属性が属するクラスが表示されていると判定された場合、不整合警告部334は、参照先の属性が属するクラスのモデル入力画面において、取得された参照元の属性および当該属性が属するクラスのクラス名からなるリンクの箇所に、属性(値)間の不整合を警告するメッセージを表示する。更に、参照先の属性の列全体が色付けされ、当該参照先の属性および参照元の属性間で不整合が発生していることが警告される。
更に、不整合警告部334は、上記したデータの組に含まれる参照元の属性が属するクラスがユーザインタフェース31を介して現在表示されているか否かを判定する。データの組に含まれる参照元の属性が属するクラスが表示されていると判定された場合、不整合警告部334は、参照元の属性が属するクラスのモデル入力画面において、当該データの組に含まれる不整合が発生しているモデルインスタンス(不整合データを持つモデルインスタンス)について参照元の属性の属性値の箇所を色付けして不整合が発生していることを警告する。また、不整合警告部334は、参照先の属性の属性名および当該属性が属するクラスのクラス名を用いた指定フォーマットの文章で表示されているリンクの箇所に不整合が発生していることを警告するメッセージを表示する。
なお、不整合参照関係格納部224に格納されているデータの組は、例えばメニュー画面等において一覧で表示される。
図3は、図2に示すデータベース22に含まれるメタモデル格納部221に格納されている設計メタ情報のデータ構造の一例を示す。
上記したようにメタモデル格納部221に格納されている設計メタ情報には、ソフトウェアまたはシステム仕様書に記述される項目を表すクラス(モデルクラス)および当該クラスに属する属性が含まれる。
図3に示す例では、設計メタ情報には、仕様書に記述される項目を表すクラスとして、「要件」クラス、「機能的要件」クラス、「機能要件」クラス、「画面要件」クラス、「帳票要件」クラスおよび「データ要件」クラスが含まれている。
ここで、例えば「要件」クラスは、クラス名が「要件」であるクラスを表す。ここでは「要件」クラスについて説明したが、他のクラスについても同様に表記する。
また、図3に示す例えば「機能要件」クラスに属する属性には、「機能要件ID」属性、「機能要件名」属性、「説明」属性、「入力データ要件ID」属性および「出力データ要件ID」属性が含まれる。なお、例えば「機能要件ID」属性は、属性名が「機能要件ID」である属性である。ここでは、「機能要件ID」属性について説明したが、他の属性についても同様に表記する。
図3に示す「画面要件」クラスに属する属性には、「画面要件ID」属性、「画面要件名」属性、「説明」属性および「関連機能要件ID」属性が含まれている。
図3に示す「帳票要件」クラスに属する属性には、「帳票要件ID」属性、「帳票要件名」属性、「説明」属性および「関連機能要件ID」属性が含まれている。
また、図3に示す「データ要件」クラスに属する属性には、「データ要件ID」属性、「データ要件名」属性および「説明」属性が含まれている。
なお、図3に示すように、設計メタ情報においては、クラス間の関係(つまり、項目間の関連)についても表されている。
図4は、図2に示すデータベース22に含まれる参照関係データ格納部222に格納されている参照関係データのデータ構造の一例を示す。
図4に示すように、参照関係データには、参照元の属性が属するクラス、参照元の属性、参照先の属性および参照先の属性が属するクラスが対応づけて含まれる。なお、参照元の属性は、対応する属性(参照先の属性)を参照している属性である。また、参照先の属性は、対応する属性(参照元の属性)が参照している先となる属性である。
参照関係データにおいては、参照元の属性が属するクラス、参照元の属性、参照先の属性および参照先の属性が属するクラスの組毎に、当該組を識別するための番号が付与されている。
図4に示す例では、参照関係データには、番号「1」に対応づけて参照元の属性が属するクラス「画面要件」、参照元の属性「関連機能要件ID」、参照先の属性「機能要件ID」および参照先の属性が属するクラス「機能要件」が含まれている。これによれば、「画面要件」クラスに属する「関連機能要件ID」属性が「機能要件」クラスに属する「機能要件ID」属性の属性値を参照していることが示されている。
また、参照関係データには、番号「2」に対応づけて参照元の属性が属するクラス「帳票要件」、参照元の属性「関連機能要件ID」、参照先の属性「機能要件ID」および参照先の属性が属するクラス「機能要件」が含まれている。これによれば、「帳票要件」クラスに属する「関連機能要件ID」属性が「機能要件」クラスに属する「機能要件ID」属性の属性値を参照していることが示されている。
参照関係データには、番号「3」に対応づけて参照元の属性が属するクラス「機能要件」、参照元の属性「入力データ要件ID」、参照先の属性「データ要件ID」および参照先の属性が属するクラス「データ要件」が含まれている。これによれば、「機能要件」クラスに属する「入力データ要件ID」属性が「データ要件」クラスに属する「データ要件ID」属性の属性値を参照していることが示されている。
更に、参照関係データには、番号「4」に対応づけて参照元の属性が属するクラス「機能要件」、参照元の属性「出力データ要件ID」、参照先の属性「データ要件ID」および参照先の属性が属するクラス「データ要件」が含まれている。これによれば、「機能要件」クラスに属する「出力データ要件ID」属性が「データ要件」クラスに属する「データ要件ID」属性の属性値を参照していることが示されている。
以下、主に図2に示す入力支援部33の動作について詳細に説明する。まず、図5のフローチャートを参照して、入力支援部33に含まれる入力支援対象判定部331の処理手順について説明する。
ここで、仕様データ入力部32は、メタモデル格納部211に格納されている設計メタ情報に含まれるクラスのクラス名および当該クラスに属する属性の属性名を取得し、更に、当該クラスのモデルインスタンスを仕様データ一時格納部23のデータを反映させた仕様データ格納部223から取得する。これにより、仕様データ入力部32は、取得されたクラス名、属性名およびモデルインスタンスをユーザインタフェース31を介して表示する。以下、このようにユーザインタフェース31を介して表示される画面をモデル入力画面とする。
この場合、ユーザは、モデル入力画面に対して操作を行うことによって、例えば対象となる箇所を指定し、モデルインスタンスの内容を更新することができる。つまり、ユーザは、例えばモデル入力画面を介して仕様データを入力することができる。
入力支援対象判定部331は、ユーザの操作に応じて、モデル入力画面内の箇所が指定されたか否かを判定する(ステップS1)。
モデル入力画面内の箇所が指定されたと判定された場合(ステップS1のYES)、入力支援対象判定部331は、ユーザによって指定された箇所(指定箇所)に対応する属性(対象属性)の属性名および当該対象属性が属するクラスのクラス名をメタモデル格納部221に格納されている設計メタ情報から取得する(ステップS2)。
次に、入力支援対象判定部331は、取得された対象属性の属性名が参照関係データ格納部222に格納されている参照関係データ中に存在するか否かを判定する(ステップS3)。
対象属性の属性名が参照関係データ中に存在すると判定された場合(ステップS3のYES)、入力支援対象判定部331は、参照関係データ格納部222に格納されている参照関係データに基づいて、対象属性が参照先の属性であるか否かを判定する(ステップS4)。ステップS4の処理において、入力支援対象判定部331は、ステップS2において取得された対象属性の属性名が参照先の属性として参照関係データに含まれている場合、当該対象属性が参照先の属性であると判定する。
対象属性が参照先の属性であると判定された場合(ステップS4のYES)、入力支援対象判定部331は、対象属性(の属性名)を参照先の属性として含む参照関係データにおいて、当該対象属性に対応づけられている、当該対象属性を参照する属性(つまり、対象属性の参照元の属性)の属性名および当該属性が属するクラスのクラス名を、参照関係データ格納部222から取得する(ステップS5)。なお、対象属性の参照元の属性は、複数存在し得る。このように対象属性の参照元の属性が複数存在する場合、入力支援対象判定部331は、当該対象属性の参照元の属性毎に、属性名およびクラス名を取得する(つまり、複数の属性名およびクラス名を取得する)。
次に、入力支援対象判定部331は、参照関係データ格納部222に格納されている参照関係データに基づいて、対象属性が参照元の属性であるか否かを判定する(ステップS6)。ステップS6の処理において、入力支援対象判定部331は、ステップS2において取得された対象属性の属性名が参照先の属性として参照関係データに含まれている場合、当該対象属性が参照元の属性であると判定する。
対象属性が参照元の属性であると判定された場合(ステップS6のYES)、入力支援対象判定部331は、対象属性(の属性名)を参照元の属性として含む参照関係データにおいて、当該対象属性に対応づけられている、当該対象属性が参照する属性(つまり、対象属性の参照先の属性)の属性名および当該属性が属するクラスのクラス名を、参照関係データ格納部222から取得する(ステップS7)。
次に、入力支援対象判定部331は、ユーザによる指定箇所(を示すデータ)を取得する(ステップS8)。
入力支援対象判定部331は、上記した処理において取得されたデータを参照関係提示部332、入力候補表示選択部333および不整合警告部334に渡す(ステップS9)。
ここで、入力支援対象判定部331によって参照関係提示部332、入力候補表示選択部333および不整合警告部334に渡されるデータには、ユーザによる指定箇所を示すデータ(第1のデータ)、対象属性の属性名を示すデータ(第2のデータ)、対象属性が属するクラスのクラス名を示すデータ(第3のデータ)、対象属性が参照先の属性であるか否かを示すデータ(第4のデータ)、対象属性が参照元の属性であるか否かを示すデータ(第5のデータ)、対象属性の参照相手(参照元または参照先)の属性の属性名を示すデータ(第6のデータ)、および対象属性の参照相手の属性が属するクラスのクラス名を示すデータ(第7のデータ)が含まれる。
なお、第1のデータは、上記したステップS8の処理において取得される。第2および第3のデータは、上記したステップS2の処理において取得される。第4のデータは、上記したステップS4の処理において取得される。第5のデータは、上記したステップS6の処理において取得される。第6および第7のデータは、上記したステップS5またはS7の処理において取得される。
一方、上記したステップS1においてモデル入力画面内の箇所が指定されていないと判定された場合、またはステップS3において対象属性の属性名が参照関係データ中に存在しないと判定された場合、入力支援対象判定部331の処理は終了される。
また、ステップS4において対象属性が参照先の属性でないと判定された場合、ステップS5の処理は実行されない。
また、ステップS6において対象属性が参照元の属性でないと判定された場合、ステップS7の処理は実行されない。
次に、図6および図7のフローチャートを参照して、入力支援部33に含まれる参照関係提示部332の処理手順について説明する。
まず、参照関係提示部332は、入力支援対象判定部331から渡されたデータ(第1〜第7のデータ)を取得する(ステップS11)。
次に、参照関係提示部332は、取得された第2および第3のデータとメタモデル格納部221に格納されている設計メタ情報とに基づいて、対象属性と同一のクラスに属する属性(同一クラス属性)を特定する(ステップS12)。ここでは、n個の同一クラス属性が特定されたものとして説明する。なお、参照関係提示部332は、ステップS12の処理の際に、設計メタ情報から同一クラス属性の各々の属性名を取得する。
参照関係提示部332は、特定された同一クラス属性の各々について、以下のステップS13〜S21の処理を実行する。以下、この処理の対象となる同一クラス属性を同一クラス属性Ai(i=1,2,…,n)とする。
参照関係提示部332は、同一クラス属性Aiが参照関係データ格納部222に格納されている参照関係データ中に存在するか否かを判定する(ステップS13)。
同一クラス属性Aiが参照関係データ中に存在すると判定された場合(ステップS13のYES)、参照関係提示部332は、参照関係データ格納部222に格納されている参照関係データに基づいて、同一クラス属性Aiが参照先の属性であるか否かを判定する(ステップS14)。ステップS14の処理において、参照関係提示部332は、同一クラス属性Aiの属性名が参照先の属性として参照関係データに含まれている場合、当該同一クラス属性Aiが参照先の属性であると判定する。
同一クラス属性Aiが参照先の属性であると判定された場合(ステップS14のYES)、参照関係提示部332は、当該同一クラス属性Aiを参照する属性(つまり、同一クラス属性Aiの参照元の属性)の属性名および当該属性が属するクラスのクラス名を、ステップS11において取得された第6および第7のデータから取得する(ステップS15)。
参照関係提示部332は、取得された同一クラス属性Aiの参照元の属性の属性名および当該属性が属するクラスのクラス名が指定フォーマットで列挙された文章を作成する(ステップS16)。なお、ステップS16の処理において用いられる指定フォーマットは、参照関係提示部332において予め保持されている。
次に、参照関係提示部332は、参照関係データ格納部222に格納されている参照関係データに基づいて、同一クラス属性Aiが参照元の属性であるか否かを判定する(ステップS17)。ステップS17の処理において、参照関係提示部332は、同一クラス属性Aiが参照元の属性として参照関係データに含まれている場合、当該同一クラス属性Aiが参照元の属性であると判定する。
同一クラス属性Aiが参照元の属性であると判定された場合(ステップS17のYES)、参照関係提示部332は、同一クラス属性Ai(の属性名)を参照元の属性として含む参照関係データにおいて、当該同一クラス属性Aiに対応づけられている、当該同一クラス属性Aiが参照する属性(つまり、同一クラス属性Aiの参照先の属性)の属性名および当該属性が属するクラスのクラス名を、ステップS11において取得された第6および第7のデータから取得する(ステップS18)。
参照関係提示部332は、取得された同一クラス属性Aiの参照先の属性の属性名および当該属性が属するクラスのクラス名が指定フォーマットで列挙された文章を作成する(ステップS19)。なお、ステップS19の処理において用いられる指定フォーマットは、参照関係提示部332において予め保持されている。
次に、参照関係提示部332は、ステップS16およびS19において作成された文章を、対象属性が属するクラスのモデル入力画面(つまり、対象属性の属性名、当該対象属性が属するクラスのクラス名および当該クラスのモデルインスタンスが表示される画面)において、当該文章中の属性の参照相手の属性(参照元または参照先の属性)の近傍に表示する。
なお、参照関係提示部332は、モデル入力画面に表示される各文章に対して、当該文章中のクラス名に対応するクラス(のモデル入力画面)へ遷移することが定義されたリンクを作成する(ステップS21)。
ステップS21の処理が実行されると、参照関係提示部332は、ステップS2において特定された同一クラス属性の全てについてステップS13〜S21の処理が実行されたか否かを判定する(ステップS22)。
同一クラス属性の全てについて処理が実行されていないと判定された場合(ステップS22のNO)、上記したステップS13に戻って処理が繰り返される。
一方、同一クラス属性の全てについて処理が実行されたと判定された場合(ステップS22のYES)、参照関係提示部332は、ユーザの操作に応じて、対象属性が属するクラスのモデル入力画面において表示されている文章に対して作成されているリンクにおいて定義されているクラスのモデル入力画面へ遷移することを命令するイベントが発生したか否かを判定する(ステップS23)。なお、このイベントは、対象属性が属するクラスのモデル入力画面において表示されている文章がユーザによって指定された場合に発生する。
イベントが発生したと判定された場合(ステップS23のYES)、参照関係提示部332は、ユーザによって指定された文章中のクラス名を取得する(ステップS24)。
参照関係提示部332は、取得されたクラス名に対応するクラスのモデル入力画面を、ユーザインタフェース31を介して表示する。このモデル入力画面には、取得されたクラス名、つまり、ユーザによって指定された文章中のクラス名に対応するクラスのモデルインスタンスが表示される。
このように、ユーザは、対象属性が属するクラスのモデル入力画面において文章を指定することによって、当該文章中のクラス名に対応するクラスのモデル入力画面を開くことができる。
一方、上記したステップS13において同一クラス属性Aiが参照関係データ中に存在しないと判定された場合、ステップS22の処理が実行される。
上記したステップS14において同一クラス属性Aiが参照先の属性でないと判定された場合、ステップS15およびS16の処理は実行されない。
上記したステップS17において同一クラス属性Aiが参照元の属性でないと判定された場合、ステップS18およびS19の処理は実行されない。
また、上記したステップ23においてイベントが発生していないと判定された場合、参照関係提示部332の処理は終了される。
次に、図8および図9のフローチャートを参照して、入力支援部33に含まれる入力候補表示選択部333の処理手順について説明する。
まず、入力候補表示選択部333は、入力支援対象判定部331から渡されたデータ(第1〜第7のデータ)を取得する(ステップS31)。
入力候補表示選択部333は、取得された第2および第3のデータおよび参照関係データ格納部222に格納されている参照関係データに基づいて、対象属性が参照元の属性であるか否かを判定する(ステップS32)。ステップS32の処理において、入力候補表示選択部333は、対象属性の属性名が参照元の属性として参照関係データに含まれている場合、当該対象属性が参照元の属性であると判定する。
対象属性が参照元の属性であると判定された場合(ステップS32のYES)、入力候補表示選択部333は、ステップS31において取得された第6および第7のデータに基づいて、当該対象属性の参照先の属性(つまり、当該対象属性の参照相手の属性)および当該属性が属するクラスを特定する(ステップS33)。以下、ステップS33において特定された属性を属性X、クラスをクラスYと称する。
次に、入力候補表示選択部333は、取得されたクラスYのモデルインスタンスの更新内容の全てからなるデータ(以下、データAと表記)を、仕様データ一時格納部23から取得する(ステップS34)。
また、入力候補表示選択部333は、取得されたクラスYのモデルインスタンスの全てからなるデータ(以下、データBと表記)を、仕様データ格納部223から取得する(ステップS35)。
入力候補表示選択部333は、ステップS34において取得されたデータAをステップS35において取得されたデータBに対して反映させる(ステップS36)。これにより、入力候補表示選択部333は、データAをデータBに反映させたデータ(以下、データCと表記)を取得する。なお、データCは、クラスYの最新の内容のモデルインスタンスを含む。
また、入力候補表示選択部333は、メタモデル格納部221に格納されている設計メタ情報に基づいて、対象属性の参照先の属性(つまり、属性X)と関連のある属性を特定する(ステップS37)。具体的には、入力候補表示選択部333は、対象属性の参照先の属性が属するクラス(つまり、クラスY)に属する例えば名称に関する属性および説明に関する属性を特定する。以下、ステップS37において特定された対象属性の参照先の属性と関連のある属性を属性aおよび属性bとする。
次に、入力候補表示選択部333は、データCの全てのモデルインスタンスについて、属性X、属性aおよび属性bの属性値のみを表示する指定フォーマットのポップアップ画面(自動複写用ポップアップ画面)を生成する。なお、ここで用いられる指定フォーマットは、入力候補表示選択部333において予め保持されている。
入力候補表示選択部333は、生成された指定フォーマットのポップアップ画面を、ユーザインタフェース31を介して表示する(ステップS38)。
ここで、入力候補表示選択部333は、ステップS31において取得された第1のデータに基づいて、ユーザによる指定箇所に入力されている全ての値を、仕様データ一時格納部23のデータを反映させた仕様データ格納部223のデータから取得する(ステップS39)。
次に、入力候補表示選択部333は、取得された値についてポップアップ画面表示処理を実行する(ステップS40)。このポップアップ画面表示処理によれば、属性Xの属性値が取得された値に含まれているモデルインスタンスを選択済みにし、また、指定箇所に入力されている属性値のうち参照先の属性の属性値として存在しないものがステップS38で表示したポップアップ画面内に表示される。なお、ポップアップ画面表示処理の詳細については後述する。
入力候補表示選択部333は、ユーザの操作に応じて、ポップアップ画面において選択されたモデルインスタンスを複写することを命令するイベント(複写イベント)が発生したか否かを判定する(ステップS41)。なお、このイベントは、後述するポップアップ画面に設けられている例えば「複写する」ボタンがユーザによって指定(押下)された場合に発生する。
複写イベントが発生したと判定された場合(ステップS41のYES)、入力候補表示選択部333は、ポップアップ画面において選択されているモデルインスタンスを全て取得する(ステップS42)。
次に、入力候補表示選択部333は、取得されたモデルインスタンスにおける属性X(対象属性の参照先の属性)の属性値を全て取得する(ステップS43)。
入力候補表示選択部333は、取得された属性値の全てを、ユーザによる指定箇所に対して入力する(ステップS44)。
ステップS44の処理が実行されると、入力候補表示選択部333は、ポップアップ画面を閉じる(ステップS45)。
なお、上記したステップS32において対象属性が参照元の属性でないと判定された場合、入力候補表示選択部333の処理は終了される。
また、ステップS41において複写イベントが発生していないと判定された場合、入力候補表示選択部333は、ユーザの操作に応じて、ポップアップ画面を閉じることを命令するイベント(閉じるイベント)が発生したか否かを判定する(ステップS46)。なお、このイベントは、後述するポップアップ画面に設けられている例えば「閉じる」ボタンがユーザによって指定(押下)された場合に発生する。
閉じるイベントが発生したと判定された場合(ステップS46のYES)、入力候補表示選択部333は、上記したステップS45の処理を実行する。
一方、閉じるイベントが発生していないと判定された場合(ステップS46のNO)、ステップS41に戻って処理が繰り返される。
次に、図10のフローチャートを参照して、上記したポップアップ画面表示処理(図8に示すステップS40の処理)の処理手順について説明する。
ここでは、上記した図8に示すステップS39において、m個の値が取得されたものとする。なお、ポップアップ画面表示処理は、これらのm個の値の各々について実行される。以下の説明では、ポップアップ画面表示処理の対象となる値を値Vi(i=1,2,…,m)とする。
まず、入力候補表示選択部333は、クラスYのモデルインスタンスのうち、属性Xの属性値が値Viと一致するモデルインスタンスを全て取得する(ステップS51)。
モデルインスタンスが取得された場合(ステップS52のYES)、入力候補表示選択部333は、取得されたモデルインスタンスを、ポップアップ画面において選択済みとして表示する(ステップS53)。
一方、属性Xの属性値が値Viと一致するモデルインスタンスが1つも存在しない場合(ステップS52のNO)、入力候補表示選択部333は、当該入力候補表示選択部333において予め保持されている指定フォーマットで、値Viが不正な値であることを表す文章を作成し、当該文章をポップアップ画面に表示する(ステップS54)。
このようにポップアップ画面表示処理においては、属性Xの属性値が値Viと一致するクラスYのモデルインスタンスが存在する場合には、そのような全てのモデルインスタンスが選択済みとしてポップアップ画面に表示され、属性Xの属性値が値Viと一致するクラスYのモデルインスタンスが存在しない場合には、当該値Viが不正な値であることを表す文章がポップアップ画面に表示される。
以下、本実施形態に係る仕様入力支援装置30の第1の動作例について具体的に説明する。なお、第1の動作例は、参照先の属性の属性値が確定した後に参照元の属性の属性値を入力する場合における動作である。
ここでは、参照先の属性は例えば「機能要件」クラスに属する「機能要件ID」属性であるものとし、参照元の属性は例えば「画面要件」クラスに属する「関連機能要件ID」属性であるものとする。
なお、図11は、「機能要件」クラスのモデル入力画面の一例を示す。なお、図11に示す例では、「機能要件」クラスのモデル入力画面における入力は、完了しているものとする。
ここで、参照元の属性である「関連機能要件ID」属性が属する「画面要件」クラスのモデル入力画面を開いたものとする。図12は、「画面要件」クラスのモデル入力画面の一例を示す。
この場合、ユーザは、図12に示す「画面要件」クラスのモデル入力画面において、「画面要件ID」が「S−M−01」であるモデルインスタンスの「関連機能要件ID」の属性(指定箇所)を指定する(ステップS61)。具体的には、ユーザは、指定箇所において右クリックを行う。
入力候補表示選択部333は、図13に示すように、右クリックされた指定箇所において例えば「入力候補ボックスを表示」のリストを表示する(ステップS62)。
次に、入力候補表示選択部333は、入力支援対象判定部331から渡された第1、第2および第3のデータから、指定箇所が指定された画面が「画面要件」クラスのモデル入力画面であること、および指定箇所の属性(つまり、列名)が「関連機能要件ID」属性であることを特定する(ステップS63,S64)。また、入力候補表示選択部333は、指定箇所(を示すデータ)を取得する。
ここで、上記したステップS62において表示されたリストがユーザによってクリックされた場合を想定する。
この場合、入力支援対象判定部331は、参照関係データ222に格納されている参照関係データに基づいて上述した第6および第7のデータを取得し(ステップS65)、入力候補表示選択部333へ渡す。入力候補表示選択部333は、入力支援対象判定部331から渡された第6および第7のデータから、指定箇所の属性(ここでは、「関連機能要件ID」属性)が参照している属性(つまり、「関連機能要件ID」属性の参照先の属性)および当該属性が属するクラス(ここでは、「機能要件」クラス)を特定する。
図13に示す例では、入力候補表示選択部333は、「関連機能要件ID」属性の参照先の属性として、「機能要件」クラスに属する「機能要件ID」属性を特定する。この場合、入力候補表示選択部333は、「機能要件」クラスの各モデルインスタンスについて、特定された「機能要件ID」属性、その名称に関する属性である「機能要件名」属性およびその説明に関する属性である「説明」属性の属性値を取得する(ステップS66)。
なお、入力候補表示選択部333は、「機能要件」クラスの仕様データ(ここでは、仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「機能要件」クラスの仕様データ)から属性値を取得する。図14は、仕様データ一時格納部23内の更新内容を仕様データ格納部223内の「機能要件」クラスの仕様データに対して反映させることによって、最新の内容の「機能要件」クラスの仕様データが生成される様子を示す。
再び図13に戻ると、入力候補表示選択部333は、取得された各属性値が表示された入力候補ボックス(ポップアップ画面)を、ユーザインタフェース31を介して表示する(ステップS67)。
ここで、ユーザは、図15に示すように、入力候補ボックスにおいてリストとして表示されている属性値にチェックをつけることにより、関連機能要件として入力したい「機能要件」クラスのモデルインスタンスを指定する(ステップS68)。
また、ユーザは、入力候補ボックスに設けられている「複写する」ボタンをクリック(指定)する(ステップS69)。
これにより、入力候補表示選択部333は、入力候補ボックスのリストにおいて選択されているモデルインスタンスにおける「機能要件ID」属性の属性値(ここでは、「F01」および「F02」)を取得する。入力候補表示選択部333は、取得された属性値を、上記した「画面要件」クラスのモデル入力画面の指定箇所(ここでは、「関連機能要件ID」の箇所)に入力(登録)する(ステップS70)。ステップS70において属性値が指定箇所に登録されると、入力候補ボックスは閉じられる。
なお、上記した「複写する」ボタンがクリックされる前に、入力候補ボックスに設けられている「閉じる」ボタンがユーザによってクリック(指定)されると、入力候補表示選択部333は、当該入力候補ボックスを閉じる(ステップS71)。
このように入力候補表示選択部333の処理が実行されることによって、ユーザは、入力候補ボックスに表示された属性値の中から任意の値をクリック操作により選択する操作のみで、当該値を指定箇所に入力することができる。
次に、図16および図17のフローチャートを参照して、入力支援部33に含まれる不整合警告部334の処理手順について説明する。
まず、不整合警告部334は、入力支援対象判定部331から渡されたデータ(第1〜第7のデータ)を取得する(ステップS81)。
不整合警告部334は、取得された第5のデータに基づいて、対象属性が参照元の属性であるか否かを判定する(ステップS82)。
対象属性が参照元の属性であると判定された場合(ステップS82のYES)、不整合警告部334は、ステップS81において取得された第6および第7のデータに基づいて、対象属性の参照先の属性(以下、属性aと表記)および当該属性aが属するクラス(以下、クラスAと表記)を特定する(ステップS83)。
次に、不整合警告部334は、特定されたクラスAのモデルインスタンスの全てを、仕様データ格納部223から取得する(ステップS84)。
不整合警告部334は、取得されたモデルインスタンスから、属性aの属性値からなるデータ(以下、データSと表記)を取得する(ステップS85)。
また、不整合警告部334は、属性aの属性値の入力、変更、削除等の履歴のデータ、つまり、当該属性値の更新内容のデータ(以下、データαと表記)を、仕様データ一時格納部23から取得する(ステップS86)。
不整合警告部334は、ステップS85において取得されたデータSに対してステップS86において取得されたデータαを反映させる(ステップS87)。これにより、不整合警告部334は、データSに対してデータαを反映させたデータ(以下、データTと表記)を取得する。
次に、不整合警告部334は、不整合データ格納処理を実行する(ステップS88)。この不整合データ格納処理によれば、属性間の不整合を表す不整合データが不整合参照関係格納部224に格納される。なお、不整合データ格納処理の詳細については後述する。
ステップS88の処理が実行されると、不整合警告部334は、警告表示処理を実行する(ステップS89)。この警告表示処理によれば、不整合が発生していることを警告するためのメッセージ等が表示される。なお、警告表示処理の詳細については後述する。
ステップS89の処理の処理が実行されると、不整合警告部334は、不整合参照関係格納部224に格納されているデータを、ユーザインタフェース31を介して一覧表示する(ステップS90)。
一方、上記したステップS82において対象属性が参照元の属性でないと判定された場合、不整合警告部334は、ステップS81において取得された第4のデータに基づいて、対象属性が参照先の属性であるか否かを判定する(ステップS91)。
対象属性が参照先の属性であると判定された場合(ステップS91のYES)、不整合警告部334は、ユーザによる指定箇所においてモデルインスタンスの削除が行われたか否かを判定する(ステップS92)。この場合、不整合警告部334は、仕様データ一時格納部23に格納されている更新内容に基づいて判定処理を実行する。
モデルインスタンスの削除が行われたと判定された場合(ステップS92のYES)、不整合警告部334は、ステップS81において取得された第6および第7のデータに基づいて、対象属性の参照元の属性(対象属性を参照する属性)および当該属性が属するクラスを特定する(ステップS93)。
なお、上記したように対象属性が参照先の属性であると判定され、かつ、モデルインスタンスの削除が行われたと判定された場合には、以下の処理においては、対象属性を属性a、当該対象属性が属するクラスをクラスAとして処理が実行される。
ステップS93の処理が実行されると、上記したステップS84以降の処理が実行される。
上記したステップS91において対象属性が参照先の属性でないと判定された場合、不整合警告部334の処理は終了される。
また、上記したステップS92においてモデルインスタンスの削除が行われていないと判定された場合、同様に、不整合警告部334の処理は終了される。
次に、図18のフローチャートを参照して、上述した不整合データ格納処理(図16に示すステップS88の処理)の処理手順について詳細に説明する。
ここで、上記したように対象属性が参照元の属性である場合、不整合データ格納処理は、対象属性の参照先の属性を属性a、当該属性aが属するクラスをクラスA、対象属性を属性X1、当該対象属性(属性X1)が属するクラスをクラスY1として実行される。
一方、対象属性が参照先の属性である場合、不整合データ格納処理は、対象属性の参照元の各属性を属性X1、X2、…、Xk、当該属性X1、X2、…、Xkの各々が属するクラスをクラスY1、Y2、…、Yk、対象属性を属性a、当該対象属性(属性a)が属するクラスをクラスAとして実行される。ここでは、上記した図17に示すステップS93の処理においてk個の対象属性の参照元の属性が特定された場合を想定している。
なお、不整合データ格納処理は、対応する属性XおよびクラスY(の組)毎に実行される。具体的には、対象属性が参照先の属性である場合のように複数の属性X1、X2、…、Xkおよび複数のクラスY1、Y2、…、Ykが存在する場合には、不整合データ格納処理は、属性X1およびクラスY1、属性X2およびクラスY2、…、属性XkおよびクラスYkの各々について実行される。一方、対象属性が参照元の属性である場合のように属性X1およびクラスY1のみが存在する場合には、不整合データ格納処理は、属性X1およびクラスY1についてのみ実行される。
以下では、便宜的に、不整合データ格納処理の対象となる属性XおよびクラスYを属性XiおよびクラスYi(i=1、2、…、k)として説明する。
まず、不整合警告部334は、クラスYiの全てのモデルインスタンスを、仕様データ格納部223から取得する(ステップS101)。
次に、不整合警告部334は、取得された全てのモデルインスタンスから、属性Xiの属性値からなるデータ(以下、データUiと表記)を取得する(ステップS102)。
また、不整合警告部334は、属性Xiの属性値の入力、変更、削除等の履歴のデータ、つまり、当該属性値の更新内容のデータ(以下、データβiと表記)を取得する(ステップS103)。
不整合警告部334は、ステップS101において取得されたデータUiに対してステップS103において取得されたデータβiを反映させる(ステップS104)。これにより、不整合警告部334は、データUiに対してデータβiを反映させたデータ(以下、データViと表記)を取得する。
次に、不整合警告部334は、データViが持つ値(属性値)の各々について、以下のステップS105〜S107の処理を実行する。以下、この処理の対象となるデータViが持つ値を値Vijとする。
まず、不整合警告部334は、値VijがデータT内に存在するか否かを判定する(ステップS105)。ここで、データTは、上述した図16に示すステップS87においてデータSに対してデータαを反映させたデータである。
値VijがデータT内に存在しないと判定された場合(ステップS105のNO)、不整合警告部334は、値Vijを属性Xiの属性値として持つ、クラスYiの全てのモデルインスタンスを特定する(ステップS106)。
次に、不整合警告部334は、特定されたモデルインスタンスをデータ(集合)Eiに追加する(ステップS107)。
不整合警告部334は、データViが持つ全ての値について上記したステップS105〜S107の処理が実行された否かを判定する(ステップS108)。
データViが持つ全ての値について処理が実行されていないと判定された場合(ステップS108のNO)、上記したステップS105に戻って処理が繰り返される。
一方、データViが持つ全ての値について処理が実行されたと判定された場合(ステップS108のYES)、不整合警告部334は、参照先の属性が属性aであり、当該属性aが属するクラスがクラスAであることと、参照元の属性が属性Xiであり、当該属性Xiが属するクラスがクラスYiであることと、不整合データを持つクラスYiのモデルインスタンスがデータEi内の全要素であることとを一組のデータとして、不整合参照関係格納部224に格納する(ステップS109)。
なお、データEiは、ステップS106において特定されたモデルインスタンスの和集合であり、同一の要素を複数持つことはない。
なお、上記したステップS105において値VijがデータT内に存在すると判定された場合、ステップS106およびS107の処理は実行されず、ステップS108の処理が実行される。
次に、図19のフローチャートを参照して、上述した警告表示処理(図16に示すステップ89の処理)の処理手順について詳細に説明する。
なお、警告表示処理は、不整合参照関係格納部224に格納されている各データの組について実行される。ここでは、不整合参照関係格納部224にはs個のデータの組が格納されているものとする。また、以下の説明においては、警告表示処理の対象となるデータの組をデータの組Dt(t=1、2、…、s)とする。
また、データの組Dtに含まれる参照先の属性を属性S、当該属性Sが属するクラスをクラスRとする。更に、データの組Dtに含まれる参照元の属性を属性P、当該属性Pが属するクラスをクラスQとする。
まず、不整合警告部334は、データの組Dtに含まれる属性S(参照先の属性)が属するクラスRのモデル入力画面がユーザインタフェース31を介して現在表示されているか否かを判定する(ステップS111)。
クラスRのモデル入力画面が現在表示されていると判定された場合(ステップS111のYES)、不整合警告部334は、当該クラスRのモデル入力画面において、属性PおよびクラスQを用いた指定フォーマットの文章で表示されているリンクの箇所に、不整合が発生していることを警告するメッセージを表示する(ステップS112)。
このとき、不整合警告部334は、クラスRのモデル入力画面において、属性S(参照先の属性)の列全体を色付けする(ステップS113)。
なお、上記したステップS111においてクラスRのモデル入力画面が現在表示されていないと判定された場合、ステップS112およびS113の処理は実行されない。
次に、不整合警告部334は、データの組Dtに含まれる属性P(参照元の属性)が属するクラスQのモデル入力画面がユーザインタフェース31を介して現在表示されているか否かを判定する(ステップS114)。
クラスQのモデル入力画面が現在表示されていると判定された場合(ステップS114のYES)、不整合警告部334は、当該クラスQのモデル入力画面において、属性SおよびクラスRを用いた指定フォーマットの文章で表示されているリンクの箇所に、不整合が発生していることを警告するメッセージを表示する(ステップS115)。
このとき、不整合警告部334は、クラスQのモデル入力画面において、データの組Dtに含まれる不整合データを持つモデルインスタンスの全てに対して参照元の属性Pの属性値の箇所を色付けする(ステップS116)。
なお、上記したステップS114においてクラスQのモデル入力画面が現在表示されていないと判定された場合、ステップS115およびS116の処理は実行されず、警告表示処理は終了される。
以下、本実施形態に係る仕様入力支援装置30の第2の動作例について具体的に説明する。なお、第2の動作例は、参照先の属性および参照元の属性の属性値が確定した後に参照先の属性が属するクラスのモデルインスタンスが削除される場合における動作である。
ここでは、上述した入力候補表示選択部333による処理が繰り返されることにより、「画面要件」クラスのモデル入力画面における「関連機能要件ID」の列(つまり、「関連機能要件ID」属性の属性値)への入力が全て完了していることを前提とする。なお、図20は、このときの参照元の属性である「関連機能要件ID」属性が属する「画面要件」クラスのモデル入力画面の一例を示す。また、このときの参照先となる属性である「機能要件ID」が属する「機能要件」クラスのモデル入力画面は、前述した図11に示す画面であるものとする。
図21に示す例によれば、ユーザは、図11に示すような「機能要件」クラスのモデル入力画面において、当該「機能要件」クラスのモデルインスタンスから、「機能要件ID」属性が「F02」であるモデルインスタンスを削除する(ステップS121)。
この場合、入力支援対象判定部331は、「機能要件」クラスのモデル入力画面においてユーザによる変更作業が行われたことを検知し、第1〜第7のデータを不整合警告部334に渡す。不整合警告部334は、入力支援対象判定部331から渡された第2および第3のデータから当該変更作業が行われたクラス(ここでは、「機能要件」クラス)および属性(ここでは、「機能要件ID」属性)を特定する(ステップS122,S123)。
次に、入力支援対象判定部331は、参照関係データ格納部222に格納されている参照関係データに基づいて上述した第6および第7のデータを取得する(ステップS124)。不整合警告部334は、特定された「機能要件ID」属性を参照している属性(つまり、「機能要件ID」属性の参照元の属性)および当該属性が属するクラスを、入力支援対象判定部331から渡された第6および第7のデータから特定する。ここでは、図21に示すように、「機能要件ID」属性の参照元の属性として、「画面要件」クラスに属する「関連機能要件ID」属性および「帳票要件」クラスに属する「関連機能要件ID」属性が特定される。
不整合警告部334は、「機能要件」クラスに属する「機能要件ID」属性の属性値を、「機能要件」クラスの仕様データ(ここでは、仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「機能要件」クラスの仕様データ)から取得する(ステップS125)。
また、不整合警告部334は、「機能要件ID」属性の参照元の各属性(「画面要件」クラスに属する「関連機能要件ID」属性および「帳票要件」クラスに属する「関連機能要件ID」)の属性値を、当該「画面要件」クラスの仕様データおよび「帳票要件」クラスの仕様データから取得する(ステップS126)。この「画面要件」クラスの仕様データおよび「帳票要件」クラスの仕様データは、仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「画面要件」クラスの仕様データおよび「帳票要件」クラスの仕様データである。なお、図21においては、便宜的に、「画面要件」クラスの仕様データのみが示されている。また、図22は、仕様データ一時格納部23内の更新内容を仕様データ格納部223内の「画面要件」クラスの仕様データに対して反映させることによって、最新の内容の「画面要件」クラスの仕様データが生成される様子を示す。
次に、不整合警告部334は、取得された「機能要件ID」属性の属性値と当該「機能要件ID」属性の参照元の各属性(「画面要件」クラスに属する「関連機能要件ID」属性および「帳票要件」クラスに属する「関連機能要件ID」属性)の属性値とを比較する(ステップS127)。
不整合警告部334は、比較結果を参照して、「機能要件ID」の参照元の各属性の属性値(入力内容)が「機能要件ID」属性の属性値として存在しているか否かを判定する。図21に示す例では、「画面要件」クラスの「画面要件ID」属性の属性値が「S−M−01」、「S−M−02」および「S−M−03」であるモデルインスタンスの「関連機能要件ID」属性の属性値(ここでは、「F02」)が、「機能要件」クラスに属する「機能要件ID」属性の属性値として存在しない。
この場合、不整合警告部334は、「機能要件ID」属性の属性値として存在しない「関連機能要件ID」属性の箇所を、「画面要件」クラスのモデル入力画面において色付けすることにより、当該箇所への入力内容が不正である(つまり、不整合が発生している)ことを警告する(ステップS128)。
更に、不整合警告部334は、「機能要件」クラスのモデル入力画面において、「機能要件ID」属性の列全体を色付けすることにより、「機能要件ID」属性を参照している属性(つまり、「機能要件ID」属性の参照元の属性)との間で、属性値の入力内容の不整合が発生していることを警告する(ステップS129)。
なお、図23は、上記したような処理が実行された直後の不整合参照関係格納部224のデータ構造の一例を示す。不整合参照関係格納部224には、上記したように不整合データを持つ参照元クラス(参照元の属性が属するクラス)のモデルインスタンス(のID属性値)、参照元の属性が属するクラスのクラス名、参照元の属性の属性名、参照先の属性の属性名および参照先の属性が属するクラスのクラス名が対応づけて格納されている。
ここで、上記したように不整合警告部334により不整合が発生していることがユーザに対して警告された場合、当該ユーザは、当該ユーザの変更作業(ここでは、削除作業)の影響で不整合が発生したことを、「機能要件」クラスのモデル入力画面において知ることができる。
この場合、ユーザは、発生した不整合を除去するために、「機能要件」クラスのモデル入力画面において、「機能要件ID」属性の列の上方の文章に対して作成されているリンクをクリック(指定)する(ステップS130)。図21に示す例では、ユーザは、例えば「☆参照元(1):「画面要件」クラスの「関連機能要件ID」」の文章(に対して作成されているリンク)をクリックする。なお、この文章の☆印および当該文章の右側の吹き出しは、不整合の発生を意味している。
ここで、参照関係提示部332は、ユーザによってクリックされたリンクにおいて定義されているクラスのモデル入力画面を表示する。この場合、図21に示す「画面要件」クラスのモデル入力画面が表示される。
ユーザは、「画面要件」クラスの色付けされている「関連機能要件ID」属性の箇所(の1つ)を右クリック(つまり、指定)する(ステップS131)。ここでは、「画面要件ID」属性の属性値が「S−M−01」であるモデルインスタンスの「関連機能要件ID」属性の箇所が指定されたものとする。
この場合、図24に示すように、入力候補表示選択部333は、右クリックされた「関連機能要件ID」属性の箇所に「入力候補ボックスを表示」のリストを表示する(ステップS132)。
入力候補表示選択部333は、入力支援対象判定部331から渡された第1、第2および第3のデータから、ユーザによって指定(右クリック)された画面が「画面要件」クラスのモデル入力画面であること、および当該指定された箇所の属性(つまり、列名)が「関連機能要件ID」属性であることを特定する(ステップS133,S134)。また、入力候補表示選択部333は、ユーザによって指定された箇所(指定箇所)(を示すデータ)を取得する。
ここで、入力候補表示選択部333によって表示された「入力候補ボックスを表示」のリストがユーザによってクリック(指定)されたものとする。
この場合、入力支援対象判定部331は、参照関係データ格納部222に格納されている参照関係データに基づいて上述した第6および第7のデータを取得する(ステップS135)。入力候補表示選択部333は、上記したステップS134において特定された「画面要件」クラスに属する「関連機能要件ID」属性から参照されている属性(つまり、「関連機能要件ID」属性の参照先の属性)および当該属性が属するクラスを、入力支援対象判定部331から渡された第6および第7のデータから特定する。
図24に示す例では、「画面要件」クラスの「関連機能要件ID」属性の参照先の属性として、「機能要件」クラスに属する「機能要件ID」属性が特定される。
入力候補表示選択部333は、「機能要件」クラスの各モデルインスタンスについて、特定された「機能要件ID」属性、その名称に関する属性である「機能要件名」属性およびその説明に関する属性である「説明」属性の属性値を取得する(ステップS136)。
なお、入力候補表示選択部333は、これらの属性値を、「機能要件」クラスの仕様データ(ここでは、仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「機能要件」クラスの仕様データ)から取得する。図25は、図24に示す例において、仕様データ一時格納部23内の更新内容を仕様データ格納部223内の「機能要件」クラスの仕様データに対して反映させることによって、最新の内容の「機能要件」クラスの仕様データが生成される様子を示す。
次に、入力候補表示選択部333は、取得された属性値を表示した入力候補ボックスを表示する(ステップS137)。
このとき、入力候補ボックスに表示されている「機能要件ID」属性の属性値のうち、上記したステップS131においてユーザによって右クリックされた箇所(つまり、ユーザによる指定箇所)に入力されていた値(つまり、属性値)については、入力候補ボックスにおいて当該「機能要件ID」属性の属性値の行を色付けし、更には、チェックをつけて選択済みとして表示される。
一方、指定箇所に入力されている値のうち、入力候補ボックスに表示されている「機能要件ID」属性の属性値として存在しない値については、入力候補表示選択部333において予め保持されている指定フォーマットに従って当該値が不正な値であることを示す文章が作成されて、表示される。
ここで、図26に示すように、上記したような入力候補ボックスのリストにおいて、「画面要件」クラスのモデル入力画面において「関連機能要件ID」属性の属性値として入力する値(「機能要件ID」属性の属性値)がユーザによって選択された後に、当該入力候補ボックスに設けられている「複写する」ボタンがユーザによってクリックされたものとする(ステップS138)。
この場合、入力候補表示選択部333は、入力候補ボックスのリストにおいて選択された行の「機能要件ID」属性の属性値を取得する。入力候補表示選択部333は、取得された値を、ユーザによる指定箇所(ステップS131においてユーザによって右クリックされた箇所)に入力する(ステップS139)。これによって、ユーザによる指定箇所に適切な値が入力されることになる。なお、入力候補ボックスは、複写終了後に閉じられる。
図26に示す例では、入力候補ボックスのリストにおいて選択された「機能要件ID」属性の属性値「F01」が、「画面要件」クラスのモデル入力画面内の「画面要件ID」属性の属性値が「S−M−01」であるモデルインスタンスの「関連機能要件ID」属性の箇所(ユーザによる指定箇所)に対して入力されている。
入力支援対象判定部331は、「画面要件」クラスのモデル入力画面において変更作業が行われたことを検知し、第1〜第7のデータを不整合警告部334に渡す。不整合警告部334は、入力支援対象判定部331から渡された第2および第3のデータから当該変更作業が行われたクラス(ここでは、「画面要件」クラス)および属性(ここでは、「関連機能要件ID」属性)を特定する(ステップS140,S141)。
次に、入力支援対象判定部331は、参照関係データ格納部222に格納されている参照関係データに基づいて上述した第6および第7のデータを取得する(ステップS142)。不整合警告部334は、特定された「関連機能要件ID」属性が参照している属性(「関連機能要件ID」の参照先の属性)を、入力支援対象判定部331から渡された第6および第7のデータから特定する。ここでは、図26に示すように、「関連機能要件ID」属性の参照先の属性として、「機能要件」クラスに属する「機能要件ID」属性が特定される。
不整合警告部334は、「画面要件」クラスに属する「関連機能要件ID」属性の属性値(の集合)を、「画面要件」クラスの仕様データ(仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「画面要件」クラスの仕様データ)から取得する(ステップS143)。図27は、図26に示す例において、仕様データ一時格納部23内の更新内容を仕様データ格納部223内の「画面要件」クラスの仕様データに対して反映させることによって、最新の内容の「画面要件」クラスの仕様データが生成される様子を示す。
また、不整合警告部334は、特定された「機能要件」クラスに属する「機能要件ID」属性の属性値(の集合)を、「機能要件」クラスの仕様データ(仕様データ一時格納部23内の更新内容が反映された仕様データ格納部223内の「機能要件」クラスの仕様データ)から取得する(ステップS144)。図28は、図26に示す例において、仕様データ一時格納部23内の更新内容を仕様データ格納部223内の「機能要件」クラスの仕様データに対して反映させることによって、最新の内容の「画面要件」クラスの仕様データが生成される様子を示す。
次に、不整合警告部334は、「画面要件」クラスに属する「関連機能要件ID」属性の属性値と「機能要件」クラスに属する「機能要件ID」属性の属性値とを比較する(ステップS145)。
不整合警告部334は、比較結果に基づいて、「関連機能要件ID」属性の属性値が「機能要件ID」属性の属性値として存在しているか否かを判定する。図26に示す例では、「画面要件」クラスに属する「画面要件ID」属性の属性値が「S−M−02」および「S−M−03」であるモデルインスタンスの「関連機能要件ID」属性の属性値(ここでは、「F02」)が、「機能要件」クラスに属する「機能要件ID」属性の属性値として存在しない。
この場合、不整合警告部334は、「機能要件ID」属性の属性値として存在しない「関連機能要件ID」属性の箇所を、「画面要件」クラスのモデル入力画面において色付けすることにより、当該箇所への入力内容が不正である(つまり、不整合が発生している)ことを警告する(ステップS146)。
更に、不整合警告部334は、「機能要件」クラスのモデル入力画面において、「機能要件ID」属性の列全体を色付けすることにより、「機能要件ID」属性を参照している属性(つまり、「機能要件ID」属性の参照元の属性)との間で、属性値の入力内容の不整合が発生していることを警告する(ステップS147)。
なお、図29は、上記したような処理が実行された直後の不整合参照関係格納部224のデータ構造の一例を示す。なお、不整合参照関係格納部224のデータ構造については、前述した図23において説明した通りであるので、その詳しい説明を省略する。
ここで、入力候補ボックスが表示されてから一度も「複写する」ボタンが押下されていない場合であって、図26に示す入力候補ボックスに設けられている「閉じる」ボタンが押下されたときには、入力候補表示選択部333は、当該入力候補ボックスを閉じる(ステップS148)。
なお、ユーザは、図26に示す「画面要件」クラスのモデル入力画面において色付けされている「関連機能要件ID」属性の他の箇所(つまり、「画面要件ID」属性の属性値が「S−M−02」および「S−M−03」であるモデルインスタンスの「関連機能要件ID」属性の各箇所)についても上記したステップS131と同様に指定することによって、ステップS131〜S147の処理を実行させることができる。
ここで、図30は、「画面要件」クラスのモデル入力画面において色付けされている「関連機能要件ID」属性の全ての箇所について上記したように処理が実行された後の「画面要件」クラスのモデル入力画面の一例を示す。
また、図31は、「画面要件」クラスのモデル入力画面において色付けされている「関連機能要件ID」属性の全ての箇所について処理が実行された後の「機能要件」クラスのモデル入力画面の一例を示す。
また、図32は、「画面要件」クラスのモデル入力画面において色付けされている「関連機能要件ID」属性の全ての箇所について処理が実行された後の不整合参照関係格納部224のデータ構造の一例を示す。
ここで、ユーザは、上記した図31に示す「機能要件」クラスのモデル入力画面を確認することによって、「機能要件」クラスに属する「機能要件ID」属性と、当該「機能要件ID」の参照元の属性(ここでは、「帳票要件」クラスに属する「関連機能要件ID」属性)との間に発生した属性値の不整合の除去作業が完了していないことを知ることができる。
この場合、ユーザは、不整合の除去作業を完了させるため、「機能要件」クラスのモデル入力画面において、「機能要件ID」属性の列の情報の文章に対して作成されているリンクをクリックする。図31に示す「機能要件」クラスのモデル入力画面においては、ユーザは、「☆参照元(2):「帳票要件」クラスの「関連機能要件ID」」の文章(に対して作成されているリンク)をクリックする。
この場合、ユーザによってクリックされたリンクにおいて定義されているクラスのモデル入力画面が表示される。具体的には、図33に示す「帳票要件」クラスのモデル入力画面が表示される。以下、上述したステップS132以降の処理に相当する処理が実行される。
ここで、図34は、図33に示す「帳票要件」クラスのモデル入力画面に対してステップS132以降の処理に相当する処理が実行された後の「帳票要件」クラスのモデル入力画面の一例を示す。図34に示すように、「帳票要件」クラスのモデル入力画面においては、各モデルインスタンスの「関連機能要件ID」属性の属性値から「F02」が削除されている。また、図34に示す「帳票要件」クラスのモデル入力画面においては、上記した図33に示す「帳票要件」クラスのモデル入力画面と比較して、不整合が発生している旨の警告は表示されない。
また、図35は、図33に示す「帳票要件」クラスのモデル入力画面に対してステップS132以降の処理に相当する処理が実行された後の不整合参照関係格納部224のデータ構造の一例を示す。この場合、不整合は発生していないので、不整合参照関係格納部224には図35に示すようにデータは保持されない。
また、図36は、図33に示す「帳票要件」クラスのモデル入力画面に対してステップS132以降の処理に相当する処理が実行された後の「機能要件」クラスのモデル入力画面の一例を示す。この場合、図36に示す「機能要件」クラスのモデル入力画面においては、上記した図31に示す「機能要件」クラスのモデル入力画面と比較して、不整合が発生している旨の警告は表示されない。
ユーザは、例えばこれらのクラスのモデル入力画面を確認することによって、不整合の警告がないことから、上述したようなモデルインスタンスの削除作業の影響による不整合の除去作業を完了したことを知ることができる。
上記したように本実施形態においては、メタモデル格納部221に格納されている設計メタ情報に含まれるモデルクラスおよび当該モデルクラスに属する属性に基づいて仕様データを入力させるモデル入力画面を表示し、当該モデルクラスに属する属性と参照関係にある属性を参照関係データ格納部222に格納されている参照関係データに基づいて特定し、当該モデル入力画面において当該特定された属性を提示する。
また、本実施形態においては、モデル入力画面において仕様データが入力される際に、参照関係データ格納部222に格納されている参照関係データに基づいて当該仕様データとして入力される属性値の候補を提示し、当該提示された属性値の候補のうちユーザによって選択された属性値を仕様データとして入力する。
また、本実施形態においては、モデル入力画面において仕様データとして入力された属性値を変更し、当該属性値が変更された属性値と参照関係にある属性を、参照関係データ格納部222に格納されている参照関係データに基づいて取得し、当該属性値が変更された属性の属性と当該取得された属性の属性値とを比較することによって、当該属性間の不整合を警告する。
これにより、本実施形態においては、参照関係にある属性(の属性値)の探索または入力の手間を削減し、参照関係に関する当該属性間の不整合の発生を抑制し、更には、当該変更に応じて発生した不整合を警告することにより、当該不整合の除去を促すことができる。
具体的には、本実施形態においては、メタモデル格納部221に格納されている設計メタ情報および参照関係データ格納部222に格納されている参照関係データによって定められる参照関係に従った入力値をユーザが入力することができる。
また、本実施形態においては、ユーザは入力対象のクラスのモデル入力画面および当該モデル入力画面内のリンクから辿ることができる画面を表示させればよく、他の様々な画面を自ら探索して表示・参照する必要はなく、ユーザの手間を低減させることが可能となる。
また、本実施形態においては、ユーザによる入力値が高い割合で参照関係に従ったものとなり、当該参照関係に違反することによる仕様の不整合の発生を未然に防止することが可能となる。
更に、本実施形態においては、参照関係に違反していることによる不整合が入力値に発生している場合には、当該不整合を自動的に検出し、ユーザに対して提示することが可能となる。
したがって、本実施形態においては、上記したように仕様の不整合を大幅に減少させることによって仕様に関するデータ(仕様データ)の品質を向上さることができる。また、参照関係に従った入力を行う際の手間、不整合の検知および修正の手間を大幅に減少させることができる。
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。