(57)【要約】      （修正有）【課題】ＰＬＣで実行されるプログラムの試験におけるカバレッジの向上を図ることができるソフトウェア試験装置を提供する。【解決手段】ソフトウェア試験装置１００は、通信部１１０と、表示部１２０と、操作入力部１３０と、記憶部１７０と、制御部１８０とを備える。通信部は、他の機器と通信を行い、ＰＬＣプログラムのエディタとして用いられているコンピュータから試験対象であるＳＴ（Ｓｔｒｕｃｔｕｒｅｄ Ｔｅｘｔ）のソースコードを受信する。表示部は、各種画像を表示し、操作入力部は、ユーザ操作を受ける。記憶部１７０は、試験対象であるＳＴのソースコードに対して変換部１８１が構文解析を行うための文法定義、構文解析にて得られた構文木、変換部がＳＴのソースコードを変換したＣ言語のソースコード等を記憶する。制御部の試験実行部１８２は、変換部の変換によって得られたＣ言語のソースコードに対する試験を行う。【選択図】図１
2018133034.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換する変換部と、
前記汎用言語プログラムに対する試験を行う試験実行部と、
を備えるソフトウェア試験装置。
【請求項２】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、前記汎用言語プログラムで実行対象となる記述に変換する、
請求項１に記載のソフトウェア試験装置。
【請求項３】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、前記汎用言語プログラムで試験時に実行される記述に変換する、
請求項２に記載のソフトウェア試験装置。
【請求項４】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる第１文字列を、前記汎用言語プログラムを実行する前提条件を示す記述に変換し、前記ＰＬＣプログラムにおけるコメントに含まれる第２文字列を前記汎用言語プログラムの実行後に満たされるべき条件を示す記述に変換し、
前記試験実行部は、前記汎用言語プログラムへの入力が前記入力の条件を満たし、かつ、前記汎用言語プログラムの出力が前記出力の条件を満たさない場合をエラーとして検出する、
請求項２または請求項３に記載のソフトウェア試験装置。
【請求項５】
前記ＰＬＣプログラムに含まれるグローバル変数の値の想定範囲を示す範囲情報を取得する範囲情報取得部を備え、
前記試験実行部は、前記グローバル変数の値が前記想定範囲外となる場合をエラーとして検出する、
請求項１から４のいずれか一項に記載のソフトウェア試験装置。
【請求項６】
前記試験実行部は、記号実行法を用いて前記試験を行う、
請求項１から５のいずれか一項に記載のソフトウェア試験装置。
【請求項７】
前記試験実行部は、前記ＰＬＣプログラムにおけるパスのうち指定されたステップ数以下のパスの各々について、当該パスを実行した場合の変数値を前記汎用言語プログラムを用いて算出し、いずれかのパスにおける変数値が前記ＰＬＣプログラムで示された条件を満たさない場合をエラーとして検出する、
請求項１から５のいずれか一項に記載のソフトウェア試験装置。
【請求項８】
前記ＰＬＣプログラムを表示し、前記汎用言語プログラムにおける実行箇所を前記ＰＬＣプログラムの表示上に示す表示部を備える
請求項１から７のいずれか一項に記載のソフトウェア試験装置。
【請求項９】
前記変換部は、前記ＰＬＣプログラムにおけるサブルーチンコールを前記汎用言語プログラムにおける記述に変換する場合、前記ＰＬＣプログラムで呼び出されるサブルーチンに示されている入口条件を、前記サブルーチンコール時の条件としてサブルーチン呼出側の汎用言語プログラムに含め、前記ＰＬＣプログラムで呼び出されるサブルーチンに示されている出口条件を、前記サブルーチンコールからの復帰時の条件としてサブルーチン呼出側の汎用言語プログラムに含め、
前記試験実行部は、前記サブルーチンコール時の条件及び前記サブルーチンコールからの復帰時の条件を用いて前記サブルーチン呼出側の汎用言語プログラムを単体試験する、
請求項１から８のいずれか一項に記載のソフトウェア試験装置。
【請求項１０】
前記試験実行部が試験を実行した際に、試験で通らなかったパスを切り出し、切り出したパスに対する試験を行う、
請求項１から９のいずれか一項に記載のソフトウェア試験装置。
【請求項１１】
請求項１から１０のいずれか一項に記載のソフトウェア試験装置と、
前記ソフトウェア試験装置が前記ＰＬＣプログラムから変換した汎用言語プログラムを実行するＰＬＣ模擬部と、
ＰＬＣによる制御対象を模擬する制御対象模擬部と、
を備えるソフトウェア試験システム。
【請求項１２】
プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換し、
前記汎用言語プログラムに対する試験を行う、
ソフトウェア試験方法。
【請求項１３】
コンピュータに、
プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換させ、
前記汎用言語プログラムに対する試験を行わせる、
ためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア試験装置、ソフトウェア試験システム、ソフトウェア試験方法およびプログラムに関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（Programmable Logic Controller；ＰＬＣ）で実行されるプログラムの試験に関連して幾つかの技術が提案されている。
例えば特許文献１には、ＰＬＣを動作させるシーケンスプログラムを検査するための検証支援システムが示されている。この検証支援システムは、シーケンスプログラムをハードウェア記述言語で記述されたＰＬＣシーケンスプログラムに変換する。また、この検証支援システムは、ハードウェア記述言語で記述されてＰＬＣの機能を模擬的に実行する実行モデルと、ハードウェア記述言語で記述されて制御対象の機能を模擬的に実行する制御対象モデルとを備える。そして、この検証支援システムは、仮想的なシーケンス制御システムを構成し、ＰＬＣシーケンスプログラムを実行してデバッグを行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第３０１８９１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、カバレッジ（Coverage、網羅率）については言及されていない。カバレッジが低い場合、試験で通らなかったパスにバグが残存する可能性がある。
【０００５】
本発明は、ＰＬＣで実行されるプログラムの試験におけるカバレッジの向上を図ることができるソフトウェア試験装置、ソフトウェア試験システム、ソフトウェア試験方法およびプログラムを提供する。
【課題を解決するための手段】
【０００６】
本発明の第１の態様によれば、ソフトウェア試験装置は、プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換する変換部と、前記汎用言語プログラムに対する試験を行う試験実行部と、を備える。
【０００７】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、前記汎用言語プログラムで実行対象となる記述に変換するようにしてもよい。
【０００８】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、前記汎用言語プログラムで試験時に実行される記述に変換するようにしてもよい。
【０００９】
前記変換部は、前記ＰＬＣプログラムにおけるコメントに含まれる第１文字列を、前記汎用言語プログラムを実行する前提条件を示す記述に変換し、前記ＰＬＣプログラムにおけるコメントに含まれる第２文字列を前記汎用言語プログラムの実行後に満たされるべき条件を示す記述に変換し、前記試験実行部は、前記汎用言語プログラムへの入力が前記入力の条件を満たし、かつ、前記汎用言語プログラムの出力が前記出力の条件を満たさない場合をエラーとして検出するようにしてもよい。
【００１０】
前記ＰＬＣプログラムに含まれるグローバル変数の値の想定範囲を示す範囲情報を取得する範囲情報取得部を備え、前記試験実行部は、前記グローバル変数の値が前記想定範囲外となる場合をエラーとして検出するようにしてもよい。
【００１１】
前記試験実行部は、記号実行法を用いて前記試験を行うようにしてもよい。
【００１２】
前記試験実行部は、前記ＰＬＣプログラムにおけるパスのうち指定されたステップ数以下のパスの各々について、当該パスを実行した場合の変数値を前記汎用言語プログラムを用いて算出し、いずれかのパスにおける変数値が前記ＰＬＣプログラムで示された条件を満たさない場合をエラーとして検出するようにしてもよい。
【００１３】
前記ＰＬＣプログラムを表示し、前記汎用言語プログラムにおける実行箇所を前記ＰＬＣプログラムの表示上に示す表示部を備えるようにしてもよい。
【００１４】
前記変換部は、前記ＰＬＣプログラムにおけるサブルーチンコールを前記汎用言語プログラムにおける記述に変換する場合、前記ＰＬＣプログラムで呼び出されるサブルーチンに示されている入口条件を、前記サブルーチンコール時の条件としてサブルーチン呼出側の汎用言語プログラムに含め、前記ＰＬＣプログラムで呼び出されるサブルーチンに示されている出口条件を、前記サブルーチンコールからの復帰時の条件としてサブルーチン呼出側の汎用言語プログラムに含め、前記試験実行部は、前記サブルーチンコール時の条件及び前記サブルーチンコールからの復帰時の条件を用いて前記サブルーチン呼出側の汎用言語プログラムを単体試験するようにしてもよい。
【００１５】
前記試験実行部は、試験を実行した際に、試験で通らなかったパスを切り出し、切り出したパスに対する試験を行うようにしてもよい。
【００１６】
本発明の第２の態様によれば、ソフトウェア試験システムは、上記したいずれかのソフトウェア試験装置と、前記ソフトウェア試験装置が前記ＰＬＣプログラムから変換した汎用言語プログラムを実行するＰＬＣ模擬部と、ＰＬＣによる制御対象を模擬する制御対象模擬部と、を備える。
【００１７】
本発明の第３の態様によれば、ソフトウェア試験方法は、プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換し、前記汎用言語プログラムに対する試験を行う。
【００１８】
本発明の第４の態様によれば、プログラムは、コンピュータに、プログラマブルロジックコントローラを動作させるＰＬＣプログラムを汎用プログラミング言語で記述された汎用言語プログラムに変換させ、前記汎用言語プログラムに対する試験を行わせる、ためのプログラムである。
【発明の効果】
【００１９】
上記したソフトウェア試験装置、ソフトウェア試験システム、ソフトウェア試験方法およびプログラムによれば、ＰＬＣで実行されるプログラムの試験におけるカバレッジの向上を図ることができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態に係るソフトウェア試験装置の機能構成を示す概略ブロック図である。
【図２】同実施形態に係るソフトウェア試験システムがＰＬＣプログラムの試験を行う処理手順の例を示す図である。
【図３】同実施形態に係るソフトウェア試験装置によるプログラム変換の第１例を示す図である。
【図４】同実施形態に係るソフトウェア試験装置によるプログラム変換の第２例を示す図である。
【図５】同実施形態に係るソフトウェア試験装置によるプログラム変換の第３例を示す図である。
【図６】同実施形態に係るグローバル変数リストの例を示す図である。
【図７】同実施形態に係るソフトウェア試験装置によるプログラム変換の第４例を示す図である。
【図８】同実施形態に係るソフトウェア試験装置によるプログラム変換の第５例を示す図である。
【図９】同実施形態に係る試験実行部が行うモジュール化の例を示す図である。
【図１０】同実施形態に係るソフトウェア試験システムの機能構成例を示す概略ブロック図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図１は、本発明の実施形態に係るソフトウェア試験装置の機能構成を示す概略ブロック図である。図１に示すように、ソフトウェア試験装置１００は、通信部１１０と、表示部１２０と、操作入力部１３０と、記憶部１７０と、制御部１８０とを備える。制御部１８０は、変換部１８１と、試験実行部１８２とを備える。
【００２２】
ソフトウェア試験装置１００は、ＰＬＣで実行されるプログラムに対してバグの検出等の試験（テスト）を行う。以下では、ＰＬＣで実行されるプログラムをＰＬＣプログラムと称する。また、ＰＬＣプログラムのソースコードの記述言語をＰＬＣ言語と称する。ＰＬＣ言語として、例えばラダー（Ladder；ＬＤ）言語、シーケンシャルファンクションチャート（Sequential Function Chart；ＳＦＣ）、ファンクションブロックダイアグラム（Function Block Diagram；ＦＢＤ）、及び、ストラクチャードテキスト（Structured Text；ＳＴ）を挙げることができる。ラダー言語は、ラダーロジック又は単にラダーとも称される。ファンクションブロックダイアグラムは、ファンクションブロックとも称される。
但し、ソフトウェア試験装置１００が試験対象とするプログラミング言語はこれらに限らず、ＰＬＣで実行されるプログラムの記述言語であればよい。
【００２３】
ＰＬＣプログラムの場合、以下の点で、複雑なプログラムの試験を十分に実行することができない。
（１）  網羅的な試験を実施することができない。
一般的なプログラムの開発では、プログラムを含むシステムの試験は、単体試験、組み合わせ試験、ハードウェア結合試験、システム試験というように、小さな単位から順に行われる。
【００２４】
単体試験では、例えばサブルーチン毎などプログラムの部品毎に試験が行われる。組み合わせ試験では、メインルーチンからサブルーチンを呼び出すなど、プログラムの部品を複数組み合わせて試験が行われる。ハードウェア結合試験では、実機ハードウェアにプログラムを搭載して試験が行われる。ここでいう実機ハードウェアは、システムで実際に用いられるハードウェアである。システム試験では、システム全体の動作試験が行われる。
これに対してＰＬＣ言語の場合、一般的には単体試験及び組み合わせ試験を行う環境が整っていない。このため、ＰＬＣプログラムの試験では、はじめから実際のＰＬＣを用いたシステム試験が行われることが多い。この場合、単体試験等については、システム試験の中でシステムの一部の機能を制限して仮想的に行われる程度である。
【００２５】
一般的なプログラムの開発における単体試験では、ソースコード全体に対するカバレッジが可能な限り１００％に近づくようテストケースを設定するホワイトボックス試験が行われることが多い。ここでいうテストケースは、プログラムへの入力の組み合わせである。プログラムのパスをなるべく全て漏れなく通るように入力の組み合わせを選択することで、カバレッジを高めることができる。
【００２６】
試験対象のプログラムが複雑でテストケースが膨大となった場合、自動単体テスト、テストケースの自動生成、証明技術によるバグの検証等の技術が用いられる。自動単体テストでは、自動的に設定された多数のテストケースを試験環境が自動実行する。ここでいう試験環境は、デバッグソフトウェアを実行するコンピュータなど、試験を行うためのシステムである。テストケースの自動生成では、試験環境が、記号実行法などを用いて高カバレッジを達成するためのテストケースを自動生成し、生成したテストケースを用いた試験を自動実行する。証明技術によるバグの検証では、試験環境がプログラムを論理的に解析し、バグの検出、またはバグの有無の判定を行う。
【００２７】
これに対しＰＬＣプログラムの場合、上記のように一般的には単体試験が行われず、従って、単体試験におけるホワイトボックス試験も行われない。特に、ＰＬＣプログラムの場合、上記のように単体試験等を行う環境が整っていないため、自動単体テスト、テストケースの自動生成、証明技術によるバグの検証等の技術を適用することが困難である。
単体試験におけるホワイトボックス試験が行われないことで、プログラム中に試験が行われていないパスが残り、このパスにバグが残存することが考えられる。この点で、ＰＬＣプログラムの場合、複雑なプログラムの試験を十分に実行することができない。
【００２８】
（２）  ＰＬＣプログラムを試験する手法が限定される。
Ｃ言語など汎用言語のプログラムをパソコン（Personal Computer；ＰＣ）など一般的なコンピュータで試験する場合、例えばステップ実行、変数値のモニタリング、変数値を上書きしてのプログラムの実行などいろいろな手法を用いることができる。ここでいう汎用言語は、特定の用途に特化されていない言語である。また、ここでいう一般的なコンピュータは、特定の用途に特化されていないコンピュータである。
【００２９】
上述した汎用言語のプログラムを一般的なコンピュータでデバッグする場合とは異なり、一般的にはＰＬＣではプログラム試験のための機能及びコマンドが十分に用意されておらず、ＰＬＣプログラムを試験する際に使用可能な手法は限定される。また、汎用言語の場合とは異なり、ＰＬＣプログラムを一般的なコンピュータで試験するためのソフトウェアも一般的には知られていない。この点でも、ＰＬＣプログラムを試験する際に使用可能な手法は限定される。
このように、ＰＬＣプログラムを試験する際に使用可能な手法が限定される点で、複雑なプログラムの試験を十分に実行することができない。
【００３０】
このように、ＰＬＣプログラムの場合、複雑なプログラムの試験を十分に実行することができないという問題点に対し、ソフトウェア試験装置１００は、（ＰＬＣ言語で記述されている）ＰＬＣプログラムのソースコードを一般的なコンピュータ上で汎用言語のソースコードに変換して試験を行う。すなわち、ソフトウェア試験装置１００はソースコードレベルでＰＬＣプログラムを汎用言語プログラムに変換し、得られた汎用言語プログラムに対して試験を行う。これにより、ソフトウェア試験装置１００では、既存のいろいろなソフトウェアを用いてプログラムの試験を行うことができる。
【００３１】
例えば、ソフトウェア試験装置１００がパソコン上でＳＴプログラムのソースコードをＣ言語のソースコードに変換することで、Ｃ言語のソースコードをパソコン上で試験するための既存ソフトウェアを用いることができ、この点で、複雑なプログラムの試験を十分に実行できる。
さらにソフトウェア試験装置１００は、後述するようにデバッグの精度を高めるための機能を提供する。
【００３２】
以下では、ソフトウェア試験装置１００がパソコンを用いて構成され、かつ、ソフトウェア試験装置１００がＳＴ（ストラクチャードテキスト）のソースコードをＣ言語のソースコードに変換する場合を例に説明する。但し、ソフトウェア試験装置１００は、構成する一般的なコンピュータはパソコンに限らず、汎用言語のプログラムの試験のための既存ソフトウェアを適用可能なコンピュータであればよい。また、ソフトウェア試験装置１００が対象とするＰＬＣ言語はＳＴに限らず、いろいろなＰＬＣ言語とすることができる。ソフトウェア試験装置１００がＰＬＣプログラムを変換する言語はＣ言語に限らず、この言語のソースコードの試験を行うための既存ソフトウェアを利用可能な言語であればよい。
【００３３】
通信部１１０は、他の機器と通信を行う。例えば、通信部１１０が、ＰＬＣプログラムのエディタとして用いられているコンピュータから試験対象であるＳＴのソースコードを受信するようにしてもよい。
表示部１２０は、液晶パネル又はＬＥＤ（Light Emitting Diode）パネル等の表示画面を備えて各種画像を表示する。
操作入力部１３０は、例えばキーボード及びマウス等の入力デバイスを備えてユーザ操作を受ける。
【００３４】
記憶部１７０は、各種データを記憶する。例えば、記憶部１７０は、試験対象であるＳＴのソースコード、このソースコードに対して変換部１８１が構文解析を行うための文法定義、構文解析にて得られた構文木、変換部１８１がＳＴのソースコードを変換したＣ言語のソースコード等を記憶する。
記憶部１７０は、ソフトウェア試験装置１００が備える記憶デバイスを用いて構成される。
【００３５】
制御部１８０は、ソフトウェア試験装置１００の各部を制御して各種処理を実行する。制御部１８０は、ソフトウェア試験装置１００が備えるＣＰＵ（Central Processing Unit、中央処理装置）が記憶部１７０からプログラムを読み出して実行することで構成される。
変換部１８１は、ＳＴのソースコードをＣ言語のソースコードに変換する。
試験実行部１８２は、変換部１８１の変換によって得られたＣ言語のソースコードに対する試験を行う。Ｃ言語のソースコードとＳＴのソースコードとは構文木が共通しており、Ｃ言語のソースコードの各部はＳＴのソースコードの各部と対応付けられる。従って、Ｃ言語のソースコード上でバグの位置を特定できればＳＴのソースコード上でのバグの位置を特定することができる。
【００３６】
図２は、ソフトウェア試験システム１がＰＬＣプログラムの試験を行う処理手順の例を示す図である。図２の例で、変換部１８１は、パーサジェネレータ１９１、パーサ１９２、及び、Ｃ言語生成器１９３として機能する。
パーサジェネレータ１９１は、記憶部１７０が記憶している文法定義を参照してパーサ１９２を生成する。記憶部１７０が記憶している文法定義はＢＮＦ（Backus Naur Form）で記載されていてもよいが、特定の表現形式のものに限定されない。
【００３７】
ＳＴのソースコードが変換部１８１に入力されると、パーサ１９２がこのソースコードの構文解析を行って構文木を生成する。ＳＴのソースコードが変換部１８１に入力される毎にパーサジェネレータ１９１がパーサ１９２を生成する必要はなく、同一のパーサ１９２が繰り返し構文解析を行えばよい。
パーサ１９２が構文木を生成すると、Ｃ言語生成器１９３が、この構文木を用いてＣ言語のソースコードを生成する。
試験実行部１８２は、Ｃ言語生成器１９３が生成したＣ言語のソースコードに対して試験を行い、試験結果をレポートとして出力する。
【００３８】
図３は、ソフトウェア試験装置１００によるプログラム変換の第１例を示す図である。図３の例で、ＳＴのソースコードＣ１１は、変換部１８１による変換前のソースコードであり、Ｃ言語のソースコードＣ１２は、変換部１８１による変換後のソースコードである。変換部１８１は、ＳＴのＩＦ文、ＣＡＳＥ文、ＦＯＲループを、それぞれＣ言語のＩＦ文、ＣＡＳＥ文（ＳＷＩＴＣＨ文）、ＦＯＲループに変換するといったように、ＳＴのソースコードと同等の動作を示すＣ言語のソースコードを生成している。
【００３９】
以上のように、変換部１８１は、ソースコードレベルでＰＬＣプログラムを汎用言語プログラムに変換する。そして、試験実行部１８２は、変換にて得られた汎用言語プログラムに対する試験を行う。
変換部１８１が、ＰＬＣプログラムを汎用言語プログラムに変換することで、汎用言語プログラム用の既存のテストツールを用いて効率的に試験を行うことができる。例えば、変換部１８１が、パソコン上でＳＴのソースコードをＣ言語のソースコードに変換することで、Ｃ言語用の既存のテストツールを用いて効率的に試験を行うことができる。
【００４０】
ここで、変換部１８１が、ＳＴのソースコードにおけるコメントに含まれる記述の一部をＣ言語のソースコードで実行対象となる記述に変換するようにしてもよい。
図４は、ソフトウェア試験装置１００によるプログラム変換の第２例を示す図である。図４の例で、ＳＴのソースコードＣ２１は、変換部１８１による変換前のソースコードであり、Ｃ言語のソースコードＣ２２は、変換部１８１による変換後のソースコードである。
【００４１】
変換部１８１は、ＳＴのソースコードのうち平方根の計算を示す行Ｌ１１２を、Ｃ言語のソースコードで同等の処理を行う行Ｌ１２２に変換している。加えて、変換部１８１は、ＳＴのソースコードＣ２１のコメントを、Ｃ言語のソースコードＣ２２で実行対象の記述に変換している。
ＳＴのソースコードＣ２１で、行Ｌ１１１及びＬ１１３の括弧及びアスタリスクで挟まれた記述（「（＊  ・・・  ＊）」はコメントとして扱われる。従って、ＳＴのソースコードＣ２１では、行Ｌ１１１、Ｌ１１３はいずれも実行対象外である。これに対し、変換部１８１は、行Ｌ１１１を行Ｌ１２１から始まるＩＦ文に変換し、行Ｌ１１３を行Ｌ１２３から始まるＩＦ文に変換している。
【００４２】
行Ｌ１１１の「＃ＡＳＳＵＭＥ」及び条件式の記述は、ソフトウェア試験装置１００では事前条件を示す。ここでいう事前条件は、例えばサブルーチンが呼び出された際のサブルーチンコールにおける引数値の条件及びグローバル変数値の条件など、プログラムを実行する前提条件である。図４の場合、行Ｌ１１２の関数Ｓｑｒｔは、実数の平方根を演算する関数である。従って、この関数の引数ｘの値は０以上であることが前提条件となる。従って、行Ｌ１１１では、事前条件としてｘ≧０が示されている。
【００４３】
また、行Ｌ１１３の「＃ＡＳＳＥＲＴ」及び条件式の記述は、ソフトウェア試験装置１００では事後条件を示す。ここでいう事後条件は、例えばサブルーチンコールの戻り値が満たすべき条件など、プログラムの実行後に満たされるべき条件である。図４の例の場合、関数Ｓｑｒｔが正常に実行された場合、演算結果を示す変数ｙの値は０以上となるはずである。従って、行Ｌ１１３では、事後条件としてｙ≧０が示されている。
【００４４】
ソフトウェア試験装置１００は、プログラムの試験の際、事前条件が成立し、かつ、事後条件が成立しない場合にバグがあると判定する。事前条件が成立しない場合、事後条件が成立する場合のいずれも、バグがあるとは判定しない。
かかる試験を行うために、変換部１８１は、ＳＴのソースコードのコメント内に「＃ＡＳＳＵＭＥ」の記述がある場合、この記述を（コメントではなく）実行対象として事前条件を示す記述に変換する。
【００４５】
図４の例の場合、変換部１８１は、行Ｌ１１１を、行Ｌ１２１から始まるＩＦ−ＥＬＳＥ文に変換している。そして、変換部１８１は、このＩＦ−ＥＬＳＥ文のＴＨＥＮに、ソースコードＣ２１の実体的部分である行Ｌ１１２に対応する行Ｌ１２２を設けている。ここでいうＩＦ−ＥＬＳＥ文のＴＨＥＮは、ＩＦ条件成立の場合に実行される部分である
また、変換部１８１は、ＥＬＳＥの場合をＲＥＴＵＲＮにしている。ＲＥＴＵＲＮは、このプログラムを終了することを示し、メインプログラムから呼び出されている場合は呼び出し元へ復帰することを示す。なお、ソースコードＣ２２で「／／」からその行末までは、コメントとして扱われ、実行対象にはならない。
【００４６】
試験実行時に試験実行部１８２は、行Ｌ１２１で事前条件ｘ≧０が成立するか否かを判定する。事前条件が成立する場合は、行Ｌ１２２以下を実行する。一方、事前条件が成立しない場合は、行Ｌ１２６のｅｌｓｅへ進み、行Ｌ１２７のＲＥＴＵＲＮ文にてエラー無しでソースコードＣ２２のプログラムを終了する。
【００４７】
また、変換部１８１は、ＳＴのソースコードのコメント内に「＃ＡＳＳＥＲＴ」の記述がある場合、この記述を（コメントではなく）実行対象として事後条件を示す記述に変換する。
図４の例の場合、変換部１８１は、行Ｌ１１３を、行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文に変換している。行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文は、事前条件のＩＦ−ＥＬＳＥ文である行Ｌ１２１から始まるＩＦ−ＥＬＳＥ文のＴＨＥＮで、行Ｌ１２２の実行後に実行される。すなわち、行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文は、ソースコードＣ２２の実体的部分である行Ｌ１２２の実行後に実行される。
【００４８】
また、変換部１８１は、行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文のＴＨＥＮをヌル（null）にしている。したがって試験実行時に事後条件が成立した場合、試験実行部１８２は、そのままこのＩＦ−ＥＬＳＥ文を終了することになる。
また、変換部１８１は、行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文のＥＬＳＥの場合をａｂｏｒｔ（０）にしている。ここでのａｂｏｒｔ（０）は、エラー発生によるプログラム実行中断を示す。
【００４９】
試験実行時に試験実行部１８２は、行Ｌ１２２を実行した場合、続けて行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文を実行する。試験実行部１８２は、行Ｌ１２３で事後条件ｙ≧０が成立するか否かを判定する。事後条件が成立する場合、上記のように試験実行部１８２はそのままこのＩＦ−ＥＳＬＥ文を終了する。一方、事後条件が成立しない場合、試験実行部１８２は行Ｌ１２４のｅｌｓｅへ進み、行Ｌ１２５のａｂｏｒｔ（０）でエラーを出力してプログラムの実行を中断する。
【００５０】
汎用言語の記号実行ツールがａｓｓｕｍｅおよびａｓｓｅｒｔに対応している場合は、変換部１８１が、＃ＡＳＳＵＭＥ、＃ＡＳＳＥＲＴの記述をそれぞれａｓｓｕｍｅコマンド、ａｓｓｅｒｔコマンドに変換するようにしてもよい。
図５は、ソフトウェア試験装置１００によるプログラム変換の第３例を示す図である。図５のＳＴのソースコードＣ３１の行Ｌ１１１、Ｌ１１２、Ｌ１１３は、図４のＳＴのソースコードＣ２１の行Ｌ１１１、Ｌ１１２、Ｌ１１３と同様である。
変換部１８１は、ＳＴのソースコードＣ３１の行Ｌ１１１、Ｌ１１２、Ｌ１１３をそれぞれＣ言語のソースコードＣ３２の行Ｌ１３１、Ｌ１３２、Ｌ１３３に変換する。行Ｌ１３１のａｓｓｕｍｅ文は、事前条件による分岐を示す。具体的には、事前条件ｘ≧０が成立している場合のみ、行Ｌ１３２以下を実行する。
行Ｌ１３２は、図４の行Ｌ１２２と同様、平方根の演算を示す。
行Ｌ１３３のａｓｓｅｒｔ文は、事後条件が成立しているか否かの判定を示す。具体的には、試験実行部１８２は、事後条件ｙ≧０が成立していない場合をエラーとして検出する。
【００５１】
以上のように、変換部１８１は、ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、汎用言語プログラムで実行対象となる記述に変換する。この汎用言語は試験に用いられる。従って、変換部１８１は、ＰＬＣプログラムにおけるコメントに含まれる記述のうち所定の条件を満たす記述を、汎用言語プログラムで試験時に実行される記述に変換する。図４の例では、「＃ＡＳＳＵＭＥ」及び条件式が含まれていること、「＃ＡＳＳＥＲＴ」及び条件式が含まれていることのそれぞれが、所定の条件の例に該当する。
これによりユーザは、ＰＬＣプログラムを作成する際に、所定の条件を満たす試験用の記述をコメントに含めておくことができる。ソフトウェア試験装置１００は、ＰＬＣプログラムを汎用言語プログラムに変換しての試験で、試験用の記述を反映させて試験を行うことができる。一方、ＰＬＣがＰＬＣプログラムを実行する実運用時には、試験用の記載をコメントとして扱い、この試験用の記載の影響を受けずに動作することができる。
【００５２】
また、変換部１８１は、ＰＬＣプログラムにおけるコメントに含まれる第１文字列を、汎用言語プログラムを実行する前提条件の記述に変換し、前記ＰＬＣプログラムにおけるコメントに含まれる第２文字列を前記汎用言語プログラム実行後に満たされるべき条件を示す記述に変換する。図４の例では、「＃ＡＳＳＵＭＥ」及び条件式の記述が第１文字列の例に該当し、行Ｌ１２１から始まるＩＦ−ＥＬＳＥ文が、汎用言語プログラムを実行する前提条件の記述の例に該当する。また、図４の例では、「＃ＡＳＳＥＲＴ」及び条件式の記述が第２文字列の例に該当し、行Ｌ１２３から始まるＩＦ−ＥＬＳＥ文が、汎用言語プログラム実行後に満たされるべき条件の記述の例に該当する。
そして、試験実行部１８２は、汎用言語プログラムへの入力が前記入力の条件を満たし、かつ、前記汎用言語プログラムの出力が前記出力の条件を満たさない場合をエラーとして検出する。
これにより、試験実行部１８２は、試験対象のプログラムに応じてテストケースを生成または選択する必要がない。この点で、試験実行部１８２は、いろいろなテストケースで試験を行うことができ、網羅率を向上させることができる。
試験実行部１８２が、記号実行法を用いて試験を行うようにしてもよい。変換部１８１がＳＴのソースコードからＣ言語のソースコードへ変換したことで、パソコン上で記号実行法を用いるための既存ツールを使用することができる。記号実行法を用いることで試験の精度を向上させることができる。
【００５３】
表示部１２０がＰＬＣプログラムを表示し、汎用言語プログラムにおける実行箇所をＰＬＣプログラムの表示上に示すようにしてもよい。例えば、表示部１２０が図４のＳＴのソースコードＣ２１を表示する。一方、試験実行部１８２は、Ｃ言語のソースコードＣ２２を用いて試験を行う。ＳＴのソースコードとＣ言語のソースコードとは図２を参照して説明したように共通の構文木で対応付けられており、Ｃ言語のソースコードでの実行箇所をＳＴのソースコードでの箇所に対応付けて表示することができる。
表示部１２０がＳＴのソースコードで実行箇所を示すことで、ＳＴに慣れているユーザが、実行箇所を容易に把握することができる。
【００５４】
あるいは、ＳＴのコメントに有界モデル検査での探索ステップ数を記載するようにしてもよい。そして、試験実行部１８２が、ＰＬＣプログラムにおけるパスのうち指定されたステップ数以下のパスの各々について、当該パスを実行した場合の変数値をＣ言語のソースコードを用いて算出するようにしてもよい。試験実行部１８２は、いずれかのパスにおける変数値がＰＬＣプログラムで示された条件を満たさない場合をエラーとして検出する。
このように、試験実行部１８２が有界モデル検査を行うことで、プログラムの不具合を自動的に検出できることが期待される。
【００５５】
また、試験実行部１８２が、グローバル変数の値と、そのグローバル変数の値の想定範囲とを比較し、グローバル変数の値が想定範囲外となる場合をエラーとして検出するようにしてもよい。
図６は、グローバル変数リストの例を示す図である。図５の例で、グローバル変数リストは表形式のデータとして構成されており、グローバル変数の変数名、型、下限値及び上限値が格納されている。このグローバル変数リストは、グローバル変数の値の想定範囲を示す範囲情報の例に該当する。
【００５６】
例えば、操作入力部１３０が、グローバル変数の想定範囲を示すユーザ操作を受ける。変換部１８１は、ユーザ操作が示すグローバル変数の範囲に基づいてグローバル変数リストを生成する。あるいは、通信部１１０が他の機器と通信を行ってグローバル変数リスを取得するようにしてもよい。
ＳＴのソースコードをＣ言語のソースコードに変換する際、変換部１８１は、グローバル変数リストを参照して、Ｃ言語のソースコードに事前条件の記述及び事後条件の記述を設ける。
【００５７】
図７は、ソフトウェア試験装置１００によるプログラム変換の第４例を示す図である。図７の例で、ＳＴのソースコードＣ４１では、行Ｌ１４１の平方根の演算のみで事前条件、事後条件については記載されていない。一方、Ｃ言語のソースコードＣ４２では、行Ｌ１４１に対応する行Ｌ１５３の他、グローバル変数の事前条件を示す行Ｌ１５１及びＬ１５２と、グローバル変数の事後条件を示す行Ｌ１５４及びＬ１５５とが設けられている。
変換部１８１は、図６のグローバル変数を参照して、行Ｌ１５１及びＬ１５２の事前条件の記述と、行Ｌ１５４及びＬ１５５の事後条件の記述とを設ける。
【００５８】
以上のように、操作入力部１３０は、ＰＬＣプログラムに含まれるグローバル変数の値の想定範囲を示す範囲情報を取得する。操作入力部１３０は、範囲情報取得部の例に該当する。試験実行部１８２は、グローバル変数の値が想定範囲外となる場合をエラーとして検出する。
このように、Ｃ言語のソースコードにグローバル変数リストに基づく事前条件が設けられていることで、試験実行部１８２は、試験対象のプログラムに応じてテストケースを生成または選択する必要がない。この点で、試験実行部１８２は、いろいろなテストケースで試験を行うことができ、カバレッジを向上させることができる。
また、Ｃ言語のソースコードに事後条件が設けられていることで、試験実行部１８２は、より確実にプログラムの不具合の有無を判定することができる。
【００５９】
変換部１８１が、サブルーチンコールなどプログラム呼出の箇所に事前条件及び事後条件を設けるようにしてもよい。
図８は、ソフトウェア試験装置１００によるプログラム変換の第５例を示す図である。
図８の例で、変換部１８１は、ＳＴのソースコードＣ５１、Ｃ５２及びＣ５３を、Ｃ言語のソースコードＣ５４、Ｃ５５及びＣ５６に変換している。
ＳＴのソースコードＣ５１、Ｃ５２及びＣ５３の各々の開始時、終了時にそれぞれ事前条件、事後条件の設定がある。一方、ソースコードＣ５１のサブルーチンコールの箇所には事前条件、事後条件は示されていない。
【００６０】
これに対し、変換部１８１は、ソースコードＣ５１をソースコードＣ５４に変換する際、サブルーチンコールに相当する箇所に事後条件及び事前条件を設ける。
具体的には、変換部１８１は、ソースコードＣ５５のサブルーチンコールの直前の箇所に、サブルーチンコール先の事前条件Ａｓｓｕｍｅ２を事後条件Ａｓｓｅｒｔ２に変換して設けている。また、変換部１８１は、ソースコードＣ５５のサブルーチンコールからの復帰時の箇所に、サブルーチンコール先の事後条件Ａｓｓｅｒｔ３を事前条件Ａｓｓｕｍｅ３に変換して設けている。
【００６１】
同様に、変換部１８１は、ソースコードＣ５６のサブルーチンコールの直前の箇所に、サブルーチンコール先の事前条件Ａｓｓｕｍｅ４を事後条件Ａｓｓｅｒｔ４に変換して設けている。また、変換部１８１は、ソースコードＣ５６のサブルーチンコールからの復帰時の箇所に、サブルーチンコール先の事後条件Ａｓｓｅｒｔ５を事前条件Ａｓｓｕｍｅ５に変換して設けている。
さらに、変換部１８１は、サブルーチンコールをダミーコードに置き換えている。
【００６２】
以上のように、変換部１８１は、ＰＬＣプログラムにおけるサブルーチンコールを汎用言語プログラムにおける記述に変換する場合、ＰＬＣプログラムで呼び出されるサブルーチンに示されている入口条件を、サブルーチンコール時の条件としてサブルーチン呼出側の汎用言語プログラムに含める。また、変換部１８１は、ＰＬＣプログラムで呼び出されるサブルーチンに示されている出口条件を、サブルーチンコールからの復帰時の条件としてサブルーチン呼出側の汎用言語プログラムに含める。試験実行部１８２は、サブルーチンコール時の条件及びサブルーチンコールからの復帰時の条件を用いてサブルーチン呼出側の汎用言語プログラムを単体試験する。
このように、試験実行部１８２は、ソースコードＣ５４、Ｃ５５、Ｃ５６の各々の単体試験を行うことで、プログラムのパスが比較的短くなり、カバレッジが向上することが期待される。
【００６３】
また、試験実行部１８２が試験を行った際に、カバレッジが低い箇所をモジュール化して単体試験を行うようにしてもよい。ここでいうモジュール化は、プログラムの部分を１つのプログラムとして構成することである。
図９は、試験実行部１８２が行うモジュール化の例を示す図である。図９のソースコードＣ６１、Ｃ６２、Ｃ６３は、いずれもＣ言語のソースコードである。
試験実行部１８２は、まず、Ｃ言語のソースコードＣ６１の試験を行う。試験でソースコードＣ６１のうち部分Ｐ１１のカバレッジが低かった場合、試験実行部１８２は、この部分Ｐ１１をモジュール化する。ソースコードＣ６３は、部分Ｐ１１をモジュール化して得られたソースコードである。また、試験実行部１８２は、ソースコードＣ６２については部分Ｐ１１をダミーコードで置き換えている。
【００６４】
さらに試験実行部１８２は、ソースコードＣ６３に事前条件Ａｓｓｕｍｅ２及び事後条件Ａｓｓｅｒｔ３を設けている。例えば試験実行部１８２は、記号実行法を用いてソースコードＣ６３の事前条件および事後条件を抽出する。あるいは、試験実行部１８２がユーザへの問い合わせにて事前条件及び事後条件の情報を取得するようにしてもよい。
また、試験実行部１８２は、ソースコードＣ６３に設けた事前条件Ａｓｓｕｍｅ２を事後条件Ａｓｓｅｒｔ２に変換し、ソースコードＣ６２のうちモジュール化部分をダミーコードで置き換えた箇所の直前に設ける。また、試験実行部１８２は、ソースコードＣ６３に設けた事後条件Ａｓｓｅｒｔ３を事前条件Ａｓｓｕｍｅ３に変換し、ソースコードＣ６２のうちモジュール化部分をダミーコードで置き換えた箇所の直後に設ける。
【００６５】
以上のように、試験実行部１８２は、試験を実行した際に、試験で通らなかったパスを切り出し、切り出したパスに対する試験を行う。
これにより、試験実行部１８２は、ソースコードＣ６２、Ｃ６３それぞれを単体で試験することができ、カバレッジの向上が期待される。
【００６６】
なお、ソフトウェア試験装置１００が生成したＣ言語のソースコードを用いて、ＰＬＣ及び制御対象を含むシステム全体の試験をシミュレーションで行うようにしてもよい。
図１０は、ソフトウェア試験システムの機能構成例を示す概略ブロック図である。図１０に示すように、ソフトウェア試験システム１は、ソフトウェア試験装置１００と、制御システムシミュレーション装置２００とを備える。制御システムシミュレーション装置２００は、第二通信部２１０と、第二表示部２２０と、第二操作入力部２３０と、第二記憶部２７０と、第二制御部２８０とを備える。第二制御部２８０は、ＰＬＣ模擬部２８１と、制御対象模擬部２８２とを備える。
【００６７】
ソフトウェア試験システム１は、プログラムの試験を単体試験からシステム試験まで行うシステムである。ソフトウェア試験システム１の各部のうちソフトウェア試験装置１００は、図１に示すソフトウェア試験装置１００と同一であり、ここでは説明を省略する。
制御システムシミュレーション装置２００は、ＰＬＣ及び制御対象を含むシステム全体の試験をシミュレーションで行う。制御システムシミュレーション装置２００は、例えばパソコンなど汎用のコンピュータを用いて構成される。
【００６８】
第二通信部２１０は、他の機器と通信を行う。特に第二通信部２１０はソフトウェア試験装置１００と通信を行って、ソフトウェア試験装置１００がＳＴのソースコードから変換したＣ言語のソースコードを受信する。
第二表示部２２０は、液晶パネル又はＬＥＤパネル等の表示画面を備えて各種画像を表示する。
第二操作入力部２３０は、例えばキーボード及びマウス等の入力デバイスを備えてユーザ操作を受ける。
【００６９】
第二記憶部２７０は、各種データを記憶する。例えば、第二記憶部２７０は、ＰＬＣ及び制御対象を模擬するためのモデルや、第二通信部２１０がソフトウェア試験装置１００から受信したＣ言語のソースコードを記憶する。
第二記憶部２７０は、制御システムシミュレーション装置２００が備える記憶デバイスを用いて構成される。
第二制御部２８０は、制御システムシミュレーション装置２００の各部を制御して各種処理を実行する。第二制御部２８０は、制御システムシミュレーション装置２００が備えるＣＰＵが第二記憶部２７０からプログラムを読み出して実行することで構成される。
【００７０】
ＰＬＣ模擬部２８１は、ＰＬＣの動作を模擬する。具体的には、ＰＬＣ模擬部２８１は、第二記憶部２７０が記憶しているＰＬＣのモデルを用いて、ソフトウェア試験装置１００が変換したＣ言語のソースコードを実行しての制御対象に対する制御を模擬する。
制御対象模擬部２８２は、制御対象の動作を模擬する。具体的には、制御対象模擬部２８２は、第二記憶部２７０が記憶している制御対象のモデルを用いて制御対象の動作を模擬する。
【００７１】
このように、ソフトウェア試験装置１００がＳＴのソースコードからＣ言語のソースコードの変換を行ったことで、Ｃ言語のソースコードを用いてパソコン上で、このソースコードを実行しての制御を模擬することができ、シミュレーションにてシステム試験を行うことができる。
【００７２】
なお、制御部１８０の全部または一部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することで各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００７３】
以上、本発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００７４】
１  ソフトウェア試験システム
１００  ソフトウェア試験装置
１１０  通信部
１２０  表示部
１３０  操作入力部
１７０  記憶部
１８０  制御部
１８１  変換部
１９１  パーサジェネレータ
１９２  パーサ
１９３  Ｃ言語生成器
１８２  試験実行部
２００  制御システムシミュレーション装置
２１０  第二通信部
２２０  第二表示部
２３０  第二操作入力部
２７０  第二記憶部
２８０  第二制御部
２８１  ＰＬＣ模擬部
２８２  制御対象模擬部
【図１】
2018133034.tif 000003
【図２】
2018133034.tif 000004
【図３】
2018133034.tif 000005
【図４】
2018133034.tif 000006
【図５】
2018133034.tif 000007
【図６】
2018133034.tif 000008
【図７】
2018133034.tif 000009
【図８】
2018133034.tif 000010
【図９】
2018133034.tif 000011
【図１０】
2018133034.tif 000012