JP6486574B2 - プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム - Google Patents

プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム Download PDF

Info

Publication number
JP6486574B2
JP6486574B2 JP2018550936A JP2018550936A JP6486574B2 JP 6486574 B2 JP6486574 B2 JP 6486574B2 JP 2018550936 A JP2018550936 A JP 2018550936A JP 2018550936 A JP2018550936 A JP 2018550936A JP 6486574 B2 JP6486574 B2 JP 6486574B2
Authority
JP
Japan
Prior art keywords
block
processing procedure
block diagram
program code
blocks
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018550936A
Other languages
English (en)
Other versions
JPWO2018092237A1 (ja
Inventor
武 植田
武 植田
信博 小林
信博 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Application granted granted Critical
Publication of JP6486574B2 publication Critical patent/JP6486574B2/ja
Publication of JPWO2018092237A1 publication Critical patent/JPWO2018092237A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/323Visualisation of programs or trace data

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラムに関する。
事前に生成したプログラム仕様に基づいて、ソースコード等のプログラムコードを自動生成する方法がある。例えば、ブロック図からプログラムコードを生成する方法がある。ブロック図は、複数のブロックと、ブロック間を接続する接続線とで構成される。各ブロックには、データ処理手順の要素が定義されている。具体的には、各ブロックには、ひとまとまりのデータ処理が定義されている。接続線で複数のブロックを接続することで、ブロック図において、プログラムが入力値を取得してから演算結果が示される出力値を出力するまでのデータ処理手順の流れが記述される。
ブロック図からプログラムコードを生成する技術として、例えば、特許文献1に開示の技術がある。
特開2011−13887号公報 特開2016−57715号公報
特許文献1及び2では、生成されたブロック図と、不適切なブロック図のパターンとを比較し、生成されたブロック図が不適切なブロック図のパターンと一致する場合に、生成されたブロック図が不適切であることを通知する。
このように、特許文献1及び2の技術では、不適切なブロック図を検出するために、不適切なブロック図のパターンを予め設けておく必要があるという課題がある。
本発明は、このような課題を解決することを主な目的とする。つまり、本発明は、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出できる構成を得ることを主な目的とする。
本発明に係るプログラムコード生成装置は、
プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得部と、
前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査部とを有する。
本発明では、ブロック図でのブロック間の接続を辿ってデータ処理手順に矛盾があるかどうかを検査する。このため、本発明によれば、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出することができる。
実施の形態1に係るプログラムコード生成装置の機能構成例を示す図。 実施の形態1に係るプログラムコード生成装置の動作例を示すフローチャート。 実施の形態1に係るブロック図の例を示す図。 実施の形態1に係るSubAの例を示す図。 実施の形態1に係るSubBの例を示す図。 実施の形態1に係る解析ルールの例を示す図。 実施の形態1に係る検査ルールの例を示す図。 実施の形態1に係るコード生成ルールの例を示す図。 実施の形態1に係るコード生成ルールの例を示す図。 実施の形態1に係るプログラムコードの例を示す図。 実施の形態1に係るプログラムコードの例を示す図。 実施の形態1に係る違反情報の例を示す図。 実施の形態1に係る検査対象抽出部の動作例を示すフローチャート。 実施の形態1に係るブロック図検査部の動作例を示すフローチャート。 実施の形態1に係るプログラムコード生成部の動作例を示すフローチャート。 実施の形態1に係るプログラムコード生成装置のハードウェア構成例を示す図。
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分または相当する部分を示す。
実施の形態1.
***構成の説明***
図1は、本実施の形態に係るプログラムコード生成装置1の機能構成例を示す。
また、図16は、本実施の形態に係るプログラムコード生成装置1のハードウェア構成例を示す。
先ず、図16を参照してプログラムコード生成装置1のハードウェア構成例を説明し、その後に、図1を参照してプログラムコード生成装置1の機能構成例を説明する。
なお、プログラムコード生成装置1で行われる動作は、プログラムコード生成方法及びプログラムコード生成プログラムに相当する。
プログラムコード生成装置1は、コンピュータである。
プログラムコード生成装置1は、ハードウェアとして、プロセッサ1901、補助記憶装置1902、主記憶装置1903、通信装置1904及び入出力装置1905を備える。
補助記憶装置1902には、図1に示すブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の機能を実現するプログラムが記憶されている。
そして、これらプログラムが補助記憶装置1902から主記憶装置1903にロードされ、プロセッサ1901がこれらプログラムを実行して、後述するブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の動作を行う。
図1では、プロセッサ1901がブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の機能を実現するプログラムを実行している状態を模式的に表している。
また、補助記憶装置1902は、図1に示すブロック図解析ルール記憶部12、検査ルール記憶部13及びコード生成ルール記憶部16を実現する。なお、ブロック図解析ルール記憶部12、検査ルール記憶部13及びコード生成ルール記憶部16の少なくともいずれかが主記憶装置1903により実現されてもよい。
通信装置1904は、プログラムコード生成装置1が外部装置と通信を行う場合に用いられる。プログラムコード生成装置1が外部装置との通信を行わないのであれば、通信装置1904は省略してもよい。
入出力装置1905は、プログラムコード生成装置1のユーザからの指示、ブロック図2等を取得する。また、入出力装置1905は、プログラムコード生成装置1にプログラムコード3又は違反情報4を提示する。
次に、図1を参照して、プログラムコード生成装置1の機能構成例を説明する。
ブロック図取得部11は、入出力装置1905を介して、ブロック図2を取得する。
なお、ブロック図2とは、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するデータである。つまり、ブロック図2は、主に複数のブロックと各ブロックを接続する接続線から構成される。なお、ブロック図2の複数のブロックの各々にはデータ処理手順の要素である処理手順要素が割り当てられている。処理手順要素は、ひとまとまりのデータ処理である。
ブロック図取得部11は、複数のブロック図2を取得することができる。
ブロック図取得部11により行われる動作は、ブロック図取得処理に相当する。
ブロック図解析ルール記憶部12は、解析ルールを記憶する。解析ルールは、検査対象抽出部14がブロック図の構造を解析する際に用いられる。
なお、本実施の形態では、ブロック図解析ルール記憶部12が解析ルールを保持することとしているが、ブロック図2に解析ルールが含まれていてもよい。
検査ルール記憶部13は、検査ルールを記憶する。検査ルールは、ブロック図検査部15がブロック図2で定義されているデータ処理手順に矛盾があるかどうかを検査する際に用いられる。
検査ルール記憶部13は、検査ルールを複数記憶してもよい。
検査対象抽出部14は、解析ルール及び検査ルールに基づいて、ブロック図2でのブロック間の接続を辿って、ブロック図2から検査対象となるブロック及び接続線を抽出する。
より具体的には、検査対象抽出部14は、複数のブロックのうちのいずれかのブロックを起点ブロックとして設定する、そして、検査対象抽出部14は、起点ブロックからブロック図2におけるブロック間の接続を辿って、起点ブロックが依存しているブロックを依存先ブロックとして抽出する。更に、検査対象抽出部14は、抽出した依存先ブロックが依存しているブロックを依存先ブロックとして抽出する動作を繰り返し、起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出する。
ブロック図検査部15は、検査対象抽出部14により抽出されたブロック及び接続線に対して、検査ルールを適用して、ブロック図2で定義されているデータ処理手順に矛盾があるかどうかを検査する。つまり、ブロック図検査部15は、ブロック図2に検査ルールに違反している箇所がないかどうかを検査する。
例えば、ブロック図検査部15は、起点ブロックに割り当てられている処理手順要素と依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する。
また、ブロック図検査部15は、ブロック図2で定義されているデータ処理手順に矛盾がある場合に、データ処理手順における矛盾を通知する違反情報4を入出力装置1905を介して出力する。
検査対象抽出部14とブロック図検査部15をまとめて矛盾検査部18という。
つまり、検査対象抽出部14及びブロック図検査部15は、矛盾検査部18として、ブロック図2でのブロック間の接続を辿って、ブロック図2で定義されているデータ処理手順に矛盾があるかどうかを検査する。なお、矛盾検査部18により行われる動作は、矛盾検査処理に相当する。
コード生成ルール記憶部16は、コード生成ルールを記憶する。コード生成ルールは、プログラムコード生成部17がブロック図2からプログラムコード3を生成する際に用いられる。
プログラムコード生成部17は、コード生成ルールに基づき、ブロック図2からプログラムコード3を生成する。
つまり、プログラムコード生成部17は、ブロック図2で定義されているデータ処理手順に矛盾がない場合に、ブロック図2から、ブロック図2で定義されているデータ処理手順が反映されたプログラムコードを生成する。プログラムコードは、コンピュータ言語で記述されている。
***動作の説明***
次に、図2のフローチャートを参照して、プログラムコード生成装置1の動作例を説明する。
先ず、ブロック図取得部11が、入出力装置1905を介して、ブロック図2を取得する(ステップS1)。
次に、検査対象抽出部14が、ブロック図2に、ブロック図解析ルール記憶部12に記憶されている解析ルール、検査ルール記憶部13に記憶されている検査ルールを適用して、ブロック図2から検査対象の情報を抽出する(ステップS2)。なお、ステップS2の詳細は後述する。
次に、ブロック図検査部15が、検査対象抽出部14により抽出された検査対象に関する情報に、検査ルール記憶部13に記憶されている検査ルールを適用して、ブロック図2で定義されているデータ処理手順に矛盾がないかどうかの検査を行う(ステップS3)。なお、ステップS3の詳細は後述する。
ステップS3の検査の結果、ブロック図2で定義されているデータ処理手順に矛盾がない場合(ステップS4でYES)は、プラグラムコード生成部17が、ブロック図2に、コード生成ルール記憶部16に記憶されているコード生成ルールを適用して、プログラムコード3を生成する(ステップS5)。なお、ステップS5の詳細は後述する。
一方、ブロック図2で定義されているデータ処理手順に矛盾がある場合(ステップS4でNO)は、ブロック図検査部15は、データ処理手順における矛盾を通知する違反情報4を入出力装置1905から出力する(ステップS6)。なお、違反情報4の形式については後述する。
このように、本実施の形態では、プログラムコード生成装置1は、ブロック図2が適切であるか否かを検査し、ブロック図2が適切であればプログラムコード3を生成する。
次に、ブロック図2、ブロック図解析ルール記憶部12で記憶されている解析ルール、検査ルール記憶部13で記憶されている検査ルール、コード生成ルール記憶部16で記憶されているコード生成ルール、プログラムコード3及び違反情報4の詳細を説明する。
(ブロック図の例)
ブロック図2は、画像ファイル等のブロック図の外観のみを表す情報のみではなく、開発ツール上でプログラムをブロック図として描画するために必要となる情報や、シミュレーションやコード自動生成を行うための付加的な情報が含まれているファイルである。ブロック図2は、例えば、XML(Extensible Markup Language)やJSON(JavaScript(登録商標) Object Notation)等の階層的なデータ構造を表現可能なデータを含むファイルとして実現される。ただし、以降では、理解を容易にするために、ブロック図2は、XMLやJSONの形式ではなく、複数のブロックが接続線で接続された形式で表現する。そして、必要に応じて吹き出し等で付加情報を表す。
図3〜図5は、ブロック図2の例を示す。
図3は、プログラムコードに反映させるデータ処理手順が定義されるブロック図2を示す。図4は、図3のブロック図2に含まれるサブルーチンであるSubAの詳細を示す。また、図5は、図3のブロック図2に含まれるサブルーチンであるSubBの詳細を示す。
図3において、符号B1〜B9が付されている要素がブロックである。また、符号L12、L23、L24、L53、L63、L74、L84、L349が付されている要素が接続線である。
また、図4において、符号B31〜B34が付されている要素がブロックである。また、符号L313、L323、L334が付されている要素が接続線である。
また、図5において、符号B41〜B44が付されている要素がブロックである。また、符号L413、L423、L434が付されている要素が接続線である。
以下、図3のブロック及び接続線について説明するが、以下の説明は図4及び図5のブロック及び接続線にも適用される。
各ブロックには内部データが設定されている。内部データには、例えば、ブロックのID(Identifier)、ブロックの名前、ブロックの種別が含まれる。なお、各ブロックに設定されている内部データに含まれる内容が処理手順要素である。
例えば、ブロックB1のIDは1であり、ブロックB1の名前はIn1であり、ブロックB1の種別はInputである。IDは、各ブロックをユニークに識別するための番号や文字列である。本実施の形態では、IDはユニークな番号とする。名前は、ブロック図2をディスプレイに表示した際にプログラムコード生成装置1のユーザが各ブロックを識別しやすくするために任意につけるものである。ブロックの種別は、各ブロックに割り当てられているデータ処理の特性を識別するために用いられる。例えば、ブロックの種別として、入力、出力、加算、if分岐、サブシステム等がある。ブロックの種別を表す識別子として、複数の番号や文字列が予め定義されている。
例えば、ブロックB1には種別として「Input」が設定されており、ブロックB1には処理手順要素として入力処理が割り当てられている。以下、入力処理が割り当てられているブロックを入力ブロックという。
また、ブロックB9には種別として「Output」が設定されており、ブロックB9には処理手順要素として出力処理が割り当てられている。以下、出力処理が割り当てられているブロックを出力ブロックという。
また、以下では、処理手順要素として加算演算処理が割り当てられているブロック(種別が「Sum」のブロック)をSumブロックという。なお、Sumブロックは図3には示されていない。
また、処理手順要素としてif分岐処理が割り当てられているブロック(種別が「If」のブロック)をifブロックという。
また、処理手順要素としてサブシステムが割り当てられているブロック(種別が「Subsystem」のブロック)をSubsystemブロックという。
また、図3では、図示していないが、内部データには、最終的にブロック図2からプログラムコード3を生成するために必要となる属性情報も含まれる。例えば、入力ブロックの内部データには、属性情報として、入力データのデータ型、入力データの最大値又は/及び最小値等が含まれる。また、ifブロック等の制御構造を表すブロックでは、内部データに、その制御を行うための条件等や、条件に合致した場合の処理先等に関する情報が属性情報として含まれる。
接続線は、任意の2つのブロック間を接続する線である。接続線は、処理やデータの流れを示すための有向線である。接続線には、内部データとして、接続線が接続する2つのブロックのIDと、処理又はデータの流れる方向に関する情報が設定されている。接続線の内部データには、接続元のブロックのIDと接続先のブロックのIDが含まれる。また、接続元のブロックに複数の出力ポートがある場合、又は接続先のブロックに複数の入力ポートが存在する場合は、接続線の内部データには、ブロックのポートのIDも含まれる。例えば、接続線L12の内部データには、「接続元:1#out:1」と「接続先:2#in:1」と記述されている。これは、接続線L12は、ブロックB1の出力ポート1とブロックB2の入力ポート1とを接続していることを意味する。
また、接続線の内部データには、接続元のブロックのIDと接続先のブロックのIDとが記述されているため、ブロック図検査部15は、ブロック間のデータの流れや処理の流れも特定することができる。
例えば、ブロック図検査部15は、接続線L12の内部データを参照することで、入力ブロックB1から出力されたデータが、IfブロックB2に入力されたことを特定することができる。
このように、ブロック図検査部15は、ブロック図2に含まれる接続線の内部データを参照することで、ブロック図2内のブロック間の接続関係を特定することができる。
ブロック図検査部15は、ブロック間の接続関係、各ブロックに割り当てられたデータ処理を解析して、ブロック図2で定義されているデータ処理手順に矛盾がないかどうかを検査する。
なお、接続線は接続元のブロックのIDと接続先のブロックのIDで識別可能であるため、本実施の形態では、接続線にはIDが設定されていない。接続線にIDを設定するようにしてもよい。
(解析ルールの例)
次に、ブロック図解析ルール記憶部12に記憶される解析ルールを説明する。
図6は、解析ルールの例を示す。
図6の解析ルール600では、ブロックの種別ごとに、ブロックから得られる情報が定義される。
例えば図6の解析ルール600には、種別601、データ入力数602、データ出力数603、制御入力数604、制御出力数605、属性606が含まれる。
種別601は、ブロックの種別を表す。
データ入力数602は、ブロックに入力されるデータの数を表す。データ入力数602に「1以上」と記載されている場合は、ブロックに入力されるデータの数は可変である。
データ出力数603は、ブロックから出力されるデータの数を表す。
制御入力数604は、処理の制御に関する入力数を表す。例えば、Subsystem614では制御入力数604が「1以上」と定義されている。これは、Ifブロックでの制御結果がSubsystemブロックに1以上入力されるということを意味する。なお、「1以上」と記載されている場合は、ブロックに入力される制御結果の数は可変である。
制御出力605は、処理の制御に関する出力数を表す。例えば、If613では制御出力数605が「2」と定義されている。これは、Ifブロックでの2つの制御結果が出力されることを意味する。
属性606は、ブロックがサポートしている属性を示す。
なお、図6では、説明の簡明化のために自然言語で記述された解析ルール600を示したが、解析ルール600をプログラム言語で記述してもよい。
(検査ルールの例)
次に、検査ルール記憶部13に記憶される検査ルールを説明する。
図7は、検査ルールの例を示す。
図7の検査ルール700には、ブロック図2に定義されているデータ処理手順における矛盾を検出するためのルールが記述されている。
例えば図7の検査ルール700には、対象701、起点702、終点703、検査項目704が含まれる。
対象701は、検査対象の種類を表す。
Block711は、各ブロックに対する検査項目を表す。
DataSlice712は、データスライスに対する検査項目を表す。
Slice713は、スライスに対する検査項目を表す。
データスライスは、制御依存関係を考慮せずにデータ依存関係のみを考慮して抽出したスライスを指す。なお、本実施の形態では、あるブロック(ブロックαとする)に割り当てられているデータ処理の実行結果が他のブロック(ブロックβとする)に割り当てられているデータ処理の実行に影響を及ぼす場合に、ブロックβはブロックαと「制御依存関係」があるという。ブロックαはブロックβの依存先ブロックである。例えば、図3において、ブロックB3はブロックB2と制御依存関係がある。つまり、ブロックB2はブロックB3の依存先ブロックである。
また、「データ依存関係」とは、あるブロック(ブロックαとする)から出力されたデータが他のブロック(ブロックβとする)に到達することである。例えば、図3において、ブロックB1から出力されたデータはブロックB2に入力されるため、ブロックB2はブロックB1とデータ依存関係がある。つまり、ブロックB1はブロックB2の依存先ブロックである。
「スライス」とは、あるブロックと制御依存関係及びデータ依存関係があるブロックの集合(及びその接続関係)である。つまり、スライスは、あるブロックから、当該ブロックと制御依存関係があるブロックを辿っていって得られるブロックの集合(及びその接続関係)と、当該ブロックとデータ依存関係があるブロックを辿っていって得られるブロックの集合(及びその接続関係)である。換言すれば、スライスは当該ブロックと関係する全てのブロックの集合(及びその接続関係)である。
「制御依存関係を考慮せずにデータ依存関係のみを考慮して抽出したスライス」とは、制御依存関係を除いて構築できるスライスのことである。
つまり、データスライスは、あるブロックから、当該ブロックとデータ依存関係があるブロックのみを辿っていって得られたブロックの集合(及びその接続関係)である。
起点702は、制御依存関係又はデータ依存関係を探索していく際に起点となるブロックの種別を表す。図7では、DataSlice712及びSlice713に対して、起点702として「Output」が記載されている。このため、ブロック図検査部15は、種別が「Output」のブロックから、種別が「Output」のブロックとデータ依存関係にあるブロックを辿ってデータスライスを求める。また、ブロック図検査部15は、種別が「Output」のブロックから、種別が「Output」のブロックとデータ依存関係及び制御依存関係にあるブロックを辿ってスライスを求める。
また、終点703は、制御依存関係又はデータ依存関係の探索を終了するブロックの種別を表す。ブロック図検査部15は、通常は、制御依存関係又はデータ依存関係が探索できなくなるまで、つまり、入力ブロックにたどり着くまで制御依存関係又はデータ依存関係の探索を続ける。しかしながら、ブロック図検査部15の探索を特定の種別のブロックまでで終える場合には終点703の欄に該当する種別が定義される。例えば、出力ブロックからIfブロックまでのスライスを取得する場合は、終点703に「If」が設定される。
検査項目704は、抽出された検査対象に対する検査内容を示す。
例えば、Block711では、DataTypeが設定できるブロックにDataTypeが設定されていない場合に、ブロック図検査部15はブロック図2に記載のデータ処理手順に矛盾があると判定する。
また、DataSlice712では、ブロック図検査部15はデータスライスのパスに含まれるいずれかのブロックのDataTypeが起点のブロックのDataTypeと異なる場合に、ブロック図検査部15は、ブロック図2に記載のデータ処理手順に矛盾があると判定する。
また、Slice713では、1つのスライスに複数のパスがある場合に、パス間でMin(最小値)及びMax(最大値)のいずれかが異なる場合には、ブロック図検査部15は、ブロック図2に記載のデータ処理手順に矛盾があると判定する。
なお、図7では、説明の簡明化のために自然言語で記述された検査ルール700を示したが、検査ルール700をプログラム言語で記述してもよい。
(コード生成ルール)
次に、コード生成ルール記憶部16に記憶されるコード生成ルールを説明する。
図8及び図9は、コード生成ルールの例を示す。
図8及び図9のコード生成ルール800、900には、ブロック図2に含まれる情報に基づいて、プログラムコード3を生成するために必要な情報が記載される。本実施の形態では、コード生成ルール800とコード生成ルール900という、役割が異なる2つのコード生成ルールが存在している。より具体的には、コード生成ルール800は、ブロック図2の表現には関わらない一般的なコード生成ルールである。コード生成ルール900は、ブロック図2の表現に関わるコード生成ルールである。
図8のコード生成ルール800では、プログラムコードに関する一般的な項目801とその変換ルール802の対が記述されている。また、コード生成ルール800では、例えば「関数名」という項目については、変換ルール802に拡張子は除いたブロック図のファイル名を利用することが記述されている。
また、図9のコード生成ルール900では、各ブロックの種別を表すブロック種別901とその変換ルール902の対が記述されている。また、コード生成ルール900では、ブロック種別611が「Input」であるブロックに対する変換ルールとして、言語上の種別はIN構造体のメンバで、メンバ名はname属性の値であり、データ型はtype属性の値とすることが記述されている。
このようなコード生成ルール800、900に基づいて、プログラムコード生成部17はブロック図2からプログラムコード3を生成する。
なお、図8及び図9では、説明の簡明化のために自然言語で記述されたコード生成ルール800、900を示したが、コード生成ルール800、900をプログラム言語で記述してもよい。
(プログラムコードの例)
次に、プログラムコード生成部17で生成されるプログラムコード3を説明する。
図10及び図11は、プログラムコード3の例を示す。
図10に示すプログラムコードをプログラムコード1000といい、図11に示すプログラムコードをプログラムコード1100という。プログラムコード1000は、ヘッダファイルであり、プログラムコード1100は、ソースファイルである。
プログラムコード1000及びプログラムコード1100は、ともにC言語で記述されている。図10のプログラムコード1000では、すべての入力を扱うIN構造体が定義されている(図10の符号1001)。また、出力を表すOUT構造体も定義されている(図10の符号1002)。また、関数sampleのプロトタイプ宣言も定義されている(図10の符号1003)。また、プログラムコード1100では、ブロック図2から生成されたコードが記述されている。
(違反情報の例)
次に、ブロック図検査部15が出力する違反情報4を説明する。
図12は、違反情報4の例を示す。
違反情報4には、データ処理手順における矛盾、すなわち違反が発生しているブロック図2内の箇所を通知するための情報が含まれる。
例えば、図12に示すように、違反情報4には、検査ルール1201、違反ブロック1202、関連スライス1203、関連パス1204が存在する。
検査ルール1201には、検査ルール700が複数存在する場合に、違反を検知した際に用いられた検査ルール700の番号が示される。
違反ブロック1202には、違反が含まれるブロックのIDが示される。
関連スライス1203には、検査ルール700に含まれるSlice713の検査において違反が検知された場合に、違反が検知されたスライスに含まれるブロックのIDが列挙される。
また、関連パス1204には、検査ルール700に含まれるSlice713の検査において違反が検知された場合に、スライスに含まれるパスが示される。1つの{}に囲まれる番号が1つのパスを意味する。
なお、違反情報4は、図12に示す形式とは異なり、検査ルール700の検査項目704ごとに、違反なし、違反ありを一覧表示するようにしてもよい。例えば、違反のない検査項目704には「YES」、違反のある検査項目704には「NO」を表示するようにしてもよい。
また、プログラムコード生成装置1のユーザにより分かりやすく違反内容を通知するために、違反情報4に、違反内容を説明する説明文を付加してもよい。
次に、図2に示したステップS2、S3、S5の詳細を説明する。
最初に、図13を参照して、ステップS2の詳細を説明する。
まず、検査対象抽出部14が、ブロック図取得部11からブロック図2を取得する(ステップS21)。
次に、検査対象抽出部14は、ブロック図解析ルール記憶部12から解析ルールを読み込む(ステップS22)。
次に、検査対象抽出部14は、検査ルール記憶部13から検査ルールを読み込む(ステップS23)。
次に、検査対象抽出部14は、ステップS23で読み込んだ検査ルールを用いてブロック図2から検査対象を抽出する(ステップS24)。ステップS23で複数の検査ルールを読み込んでいる場合は、検査対象抽出部14は、検査ルールごとにステップS24を行う。
図7の検査ルール700を用いて検査対象を抽出する場合は、検査対象抽出部14は、例えば以下のように動作する。
図7のBlock711では、起点703が「任意」であるため、検査対象抽出部14は、すべてのブロックを検査対象として抽出する。ただし、検査対象抽出部14は、ブロック間の関係性は解析しない。
また、DataSlice712では、起点703が「Output」で、終点704が「任意」であるため、ブロックの種別が「Output」であるブロックを起点に、検査対象抽出部14は、データ依存関係のみを考慮してスライスを抽出する。
つまり、検査対象抽出部14は、ブロック種別が「Output」のブロックに割り当てられているデータ処理で扱われるデータに影響を与えるブロックの集合を抽出する。例えば、図3のブロックB9とデータ依存関係のあるブロックとして、検査対象抽出部14は、ブロックB3とブロックB4を抽出する。つまり、ブロックB3とブロックB4は、ブロックB9の依存先ブロックである。
より具体的には、検査対象抽出部14は、図6の解析ルールを参照して、ブロックB3とブロックB4を抽出する。まず、検査対象抽出部14は、図6で種別601が「Output」の行612を参照する。次に、検査対象抽出部14は、行612のデータ入力数602を参照する。図6では「1以上」となっているので、種別が「Output」のブロックは他のブロックから出力データに対する影響を受ける。このため、種別が「Output」のブロックと接続線で接続されているブロックは、種別が「Output」のブロックとデータ依存関係にある。
このため、図3では、ブロックB9と接続線で接続されているブロックB3とブロックB4が、ブロックB9とデータ依存関係のあるブロックとして抽出される。つまり、ブロックB3とブロックB4は、ブロックB9の依存先ブロックである。
次に、検査対象抽出部14は、ブロックB3とブロックB4のそれぞれに対するデータ依存関係がないかを調べる。
ブロックB3は、種別がSubsystemなので、検査対象抽出部14は、図6の行614を参照する。行614では、データ入力数602が「1以上」なので、ブロックB3は、ブロックB3にデータを入力しているブロックとデータ依存関係があることが分かる。但し、Subsystemの場合には、実体は別のブロック図にあるので、別のブロック図を確認する必要がある。ブロックB3の場合は、図4のSubAに実体が示される。検査対象抽出部14は、図4に対しても同様の解析を行う。
図4のブロックB34と図3のブロックB9はIDが同じであるため、同じブロックである。図4においてブロックB34はブロックB33に接続している。
ブロックB33は、種別が「Sum」である。図6の解析ルール600の行615では、データ出力数603が「1」である。このため、ブロックB33は、ブロックB34とデータ依存関係がある。つまり、ブロックB33はブロックB34(ブロックB9)の依存先ブロックである。
また、ブロックB33は、ブロックB31とブロックB32に接続している。ブロックB31とブロックB32はそれぞれ種別が「Input」であり、図6の解析ルール600の行611では、データ出力数603が「1」である。このため、ブロックB31及びブロックB32は、ブロックB33とデータ依存関係がある。つまり、ブロックB31とブロックB32は、ブロックB33の依存先ブロックである。
以上で、図3のブロックB3の内部構成である図3のブロックB31〜B34が解析できたため、検査対象抽出部14は、図3に戻って解析を続ける。
図3のブロックB3と接続されているブロックとしては、ブロックB2、B5、B6の3つがある。ブロックB2の種別は「If」であり、図6の解析ルール600の行613では、データ出力数603が「0」である。このため、ブロックB3はブロックB2とはデータ依存関係を持たない。つまり、ブロックB2はブロックB3の依存先ブロックではない。また、ブロックB5とブロックB6はそれぞれ種別が「Input」であり、図6の解析ルール600の行611では、データ出力数603が「1」である。このため、ブロックB5及びブロックB6は、ブロックB3とデータ依存関係がある。つまり、ブロックB5及びブロックB6は、ブロックB3の依存先ブロックである。なお、図3のIn2と図4のIn2はIDが同じであるため、同じブロックである。同様に、図3のIn3と図4のIn3はIDが同じであるため、同じブロックである。このため、検査対象抽出部14は、抽出結果をマージする。
検査対象抽出部14は、図3のブロックB9の他方の依存先ブロックであるブロックB4についても、同様の手順でデータ依存関係を解析する。
検査対象抽出部14は、結果的に図3のブロックB9のデータスライスとして、ブロックB9、ブロックB3、ブロックB5、ブロックB6、ブロックB7、ブロックB8、図4のブロックB33及び図5のブロックB43を抽出する。
なお、ブロックB9、ブロックB3、ブロックB5、ブロックB6、ブロックB33の組と、ブロックB9、ブロックB4、ブロックB7、ブロックB8と図5のブロックB43の組は、それぞれ影響を及ぼさないので、検査対象抽出部14は、それぞれを別のパスとして管理する。
次に、検査対象抽出部14は、図7の検査ルール700のSlice713に従って、種別が「Output」のブロックからスライスを抽出していく。
この場合には、検査対象抽出部14は、データ依存関係に加えて、制御依存関係も考慮してブロックを抽出する。あるブロックに対する制御依存関係とは、あるブロックの実行に影響を与えるブロックの出力の集合のことである。
例えば、図3のブロックB3及びブロックB4と制御依存関係のあるブロックは、Ifブロックである図3のブロックB2である。検査対象抽出部14は、前述したデータスライスとして抽出したブロックの集合に、図3のブロックB2とブロックB1とを加えて、検査対象のスライスとする。
以上の手順により、検査対象抽出部14は、検査対象のブロック、検査対象のスライス及び検査対象のデータスライスを抽出することができる。
次に、図14を参照して、図2のステップS3の詳細を説明する。
まず、ブロック図検査部15は、すべての検査ルールを未検査にマークする(ステップS41)。
次に、ブロック図検査部15は、未検査の検査ルールがあるか否かを確認する(ステップS42)。
未検査のルールが存在する場合(ステップS42でYES)は、ブロック図検査部15は、検査ルール記憶部13から未検査の検査ルールを一つ読み込む(ステップS43)。
次に、ブロック図検査部15は、読み込んだ検査ルールに従ってブロック図2を検査する(ステップS44)。
具体的には、ブロック図検査部15は、検査対象抽出部14により抽出されたブロック、データスライス、スライスに対して、検査ルールを適用して、ブロック図2に定義されているデータ処理手順に矛盾がないかを検査する。
つまり、ブロック図検査部15は、図7の検査ルール700の行711に従い、検査対象抽出部14により抽出された全てのブロックにおいてDataTypeが設定されていないブロックが存在するかどうかを検査する。
また、ブロック図検査部15は、図7の検査ルール700の行712に従い、検査対象抽出部14により抽出されたデータスライスのパスごとに、起点ブロックのDataTypeと異なるDataTypeのブロックがパスに含まれていないかどうかを検査する。
また、ブロック図検査部15は、図7の検査ルール700の行713に従い、検査対象抽出部14により抽出されたスライスのパスの間で、Min又はMaxが異なるかどうかを検査する。
次に、ブロック図検査部15は、検査ルール違反が検知されたか否かを確認する(ステップS45)。
検査ルール違反が検知された場合(ステップS45でYES)は、ブロック図検査部15は、検査ルール違反の詳細を違反検出情報として主記憶装置1903等に一時的に記憶させる(ステップS46)。
例えば、ブロック図検査部15は、違反が検知された検査ルールのID、違反が検知されたブロックのID、違反が検知されたスライス、違反が検知されたパス等を違反検出情報として主記憶装置1903等に記憶させる。
その後、ブロック図検査部15は、検査が完了した検査ルールを検査済みとマークし(ステップS47)、ステップS42に戻る。
違反が検知されることなく、一つの検査ルールに対する処理が完了した場合(ステップS45でNO)は、ブロック図検査部15は、検査が完了した検査ルールを検査済みとマークし(ステップS47)、ステップS42に戻る。
ステップS42で未検査の検査ルールが存在しないと判定した場合(ステップS42でNO)は、ブロック図検査部15は、主記憶装置1903等に違反検出情報が存在しているかどうかを確認する(ステップS48)。
違反検出情報が存在する場合(ステップS48でYES)は、ブロック図検査部15は、違反検出情報を違反情報4として入出力装置905のディスプレイ等に出力し、処理を終了する。
また、違反検出情報が存在しない場合(ステップS48でNO)は、ブロック図検査部15は、プログラムコード生成部17にプログラムコードの生成を指示する。
次に、図15を参照して、図2のステップS5の詳細を説明する。
まず、プログラムコード生成部17は、コード生成ルール記憶部16からコード生成ルールを読み込む(ステップS51)。
次に、プログラムコード生成部17は、ブロック図検査部15からブロック図2を取得する(ステップS52)。
次に、プログラムコード生成部17は、コード生成ルールを使ってブロック図2からプログラムコード3を生成する(ステップS53)。
ステップS53では、例えば、読み込んだコード生成ルールが図8のコード生成ルール800及び図9のコード生成ルール900である場合には、プログラムコード生成部17は、コード生成ルール800に従って、ヘッダファイルとソースファイルを生成する。
ヘッダファイルのファイル名はブロック図2のファイル名に「.h」を加えたものであり、ソースファイルのファイル名はブロック図2のファイル名に「.c」を加えたものである。このため、ブロック図2のファイル名が「sample.blk」であれは、プログラムコード生成部17は、「sample.h」と「sample.c」というファイルを生成する。
この際に「sample.c」に含ませる関数の関数名は、「sample」である。
次に、プログラムコード生成部17は、ヘッダファイル「sample.h」の入力データの構造体と出力データの構造体を定義する。
プログラムコード生成部17は、入力データの構造体(IN構造体)を、ブロックの種別が「Input」のブロックの内部データに基づいて生成する。
また、プログラムコード生成部17は、出力データの構造体(OUT構造体)を、ブロックの種別が「Output」のブロックの内部データに基づいて生成する。
プログラムコード生成部17は、図3〜図5のブロック図から、例えば、図10に示すプログラムコード1000(ヘッダファイル)を生成する。
また、プログラムコード生成部17は、ソースファイル「sample.c」の内部を、図9のコード生成ルール900に従って生成する。
プログラムコード生成部17は、図3〜図5のブロック図から、例えば、図11に示すプログラムコード1100(ソースファイル)を生成する。
***実施の形態の効果の説明***
このように、本実施の形態では、ブロック図2でのブロック間の接続を辿ってデータ処理手順に矛盾があるかどうかを検査する。このため、本実施の形態によれば、不適切なブロック図のパターンを予め設けておくことなく、不適切なブロック図を検出することができる。
つまり、本実施の形態では、ブロック図2からプログラムコード3を生成する前に、ブロック図2から抽出したブロック同士の接続関係や設定された変数等の構造を比較するようにしているため、構造上矛盾する箇所を検出することができる。
このため、ソフトウェア開発者が修正の必要な箇所を探しだす必要がなくなり、ソフトウェア開発に要する労力及び時間を削減することができる。
実施の形態2.
実施の形態1では、ブロック図2におけるデータ依存関係及び制御依存関係を抽出し、検査ルールに基づいてデータ処理手順における矛盾がないかどうかを検査する。
本実施の形態では、ブロック図検査部15は、プログラムコード生成部17がブロック図2からプログラムコード3を生成するために参照するコード生成ルール800、900を参照して、ブロック図2で定義されているデータ処理手順に矛盾があるかどうかを検査する。
本実施の形態でも、プログラムコード生成装置1の機能構成例は図1に示した通りである。また、プログラムコード生成装置1のハードウェア構成例は図16に示した通りである。
また、ブロック図検査部15が検査ルール700に加えてコード生成ルール800、900を参照する点を除けば、プログラムコード生成装置1の動作は、実施の形態1と同じである。
本実施の形態によれば、生成対象のプログラムコードの言語仕様に依存した不具合を、プログラムコードを生成する前に検出することができる。このため、本実施の形態によれば、生成したプログラムコードを、プログラム言語に対応する静的コード解析ツールを用いて検査をする必要がなくなり、開発者の手間を省くことができる。
実施の形態3.
実施の形態1及び2では、ブロック図取得部11を介して外部からブロック図2が入力される。
これに代えて、ブロック図2をプログラムコード生成装置1内で生成するようにしてもよい。
本実施の形態に係るプログラムコード生成装置1では、外部からのブロック図2の入力の代わりに図1のブロック図取得部11がブロック図を生成する。つまり、本実施の形態では、ブロック図取得部11はブロック図を生成することによりブロック図を取得する。
プログラムコード生成装置1のハードウェア構成例は、図16に示す通りである。
また、本実施の形態では、外部からのブロック図2の入力の代わりにブロック図取得部11がブロック図2を生成する。これ以外の動作は、実施の形態1に示したものと同じである。
以上、本発明の実施の形態について説明したが、これら2つの実施の形態を組み合わせて実施しても構わない。
あるいは、これら2つの実施の形態のうち、1つを部分的に実施しても構わない。
あるいは、これら2つの実施の形態を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
***ハードウェア構成の説明***
最後に、プログラムコード生成装置1のハードウェア構成の補足説明を行う。
図16に示すプロセッサ1901は、プロセッシングを行うIC(Integrated Circuit)である。
プロセッサ1901は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)等である。
補助記憶装置1902は、ROM(Read Only Memory)、フラッシュメモリ、HDD(Hard Disk Drive)等である。
主記憶装置1903は、RAM(Random Access Memory)である。
通信装置1904は、データを受信するレシーバー及びデータを送信するトランスミッターを含む。
通信装置1904は、例えば、通信チップ又はNIC(Network Interface Card)である。
入出力装置1905は、例えば、マウス、キーボード、ディスプレイ等である。
また、補助記憶装置1902には、OS(Operating System)も記憶されている。
そして、OSの少なくとも一部が主記憶装置1903にロードされ、プロセッサ1901により実行される。
プロセッサ1901はOSの少なくとも一部を実行しながら、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の機能を実現するプログラムを実行する。
プロセッサ1901がOSを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、プログラムコード生成装置1は、プロセッサ1901を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の機能を実現するプログラムの実行を分担する。それぞれのプロセッサは、プロセッサ1901と同じように、プロセッシングを行うICである。
また、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の処理の結果を示す情報やデータや信号値や変数値が、記憶装置1902、プロセッサ1901内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ(登録商標)ディスク、DVD等の可搬記憶媒体に記憶されてもよい。
また、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、プログラムコード生成装置1は、ロジックIC(Integrated Circuit)、GA(Gate Array)、ASIC(Application Specific Integrated Circuit)、FPGA(Field−Programmable Gate Array)といった電子回路により実現されてもよい。
この場合は、ブロック図取得部11、検査対象抽出部14、ブロック図検査部15及びプログラムコード生成部17は、それぞれ電子回路の一部として実現される。
なお、プロセッサ及び上記の電子回路を総称してプロセッシングサーキットリーともいう。
1 プログラムコード生成装置、2 ブロック図、3 プログラムコード、4 違反情報、11 ブロック図取得部、12 ブロック図解析ルール記憶部、13 検査ルール記憶部、14 検査対象抽出部、15 ブロック図検査部、16 コード生成ルール記憶部、17 プログラムコード生成部、18 矛盾検査部、600 解析ルール、700 検査ルール、800 コード生成ルール、900 コード生成ルール、1000 プログラムコード、1100 プログラムコード。

