【解決手段】仕様生成方法は、取得したソースコードを構文解析して、処理の結果を格納する第1の変数と、入力変数で表現された論理式と、第1の変数の値とを対応付けた中間データを生成する中間データ生成ステップと、予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、中間データを、入力中間データと、業務中間データとに分割する分割処理ステップと、入力中間データに含まれる第2の変数の値のうち、入力チェックが成功である場合の第2の変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する簡素化処理ステップと、入力中間データに基づいて、入力チェック設計書を生成するとともに、簡素化された業務中間データに基づいて、業務設計書を生成する設計書生成ステップとを含む。
中間データ生成部が、ソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードを構文解析して、処理の結果を格納する第1の変数と、入力変数で表現された論理式と、前記第1の変数の値とを対応付けた中間データを生成する中間データ生成ステップと、
分割処理部が、予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、前記中間データを、前記入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する分割処理ステップと、
簡素化処理部が、前記入力中間データに含まれる前記第2の変数の値のうち、前記入力チェックが成功である場合の前記第2の変数の値に対応する前記論理式に基づいて、前記業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する簡素化処理ステップと、
設計書生成部が、前記入力中間データに基づいて、前記入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、前記簡素化された業務中間データに基づいて、前記業務処理に関する設計仕様を記述した業務処理設計書を生成する設計書生成ステップと
を含むことを特徴とする仕様生成方法。
中間データ生成部が、ソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードを構文解析して、処理の結果を格納する第1の変数と、入力変数で表現された論理式と、前記第1の変数の値とを対応付けた中間データを生成する中間データ生成ステップと、
分割処理部が、予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、前記中間データを、前記入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する分割処理ステップと、
簡素化処理部が、予め定められた所定のアルゴリズムに基づいて、前記入力中間データから不要な論理式を削除して、簡素化された前記入力中間データを生成する簡素化処理ステップと、
設計書生成部が、前記簡素化された入力中間データに基づいて、前記入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、前記業務中間データに基づいて、前記業務処理に関する設計仕様を記述した業務処理設計書を生成する設計書生成ステップと
を含む仕様生成方法。
ソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードを構文解析して、処理の結果を格納する第1の変数と、入力変数で表現された論理式と、前記第1の変数の値とを対応付けた中間データを生成する中間データ生成部と、
予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、前記中間データを、前記入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する分割処理部と、
前記入力中間データに含まれる前記第2の変数の値のうち、前記入力チェックが成功である場合の前記第2の変数の値に対応する前記論理式に基づいて、前記業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する簡素化処理部と、
前記入力中間データに基づいて、前記入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、前記簡素化された業務中間データに基づいて、前記業務処理に関する設計仕様を記述した業務処理設計書を生成する設計書生成部と
を備える仕様生成装置。
ソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードを構文解析して、処理の結果を格納する第1の変数と、入力変数で表現された論理式と、前記第1の変数の値とを対応付けた中間データを生成する中間データ生成部と、
予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、前記中間データを、前記入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する分割処理部と、
予め定められた所定のアルゴリズムに基づいて、前記入力中間データから不要な論理式を削除して、簡素化された前記入力中間データを生成する簡素化処理部と、
前記簡素化された入力中間データに基づいて、前記入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、前記業務中間データに基づいて、前記業務処理に関する設計仕様を記述した業務処理設計書を生成する設計書生成部と
を備える仕様生成装置。
【発明を実施するための形態】
【0017】
以下、本発明の一実施形態による仕様生成装置及び仕様生成システムについて、図面を参照して説明する。
図1は、本実施形態による仕様生成システム100の一例を示すブロック図である。
この図に示すように、仕様生成システム100は、仕様生成装置1と、ファイルサーバ装置30とを備えている。仕様生成装置1と、ファイルサーバ装置30とは、例えば、ネットワークを介して接続されている。
【0018】
ファイルサーバ装置30は、例えば、記憶装置を備えたサーバ装置であり、仕様生成装置1の入力情報であるソースファイル及び設定ファイルと、仕様生成装置1の出力情報である設計書とを記憶する。ファイルサーバ装置30は、ソースファイル記憶部31と、設定ファイル記憶部32と、設計書記憶部33とを備えている。
【0019】
ソースファイル記憶部31(ソース記憶部の一例)は、例えば、既存のシステムのプログラムのソースファイルであって、設計書を生成するソースファイルを記憶する。なお、ソースファイル記憶部31は、複数のソースファイルを予め記憶していてもよい。ソースファイル記憶部31は、例えば、
図2に示すようなソースファイルを記憶する。
【0020】
図2は、本実施形態におけるソースファイル記憶部31のデータ例を示す図である。
この図に示す例では、購入金額を計算するプログラムのソースコード(SC1)を示している。ソースコードSC1において、処理の結果を格納する格納変数(第1の変数)が“PRICE”及び“ERR”であり、このプログラムは、購入数(“NUM”)、及び、商品がアルコール(“AFLG”)である場合に年齢が20歳以上であるか否かの入力チェックをコンピュータに実行させる。また、ソースコードSC1において、プログラムは、上述した入力チェックの条件を満たす場合に、合計金額を出力する業務処理をコンピュータに実行させる。このように、ソースコード(SC1)において、入力チェックに対応する入力チェック処理と、業務処理とが混在している。ここで、入力チェック処理とは、例えば、仕様上、入力された値が取り得る範囲に収まっているか否かをチェックする処理のことである。また、業務処理は、例えば、所定の目的(例えば、業務上の目的など)を達成するために、プログラムに実行させる処理のことである。
【0021】
図1の説明に戻り、設定ファイル記憶部32は、入力チェックの処理結果を格納するエラーコード格納変数(第2の変数)を設定する設定ファイルを記憶する。ここで、エラーコード格納変数は、例えば、ソースコードの内容を使用者が確認した上で、予め設定される。なお、エラーコード格納変数(第2の変数)は、格納変数(第1の変数)のうちの一部の変数であり、格納変数(第1の変数)には、エラーコード格納変数(第2の変数)が含まれる。設定ファイル記憶部32は、
図3に示すように、エラーコード格納変数と、入力チェックの成功を意味する値とを関連付けて、設定ファイルとして記憶する。
【0022】
図3は、本実施形態における設定ファイル記憶部32のデータ例を示す図である。
この図に示す例では、設定ファイル(EV1)を示している。この例では、設定ファイル記憶部32は、エラーコード格納変数“ERR”と、入力チェックの成功を意味する値“00”とを関連付けて、設定ファイル(EV1)として記憶している。
【0023】
再び、
図1の説明に戻り、設計書記憶部33は、仕様生成装置1の出力情報(出力結果)である設計書を記憶する。なお、仕様生成装置1は、ソースコードから入力チェック設計書と、業務処理設計書とを生成するので、設計書記憶部33は、入力チェック設計書と、業務処理設計書とを記憶する。ここで、入力チェック設計書は、入力チェックに関する設計仕様を記述した設計書である。また、業務処理設計書は、業務処理に関する設計仕様を記述した設計書である。なお、複数のソースファイルを仕様生成装置1に入力した場合には、設計書記憶部33は、複数の入力チェック設計書と、複数の業務処理設計書とを記憶してもよい。ここで、
図4及び
図5を参照して、入力チェック設計書、及び業務処理設計書の一例について説明する。なお、
図4及び
図5に示す入力チェック設計書、及び業務処理設計書は、仕様生成装置1が上述した
図2に示すソースコード(SC1)から生成した場合の一例である。
【0024】
図4は、本実施形態における入力チェック設計書の一例を示す図である。
この図に示すように、入力チェック設計書は、例えば、「NO.」と、「入力チェック内容」と、「エラーコード」とを関連付けた情報を含んでいる。ここで、「NO.」は、入力チェック番号を示し、「入力チェック内容」は、入力チェックの内容であるチェック条件(論理式)を示している。また、「エラーコード」は、エラーコード格納変数の値を示している。なお、本実施形態の入力チェック設計書では、入力チェックが成功である場合の「入力チェック内容」及び「エラーコード」を含めないものとする。
図4に示す例では、例えば、「NO.」が“1”の入力チェックの仕様は、「入力チェック内容」が“NUM<1 ||NUM>99”であり、「エラーコード」が“E1”であることを示している。
【0025】
図5は、本実施形態における業務処理設計書の一例を示す図である。
この図に示すように、業務処理設計書は、例えば、「変数名」と、「更新内容」と、「条件」とを関連付けた情報を含んでいる。ここで、「変数名」は、処理の結果を格納する格納変数名を示し、「更新内容」は、当該変数に値として更新される内容を示している。また、「条件」は、当該変数を更新するための条件を示している。なお、本実施形態の業務処理設計書では、入力チェックが成功したことを前提としており、入力チェックが成功である場合の条件は、記載されないものとする。
図5に示す例では、例えば、「変数名」が“PRICE”の業務仕様は、「更新内容」が“PROD.PRICE*NUM”であり、「条件」が“常に成立”であることを示している。
【0026】
再び、
図1の説明に戻り、仕様生成装置1は、記憶部10と、制御部20とを備えている。
記憶部10は、仕様生成装置1が利用する各種情報を記憶する。記憶部10は、例えば、中間データ記憶部11と、分割中間データ記憶部12と、簡素化中間データ記憶部13とを備えている。
【0027】
中間データ記憶部11は、後述する中間データ生成部21によって記号実行の技術を利用して生成された中間データ(中間デシジョンテーブルという場合がある)を記憶する。ここで、中間データは、
図6に示すように、格納変数(第1の変数)と、入力変数で表現された論理式と、格納変数の値とを対応付けた情報を含んでいる。
【0028】
図6は、本実施形態における中間データの一例を示す図である。
この図に示す例では、上述した
図2に示すソースコード(SC1)に基づいて生成された中間データ(DT1)を示している。この例では、格納変数(第1の変数)が“PRICE”及び“ERR”であり、これらの変数それぞれについて、入力変数で表現された論理式と、格納変数の値とを対応付けている。
【0029】
再び、
図1の説明に戻り、分割中間データ記憶部12は、後述する分割処理部22によってエラーコード格納変数に基づいて分割(分離)された分割中間データを記憶する。なお、分割中間データには、入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとが含まれる。ここで、
図7及び
図8を参照して、入力中間データ、及び業務中間データの一例について説明する。なお、
図7及び
図8に示す入力中間データ、及び業務中間データは、上述した
図6に示す中間データ(DT1)を分割した場合の一例である。
【0030】
図7は、本実施形態における入力中間データの一例を示す図である。
この図において、入力中間データ(SDT1)は、上述した
図6に示す中間データ(DT1)の入力チェックに対応する処理の部分を分割(分離)したデータである。この図に示すように、エラーコード格納変数(例えば、“ERR”)に対応する論理式及びエラーコード格納変数の値を含んでいる。
【0031】
図8は、本実施形態における業務中間データの一例を示す図である。
この図において、業務中間データ(SDT2)は、上述した
図6に示す中間データ(DT1)の業務処理に対応する処理の部分を分割(分離)したデータである。この図に示すように、業務処理の結果を格納する格納変数(例えば、“PRICE”)に対応する論理式及び当該格納変数の値を含んでいる。
【0032】
再び、
図1の説明に戻り、簡素化中間データ記憶部13は、後述する簡素化処理部23によって不要な論理式が削除されて簡素化された中間データを記憶する。なお、簡素化された中間データには、簡素化された入力中間データと、簡素化された業務中間データとが含まれる。ここで、
図9及び
図10を参照して、簡素化された入力中間データ、及び簡素化された業務中間データの一例について説明する。なお、中間データを簡素化する処理(簡素化処理)の詳細については、後述する。
【0033】
図9は、本実施形態における簡素化された入力中間データの一例を示す図である。
この図において、簡素化された入力中間データ(SDT3)は、上述した
図7に示す入力中間データ(SDT1)を簡素化したデータである。この図に示すように、簡素化された入力中間データ(SDT3)は、後述する所定のアルゴリズムによって、不要な論理式が削除された入力中間データである。
【0034】
図10は、本実施形態における簡素化された業務中間データの一例を示す図である。
この図において、簡素化された業務中間データ(SDT4)は、上述した
図8に示す業務中間データ(SDT2)を簡素化したデータである。この図に示すように、簡素化された業務中間データ(SDT4)は、後述する所定のアルゴリズムによって、不要な論理式が削除された業務中間データである。
【0035】
再び、
図1の説明に戻り、制御部20は、例えば、CPU(Central Processing Unit)などを含むプロセッサであり、仕様生成装置1を統括的に制御する。制御部20は、例えば、中間データ生成部21と、分割処理部22と、簡素化処理部23と、設計書生成部24とを備えている。
【0036】
中間データ生成部21は、ファイルサーバ装置30のソースファイル記憶部31からソースファイルに記述されているソースコードを取得する。中間データ生成部21は、取得したソースコードを構文解析し、記号実行の技術を利用した中間データを生成する。中間データ生成部21は、例えば、格納変数(第1の変数)と、入力変数で表現された論理式と、当該格納変数の値とを対応付けた中間データ(例えば、
図6参照)を生成する。ここで、記号実行の技術とは、通常の具体的な値を変数に代入しながらプログラムを実行する代わりに、変数とこれに対応する制約条件(論理式)との対を用いて、制約条件(論理式)を更新しながらシミュレーションする技術のことである。
【0037】
中間データ生成部21は、記号実行の技術を利用することにより、個別の値ではなく変数が取り得る全ての値の範囲を、制約条件(論理式)を通じて一括して取り扱うことができるとともに、中間データにおいて、処理の結果を格納する格納変数以外の中間変数を削除することができる。
また、中間データ生成部21は、構文解析部211と、記号実行部212とを備えている。
【0038】
構文解析部211は、ソースファイル記憶部31から取得したソースコードを構文解析する。
記号実行部212は、構文解析部211が構文解析した解析結果に基づいて、記号実行の技術を利用して、上述した
図6に示すような中間データを生成する。記号実行部212は、生成した中間データを中間データ記憶部11に記憶させる。
【0039】
分割処理部22は、予め指定されたエラーコード格納変数に基づいて、上述した中間データを、入力中間データと、業務中間データとに分割する。分割処理部22は、例えば、ファイルサーバ装置30の設定ファイル記憶部32から設定ファイル(例えば、
図3参照)を取得する。分割処理部22は、取得した設定ファイルにより指定されたエラーコード格納変数に基づいて、中間データ記憶部11が記憶する中間データを、上述した
図7に示すような入力中間データと、上述した
図8に示すような業務中間データとに分割(分離)する。すなわち、分割処理部22は、例えば、中間データからエラーコード格納変数を含む部分を抽出して、入力中間データとして分離する。また、分割処理部22は、例えば、中間データからエラーコード格納変数を含まない部分を抽出して、業務中間データとして分離する。分割処理部22は、分割(分離)した入力中間データと、業務中間データとを分割中間データ記憶部12に記憶させる。
【0040】
簡素化処理部23は、入力中間データに含まれるエラーコード格納変数の値のうち、入力チェックが成功である場合のエラーコード格納変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する。また、簡素化処理部23は、予め定められた所定のアルゴリズムに基づいて、入力中間データから不要な論理式を削除して、簡素化された入力中間データを生成する。
簡素化処理部23は、入力仕様生成部231と、業務仕様生成部232とを備えている。
【0041】
入力仕様生成部231は、予め定められた所定のアルゴリズムに基づいて、簡素化された入力中間データを生成する。すなわち、入力仕様生成部231は、例えば、以下の2つの手法を利用して、入力中間データから不要な論理式を削除して、簡素化された入力中間データを生成する。
【0042】
(第1の手法)
入力仕様生成部231は、恒偽条件となる論理式(例えば、“X==1 かつ X==2”など)に基づいて、入力中間データに含まれる冗長な論理式を削除する。例えば、恒偽条件となる論理式“X==1 かつ X==2”に注目した場合、恒偽条件となる論理式のうちの1つの条件が否定(NOT)となる論理式が“X==1 かつ X!=2”において、“X!=2”は冗長の論理式である。この場合、入力仕様生成部231は、冗長な論理式“X!=2”を削除して、“X==1”とする簡素化処理を実行する。
なお、恒偽条件となる論理式は、例えば、上述した記号実行部212が実行する処理の際に抽出されるものとする。入力仕様生成部231は、この記号実行部212によって抽出された恒偽条件となる論理式のうちの1つの条件が否定(NOT)となる論理式を、例えば、入力中間データから抽出する。入力仕様生成部231は、当該論理式における冗長な論理式の部分を削除する。
【0043】
(第2の手法)
入力仕様生成部231は、簡素化処理部23は、エラーコード格納変数の値の記載順序に基づいて、既に記載済み論理式を削除する。第2の手法は、記載順序に注目し、既に記載(登場)したチェック条件をチェック済み(記載済み)として削除する手法である。例えば、入力チェックの順序が以下のような場合を考える。
【0044】
(1)“X!=1 かつ X!=2”ならば、エラーコード格納変数“ERR”が“E3”
(2)“(X==1 または X==2) かつ P==1”ならば、エラーコード格納変数“ERR”が“E2”
【0045】
この場合、(2)の論理式“(X==1 または X==2)”は、既に記載済み論理式であるので、入力仕様生成部231は、(2)の論理式“(X==1 または X==2)”を削除する。このように、入力仕様生成部231は、既に記載された論理式を論理反転した論理式を既に記載済み論理式として削除する。すなわち、入力仕様生成部231は、エラーコード格納変数の値の記載順序により既に記載された論理式に基づいて、記載不要な論理式を削除する。
なお、本実施形態では、入力仕様生成部231は、決定木に基づいて、(第2の手法)による簡素化処理を実行する。この本実施形態による簡素化処理の詳細については後述する。
【0046】
このように、入力仕様生成部231は、上述した(第1の手法)又は(第2の手法)を利用して、入力中間データから不要な論理式を削除して、
図9に示すような簡素化された入力中間データを生成する。ここで、入力仕様生成部231は、上述した(第1の手法)及び(第2の手法)のうちのいずれか一方を利用して、入力中間データから不要な論理式を削除してもよいし、(第1の手法)及び(第2の手法)の両方を利用して、入力中間データから不要な論理式を削除してもよい。入力仕様生成部231は、生成した簡素化された入力中間データを簡素化中間データ記憶部13に記憶させる。
【0047】
業務仕様生成部232は、上述した入力チェックが成功である場合のエラーコード格納変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する。
【0048】
例えば、
図7に示す入力中間データの例では、入力チェックが成功である場合のエラーコード格納変数の値は、“ERR”が“00”である場合である。そして、この場合、当該エラーコード格納変数の値に対応する論理式は、“(AGE>=20 || PROD.AFLG!=1) && NUM>=1 && NUM<=99”である。業務仕様生成部232は、例えば、上述した(第2の手法)を利用して、論理式“(AGE>=20 || PROD.AFLG!=1) && NUM>=1 && NUM<=99”に基づいて、不要な論理式として削除する。業務仕様生成部232は、まず、エラーコード格納変数“ERR”以外の格納変数に相当する格納変数“PRICE”の決定木を構築する。そして、業務仕様生成部232は、論理式“(AGE>=20 || PROD.AFLG!=1) && NUM>=1 && NUM<=99”の否定(NOT)となる論理式“NUM<1 || NUM>99 || (AGE<20 && PROD.AFLG=1)”を生成する。業務仕様生成部232は、構築した決定木と、入力チェックが成功である場合の論理式を否定(NOT)となる論理式とを利用して、業務中間データのうちから不要な論理式を削除する。
【0049】
その結果、業務仕様生成部232は、
図10に示すような簡素化された業務中間データを生成する。なお、業務仕様生成部232は、この業務中間データの簡素化処理において、決定木に基づいて、業務中間データを簡素化する処理の詳細については後述する。業務仕様生成部232は、生成した簡素化された業務中間データを簡素化中間データ記憶部13に記憶させる。
なお、業務仕様生成部232は、業務中間データの簡素化処理において、上述した(第2の手法)のみではなく、(第1の手法)を利用して、業務中間データから不要な論理式を削除してもよい。すなわち、業務仕様生成部232は、業務中間データの簡素化処理において、上述した(第1の手法)及び(第2の手法)のうちのいずれか一方を利用して、業務中間データから不要な論理式を削除してもよいし、(第1の手法)及び(第2の手法)の両方を利用して、業務中間データから不要な論理式を削除してもよい。
【0050】
設計書生成部24は、簡素化された入力中間データに基づいて、
図4に示すような入力チェック設計書を生成する。また、設計書生成部24は、簡素化された業務中間データに基づいて、
図5に示すような業務処理設計書を生成する。設計書生成部24は、生成した入力チェック設計書及び業務処理設計書をファイルサーバ装置30に出力し、入力チェック設計書及び業務処理設計書を設計書記憶部33に記憶させる。また、設計書生成部24は、入力仕様整形部241と、業務仕様整形部242とを備えている。
【0051】
入力仕様整形部241は、簡素化された入力中間データに基づいて、入力チェックに関する設計仕様を記述した入力チェック設計書を生成する。
なお、簡素化された入力中間データは、分割処理部22によって分割された入力中間データに基づいて生成されたものであるため、入力仕様整形部241は、分割処理部22によって分割された入力中間データに基づいて入力チェック設計書を生成するとしてもよい。
【0052】
業務仕様整形部242は、簡素化された業務中間データに基づいて、業務処理に関する設計仕様を記述した業務処理設計書を生成する。
なお、簡素化された業務中間データは、分割処理部22によって分割された業務中間データに基づいて生成されたものであるため、業務仕様整形部242は、分割処理部22によって分割された業務中間データに基づいて業務処理設計書を生成するとしてもよい。
【0053】
次に、図面を参照して、本実施形態による仕様生成装置1の動作について説明する。
図11は、本実施形態による仕様生成装置1の動作の一例を示すフローチャートである。
この図において、まず、仕様生成装置1の制御部20は、ソースファイルを取得する(ステップS101)。すなわち、制御部20の中間データ生成部21は、ファイルサーバ装置30のソースファイル記憶部31からソースファイルに記述されているソースコードを取得する。
【0054】
次に、中間データ生成部21の構文解析部211は、ソースファイル記憶部31から取得したソースコードを構文解析する(ステップS102)。
次に、中間データ生成部21の記号実行部212は、記号実行の技術を利用して中間データを生成する(ステップS103)。すなわち、記号実行部212は、構文解析部211が構文解析した解析結果に基づいて、記号実行の技術を利用して、格納変数と、入力変数で表現された論理式と、格納変数の値とを対応付けた中間データを生成する。記号実行部212は、生成した中間データを中間データ記憶部11に記憶させる。
【0055】
次に、分割処理部22は、入力チェック用の変数に基づいて、中間データを分割する(ステップS104)。すなわち、分割処理部22は、ファイルサーバ装置30の設定ファイル記憶部32から取得した設定ファイルにより指定されたエラーコード格納変数に基づいて、中間データ記憶部11が記憶する中間データを、入力中間データと、業務中間データとに分割する。分割処理部22は、分割した入力中間データと、業務中間データとを分割中間データ記憶部12に記憶させる。
【0056】
また、簡素化処理部23の業務仕様生成部232は、入力チェックが成功である場合の論理式に基づいて、業務中間データを簡素化する(ステップS105)。業務仕様生成部232は、中間データ記憶部11から業務中間データを取得し、上述した入力チェックが成功である場合のエラーコード格納変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する。業務仕様生成部232は、例えば、(第1の手法)及び(第2の手法)を利用して、業務中間データから不要な論理式を削除する。業務仕様生成部232は、生成した簡素化された業務中間データを簡素化中間データ記憶部13に記憶させる。
【0057】
次に、簡素化処理部23の入力仕様生成部231は、入力中間データを簡素化する(ステップS106)。入力仕様生成部231は、中間データ記憶部11から入力中間データを取得し、例えば、上述した(第1の手法)及び(第2の手法)を利用して、入力中間データから不要な論理式を削除する。入力仕様生成部231は、入力中間データから不要な論理式を削除して生成した簡素化された入力中間データを簡素化中間データ記憶部13に記憶させる。
【0058】
次に、設計書生成部24は、簡素化された入力中間データ及び業務中間データを仕様整形して入力チェック設計書及び業務処理設計書を生成する(ステップS107)。すなわち、設計書生成部24の入力仕様整形部241は、簡素化中間データ記憶部13が記憶する簡素化された入力中間データに基づいて、入力チェック設計書を生成する。また、業務仕様整形部242は、簡素化中間データ記憶部13が記憶する簡素化された業務中間データに基づいて、業務処理設計書を生成する。
【0059】
次に、設計書生成部24は、入力チェック設計書及び業務処理設計書を出力する(ステップS108)。すなわち、設計書生成部24は、生成した入力チェック設計書及び業務処理設計書をファイルサーバ装置30に出力し、入力チェック設計書及び業務処理設計書を設計書記憶部33に記憶させる。ステップS108の処理後に、設計書生成部24は、仕様生成装置1の制御部20は、処理を終了する。
【0060】
なお、上述した
図11に示す例では、ステップS101からステップS103までの処理が、中間データ生成ステップに対応する。また、ステップS104の処理が、分割処理ステップに対応する。ステップS105及びステップS106の処理が、簡素化処理ステップに対応する。また、ステップS107及びステップS108の処理が、設計書生成ステップに対応する。
また、上述した例は、仕様生成装置1が、1つのソースファイルに対して入力チェック設計書及び業務処理設計書を生成する場合の一例を説明したが、複数のソースファイルに対して入力チェック設計書及び業務処理設計書を生成してもよい。この場合には、仕様生成装置1は、上述したステップS101からステップS108までの処理をソースファイルの数に応じて、繰り返し実行する。
【0061】
次に、
図12を参照して、本実施形態における入力中間データの簡素化処理の一例について説明する。
図12は、本実施形態における入力中間データの簡素化処理の一例を示す図である。この図を参照して、上述した(第2の手法)による入力中間データの簡素化処理について説明する。
【0062】
図12に示すように簡素化処理前の入力中間データ(SDT5)は、エラーコード格納変数の値が“E1”→“E2”→“E3”の順に記述されている。この場合、“E1”における「XXコード==“100”」の論理式が、既に記載済みの論理式に相当するので、論理式LG1が削除対象(記載不要な論理式)となる。また、“E2”における「A−DATE<B−DATE」の論理式が、既に記載済みの論理式に相当するので、論理式LG2が削除対象となる。
そのため、入力仕様生成部231は、論理式LG1及び論理式LG2を削除して、簡素化された入力中間データ(SDT6)を生成する。
【0063】
なお、上述した(第2の手法)では、エラーコード格納変数の値の記載順序によって、削除可能な論理式が変化する。入力仕様生成部231は、エラーコード格納変数の値の記載順序を変更した複数のパターンにおいて、記載不要な論理式を削除し、複数のパターンのうちで最も簡素化可能なパターンを選択する。ここでは、
図13を参照して、入力仕様生成部231による順序評価の一例について説明する。
【0064】
図13は、本実施形態の簡素化処理における順序評価の一例を示す図である。
この図において、入力中間データ(SDT1)は、簡素化処理前の入力中間データであり、
図7に示す入力中間データと同様の例である。また、評価結果TC1は、「順序1」として、“E1”→“E2”→“0”の順の記述したバイの評価結果を示し、評価結果TC2は、「順序2」として、“E2”→“E1”→“0”の順の記述したバイの評価結果を示している。
【0065】
図13に示す例では、「順序1」による評価結果TC1は、入力中間データ(SDT1)の論理式の数が4個に簡素化されることを示し、「順序2」による評価結果TC2は、入力中間データ(SDT1)の論理式の数が6個のままであることを示している。この場合、入力仕様生成部231は、「順序1」を選択する。
なお、入力仕様生成部231は、全ての順序の組み合わせについて、上述のような評価を実行してもよいし、例えば、遺伝的アルゴリズムなどの現実的な組み合わせを生成する最適化手法を利用してもよい。
【0066】
次に、
図14を参照して、入力仕様生成部231が、決定木に基づいて、(第2の手法)による簡素化処理を実行する場合の一例について詳細に説明する。
図14は、本実施形態における決定木を利用した簡素化処理の一例を示す図である。
ここでは、
図14(a)に示す「元の論理式」を「チェック済み条件」に基づいて簡素化する場合の例である。この場合、入力仕様生成部231は、まず、
図14(b)に示すように、「元の論理式」の決定木を構築する。なお、この図の決定木において、実線が“True”(真)を示し、破線が“False”(偽)を示している。
【0067】
次に、入力仕様生成部231は、
図14(c)に示すように決定木の「チェック済み条件」の箇所に、記号“⊥”(「何でも良い」を意味する記号)を付与する。
次に、入力仕様生成部231は、
図14(d)に示すように決定木を記号“⊥”から遡って通過したノード(○印の部分)を削除する。ここに示す例では、論理式“P==1”に関するノードが残る。その結果、入力仕様生成部231は、
図14(e)に示すように、「P==1ならば“E2”」とする簡素化された入力中間データを生成する。
このように、入力仕様生成部231は、論理式に基づいて構築された決定木に基づいて、記載済み論理式を削除する。
【0068】
<第1の変形例>
次に、
図15〜
図18を参照して、本実施形態の変形例について説明する。
本実施形態において、仕様生成装置1が、上述した
図5に示すような業務処理設計書を生成する例を説明したが、
図15に示す変形例のように、エラー時の仕様を付与するようにしてもよい。
【0069】
図15は、本実施形態の変形例における業務処理設計書の一例を示す図である。
この図に示すように、業務処理設計書は、例えば、「変数名」と、「更新内容」と、「条件」と、「エラー時」とを関連付けた情報を含んでいる。ここで、「エラー時」は、当該変数のエラー時の値を示している。
図15に示す例では、例えば、「変数名」が“PRICE”の業務仕様は、「更新内容」が“PROD.PRICE*NUM”であり、「エラー時」が“0”であることを示している。
【0070】
図16〜
図18は、
図15に示す業務処理設計書を生成するために、業務仕様生成部232が、上述した
図7及び
図8に示す入力中間データ(SDT1)及び業務中間データ(SDT2)を簡素化する一例を説明する。
図16〜
図18は、本実施形態の変形例における決定木を利用した業務中間データの簡素化処理の一例を説明する図である。
【0071】
図16(a)において、入力中間データ(SDT1)及び業務中間データ(SDT2)は、上述した
図7及び
図8と同様のものであり、「設定ファイル」は、
図3に示す設定ファイル(EV1)と同様のものである。また、この例では、論理式(LG3)は、入力チェックが成功である場合の論理式である。
業務仕様生成部232は、まず、
図16(a)に示す業務中間データ(SDT2)に基づいて、
図16(b)の示すように「変数PRICEの決定木」を構築する。また、業務仕様生成部232は、
図16(b)に示すように、論理式(LG3)の否定(NOT)となる論理式(LG4)を生成する。
【0072】
次に、業務仕様生成部232は、
図17(a)に示すように、論理式(LG4)に基づいて、決定木に記号“⊥”を付与する。業務仕様生成部232は、決定木を記号“⊥”から遡って通過したノードを削除する。その結果、
図17(b)に示すように、全てのノードが削除されて、業務仕様生成部232は、変数“PRICE”が常に“PROD.PRICE*NUM”となるという簡素化された業務中間データを生成する。
また、業務仕様整形部242は、この簡素化された業務中間データに基づいて、
図17(c)に示す業務処理設計書を生成する。
【0073】
また、エラー時の仕様を付与するために、業務仕様生成部232は、
図18(a)に示すように、論理式(LG4)の否定(NOT)となる論理式(LG3)に基づいて、決定木に記号“⊥”を付与する。業務仕様生成部232は、決定木を記号“⊥”から遡って通過したノードを削除する。その結果、
図18(b)に示すように、全てのノードが削除されて、業務仕様生成部232は、変数“PRICE”が常に“0”となるという簡素化された業務中間データを生成する。
また、業務仕様整形部242は、この簡素化された業務中間データに基づいて、
図18(c)に示す業務処理設計書を生成する。
このようにして、仕様生成装置1は、
図15に示すエラー時の仕様を付与した業務処理設計書を生成する。
【0074】
以上説明したように、本実施形態による仕様生成方法は、中間データ生成ステップと、分割処理ステップと、簡素化処理ステップと、設計書生成ステップとを含んでいる。中間データ生成ステップにおいて、中間データ生成部21が、ソースファイルを記憶するソースファイル記憶部31からソースファイルに記述されているソースコードを取得し、取得したソースコードを構文解析して、処理の結果を格納する格納変数(第1の変数)と、入力変数で表現された論理式と、格納変数の値とを対応付けた中間データを生成する。分割処理ステップにおいて、分割処理部22が、予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、中間データを、入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する。簡素化処理ステップにおいて、簡素化処理部23が、入力中間データに含まれるエラーコード格納変数(第2の変数)の値のうち、入力チェックが成功である場合のエラーコード格納変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する。設計書生成ステップにおいて、設計書生成部24が、入力中間データに基づいて、入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、簡素化された業務中間データに基づいて、業務処理に関する設計仕様を記述した業務処理設計書を生成する。
【0075】
これにより、本実施形態による仕様生成方法は、ソースコードから入力チェックに関する設計仕様と業務処理に関する設計仕様とに分離した入力チェック設計書及び業務処理設計書を生成するので、ソースコードから理解しやすい設計書を生成することができる。すなわち、本実施形態による仕様生成方法は、ソースコードから理解しやすい仕様を回復することができる。
例えば、数M(メガ)ステップを超えるソースコードのように大規模なシステムである場合であっても、本実施形態による仕様生成方法は、理解しやすい設計書を自動的に生成することができるので、大規模なシステムの理解を容易にすることができる。
【0076】
また、本実施形態では、簡素化処理ステップにおいて、簡素化処理部23が、予め定められた所定のアルゴリズムに基づいて、入力中間データから不要な論理式を削除して、簡素化された入力中間データを生成する。設計書生成ステップにおいて、設計書生成部24が、簡素化された入力中間データに基づいて、入力チェックに関する設計仕様を記述した入力チェック設計書を生成する。
これにより、入力チェック設計書から不要な論理式が削除されるので、本実施形態による仕様生成方法は、さらに理解しやすい設計書を生成することができる。
【0077】
また、本実施形態では、簡素化処理ステップにおいて、簡素化処理部23が、論理式に基づいて構築された決定木に基づいて、業務中間データ及び入力中間データのうちの少なくとも一方に含まれる記載不要な論理式を削除する。
これにより、本実施形態による仕様生成方法は、簡易な手法により、設計書から記載不要な論理式を削除することができる。
【0078】
また、本実施形態では、簡素化処理ステップにおいて、簡素化処理部23が、恒偽条件となる論理式に基づいて、業務中間データ及び入力中間データのうちの少なくとも一方に含まれる冗長な論理式を削除する。
これにより、本実施形態による仕様生成方法は、簡易な手法により、冗長な論理式を削除することができる。
【0079】
また、本実施形態では、簡素化処理ステップにおいて、簡素化処理部23が、エラーコード格納変数の値の記載順序に基づいて、既に記載済み論理式を削除する。簡素化処理部23は、例えば、既に記載済み論理式に基づいて構築された決定木を利用して、既に記載済み論理式である記載不要な論理式を削除する。
これにより、既に記載済み論理式を記載しないようにするので、本実施形態による仕様生成方法は、さらに理解しやすい設計書を生成することができる。
【0080】
また、本実施形態では、簡素化処理ステップにおいて、簡素化処理部23は、第2の変数の値の記載順序を変更した複数のパターンにおいて、記載済み論理式を削除し、複数のパターンのうちで最も簡素化可能なパターンを選択する。
これにより、本実施形態による仕様生成方法は、複雑なソースコードから適切に簡素化した設計書を生成することができる。
【0081】
また、本実施形態では、中間データ生成部21は、記号実行の技術を利用して、ソースコードから中間データ(中間デシジョンテーブル)を生成する。
これにより、中間データ生成部21は、個別の値ではなく変数が取り得る全ての値の範囲を、制約条件(論理式)を通じて一括して取り扱うことができるとともに、中間データにおいて、処理の結果を格納する格納変数以外の中間変数を削除することができる。
【0082】
また、本実施形態による仕様生成方法は、中間データ生成ステップと、分割処理ステップと、簡素化処理ステップと、設計書生成ステップとを含むようにしてもよい。分割処理ステップにおいて、中間データ生成部21が、ソースファイル記憶部31からソースファイルに記述されているソースコードを取得し、取得したソースコードを構文解析して、格納変数と、入力変数で表現された論理式と、格納変数の値とを対応付けた中間データを生成する。分割処理ステップにおいて、分割処理部22が、予め指定されたエラーコード格納変数に基づいて、中間データを、入力中間データと、業務中間データとに分割する。簡素化処理ステップにおいて、簡素化処理部23が、予め定められた所定のアルゴリズムに基づいて、入力中間データから不要な論理式を削除して、簡素化された入力中間データを生成する。設計書生成ステップにおいて、設計書生成部24が、簡素化された入力中間データに基づいて、入力チェック設計書を生成するとともに、業務中間データに基づいて、業務処理設計書を生成する。
これにより、本実施形態による仕様生成方法は、ソースコードから理解しやすい設計書を生成することができる。
【0083】
また、本実施形態による仕様生成装置1は、中間データ生成部21と、分割処理部22と、簡素化処理部23と、設計書生成部24とを備えている。中間データ生成部21は、ソースファイル記憶部31(ソース記憶部の一例)からソースファイルに記述されているソースコードを取得する。中間データ生成部21は、取得したソースコードを構文解析して、処理の結果を格納する格納変数(第1の変数)と、入力変数で表現された論理式と、格納変数の値とを対応付けた中間データを生成する。分割処理部22は、予め指定された入力チェックの処理結果を格納する第2の変数に基づいて、中間データを、入力チェックに対応する処理の部分を示す入力中間データと、当該入力チェックに対応する処理の部分を含まない業務処理の部分を示す業務中間データとに分割する。簡素化処理部23は、入力中間データに含まれるエラーコード格納変数(第2の変数)の値のうち、入力チェックが成功である場合のエラーコード格納変数の値に対応する論理式に基づいて、業務中間データから不要な論理式を削除して、簡素化された業務中間データを生成する。設計書生成部24は、入力中間データに基づいて、入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、簡素化された業務中間データに基づいて、業務処理に関する設計仕様を記述した業務処理設計書を生成する。
これにより、本実施形態による仕様生成装置1は、上述した本実施形態による仕様生成方法と同様の効果を奏し、ソースコードから理解しやすい仕様を回復することができる。
【0084】
また、本実施形態による仕様生成装置1は、中間データ生成部21と、分割処理部22と、簡素化処理部23と、設計書生成部24とを備えるようにしてもよい。簡素化処理部23は、予め定められた所定のアルゴリズムに基づいて、入力中間データから不要な論理式を削除して、簡素化された入力中間データを生成する。設計書生成部24は、簡素化された入力中間データに基づいて、入力チェックに関する設計仕様を記述した入力チェック設計書を生成するとともに、業務中間データに基づいて、業務処理に関する設計仕様を記述した業務処理設計書を生成する。
これにより、本実施形態による仕様生成装置1は、上述した本実施形態による仕様生成方法と同様の効果を奏し、ソースコードから理解しやすい仕様を回復することができる。
【0085】
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の実施形態において、ファイルサーバ装置30が、ソースファイル記憶部31と、設定ファイル記憶部32と、設計書記憶部33とを備える例を説明したが、これに限定されるものではない。例えば、ソースファイル記憶部31、設定ファイル記憶部32、及び設計書記憶部33の一部又は全てを仕様生成装置1の記憶部10が備えるようにしてもよい。また、例えば、ネットワークに接続された複数のサーバ装置が、ソースファイル記憶部31、設定ファイル記憶部32、及び設計書記憶部33を備えるようにしてもよい。
【0086】
また、仕様生成装置1が備える各構成の一部を、例えば、ネットワークにより接続された外部装置(例えば、サーバ装置など)が備えるようにしてもよい。例えば、記憶部10が備える中間データ記憶部11、分割中間データ記憶部12、及び簡素化中間データ記憶部13の一部又は全部を例えば、ネットワークにより接続された外部装置(例えば、サーバ装置など)が備えるようにしてもよい。
【0087】
また、上記の実施形態において、設定ファイルは、使用者によってエラーコード格納変数が人手で設定される例を説明したが、これに限定されるものではない。例えば、設定ファイルは、プロジェクトの標準コード(標準ルール)などからエラーコード格納変数を読み込むことで設定されるようにしてもよいし、仕様生成装置1が、複数のプログラムを解析して、共通に用いられる変数を自動的に抽出するようにしてもよい。
また、上記の実施形態において、不要な論理式を削除して中間データを簡素化する処理において、決定木を利用する例を説明したが、これに限定されるものではなく、他の手法を利用して簡素化するようにしてもよい。
【0088】
なお、上述した仕様生成システム100及び仕様生成装置1が備える各構成は、内部に、コンピュータシステムを有している。そして、上述した仕様生成システム100及び仕様生成装置1が備える各構成の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述した仕様生成システム100及び仕様生成装置1が備える各構成における処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、インターネットやWAN、LAN、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、CD−ROM等の非一過性の記録媒体であってもよい。
【0089】
また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部又は外部に設けられた記録媒体も含まれる。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後に仕様生成システム100及び仕様生成装置1が備える各構成で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0090】
また、上述した機能の一部又は全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、又は全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、又は汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。