(57)【特許請求の範囲】
【請求項１】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
【請求項２】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
【請求項３】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
【請求項４】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得部と、
前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査部と、
前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成部とを有し、
前記矛盾検査部は、
前記コード生成ルールを参照して、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査するプログラムコード生成装置。
【請求項５】
前記矛盾検査部は、
前記ブロック図で定義されているデータ処理手順に矛盾がある場合に、前記データ処理手順における矛盾を通知する違反情報を出力する請求項１〜４のいずれか一項に記載のプログラムコード生成装置。
【請求項６】
前記プログラムコード生成装置は、更に、
前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを生成するプログラムコード生成部を有する請求項１〜３のいずれか一項に記載のプログラムコード生成装置。
【請求項７】
前記ブロック図取得部は、
前記ブロック図を生成する請求項１〜４のいずれか一項に記載のプログラムコード生成装置。
【請求項８】
コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
【請求項９】
コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
【請求項１０】
コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
【請求項１１】
コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得処理と、
前記コンピュータが、前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査処理と、
前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記コンピュータが、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成処理とを有し、
前記矛盾検査処理において、
前記コンピュータが、
前記コード生成ルールを参照して、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査するプログラムコード生成方法。
【請求項１２】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
【請求項１３】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
【請求項１４】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
【請求項１５】
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得処理と、
前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査処理と、
前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成処理とをコンピュータに実行させるプログラムコード生成プログラムであって、
前記矛盾検査処理において、
前記コンピュータに、
前記コード生成ルールを参照させて、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査させるプログラムコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラムに関する。
【背景技術】
【０００２】
事前に生成したプログラム仕様に基づいて、ソースコード等のプログラムコードを自動生成する方法がある。例えば、ブロック図からプログラムコードを生成する方法がある。ブロック図は、複数のブロックと、ブロック間を接続する接続線とで構成される。各ブロックには、データ処理手順の要素が定義されている。具体的には、各ブロックには、ひとまとまりのデータ処理が定義されている。接続線で複数のブロックを接続することで、ブロック図において、プログラムが入力値を取得してから演算結果が示される出力値を出力するまでのデータ処理手順の流れが記述される。
ブロック図からプログラムコードを生成する技術として、例えば、特許文献１に開示の技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１３８８７号公報
【特許文献２】特開２０１６−５７７１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１及び２では、生成されたブロック図と、不適切なブロック図のパターンとを比較し、生成されたブロック図が不適切なブロック図のパターンと一致する場合に、生成されたブロック図が不適切であることを通知する。
このように、特許文献１及び２の技術では、不適切なブロック図を検出するために、不適切なブロック図のパターンを予め設けておく必要があるという課題がある。【０００５】
本発明は、このような課題を解決することを主な目的とする。つまり、本発明は、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出できる構成を得ることを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るプログラムコード生成装置は、
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得部と、
前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査部とを有する。
【発明の効果】
【０００７】
本発明では、ブロック図でのブロック間の接続を辿ってデータ処理手順に矛盾があるかどうかを検査する。このため、本発明によれば、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るプログラムコード生成装置の機能構成例を示す図。
【図２】実施の形態１に係るプログラムコード生成装置の動作例を示すフローチャート。
【図３】実施の形態１に係るブロック図の例を示す図。
【図４】実施の形態１に係るＳｕｂＡの例を示す図。
【図５】実施の形態１に係るＳｕｂＢの例を示す図。
【図６】実施の形態１に係る解析ルールの例を示す図。
【図７】実施の形態１に係る検査ルールの例を示す図。
【図８】実施の形態１に係るコード生成ルールの例を示す図。
【図９】実施の形態１に係るコード生成ルールの例を示す図。
【図１０】実施の形態１に係るプログラムコードの例を示す図。
【図１１】実施の形態１に係るプログラムコードの例を示す図。
【図１２】実施の形態１に係る違反情報の例を示す図。
【図１３】実施の形態１に係る検査対象抽出部の動作例を示すフローチャート。
【図１４】実施の形態１に係るブロック図検査部の動作例を示すフローチャート。
【図１５】実施の形態１に係るプログラムコード生成部の動作例を示すフローチャート。
【図１６】実施の形態１に係るプログラムコード生成装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分または相当する部分を示す。
【００１０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１は、本実施の形態に係るプログラムコード生成装置１の機能構成例を示す。
また、図１６は、本実施の形態に係るプログラムコード生成装置１のハードウェア構成例を示す。
先ず、図１６を参照してプログラムコード生成装置１のハードウェア構成例を説明し、その後に、図１を参照してプログラムコード生成装置１の機能構成例を説明する。
なお、プログラムコード生成装置１で行われる動作は、プログラムコード生成方法及びプログラムコード生成プログラムに相当する。
【００１１】
プログラムコード生成装置１は、コンピュータである。
プログラムコード生成装置１は、ハードウェアとして、プロセッサ１９０１、補助記憶装置１９０２、主記憶装置１９０３、通信装置１９０４及び入出力装置１９０５を備える。
補助記憶装置１９０２には、図１に示すブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の機能を実現するプログラムが記憶されている。
そして、これらプログラムが補助記憶装置１９０２から主記憶装置１９０３にロードされ、プロセッサ１９０１がこれらプログラムを実行して、後述するブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の動作を行う。
図１では、プロセッサ１９０１がブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の機能を実現するプログラムを実行している状態を模式的に表している。
また、補助記憶装置１９０２は、図１に示すブロック図解析ルール記憶部１２、検査ルール記憶部１３及びコード生成ルール記憶部１６を実現する。なお、ブロック図解析ルール記憶部１２、検査ルール記憶部１３及びコード生成ルール記憶部１６の少なくともいずれかが主記憶装置１９０３により実現されてもよい。
通信装置１９０４は、プログラムコード生成装置１が外部装置と通信を行う場合に用いられる。プログラムコード生成装置１が外部装置との通信を行わないのであれば、通信装置１９０４は省略してもよい。
入出力装置１９０５は、プログラムコード生成装置１のユーザからの指示、ブロック図２等を取得する。また、入出力装置１９０５は、プログラムコード生成装置１にプログラムコード３又は違反情報４を提示する。
【００１２】
次に、図１を参照して、プログラムコード生成装置１の機能構成例を説明する。
【００１３】
ブロック図取得部１１は、入出力装置１９０５を介して、ブロック図２を取得する。
なお、ブロック図２とは、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するデータである。つまり、ブロック図２は、主に複数のブロックと各ブロックを接続する接続線から構成される。なお、ブロック図２の複数のブロックの各々にはデータ処理手順の要素である処理手順要素が割り当てられている。処理手順要素は、ひとまとまりのデータ処理である。
ブロック図取得部１１は、複数のブロック図２を取得することができる。
ブロック図取得部１１により行われる動作は、ブロック図取得処理に相当する。
【００１４】
ブロック図解析ルール記憶部１２は、解析ルールを記憶する。解析ルールは、検査対象抽出部１４がブロック図の構造を解析する際に用いられる。
なお、本実施の形態では、ブロック図解析ルール記憶部１２が解析ルールを保持することとしているが、ブロック図２に解析ルールが含まれていてもよい。
【００１５】
検査ルール記憶部１３は、検査ルールを記憶する。検査ルールは、ブロック図検査部１５がブロック図２で定義されているデータ処理手順に矛盾があるかどうかを検査する際に用いられる。
検査ルール記憶部１３は、検査ルールを複数記憶してもよい。
【００１６】
検査対象抽出部１４は、解析ルール及び検査ルールに基づいて、ブロック図２でのブロック間の接続を辿って、ブロック図２から検査対象となるブロック及び接続線を抽出する。
より具体的には、検査対象抽出部１４は、複数のブロックのうちのいずれかのブロックを起点ブロックとして設定する、そして、検査対象抽出部１４は、起点ブロックからブロック図２におけるブロック間の接続を辿って、起点ブロックが依存しているブロックを依存先ブロックとして抽出する。更に、検査対象抽出部１４は、抽出した依存先ブロックが依存しているブロックを依存先ブロックとして抽出する動作を繰り返し、起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出する。
【００１７】
ブロック図検査部１５は、検査対象抽出部１４により抽出されたブロック及び接続線に対して、検査ルールを適用して、ブロック図２で定義されているデータ処理手順に矛盾があるかどうかを検査する。つまり、ブロック図検査部１５は、ブロック図２に検査ルールに違反している箇所がないかどうかを検査する。
例えば、ブロック図検査部１５は、起点ブロックに割り当てられている処理手順要素と依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する。
また、ブロック図検査部１５は、ブロック図２で定義されているデータ処理手順に矛盾がある場合に、データ処理手順における矛盾を通知する違反情報４を入出力装置１９０５を介して出力する。
【００１８】
検査対象抽出部１４とブロック図検査部１５をまとめて矛盾検査部１８という。
つまり、検査対象抽出部１４及びブロック図検査部１５は、矛盾検査部１８として、ブロック図２でのブロック間の接続を辿って、ブロック図２で定義されているデータ処理手順に矛盾があるかどうかを検査する。なお、矛盾検査部１８により行われる動作は、矛盾検査処理に相当する。
【００１９】
コード生成ルール記憶部１６は、コード生成ルールを記憶する。コード生成ルールは、プログラムコード生成部１７がブロック図２からプログラムコード３を生成する際に用いられる。
【００２０】
プログラムコード生成部１７は、コード生成ルールに基づき、ブロック図２からプログラムコード３を生成する。
つまり、プログラムコード生成部１７は、ブロック図２で定義されているデータ処理手順に矛盾がない場合に、ブロック図２から、ブロック図２で定義されているデータ処理手順が反映されたプログラムコードを生成する。プログラムコードは、コンピュータ言語で記述されている。
【００２１】
＊＊＊動作の説明＊＊＊
次に、図２のフローチャートを参照して、プログラムコード生成装置１の動作例を説明する。
【００２２】
先ず、ブロック図取得部１１が、入出力装置１９０５を介して、ブロック図２を取得する（ステップＳ１）。
【００２３】
次に、検査対象抽出部１４が、ブロック図２に、ブロック図解析ルール記憶部１２に記憶されている解析ルール、検査ルール記憶部１３に記憶されている検査ルールを適用して、ブロック図２から検査対象の情報を抽出する（ステップＳ２）。なお、ステップＳ２の詳細は後述する。
【００２４】
次に、ブロック図検査部１５が、検査対象抽出部１４により抽出された検査対象に関する情報に、検査ルール記憶部１３に記憶されている検査ルールを適用して、ブロック図２で定義されているデータ処理手順に矛盾がないかどうかの検査を行う（ステップＳ３）。なお、ステップＳ３の詳細は後述する。
【００２５】
ステップＳ３の検査の結果、ブロック図２で定義されているデータ処理手順に矛盾がない場合（ステップＳ４でＹＥＳ）は、プラグラムコード生成部１７が、ブロック図２に、コード生成ルール記憶部１６に記憶されているコード生成ルールを適用して、プログラムコード３を生成する（ステップＳ５）。なお、ステップＳ５の詳細は後述する。
【００２６】
一方、ブロック図２で定義されているデータ処理手順に矛盾がある場合（ステップＳ４でＮＯ）は、ブロック図検査部１５は、データ処理手順における矛盾を通知する違反情報４を入出力装置１９０５から出力する（ステップＳ６）。なお、違反情報４の形式については後述する。
【００２７】
このように、本実施の形態では、プログラムコード生成装置１は、ブロック図２が適切であるか否かを検査し、ブロック図２が適切であればプログラムコード３を生成する。
【００２８】
次に、ブロック図２、ブロック図解析ルール記憶部１２で記憶されている解析ルール、検査ルール記憶部１３で記憶されている検査ルール、コード生成ルール記憶部１６で記憶されているコード生成ルール、プログラムコード３及び違反情報４の詳細を説明する。
【００２９】
（ブロック図の例）
ブロック図２は、画像ファイル等のブロック図の外観のみを表す情報のみではなく、開発ツール上でプログラムをブロック図として描画するために必要となる情報や、シミュレーションやコード自動生成を行うための付加的な情報が含まれているファイルである。ブロック図２は、例えば、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）やＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）等の階層的なデータ構造を表現可能なデータを含むファイルとして実現される。ただし、以降では、理解を容易にするために、ブロック図２は、ＸＭＬやＪＳＯＮの形式ではなく、複数のブロックが接続線で接続された形式で表現する。そして、必要に応じて吹き出し等で付加情報を表す。
【００３０】
図３〜図５は、ブロック図２の例を示す。
図３は、プログラムコードに反映させるデータ処理手順が定義されるブロック図２を示す。図４は、図３のブロック図２に含まれるサブルーチンであるＳｕｂＡの詳細を示す。また、図５は、図３のブロック図２に含まれるサブルーチンであるＳｕｂＢの詳細を示す。
【００３１】
図３において、符号Ｂ１〜Ｂ９が付されている要素がブロックである。また、符号Ｌ１２、Ｌ２３、Ｌ２４、Ｌ５３、Ｌ６３、Ｌ７４、Ｌ８４、Ｌ３４９が付されている要素が接続線である。
また、図４において、符号Ｂ３１〜Ｂ３４が付されている要素がブロックである。また、符号Ｌ３１３、Ｌ３２３、Ｌ３３４が付されている要素が接続線である。
また、図５において、符号Ｂ４１〜Ｂ４４が付されている要素がブロックである。また、符号Ｌ４１３、Ｌ４２３、Ｌ４３４が付されている要素が接続線である。
以下、図３のブロック及び接続線について説明するが、以下の説明は図４及び図５のブロック及び接続線にも適用される。
【００３２】
各ブロックには内部データが設定されている。内部データには、例えば、ブロックのＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）、ブロックの名前、ブロックの種別が含まれる。なお、各ブロックに設定されている内部データに含まれる内容が処理手順要素である。
例えば、ブロックＢ１のＩＤは１であり、ブロックＢ１の名前はＩｎ１であり、ブロックＢ１の種別はＩｎｐｕｔである。ＩＤは、各ブロックをユニークに識別するための番号や文字列である。本実施の形態では、ＩＤはユニークな番号とする。名前は、ブロック図２をディスプレイに表示した際にプログラムコード生成装置１のユーザが各ブロックを識別しやすくするために任意につけるものである。ブロックの種別は、各ブロックに割り当てられているデータ処理の特性を識別するために用いられる。例えば、ブロックの種別として、入力、出力、加算、ｉｆ分岐、サブシステム等がある。ブロックの種別を表す識別子として、複数の番号や文字列が予め定義されている。
【００３３】
例えば、ブロックＢ１には種別として「Ｉｎｐｕｔ」が設定されており、ブロックＢ１には処理手順要素として入力処理が割り当てられている。以下、入力処理が割り当てられているブロックを入力ブロックという。
また、ブロックＢ９には種別として「Ｏｕｔｐｕｔ」が設定されており、ブロックＢ９には処理手順要素として出力処理が割り当てられている。以下、出力処理が割り当てられているブロックを出力ブロックという。
また、以下では、処理手順要素として加算演算処理が割り当てられているブロック（種別が「Ｓｕｍ」のブロック）をＳｕｍブロックという。なお、Ｓｕｍブロックは図３には示されていない。
また、処理手順要素としてｉｆ分岐処理が割り当てられているブロック（種別が「Ｉｆ」のブロック）をｉｆブロックという。
また、処理手順要素としてサブシステムが割り当てられているブロック（種別が「Ｓｕｂｓｙｓｔｅｍ」のブロック）をＳｕｂｓｙｓｔｅｍブロックという。
【００３４】
また、図３では、図示していないが、内部データには、最終的にブロック図２からプログラムコード３を生成するために必要となる属性情報も含まれる。例えば、入力ブロックの内部データには、属性情報として、入力データのデータ型、入力データの最大値又は／及び最小値等が含まれる。また、ｉｆブロック等の制御構造を表すブロックでは、内部データに、その制御を行うための条件等や、条件に合致した場合の処理先等に関する情報が属性情報として含まれる。
【００３５】
接続線は、任意の２つのブロック間を接続する線である。接続線は、処理やデータの流れを示すための有向線である。接続線には、内部データとして、接続線が接続する２つのブロックのＩＤと、処理又はデータの流れる方向に関する情報が設定されている。接続線の内部データには、接続元のブロックのＩＤと接続先のブロックのＩＤが含まれる。また、接続元のブロックに複数の出力ポートがある場合、又は接続先のブロックに複数の入力ポートが存在する場合は、接続線の内部データには、ブロックのポートのＩＤも含まれる。例えば、接続線Ｌ１２の内部データには、「接続元：１＃ｏｕｔ：１」と「接続先：２＃ｉｎ：１」と記述されている。これは、接続線Ｌ１２は、ブロックＢ１の出力ポート１とブロックＢ２の入力ポート１とを接続していることを意味する。
また、接続線の内部データには、接続元のブロックのＩＤと接続先のブロックのＩＤとが記述されているため、ブロック図検査部１５は、ブロック間のデータの流れや処理の流れも特定することができる。
例えば、ブロック図検査部１５は、接続線Ｌ１２の内部データを参照することで、入力ブロックＢ１から出力されたデータが、ＩｆブロックＢ２に入力されたことを特定することができる。
このように、ブロック図検査部１５は、ブロック図２に含まれる接続線の内部データを参照することで、ブロック図２内のブロック間の接続関係を特定することができる。
ブロック図検査部１５は、ブロック間の接続関係、各ブロックに割り当てられたデータ処理を解析して、ブロック図２で定義されているデータ処理手順に矛盾がないかどうかを検査する。
なお、接続線は接続元のブロックのＩＤと接続先のブロックのＩＤで識別可能であるため、本実施の形態では、接続線にはＩＤが設定されていない。接続線にＩＤを設定するようにしてもよい。
【００３６】
（解析ルールの例）
次に、ブロック図解析ルール記憶部１２に記憶される解析ルールを説明する。
図６は、解析ルールの例を示す。
【００３７】
図６の解析ルール６００では、ブロックの種別ごとに、ブロックから得られる情報が定義される。
例えば図６の解析ルール６００には、種別６０１、データ入力数６０２、データ出力数６０３、制御入力数６０４、制御出力数６０５、属性６０６が含まれる。
種別６０１は、ブロックの種別を表す。
データ入力数６０２は、ブロックに入力されるデータの数を表す。データ入力数６０２に「１以上」と記載されている場合は、ブロックに入力されるデータの数は可変である。
データ出力数６０３は、ブロックから出力されるデータの数を表す。
制御入力数６０４は、処理の制御に関する入力数を表す。例えば、Ｓｕｂｓｙｓｔｅｍ６１４では制御入力数６０４が「１以上」と定義されている。これは、Ｉｆブロックでの制御結果がＳｕｂｓｙｓｔｅｍブロックに１以上入力されるということを意味する。なお、「１以上」と記載されている場合は、ブロックに入力される制御結果の数は可変である。
制御出力６０５は、処理の制御に関する出力数を表す。例えば、Ｉｆ６１３では制御出力数６０５が「２」と定義されている。これは、Ｉｆブロックでの２つの制御結果が出力されることを意味する。
属性６０６は、ブロックがサポートしている属性を示す。
【００３８】
なお、図６では、説明の簡明化のために自然言語で記述された解析ルール６００を示したが、解析ルール６００をプログラム言語で記述してもよい。
【００３９】
（検査ルールの例）
次に、検査ルール記憶部１３に記憶される検査ルールを説明する。
図７は、検査ルールの例を示す。
【００４０】
図７の検査ルール７００には、ブロック図２に定義されているデータ処理手順における矛盾を検出するためのルールが記述されている。
例えば図７の検査ルール７００には、対象７０１、起点７０２、終点７０３、検査項目７０４が含まれる。
対象７０１は、検査対象の種類を表す。
Ｂｌｏｃｋ７１１は、各ブロックに対する検査項目を表す。
ＤａｔａＳｌｉｃｅ７１２は、データスライスに対する検査項目を表す。
Ｓｌｉｃｅ７１３は、スライスに対する検査項目を表す。
【００４１】
データスライスは、制御依存関係を考慮せずにデータ依存関係のみを考慮して抽出したスライスを指す。なお、本実施の形態では、あるブロック（ブロックαとする）に割り当てられているデータ処理の実行結果が他のブロック（ブロックβとする）に割り当てられているデータ処理の実行に影響を及ぼす場合に、ブロックβはブロックαと「制御依存関係」があるという。ブロックαはブロックβの依存先ブロックである。例えば、図３において、ブロックＢ３はブロックＢ２と制御依存関係がある。つまり、ブロックＢ２はブロックＢ３の依存先ブロックである。
また、「データ依存関係」とは、あるブロック（ブロックαとする）から出力されたデータが他のブロック（ブロックβとする）に到達することである。例えば、図３において、ブロックＢ１から出力されたデータはブロックＢ２に入力されるため、ブロックＢ２はブロックＢ１とデータ依存関係がある。つまり、ブロックＢ１はブロックＢ２の依存先ブロックである。
「スライス」とは、あるブロックと制御依存関係及びデータ依存関係があるブロックの集合（及びその接続関係）である。つまり、スライスは、あるブロックから、当該ブロックと制御依存関係があるブロックを辿っていって得られるブロックの集合（及びその接続関係）と、当該ブロックとデータ依存関係があるブロックを辿っていって得られるブロックの集合（及びその接続関係）である。換言すれば、スライスは当該ブロックと関係する全てのブロックの集合（及びその接続関係）である。
「制御依存関係を考慮せずにデータ依存関係のみを考慮して抽出したスライス」とは、制御依存関係を除いて構築できるスライスのことである。
つまり、データスライスは、あるブロックから、当該ブロックとデータ依存関係があるブロックのみを辿っていって得られたブロックの集合（及びその接続関係）である。
【００４２】
起点７０２は、制御依存関係又はデータ依存関係を探索していく際に起点となるブロックの種別を表す。図７では、ＤａｔａＳｌｉｃｅ７１２及びＳｌｉｃｅ７１３に対して、起点７０２として「Ｏｕｔｐｕｔ」が記載されている。このため、ブロック図検査部１５は、種別が「Ｏｕｔｐｕｔ」のブロックから、種別が「Ｏｕｔｐｕｔ」のブロックとデータ依存関係にあるブロックを辿ってデータスライスを求める。また、ブロック図検査部１５は、種別が「Ｏｕｔｐｕｔ」のブロックから、種別が「Ｏｕｔｐｕｔ」のブロックとデータ依存関係及び制御依存関係にあるブロックを辿ってスライスを求める。
【００４３】
また、終点７０３は、制御依存関係又はデータ依存関係の探索を終了するブロックの種別を表す。ブロック図検査部１５は、通常は、制御依存関係又はデータ依存関係が探索できなくなるまで、つまり、入力ブロックにたどり着くまで制御依存関係又はデータ依存関係の探索を続ける。しかしながら、ブロック図検査部１５の探索を特定の種別のブロックまでで終える場合には終点７０３の欄に該当する種別が定義される。例えば、出力ブロックからＩｆブロックまでのスライスを取得する場合は、終点７０３に「Ｉｆ」が設定される。
【００４４】
検査項目７０４は、抽出された検査対象に対する検査内容を示す。
例えば、Ｂｌｏｃｋ７１１では、ＤａｔａＴｙｐｅが設定できるブロックにＤａｔａＴｙｐｅが設定されていない場合に、ブロック図検査部１５はブロック図２に記載のデータ処理手順に矛盾があると判定する。
また、ＤａｔａＳｌｉｃｅ７１２では、ブロック図検査部１５はデータスライスのパスに含まれるいずれかのブロックのＤａｔａＴｙｐｅが起点のブロックのＤａｔａＴｙｐｅと異なる場合に、ブロック図検査部１５は、ブロック図２に記載のデータ処理手順に矛盾があると判定する。
また、Ｓｌｉｃｅ７１３では、１つのスライスに複数のパスがある場合に、パス間でＭｉｎ（最小値）及びＭａｘ（最大値）のいずれかが異なる場合には、ブロック図検査部１５は、ブロック図２に記載のデータ処理手順に矛盾があると判定する。
【００４５】
なお、図７では、説明の簡明化のために自然言語で記述された検査ルール７００を示したが、検査ルール７００をプログラム言語で記述してもよい。
【００４６】
（コード生成ルール）
次に、コード生成ルール記憶部１６に記憶されるコード生成ルールを説明する。
図８及び図９は、コード生成ルールの例を示す。
【００４７】
図８及び図９のコード生成ルール８００、９００には、ブロック図２に含まれる情報に基づいて、プログラムコード３を生成するために必要な情報が記載される。本実施の形態では、コード生成ルール８００とコード生成ルール９００という、役割が異なる２つのコード生成ルールが存在している。より具体的には、コード生成ルール８００は、ブロック図２の表現には関わらない一般的なコード生成ルールである。コード生成ルール９００は、ブロック図２の表現に関わるコード生成ルールである。
図８のコード生成ルール８００では、プログラムコードに関する一般的な項目８０１とその変換ルール８０２の対が記述されている。また、コード生成ルール８００では、例えば「関数名」という項目については、変換ルール８０２に拡張子は除いたブロック図のファイル名を利用することが記述されている。
また、図９のコード生成ルール９００では、各ブロックの種別を表すブロック種別９０１とその変換ルール９０２の対が記述されている。また、コード生成ルール９００では、ブロック種別６１１が「Ｉｎｐｕｔ」であるブロックに対する変換ルールとして、言語上の種別はＩＮ構造体のメンバで、メンバ名はｎａｍｅ属性の値であり、データ型はｔｙｐｅ属性の値とすることが記述されている。
このようなコード生成ルール８００、９００に基づいて、プログラムコード生成部１７はブロック図２からプログラムコード３を生成する。
【００４８】
なお、図８及び図９では、説明の簡明化のために自然言語で記述されたコード生成ルール８００、９００を示したが、コード生成ルール８００、９００をプログラム言語で記述してもよい。
【００４９】
（プログラムコードの例）
次に、プログラムコード生成部１７で生成されるプログラムコード３を説明する。
図１０及び図１１は、プログラムコード３の例を示す。
【００５０】
図１０に示すプログラムコードをプログラムコード１０００といい、図１１に示すプログラムコードをプログラムコード１１００という。プログラムコード１０００は、ヘッダファイルであり、プログラムコード１１００は、ソースファイルである。
プログラムコード１０００及びプログラムコード１１００は、ともにＣ言語で記述されている。図１０のプログラムコード１０００では、すべての入力を扱うＩＮ構造体が定義されている（図１０の符号１００１）。また、出力を表すＯＵＴ構造体も定義されている（図１０の符号１００２）。また、関数ｓａｍｐｌｅのプロトタイプ宣言も定義されている（図１０の符号１００３）。また、プログラムコード１１００では、ブロック図２から生成されたコードが記述されている。
【００５１】
（違反情報の例）
次に、ブロック図検査部１５が出力する違反情報４を説明する。
図１２は、違反情報４の例を示す。
【００５２】
違反情報４には、データ処理手順における矛盾、すなわち違反が発生しているブロック図２内の箇所を通知するための情報が含まれる。
例えば、図１２に示すように、違反情報４には、検査ルール１２０１、違反ブロック１２０２、関連スライス１２０３、関連パス１２０４が存在する。
検査ルール１２０１には、検査ルール７００が複数存在する場合に、違反を検知した際に用いられた検査ルール７００の番号が示される。
違反ブロック１２０２には、違反が含まれるブロックのＩＤが示される。
関連スライス１２０３には、検査ルール７００に含まれるＳｌｉｃｅ７１３の検査において違反が検知された場合に、違反が検知されたスライスに含まれるブロックのＩＤが列挙される。
また、関連パス１２０４には、検査ルール７００に含まれるＳｌｉｃｅ７１３の検査において違反が検知された場合に、スライスに含まれるパスが示される。１つの｛｝に囲まれる番号が１つのパスを意味する。
なお、違反情報４は、図１２に示す形式とは異なり、検査ルール７００の検査項目７０４ごとに、違反なし、違反ありを一覧表示するようにしてもよい。例えば、違反のない検査項目７０４には「ＹＥＳ」、違反のある検査項目７０４には「ＮＯ」を表示するようにしてもよい。
また、プログラムコード生成装置１のユーザにより分かりやすく違反内容を通知するために、違反情報４に、違反内容を説明する説明文を付加してもよい。
【００５３】
次に、図２に示したステップＳ２、Ｓ３、Ｓ５の詳細を説明する。
最初に、図１３を参照して、ステップＳ２の詳細を説明する。
【００５４】
まず、検査対象抽出部１４が、ブロック図取得部１１からブロック図２を取得する（ステップＳ２１）。
【００５５】
次に、検査対象抽出部１４は、ブロック図解析ルール記憶部１２から解析ルールを読み込む（ステップＳ２２）。
【００５６】
次に、検査対象抽出部１４は、検査ルール記憶部１３から検査ルールを読み込む（ステップＳ２３）。
【００５７】
次に、検査対象抽出部１４は、ステップＳ２３で読み込んだ検査ルールを用いてブロック図２から検査対象を抽出する（ステップＳ２４）。ステップＳ２３で複数の検査ルールを読み込んでいる場合は、検査対象抽出部１４は、検査ルールごとにステップＳ２４を行う。
図７の検査ルール７００を用いて検査対象を抽出する場合は、検査対象抽出部１４は、例えば以下のように動作する。
【００５８】
図７のＢｌｏｃｋ７１１では、起点７０３が「任意」であるため、検査対象抽出部１４は、すべてのブロックを検査対象として抽出する。ただし、検査対象抽出部１４は、ブロック間の関係性は解析しない。
【００５９】
また、ＤａｔａＳｌｉｃｅ７１２では、起点７０３が「Ｏｕｔｐｕｔ」で、終点７０４が「任意」であるため、ブロックの種別が「Ｏｕｔｐｕｔ」であるブロックを起点に、検査対象抽出部１４は、データ依存関係のみを考慮してスライスを抽出する。
つまり、検査対象抽出部１４は、ブロック種別が「Ｏｕｔｐｕｔ」のブロックに割り当てられているデータ処理で扱われるデータに影響を与えるブロックの集合を抽出する。例えば、図３のブロックＢ９とデータ依存関係のあるブロックとして、検査対象抽出部１４は、ブロックＢ３とブロックＢ４を抽出する。つまり、ブロックＢ３とブロックＢ４は、ブロックＢ９の依存先ブロックである。
【００６０】
より具体的には、検査対象抽出部１４は、図６の解析ルールを参照して、ブロックＢ３とブロックＢ４を抽出する。まず、検査対象抽出部１４は、図６で種別６０１が「Ｏｕｔｐｕｔ」の行６１２を参照する。次に、検査対象抽出部１４は、行６１２のデータ入力数６０２を参照する。図６では「１以上」となっているので、種別が「Ｏｕｔｐｕｔ」のブロックは他のブロックから出力データに対する影響を受ける。このため、種別が「Ｏｕｔｐｕｔ」のブロックと接続線で接続されているブロックは、種別が「Ｏｕｔｐｕｔ」のブロックとデータ依存関係にある。
このため、図３では、ブロックＢ９と接続線で接続されているブロックＢ３とブロックＢ４が、ブロックＢ９とデータ依存関係のあるブロックとして抽出される。つまり、ブロックＢ３とブロックＢ４は、ブロックＢ９の依存先ブロックである。
【００６１】
次に、検査対象抽出部１４は、ブロックＢ３とブロックＢ４のそれぞれに対するデータ依存関係がないかを調べる。
ブロックＢ３は、種別がＳｕｂｓｙｓｔｅｍなので、検査対象抽出部１４は、図６の行６１４を参照する。行６１４では、データ入力数６０２が「１以上」なので、ブロックＢ３は、ブロックＢ３にデータを入力しているブロックとデータ依存関係があることが分かる。但し、Ｓｕｂｓｙｓｔｅｍの場合には、実体は別のブロック図にあるので、別のブロック図を確認する必要がある。ブロックＢ３の場合は、図４のＳｕｂＡに実体が示される。検査対象抽出部１４は、図４に対しても同様の解析を行う。
図４のブロックＢ３４と図３のブロックＢ９はＩＤが同じであるため、同じブロックである。図４においてブロックＢ３４はブロックＢ３３に接続している。
ブロックＢ３３は、種別が「Ｓｕｍ」である。図６の解析ルール６００の行６１５では、データ出力数６０３が「１」である。このため、ブロックＢ３３は、ブロックＢ３４とデータ依存関係がある。つまり、ブロックＢ３３はブロックＢ３４（ブロックＢ９）の依存先ブロックである。
また、ブロックＢ３３は、ブロックＢ３１とブロックＢ３２に接続している。ブロックＢ３１とブロックＢ３２はそれぞれ種別が「Ｉｎｐｕｔ」であり、図６の解析ルール６００の行６１１では、データ出力数６０３が「１」である。このため、ブロックＢ３１及びブロックＢ３２は、ブロックＢ３３とデータ依存関係がある。つまり、ブロックＢ３１とブロックＢ３２は、ブロックＢ３３の依存先ブロックである。
以上で、図３のブロックＢ３の内部構成である図３のブロックＢ３１〜Ｂ３４が解析できたため、検査対象抽出部１４は、図３に戻って解析を続ける。
【００６２】
図３のブロックＢ３と接続されているブロックとしては、ブロックＢ２、Ｂ５、Ｂ６の３つがある。ブロックＢ２の種別は「Ｉｆ」であり、図６の解析ルール６００の行６１３では、データ出力数６０３が「０」である。このため、ブロックＢ３はブロックＢ２とはデータ依存関係を持たない。つまり、ブロックＢ２はブロックＢ３の依存先ブロックではない。また、ブロックＢ５とブロックＢ６はそれぞれ種別が「Ｉｎｐｕｔ」であり、図６の解析ルール６００の行６１１では、データ出力数６０３が「１」である。このため、ブロックＢ５及びブロックＢ６は、ブロックＢ３とデータ依存関係がある。つまり、ブロックＢ５及びブロックＢ６は、ブロックＢ３の依存先ブロックである。なお、図３のＩｎ２と図４のＩｎ２はＩＤが同じであるため、同じブロックである。同様に、図３のＩｎ３と図４のＩｎ３はＩＤが同じであるため、同じブロックである。このため、検査対象抽出部１４は、抽出結果をマージする。
検査対象抽出部１４は、図３のブロックＢ９の他方の依存先ブロックであるブロックＢ４についても、同様の手順でデータ依存関係を解析する。
【００６３】
検査対象抽出部１４は、結果的に図３のブロックＢ９のデータスライスとして、ブロックＢ９、ブロックＢ３、ブロックＢ５、ブロックＢ６、ブロックＢ７、ブロックＢ８、図４のブロックＢ３３及び図５のブロックＢ４３を抽出する。
なお、ブロックＢ９、ブロックＢ３、ブロックＢ５、ブロックＢ６、ブロックＢ３３の組と、ブロックＢ９、ブロックＢ４、ブロックＢ７、ブロックＢ８と図５のブロックＢ４３の組は、それぞれ影響を及ぼさないので、検査対象抽出部１４は、それぞれを別のパスとして管理する。
【００６４】
次に、検査対象抽出部１４は、図７の検査ルール７００のＳｌｉｃｅ７１３に従って、種別が「Ｏｕｔｐｕｔ」のブロックからスライスを抽出していく。
この場合には、検査対象抽出部１４は、データ依存関係に加えて、制御依存関係も考慮してブロックを抽出する。あるブロックに対する制御依存関係とは、あるブロックの実行に影響を与えるブロックの出力の集合のことである。
例えば、図３のブロックＢ３及びブロックＢ４と制御依存関係のあるブロックは、Ｉｆブロックである図３のブロックＢ２である。検査対象抽出部１４は、前述したデータスライスとして抽出したブロックの集合に、図３のブロックＢ２とブロックＢ１とを加えて、検査対象のスライスとする。
【００６５】
以上の手順により、検査対象抽出部１４は、検査対象のブロック、検査対象のスライス及び検査対象のデータスライスを抽出することができる。
【００６６】
次に、図１４を参照して、図２のステップＳ３の詳細を説明する。
【００６７】
まず、ブロック図検査部１５は、すべての検査ルールを未検査にマークする（ステップＳ４１）。
【００６８】
次に、ブロック図検査部１５は、未検査の検査ルールがあるか否かを確認する（ステップＳ４２）。
【００６９】
未検査のルールが存在する場合（ステップＳ４２でＹＥＳ）は、ブロック図検査部１５は、検査ルール記憶部１３から未検査の検査ルールを一つ読み込む（ステップＳ４３）。
【００７０】
次に、ブロック図検査部１５は、読み込んだ検査ルールに従ってブロック図２を検査する（ステップＳ４４）。
具体的には、ブロック図検査部１５は、検査対象抽出部１４により抽出されたブロック、データスライス、スライスに対して、検査ルールを適用して、ブロック図２に定義されているデータ処理手順に矛盾がないかを検査する。
つまり、ブロック図検査部１５は、図７の検査ルール７００の行７１１に従い、検査対象抽出部１４により抽出された全てのブロックにおいてＤａｔａＴｙｐｅが設定されていないブロックが存在するかどうかを検査する。
また、ブロック図検査部１５は、図７の検査ルール７００の行７１２に従い、検査対象抽出部１４により抽出されたデータスライスのパスごとに、起点ブロックのＤａｔａＴｙｐｅと異なるＤａｔａＴｙｐｅのブロックがパスに含まれていないかどうかを検査する。
また、ブロック図検査部１５は、図７の検査ルール７００の行７１３に従い、検査対象抽出部１４により抽出されたスライスのパスの間で、Ｍｉｎ又はＭａｘが異なるかどうかを検査する。
【００７１】
次に、ブロック図検査部１５は、検査ルール違反が検知されたか否かを確認する（ステップＳ４５）。
【００７２】
検査ルール違反が検知された場合（ステップＳ４５でＹＥＳ）は、ブロック図検査部１５は、検査ルール違反の詳細を違反検出情報として主記憶装置１９０３等に一時的に記憶させる（ステップＳ４６）。
例えば、ブロック図検査部１５は、違反が検知された検査ルールのＩＤ、違反が検知されたブロックのＩＤ、違反が検知されたスライス、違反が検知されたパス等を違反検出情報として主記憶装置１９０３等に記憶させる。
その後、ブロック図検査部１５は、検査が完了した検査ルールを検査済みとマークし（ステップＳ４７）、ステップＳ４２に戻る。
【００７３】
違反が検知されることなく、一つの検査ルールに対する処理が完了した場合（ステップＳ４５でＮＯ）は、ブロック図検査部１５は、検査が完了した検査ルールを検査済みとマークし（ステップＳ４７）、ステップＳ４２に戻る。
【００７４】
ステップＳ４２で未検査の検査ルールが存在しないと判定した場合（ステップＳ４２でＮＯ）は、ブロック図検査部１５は、主記憶装置１９０３等に違反検出情報が存在しているかどうかを確認する（ステップＳ４８）。
【００７５】
違反検出情報が存在する場合（ステップＳ４８でＹＥＳ）は、ブロック図検査部１５は、違反検出情報を違反情報４として入出力装置９０５のディスプレイ等に出力し、処理を終了する。
また、違反検出情報が存在しない場合（ステップＳ４８でＮＯ）は、ブロック図検査部１５は、プログラムコード生成部１７にプログラムコードの生成を指示する。
【００７６】
次に、図１５を参照して、図２のステップＳ５の詳細を説明する。
【００７７】
まず、プログラムコード生成部１７は、コード生成ルール記憶部１６からコード生成ルールを読み込む（ステップＳ５１）。
【００７８】
次に、プログラムコード生成部１７は、ブロック図検査部１５からブロック図２を取得する（ステップＳ５２）。
【００７９】
次に、プログラムコード生成部１７は、コード生成ルールを使ってブロック図２からプログラムコード３を生成する（ステップＳ５３）。
【００８０】
ステップＳ５３では、例えば、読み込んだコード生成ルールが図８のコード生成ルール８００及び図９のコード生成ルール９００である場合には、プログラムコード生成部１７は、コード生成ルール８００に従って、ヘッダファイルとソースファイルを生成する。
ヘッダファイルのファイル名はブロック図２のファイル名に「．ｈ」を加えたものであり、ソースファイルのファイル名はブロック図２のファイル名に「．ｃ」を加えたものである。このため、ブロック図２のファイル名が「ｓａｍｐｌｅ．ｂｌｋ」であれは、プログラムコード生成部１７は、「ｓａｍｐｌｅ．ｈ」と「ｓａｍｐｌｅ．ｃ」というファイルを生成する。
この際に「ｓａｍｐｌｅ．ｃ」に含ませる関数の関数名は、「ｓａｍｐｌｅ」である。
次に、プログラムコード生成部１７は、ヘッダファイル「ｓａｍｐｌｅ．ｈ」の入力データの構造体と出力データの構造体を定義する。
プログラムコード生成部１７は、入力データの構造体（ＩＮ構造体）を、ブロックの種別が「Ｉｎｐｕｔ」のブロックの内部データに基づいて生成する。
また、プログラムコード生成部１７は、出力データの構造体（ＯＵＴ構造体）を、ブロックの種別が「Ｏｕｔｐｕｔ」のブロックの内部データに基づいて生成する。
プログラムコード生成部１７は、図３〜図５のブロック図から、例えば、図１０に示すプログラムコード１０００（ヘッダファイル）を生成する。
また、プログラムコード生成部１７は、ソースファイル「ｓａｍｐｌｅ．ｃ」の内部を、図９のコード生成ルール９００に従って生成する。
プログラムコード生成部１７は、図３〜図５のブロック図から、例えば、図１１に示すプログラムコード１１００（ソースファイル）を生成する。
【００８１】
＊＊＊実施の形態の効果の説明＊＊＊
このように、本実施の形態では、ブロック図２でのブロック間の接続を辿ってデータ処理手順に矛盾があるかどうかを検査する。このため、本実施の形態によれば、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出することができる。
つまり、本実施の形態では、ブロック図２からプログラムコード３を生成する前に、ブロック図２から抽出したブロック同士の接続関係や設定された変数等の構造を比較するようにしているため、構造上矛盾する箇所を検出することができる。
このため、ソフトウェア開発者が修正の必要な箇所を探しだす必要がなくなり、ソフトウェア開発に要する労力及び時間を削減することができる。
【００８２】
実施の形態２．
実施の形態１では、ブロック図２におけるデータ依存関係及び制御依存関係を抽出し、検査ルールに基づいてデータ処理手順における矛盾がないかどうかを検査する。
本実施の形態では、ブロック図検査部１５は、プログラムコード生成部１７がブロック図２からプログラムコード３を生成するために参照するコード生成ルール８００、９００を参照して、ブロック図２で定義されているデータ処理手順に矛盾があるかどうかを検査する。
本実施の形態でも、プログラムコード生成装置１の機能構成例は図１に示した通りである。また、プログラムコード生成装置１のハードウェア構成例は図１６に示した通りである。
また、ブロック図検査部１５が検査ルール７００に加えてコード生成ルール８００、９００を参照する点を除けば、プログラムコード生成装置１の動作は、実施の形態１と同じである。
【００８３】
本実施の形態によれば、生成対象のプログラムコードの言語仕様に依存した不具合を、プログラムコードを生成する前に検出することができる。このため、本実施の形態によれば、生成したプログラムコードを、プログラム言語に対応する静的コード解析ツールを用いて検査をする必要がなくなり、開発者の手間を省くことができる。
【００８４】
実施の形態３．
実施の形態１及び２では、ブロック図取得部１１を介して外部からブロック図２が入力される。
これに代えて、ブロック図２をプログラムコード生成装置１内で生成するようにしてもよい。
本実施の形態に係るプログラムコード生成装置１では、外部からのブロック図２の入力の代わりに図１のブロック図取得部１１がブロック図を生成する。つまり、本実施の形態では、ブロック図取得部１１はブロック図を生成することによりブロック図を取得する。
プログラムコード生成装置１のハードウェア構成例は、図１６に示す通りである。
また、本実施の形態では、外部からのブロック図２の入力の代わりにブロック図取得部１１がブロック図２を生成する。これ以外の動作は、実施の形態１に示したものと同じである。
【００８５】
以上、本発明の実施の形態について説明したが、これら２つの実施の形態を組み合わせて実施しても構わない。
あるいは、これら２つの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これら２つの実施の形態を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【００８６】
＊＊＊ハードウェア構成の説明＊＊＊
最後に、プログラムコード生成装置１のハードウェア構成の補足説明を行う。
図１６に示すプロセッサ１９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
プロセッサ１９０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等である。
補助記憶装置１９０２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等である。
主記憶装置１９０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置１９０４は、データを受信するレシーバー及びデータを送信するトランスミッターを含む。
通信装置１９０４は、例えば、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
入出力装置１９０５は、例えば、マウス、キーボード、ディスプレイ等である。
【００８７】
また、補助記憶装置１９０２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。
そして、ＯＳの少なくとも一部が主記憶装置１９０３にロードされ、プロセッサ１９０１により実行される。
プロセッサ１９０１はＯＳの少なくとも一部を実行しながら、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の機能を実現するプログラムを実行する。
プロセッサ１９０１がＯＳを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、プログラムコード生成装置１は、プロセッサ１９０１を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の機能を実現するプログラムの実行を分担する。それぞれのプロセッサは、プロセッサ１９０１と同じように、プロセッシングを行うＩＣである。
また、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の処理の結果を示す情報やデータや信号値や変数値が、記憶装置１９０２、プロセッサ１９０１内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記憶媒体に記憶されてもよい。
【００８８】
また、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、プログラムコード生成装置１は、ロジックＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）といった電子回路により実現されてもよい。
この場合は、ブロック図取得部１１、検査対象抽出部１４、ブロック図検査部１５及びプログラムコード生成部１７は、それぞれ電子回路の一部として実現される。
なお、プロセッサ及び上記の電子回路を総称してプロセッシングサーキットリーともいう。
【符号の説明】
【００８９】
１  プログラムコード生成装置、２  ブロック図、３  プログラムコード、４  違反情報、１１  ブロック図取得部、１２  ブロック図解析ルール記憶部、１３  検査ルール記憶部、１４  検査対象抽出部、１５  ブロック図検査部、１６  コード生成ルール記憶部、１７  プログラムコード生成部、１８  矛盾検査部、６００  解析ルール、７００  検査ルール、８００  コード生成ルール、９００  コード生成ルール、１０００  プログラムコード、１１００  プログラムコード。
【図１】
0006486574.tif 000002
【図２】
0006486574.tif 000003
【図３】
0006486574.tif 000004
【図４】
0006486574.tif 000005
【図５】
0006486574.tif 000006
【図６】
0006486574.tif 000007
【図７】
0006486574.tif 000008
【図８】
0006486574.tif 000009
【図９】
0006486574.tif 000010
【図１０】
0006486574.tif 000011
【図１１】
0006486574.tif 000012
【図１２】
0006486574.tif 000013
【図１３】
0006486574.tif 000014
【図１４】
0006486574.tif 000015
【図１５】
0006486574.tif 000016
【図１６】
0006486574.tif 000017