Claims (15)

  1. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
  2. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
  3. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得部と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査部とを有するプログラムコード生成装置。
  4. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得部と、
    前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査部と
    前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成部を有し、
    前記矛盾検査部は、
    前記コード生成ルールを参照して、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査するプログラムコード生成装置。
  5. 前記矛盾検査部は、
    前記ブロック図で定義されているデータ処理手順に矛盾がある場合に、前記データ処理手順における矛盾を通知する違反情報を出力する請求項1〜4のいずれか一項に記載のプログラムコード生成装置。
  6. 前記プログラムコード生成装置は、更に、
    前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを生成するプログラムコード生成部を有する請求項1〜3のいずれか一項に記載のプログラムコード生成装置。
  7. 前記ブロック図取得部は、
    前記ブロック図を生成する請求項1〜4のいずれか一項に記載のプログラムコード生成装置。
  8. コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と
    前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
  9. コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と
    前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
  10. コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と
    前記コンピュータが、前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とを有するプログラムコード生成方法。
  11. コンピュータが、プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得処理と
    前記コンピュータが、前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査処理と、
    前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記コンピュータが、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成処理とを有し、
    前記矛盾検査処理において、
    前記コンピュータが、
    前記コード生成ルールを参照して、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査するプログラムコード生成方法。
  12. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間にデータタイプ、最大値及び最小値の少なくともいずれかにおいて矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
  13. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素で扱われるデータについて前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素で扱われるデータについて当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
  14. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義する、前記複数のブロックの各々に前記データ処理手順の要素である処理手順要素が割り当てられているブロック図を取得するブロック図取得処理と、
    前記複数のブロックのうちのいずれかのブロックを起点ブロックとして設定し、前記起点ブロックから前記ブロック図におけるブロック間の接続を辿って、前記起点ブロックに割り当てられている処理手順要素での制御について前記起点ブロックが依存しているブロックを依存先ブロックとして抽出し、抽出された依存先ブロックに割り当てられている処理手順要素での制御について当該依存先ブロックが依存しているブロックを更に依存先ブロックとして抽出する動作を繰り返し、前記起点ブロックが直接的及び間接的に依存している依存先ブロックを抽出し、
    前記起点ブロックに割り当てられている処理手順要素と、抽出された依存先ブロックに割り当てられている処理手順要素との間に矛盾があるかどうかを検査する矛盾検査処理とをコンピュータに実行させるプログラムコード生成プログラム。
  15. プログラムコードに反映させるデータ処理手順を複数のブロックの接続により定義するブロック図を取得するブロック図取得処理と、
    前記ブロック図でのブロック間の接続を辿って、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査する矛盾検査処理と、
    前記ブロック図で定義されているデータ処理手順に矛盾がない場合に、前記ブロック図からプログラムコードを、前記ブロック図から前記プログラムコードを生成するためのコード生成ルールを参照して、生成するプログラムコード生成処理とをコンピュータに実行させるプログラムコード生成プログラムであって、
    前記矛盾検査処理において、
    前記コンピュータに、
    前記コード生成ルールを参照させて、前記ブロック図で定義されているデータ処理手順に矛盾があるかどうかを検査させるプログラムコード生成プログラム
JP2018550936A 2016-11-17 2016-11-17 プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム Active JP6486574B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/084077 WO2018092237A1 (ja) 2016-11-17 2016-11-17 プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム

Publications (2)

Publication Number Publication Date
JP6486574B2 true JP6486574B2 (ja) 2019-03-20
JPWO2018092237A1 JPWO2018092237A1 (ja) 2019-04-25

Family

ID=62145333

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018550936A Active JP6486574B2 (ja) 2016-11-17 2016-11-17 プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム

Country Status (3)

Country Link
US (1) US10628140B2 (ja)
JP (1) JP6486574B2 (ja)
WO (1) WO2018092237A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877870B2 (en) * 2018-06-11 2020-12-29 Tata Consultancy Services Limited Method and system for verifying properties of source code
US10691584B2 (en) * 2018-09-28 2020-06-23 Sap Se Behavior driven development integration with test tool
US11921619B2 (en) * 2018-11-28 2024-03-05 Trust Technology Co., Ltd. Programming devices and programs for creating and editing programs used for image processing
WO2019242868A1 (en) * 2018-12-12 2019-12-26 Mitsubishi Electric Corporation Software testing device, software testing method, and software testing program
JP2022011442A (ja) 2020-06-30 2022-01-17 オムロン株式会社 ビジュアルプログラミングエディタのプログラム、コンピューターおよび方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010102362A (ja) * 2008-10-21 2010-05-06 Meidensha Corp ソフトウェアの開発支援システム、開発支援方法およびプログラム
JP2016057715A (ja) * 2014-09-05 2016-04-21 富士電機株式会社 図形式プログラム解析装置

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
JPH0816378A (ja) * 1994-06-30 1996-01-19 Fujitsu Ltd プログラム・リバース解析方法および装置
US6802053B1 (en) * 1997-08-18 2004-10-05 National Instruments Corporation Graphical programming system with distributed block diagram execution and front panel display
JP2005055951A (ja) 2003-08-04 2005-03-03 Canon Software Inc プログラム生成装置およびプログラム生成方法およびプログラムおよび記録媒体
JP2006185211A (ja) * 2004-12-28 2006-07-13 Internatl Business Mach Corp <Ibm> プログラム解析装置、テスト実行装置、その解析方法及びプログラム
JP2006301989A (ja) 2005-04-21 2006-11-02 Fuji Electric Holdings Co Ltd 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム
JP4702194B2 (ja) * 2006-06-22 2011-06-15 富士電機ホールディングス株式会社 プログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラム
JP5042315B2 (ja) 2006-10-19 2012-10-03 チェックマークス リミテッド ソースコード内のセキュリティ脆弱性の検出
JP2009181446A (ja) * 2008-01-31 2009-08-13 Toshiba Corp プログラム生成装置およびブロック線図生成装置
US9189233B2 (en) * 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
JP5275087B2 (ja) * 2009-03-02 2013-08-28 株式会社東芝 プログラム生成装置およびブロック線図生成装置
JP5186443B2 (ja) 2009-06-30 2013-04-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 文字列の妥当性を判定するシステム、方法及びプログラム
JP2011013887A (ja) 2009-07-01 2011-01-20 Fuji Electric Systems Co Ltd ソフトウェア開発支援装置
US8533659B2 (en) * 2009-07-29 2013-09-10 International Business Machines Corporation Efficient extraction of software dependencies from program code
JP5251823B2 (ja) 2009-10-16 2013-07-31 富士通株式会社 開発支援プログラム、開発支援装置、および開発支援方法
US8356058B2 (en) * 2009-11-19 2013-01-15 Microsoft Corporation Runtime dependency analysis for calculated properties
JP5725529B2 (ja) 2010-07-21 2015-05-27 日本電気株式会社 Web脆弱性補修システム、Web脆弱性補修方法、及びプログラム
JP2012164177A (ja) 2011-02-08 2012-08-30 Root42 Inc プログラム自動生成システム
JP5077455B2 (ja) 2011-03-07 2012-11-21 富士通株式会社 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
JP2013061893A (ja) * 2011-09-15 2013-04-04 Mitsubishi Electric Corp 情報処理装置及び情報処理方法及びプログラム
CN104145452B (zh) * 2012-03-02 2017-10-31 三菱电机株式会社 信息处理装置、电子控制单元以及信息处理方法
US20150169295A1 (en) * 2012-06-20 2015-06-18 Hitachi, Ltd. Design Assistance Device for Control Software
JP6004818B2 (ja) * 2012-08-07 2016-10-12 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 並列化方法、システム、及びプログラム
US8978010B1 (en) * 2013-12-18 2015-03-10 Sap Ag Pruning compilation dependency graphs
JP2017010476A (ja) * 2015-06-26 2017-01-12 三菱電機株式会社 類似判定装置、類似判定方法及び類似判定プログラム
US10318251B1 (en) * 2016-01-11 2019-06-11 Altair Engineering, Inc. Code generation and simulation for graphical programming

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010102362A (ja) * 2008-10-21 2010-05-06 Meidensha Corp ソフトウェアの開発支援システム、開発支援方法およびプログラム
JP2016057715A (ja) * 2014-09-05 2016-04-21 富士電機株式会社 図形式プログラム解析装置

Also Published As

Publication number Publication date
WO2018092237A1 (ja) 2018-05-24
JPWO2018092237A1 (ja) 2019-04-25
US20190272158A1 (en) 2019-09-05
US10628140B2 (en) 2020-04-21

Similar Documents

Publication Publication Date Title
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
CN109426722B (zh) Sql注入缺陷检测方法、***、设备及存储介质
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
Mesbah et al. Automated cross-browser compatibility testing
Barbour et al. An empirical study of faults in late propagation clone genealogies
US9454466B2 (en) Explaining partially illegal combinations in combinatorial models
US9152731B2 (en) Detecting a broken point in a web application automatic test case
US8397104B2 (en) Creation of test plans
US20140372083A1 (en) Derived restrictions in a combinatorial model
US10360004B2 (en) Using dynamic information to refine control flow graphs
JP6440895B2 (ja) ソフトウェア分析装置及びソフトウェア分析方法
KR20130133203A (ko) 양방향 텍스트 검사기
JP2010003008A (ja) 検出プログラム、検出装置および検出方法
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
US8589734B2 (en) Verifying correctness of processor transactions
US9189372B2 (en) Trace coverage analysis
US8813036B2 (en) Visual representation of a difference between Cartesian product models
JP6107455B2 (ja) テストスケジュール決定装置、プログラム
JP6878707B2 (ja) 試験装置、試験方法および試験プログラム
JP2010055293A (ja) 検証支援プログラム、検証支援装置、および検証支援方法
JP5900212B2 (ja) テストデータ生成装置、該プログラム、及び該方法
Strandberg Automated system level software testing of networked embedded systems
JP6644188B2 (ja) 影響抽出装置、影響抽出プログラム及び影響抽出方法
US9665454B2 (en) Extracting test model from textual test suite
JP5736588B2 (ja) ソースコード変換方法及びソースコード変換プログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181130

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181130

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20181130

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20181211

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190108

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190219

R150 Certificate of patent or registration of utility model

Ref document number: 6486574

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250