(57)【要約】【課題】本発明は、プログラマブルな条件でプログラム試験が行え、プログラムエラーの発生を未然に防ぐことができるプログラム装置、プログラム試験方法およびプログラム試験用プログラムを提供することを目的とする。【解決手段】本発明によるプログラム試験装置は、入力部４から入力された試験対象プログラム９２を、プラント設備構成に応じて階層的に配置された設備要素に基づいて、設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割するプログラム入力部７６と、設備情報８７に基づいて、一の設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索するプログラム検索部７７とを備えることを特徴とする。【選択図】図１
2012103791.tif 000002
【特許請求の範囲】
【請求項１】
入力部と表示部と制御部とテストデータベースとを備えたプログラム試験装置において、
前記制御部は、
前記入力部から入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、前記設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割するプログラム入力部と、
分割された前記モジュール毎に当該モジュールを解析して、前記モジュールに対応する前記プラント設備構成に基づく前記設備要素の情報である設備情報と、当該設備情報に基づいて前記モジュール毎に用いられている変数情報とを取得し、前記設備情報と前記変数情報とを含むモジュール情報を前記テストデータベースに格納するプログラム解析部と、
前記テストデータベースに格納された前記モジュール情報を用いて、前記モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを前記入力部から入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報を前記テストデータベースに格納するテスト入力画面生成部と、
前記テスト入力画面情報を用いて前記表示部に前記テスト入力画面を表示させるとともに、前記テスト入力画面を用いて入力されたテストロジックからテストプログラムを生成し、生成した前記テストプログラムと入力されたテストデータとを前記テストデータベースに格納するテスト編集部と、
前記設備情報に基づいて、一の前記設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索するプログラム検索部と、
前記テストデータベースに格納された前記テストデータを用いて前記テストプログラムを実行し、テスト結果を前記テストデータベースに格納するテストプログラム実行部と、
を備えることを特徴とする、プログラム試験装置。
【請求項２】
前記プログラム検索部において、前記所定の関係を有するプログラムは、一の前記設備要素と類似の処理を行う前記設備要素に対応する類似プログラム、一の前記設備要素と共通の直近であって上位階層の前記設備要素を有する前記設備要素に対応する関連プログラム、一の前記設備要素の下位階層の前記設備要素に対応する依存プログラムを含むことを特徴とする、請求項１に記載のプログラム試験装置。
【請求項３】
前記テストロジックは、スクリプトで記述されることを特徴とする、請求項１または２に記載のプログラム試験装置。
【請求項４】
プログラム試験装置を用いてプログラムを試験する方法であって、
（ａ）入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、前記設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割する工程と、
（ｂ）分割された前記モジュール毎に当該モジュールを解析して、前記モジュールに対応する前記プラント設備構成に基づく前記設備要素の情報である設備情報と、当該設備情報に基づいて前記モジュール毎に用いられている変数情報とを取得する工程と、
（ｃ）取得した前記設備情報と前記変数情報とを含むモジュール情報をテストデータベースに格納する工程と、
（ｄ）前記テストデータベースに格納された前記モジュール情報を用いて、前記モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報を前記テストデータベースに格納する工程と、
（ｅ）前記テスト入力画面情報を用いて表示部に前記テスト入力画面を表示させるとともに、前記テスト入力画面を用いて入力されたテストロジックからテストプログラムを生成し、生成した前記テストプログラムと入力されたテストデータとを前記テストデータベースに格納する工程と、
（ｆ）前記設備情報に基づいて、一の前記設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索する工程と、
（ｇ）前記テストデータベースに格納された前記テストデータを用いて前記テストプログラムを実行し、テスト結果を前記テストデータベースに格納する工程と、
を備えることを特徴とする、プログラム試験方法。
【請求項５】
前記工程（ｆ）において、前記所定の関係を有するプログラムは、一の前記設備要素と類似の処理を行う前記設備要素に対応する類似プログラム、一の前記設備要素と共通の直近であって上位階層の前記設備要素を有する前記設備要素に対応する関連プログラム、一の前記設備要素の下位階層の前記設備要素に対応する依存プログラムを含むことを特徴とする、請求項４に記載のプログラム試験方法。
【請求項６】
前記テストロジックは、スクリプトで記述されることを特徴とする、請求項４または５に記載のプログラム試験方法。
【請求項７】
コンピュータをプログラム試験装置として機能させるためのプログラム試験用プログラムであって、
（ａ）入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、前記設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割する手順と、
（ｂ）分割された前記モジュール毎に当該モジュールを解析して、前記モジュールに対応する前記プラント設備構成に基づく前記設備要素の情報である設備情報と、当該設備情報に基づいて前記モジュール毎に用いられている変数情報とを取得する手順と、
（ｃ）取得した前記設備情報と前記変数情報とを含むモジュール情報をテストデータベースに格納する手順と、
（ｄ）前記テストデータベースに格納された前記モジュール情報を用いて、前記モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報を前記テストデータベースに格納する手順と、
（ｅ）前記テスト入力画面情報を用いて表示部に前記テスト入力画面を表示させ、テストロジックとテストデータとを入力する手順と、
（ｆ）入力された前記テストロジックからテストプログラムを生成する手順と、
（ｇ）前記設備情報に基づいて、一の前記設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索する手順と、
（ｈ）入力された前記テストデータを用いて前記テストプログラムを実行し、テスト結果を前記テストデータベースに格納する手順と、
を前記コンピュータに実行させることを特徴とする、プログラム試験用プログラム。
【請求項８】
前記手順（ｇ）において、前記所定の関係を有するプログラムは、一の前記設備要素と類似の処理を行う前記設備要素に対応する類似プログラム、一の前記設備要素と共通の直近であって上位階層の前記設備要素を有する前記設備要素に対応する関連プログラム、一の前記設備要素の下位階層の前記設備要素に対応する依存プログラムを含むことを特徴とする、請求項７に記載のプログラム試験用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プラントのようにポンプやバルブなどの操作器や、流量計・圧力計などのセンサが大量に配置されているシステムにおいて、センサが検出した運転データをオペレータが監視することよってプラントの状態を即時に把握し、操作器を操作することで安定した運転を支援するコンピュータのプログラム、一般的にラダー言語やＰＯＬ（Ｐｒｏｂｌｅｍ  Ｏｒｉｅｎｔｅｄ  Ｌａｎｇｕａｇｅ）などで記述されるシーケンス制御プログラムと呼ばれるプログラムを試験するプログラム試験装置、プログラム試験方法およびプログラム試験用プログラムに関する。
【背景技術】
【０００２】
まず初めに、本発明において使用する用語の定義を行う。プラントの設備構成とは、例えば物理的・機能的に階層的に分類されたものを意味する。例えば、下水処理プラントの場合は、物理的に最初沈澱池、反応槽、最終沈澱池などに分割（社団法人  日本下水道協会発行  下水道用語集を参照）され、それぞれの施設内にポンプやバルブ、センサなどが設置される。本発明ではこれら（ポンプ、バルブ、センサなど）を機器と定義する。機器は処理毎にグループを構成する。例えば、最初沈澱池における汚泥を引抜く処理では、汚泥ポンプ、送水ポンプ、引抜弁などの複数の機器によって１つの処理を行う。本発明では、このような複数の機器からなるグループを総称して設備と定義する。従って、プラントは、施設、設備、機器といった階層的な機能で構成されると考えられる。
【０００３】
プラントが階層的な要素で構成されることは、例えば特許文献２にも開示されている。プラントを構成する施設、設備、機器などの各構成要素は、それぞれのレベルで対応する機能がある。例えば、施設のレベルでは汚泥引抜処理の開始・停止を制御する処理、設備のレベルでは汚泥引抜に関してはポンプや弁を動作させる処理、機器のレベルではポンプや弁を制御する処理などがある。そこで本発明では、施設、設備、機器といったプラント設備を構成する要素（構成要素）を便宜的に機能と称することにする。
【０００４】
また、本発明におけるスクリプトとは、条件分岐などの制御構造が記述できる、コンパイル不要で習得の容易な簡易言語のことで、命令を連続的に記述したコマンドとは異なる。なお、本発明においてプログラムと記述されているものは、ラダー言語やＰＯＬで記述されたシーケンス制御プログラムのことを意味する。
【０００５】
プラントにはボイラや発電機などの大型の設備が多数備えられており、各設備にはポンプやバルブといった操作器、圧力計や流量計といったセンサなど、多数の機器が配置される。プラントの運転状態を監視するためには、機器がもつ信号を系統図や設備構成図などのＧＵＩ（Ｇｒａｐｈｉｃ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）画面に表示されるグラフィックシンボルに割り付け、中央監視室と呼ばれる部屋で現在値を監視し、あるいは機器で生じた故障をメッセージやグラフィック形式で表示することによってオペレータが確認して、操作器を操作することが行われている。このようなプラントの現場では、ＰＬＣ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｃｏｎｔｒｏｌｌｅｒ）と呼ばれるコンピュータが設置されており、各センサの値を用いて演算を行いながら、中央監視室にいるオペレータの指示によりプラントの機器の制御を行うプログラムが実行されている。
【０００６】
上記のプログラムを試験（テスト）する場合は、信号の値を模擬するシミュレータを用いて、主にオペレータが手動で値を操作・設定を行いながら目視で挙動（動作）を確認することが多い。また、プラントは信頼性が重要視されるため、プラントに繋がれている信号の全点について動作の確認を行う必要がある。プラントで扱う点数は、規模にもよるが数百点から数万点の信号点数を有するものがあり、実施する試験の数が多くなると試験するプログラムの規模も大きいためデバッグや保守が難しくなる。
【０００７】
このような試験（テスト）において、必要となるテストデータを設定するプログラムを自動生成することにより、テスト費用を削減するものがあった（例えば、特許文献１参照）。テストで必要になるプログラムとしては、テストデータを設定するプログラムと、プログラムから出力された結果を評価するプログラムの２つがある。特許文献１では、テスト対象ラダー管理部にある試験対象となるプログラム（ラダープログラム）から入出力変数抽出部により入力となる変数を抽出することで、仮想入力ラダー生成部によりテストデータを設定するプログラムを自動的に生成することができる。また、テスト入力シーケンス管理部によりユーザが簡単なコマンドとパラメータを指定するだけで出力結果を評価するプログラムをつくることができ、比較的高度な知識を必要とするラダー言語を知らなくてもテストを行うことができる。
【０００８】
また、プラントの階層的な設備仕様を予め準備しておき、制御プログラムの制御仕様を簡易に入力できるものがある（例えば、特許文献２参照）。
【０００９】
また、制御プログラムではないが、プログラムの変数を辿ることによって、プログラムを変更した場合における影響度を簡単に理解できるものもある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００５−６３４２５号公報（第７図）
【特許文献２】特開平５−２４１６１７号公報（第１図）
【特許文献３】特開平６−２１４７６４号公報（表１２）
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１に開示されている技術によれば、テスト結果を評価するプログラム（手順）の設計はプログラム言語であるラダープログラムの記述方法を知らなくてもよいが、シーケンスプログラムの基本動作や、どのプログラム内のサブモジュールの依存関係や、どの変数がどこで参照されているかなどのプログラム設計者に相当するプログラムの内部情報がないと設計ができない。また、テスト結果の検証は正常値との比較といった単純なものだけしか扱うことができないため、複数の条件を組み合せたり、時間や状態変化を考慮するものであったり、ある条件での試験結果を他の条件の入力データとして使ったりするなどプログラマブルな条件を指定することができない。
【００１２】
また、特許文献２に開示されている技術によれば、プラントの設備構成を機能や機器単位で階層的に定義したデータを予め用意しておかなければならない。
【００１３】
また、特許文献３に開示されている技術によれば、プログラムを変更したときに影響を受けるプログラムを、変数を辿って見つけていくため、使用している変数の数が多くなったり、プログラムの関係が複雑になったりした場合は性能に影響がでる。また、エラーなどにより修正が発生したプログラムについて、変数は直接使っていないが構造的に似通っているようなプログラムを検出することできない。
【００１４】
本発明は、これらの問題を解決するためになされたものであり、スクリプトを使って複数の条件を組み合せたり、時間や状態変化を考慮できたり、ある条件での試験結果を他の条件の入力データとして使ったりするなど、プログラマブルな条件でプログラム試験が行え、プログラムエラーの発生を未然に防ぐことができるプログラム装置、プログラム試験方法およびプログラム試験用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の課題を解決するために、本発明によるプログラム試験装置は、入力部と表示部と制御部とテストデータベースとを備えたプログラム試験装置において、制御部は、入力部から入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割するプログラム入力部と、分割されたモジュール毎に当該モジュールを解析して、モジュールに対応するプラント設備構成に基づく設備要素の情報である設備情報と、当該設備情報に基づいてモジュール毎に用いられている変数情報とを取得し、設備情報と変数情報とを含むモジュール情報をテストデータベースに格納するプログラム解析部と、テストデータベースに格納されたモジュール情報を用いて、モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力部から入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報をテストデータベースに格納するテスト入力画面生成部と、テスト入力画面情報を用いて表示部にテスト入力画面を表示させるとともに、テスト入力画面を用いて入力されたテストロジックからテストプログラムを生成し、生成したテストプログラムと入力されたテストデータとをテストデータベースに格納するテスト編集部と、設備情報に基づいて、一の設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索するプログラム検索部と、テストデータベースに格納されたテストデータを用いてテストプログラムを実行し、テスト結果をテストデータベースに格納するテストプログラム実行部とを備えることを特徴とする。
【００１６】
また、本発明によるプログラム試験方法は、プログラム試験装置を用いてプログラムを試験する方法であって、（ａ）入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割する工程と、（ｂ）分割されたモジュール毎に当該モジュールを解析して、モジュールに対応するプラント設備構成に基づく設備要素の情報である設備情報と、当該設備情報に基づいてモジュール毎に用いられている変数情報とを取得する工程と、（ｃ）取得した設備情報と変数情報とを含むモジュール情報をテストデータベースに格納する工程と、（ｄ）テストデータベースに格納されたモジュール情報を用いて、モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報をテストデータベースに格納する工程と、（ｅ）テスト入力画面情報を用いて表示部にテスト入力画面を表示させるとともに、テスト入力画面を用いて入力されたテストロジックからテストプログラムを生成し、生成したテストプログラムと入力されたテストデータとをテストデータベースに格納する工程と、（ｆ）設備情報に基づいて、一の設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索する工程と、（ｇ）テストデータベースに格納されたテストデータを用いてテストプログラムを実行し、テスト結果をテストデータベースに格納する工程とを備えることを特徴とする。
【００１７】
また、本発明によるプログラム試験用プログラムは、コンピュータをプログラム試験装置として機能させるためのプログラム試験用プログラムであって、（ａ）入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割する手順と、（ｂ）分割されたモジュール毎に当該モジュールを解析して、モジュールに対応するプラント設備構成に基づく設備要素の情報である設備情報と、当該設備情報に基づいてモジュール毎に用いられている変数情報とを取得する手順と、（ｃ）取得した設備情報と変数情報とを含むモジュール情報をテストデータベースに格納する手順と、（ｄ）テストデータベースに格納されたモジュール情報を用いて、モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報をテストデータベースに格納する手順と、（ｅ）テスト入力画面情報を用いて表示部にテスト入力画面を表示させ、テストロジックとテストデータとを入力する手順と、（ｆ）入力されたテストロジックからテストプログラムを生成する手順と、（ｇ）設備情報に基づいて、一の設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索する手順と、（ｈ）入力されたテストデータを用いてテストプログラムを実行し、テスト結果をテストデータベースに格納する手順とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によると、入力部から入力された試験対象プログラムを、プラント設備構成に応じて階層的に配置された設備要素に基づいて、設備要素に対応するプログラムコードを外部から入力されることによって、所定の機能ごとに複数のモジュールに分割するプログラム入力部と、分割されたモジュール毎に当該モジュールを解析して、モジュールに対応するプラント設備構成に基づく設備要素の情報である設備情報と、当該設備情報に基づいてモジュール毎に用いられている変数情報とを取得し、設備情報と変数情報とを含むモジュール情報をテストデータベースに格納するプログラム解析部と、テストデータベースに格納されたモジュール情報を用いて、モジュール毎にプログラム試験を行うために必要なテストロジックとテストデータとを入力部から入力するためのテスト入力画面を生成して、当該テスト入力画面を構成するためのテスト入力画面情報をテストデータベースに格納するテスト入力画面生成部と、テスト入力画面情報を用いて表示部にテスト入力画面を表示させるとともに、テスト入力画面を用いて入力されたテストロジックからテストプログラムを生成し、生成したテストプログラムと入力されたテストデータとをテストデータベースに格納するテスト編集部と、設備情報に基づいて、一の設備要素に対応するプログラムに対して所定の関係を有するプログラムを検索するプログラム検索部と、テストデータベースに格納されたテストデータを用いてテストプログラムを実行し、テスト結果をテストデータベースに格納するテストプログラム実行部とを備えるため、スクリプトを使って複数の条件を組み合せたり、時間や状態変化を考慮できたり、ある条件での試験結果を他の条件の入力データとして使ったりするなど、プログラマブルな条件でプログラム試験が行え、プログラムエラーの発生を未然に防ぐことができる。また、プラントの仕様にプログラムを対応づけて入力することができるので、事前にプラントの仕様を作っておく必要がない。また、プラントの仕様に従ってプログラムの関係を分析することができるので、プログラムのもつ変数の量に依存することなく、関連するプログラムを容易に見つけることができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態１によるプログラム試験装置の概要を示すブロック図である。
【図２】本発明の実施形態１によるデータベースにおける設備情報のデータ構成の一例を示す図である。
【図３】本発明の実施形態１によるデータベースにおけるモージュール情報のデータ構成の一例を示す図である。
【図４】本発明の実施形態１によるプログラム試験装置のハードウエア構成の概要を示すブロック図である。
【図５】本発明の実施形態１によるプログラム入力部の動作を示すフローチャートである。
【図６】本発明の実施形態１によるプログラム入力画面の一例を示す図である。
【図７】本発明の実施形態１によるプログラム入力画面の一例を示す図である。
【図８】本発明の実施形態１によるプログラム入力画面の一例を示す図である。
【図９】本発明の実施形態１によるモジュール情報のデータ構成の一例を示す図である。
【図１０】本発明の実施形態１によるテスト入力画面のテストデータ入力部の生成の一例を示す図である。
【図１１】本発明の実施形態１によるテスト入力画面生成部の動作を示すフローチャートである。
【図１２】本発明の実施形態１によるテスト入力画面のロジック入力部の生成の一例を示す図である。
【図１３】本発明の実施形態１によるテスト入力画面の一例を示す図である。
【図１４】本発明の実施形態１によるテスト実行結果の一例を示す図である。
【図１５】本発明の実施形態２によるプログラム検索部で参照するプラント設備の構成の一例を示す図である。
【図１６】本発明の実施形態２によるプログラム検索部の動作を示すフローチャートである。
【図１７】本発明の実施形態２によるプログラム入力画面の一例を示す図である。
【発明を実施するための形態】
【００２０】
本発明の実施形態について、図面を用いて以下に説明する。
【００２１】
〈実施形態１〉
図１は、本発明の一実施形態によるプログラム試験装置の概要を示すブロック図である。プログラム試験装置はテストデータベース８０と制御部７０と、オペレータからデータを入力できる入力部４と、出力結果をグラフィックあるいはテキスト形式で表示する表示部２で構成される。なお、制御部７０はコンピュータがプログラムにより実行するものである。すなわち制御部７０は制御プログラムをテストするプログラム試験用プログラムと同義である。入力部４から制御部７０にテストに関するデータの入力を行い、その出力結果を表示部２に出力する。入力部４から試験対象プログラム９２が入力される。このときプログラムはプラントを構成する設備や機器と対応づけて入力されるため、制御部７０は試験対象プログラム９２をいくつかのモジュールに分割し、各モジュールが有する変数に設定するテストデータやテストに指定するロジックを設備や機器毎に分割してテストデータベース８０に記憶する。また試験対象プログラム９２を解析してプログラム中に宣言されている変数の情報（変数情報８１）をテストデータベース８０に格納する。記録したテストプログラムを実行するとテスト実行結果８５がテストデータベース８０に記憶される。
【００２２】
テストデータベース８０はテストに関するデータを管理する。設備情報８７はプラントの仕様を階層的なデータ構造で表したもので、プラントがどのような施設で構成され、その施設にはどのような設備が備えられており、それぞれの設備はどのような機器で構成されているのかに関する情報を管理する。プログラム入力画面情報８８はプログラムを機能に対応づけて入力可能な画面を、表示部２が表示できるようなデータにしたものである。変数情報８１は試験対象プログラム９２の中でどのような変数があり、その変数がどのように使われているかに関する情報を管理する。テストプログラム８３はテストロジックをスクリプトのような軽量言語を使って記述したもので、モジュール単位で管理されている。テスト入力画面情報８２はテストを機能に対応づけて入力可能な画面を、表示部２が表示できるようなデータにしたものである。テスト入力データ８４はモジュール単位で管理され、各モジュールがもつ変数がテストプログラム８３に格納されたテストプログラム毎にどのような値をもつかを格納したものである。テストプログラム８３はローダ９３によりＰＬＣ９４で実行できる形式に変換されて、試験対象プログラム９２と一緒にＰＬＣ９４上で実行される。実行された結果は関連する機能やテスト実行単位(何月何日の何回目の実行かなど)やバージョン単位で記録してテスト実行結果８５として管理する。
【００２３】
本発明の実施形態１によるプラント試験装置の制御部７０は、概略以下のように動作する。
【００２４】
まず、入力部４から入力された機能に従って、プログラム入力部７６がプログラム入力画面を生成する。プログラム入力画面は、機能毎に作られるマークアップ言語などで生成される画面であってもよい。プログラム入力画面は、入力された機能が設備情報８７に存在しない場合は新規に作成される。作成されたプログラム入力画面は、データ形式でプログラム入力画面情報８８としてテストデータベース８０に格納される。
【００２５】
プログラム入力画面が生成されると、試験対象プログラム９２が入力される。試験対象プログラム９２は、プログラム解析部７５により、使われている変数と変数の利用状況が解析される。また、プログラム入力部７６によりプログラムを分割する部分などは、良く知られたプログラム解析ツールなどで行うこともできるが、以下に説明するように、入力されたプログラムコードがどのような設備や機器に関与（対応）しているのか、あるいは、その設備や機器がどのような設備構成を有するのかなど、オペレータがプラントの設備構成に従って、プラントの構成要素と対応するプログラムコードを入力しながら相互に作用することで分割を行う。ここに本発明の特徴がある。
【００２６】
プログラムを解析することにより得られた情報からは各モジュールで使われる変数の属性を知ることができるので、それに合わせてモジュール毎に含まれる変数の入力画面（マークアップテキスト生成）を構成する。このとき各変数には別名が自動的に、あるいは入力画面からの入力によって付加される。この別名はテストを記述するときに変数を特定するために使うものである。また、変数の説明などもオペレータによって入力され、別名とともに変数情報８１の一部としてテストデータベース８０に格納される。ただし、変数情報は、解析によって得られる情報のみで十分な場合もあり、常に入力によって得る必要はない。
【００２７】
プログラムの解析がすべて完了すると、テスト入力画面生成部７１によりテストデータやテストロジックを入力する画面が生成される。入力画面はＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などのマークアップ言語を生成することで実現してもよい。プログラム入力画面も同様にマークアップ言語で生成することで実現してもよい。テストデータの入力画面とテストロジックの入力画面は合成されてテスト入力画面として生成され、生成されたテスト入力画面はデータ形式でテスト入力画面情報８２としてテストデータベース８０に格納される。
【００２８】
以上で試験対象プログラム９２をテストする準備が整った。次に、どのようなテストを行うのかを、生成されたテスト入力画面情報８２により実際にテスト入力画面を表示部２に表示させ、オペレータが入力部４から必要な情報を入力する。すなわち、テスト編集部７３では、生成されたテスト入力画面を使ってテストごとに編集するテストデータと実行するテストのロジックを入力部４からオペレータが入力する。
【００２９】
入力画面から入力されるテストロジックはマークアップ言語とは別に、ＥＣＭＡのＪａｖａＳｃｒｉｐｔ（登録商標）やＭｉｃｒｏｓｏｆｔ社のＶＢＳｃｒｉｐｔやＡｄｏｂｅ社のＡｃｔｉｏｎＳｃｒｉｐｔのようなマークアップ内に記述可能なスクリプトとして入力される。上記した変数の別名を使って制御構文などを使ってテストの検証ロジックを記述する。このように、テストロジックを、制御構造を有するスクリプトで記述できるので、機械語に近い低度な表現力しか有さないラダープログラムでは記述し難かった検証ロジックを簡単に記述することができる。テスト編集部７３は入力されたロジックと、別名でプログラムの変数にアクセスするためのプログラムを結合してテストプログラム８３を生成してテストデータ８４とともにテストデータベース８０に記録する。
【００３０】
テストプログラム実行部７４は、テストデータベース８０に記録されたテスト入力データ８４を用いてテストプログラム８３を実行することによりテストを実行し、テスト実行結果８５をテストデータベース８０に記録する。
【００３１】
以上のステップのうち、テストを準備するまでのステップでは、例えば変数の説明や機能などの入力は試験対象プログラム９２のプログラム知識を有するオペレータが行う必要があるが、どのようなテストを行うのかを入力したり、テストを実行したりするステップ、すなわち実際にプログラム試験を行う段階では、試験対象プログラム９２のプログラム知識を有しないオペレータでも、スクリプトなど最低限の知識を有していれば実施することができる。
【００３２】
図２および図３は、テストデータベースの具体的な構成を示している。図２に示すように、テストデータベース８０は、プラント毎にプラントを構成する構成要素の設備情報８７を格納する領域をもつ。図２では、“○○プラント”を対象にして、“○○プラント”中に“最初沈澱池”、“反応槽”、“最終沈澱池”の３つの施設があり、それぞれの施設は設備を有していることを示している。例えば、“最初沈澱池”には“１系初沈汚泥引抜処理”を行う設備があり、その設備には２つの機器である、“１系ポンプ１号”、“１系Ｎｏ．１汚泥引抜弁”があることを示している。
【００３３】
各構成要素は、上記のような名称とともに機能の型をもっている。例えば、“ポンプ”という機器の型だったり、“汚泥引抜”といった設備の型などだったりする。汚泥引抜とは、沈澱槽にたまった汚泥をポンプで除去する処理であるが、沈澱槽が備えられる位置が最初沈澱池か、または最終沈澱池の違いにより処理の名称が異なるが、同じ処理を行うので、制御としては同じ型であると考えられる。
【００３４】
図３に示すように、機能毎にテスト情報領域８６、変数情報領域８１０、入力されたプログラムコードをまとめて管理してテストデータベース８０のモジュール領域８９０にモジュール情報８９として格納されている。モジュール領域８９０は変数情報領域８１０、テスト情報を格納するテスト情報領域８６をもち、テスト情報領域８６にはモジュールで使われるすべてのテスト入力データ８４とテストプログラム８３とが格納されている。また、プログラム入力部７６により入力された試験対象プログラム９２が、機能毎に分割された状態で保持される。また、各モジュールには直接対応するプラントの機能が記憶されている。図３では、“初沈汚泥引抜”がモジュールに対応する機能であり、この機能は図２に示される設備情報８７で定義されている機能となる。また、コードと記述している領域には、入力されたプログラムコードが格納される。変数情報領域８１０には、各モジュールで使われている変数に関する属性（名称、型名、別名など）や、変数の使用状況（入力変数、出力変数、値の参照）が記憶されている（すなわち、変数情報８１は変数情報領域８１０に記憶されている）。このように、各情報は、モジュール毎に関連付けて格納されており、モジュール情報８９にはそのモジュールが実現する機能の情報（設備情報８７）も含まれているため、結局各情報は機能毎に管理されることになる。
【００３５】
図１のプログラム試験装置を、ＣＰＵなどを含むコンピュータを用いて実現した場合のハードウエア（コンピュータ）構成を図４に示す。図４において、ＣＰＵ１には、メモリ３、ディスプレイ２１などの表示部２、マウス４１やキーボード４２などの入力部４、ハードティスク８が接続される。ハードディスク８には、図１の制御部７０の機能を果たすプログラム試験プログラムとテストデータベース８０、オペレーティングシステム（ＯＳ）９０が記録されている。プログラム試験プログラム（制御部）７０は、例えば記憶媒体からハードディスク８にインストールされる。図４では、ＣＤ−ＲＯＭドライブ５を介してＣＤ−ＲＯＭからインストールされる例を示している。
【００３６】
図５に、制御部（プログラム試験プログラム）７０の動作の概要をフローチャートにして示す。プログラム試験プログラム７０は、オペレーティングシステム９０と協働して処理を行う。まず、ＣＰＵ１は空白の（何も入力されていない）プログラム入力画面を表示する。ステップＳ５０１において、入力完了であれば終了する。入力する場合は、機能名や依存する機能、対応するプログラム名、機能の型を入力する（ステップＳ５０２）。ステップＳ５０３において、ステップＳ５０２にて入力した機能がすでに入力されたものであれば、その機能に関する画面へのハイパーリンクを生成する。もし機能が新規に入力されたものであれば、新規に入力画面を生成する。またステップＳ５０２において、プログラム名が含まれているときは、そのプログラムがすでに入力されたものであれば、そのコード入力画面へのハイパーリングを作成するが、なければ新規に画面を生成する。このようにステップＳ５０３では、ステップＳ５０２で入力された情報に応じて入力画面を生成するか、または画面へのハイパーリンクを生成する。ステップＳ５０４において、表示されている機能に関するハイパーリンクをクリック（選択）すると、機能入力画面が表示される（ステップＳ５０５）。また、ステップＳ５０６において、表示されているプログラムに関するハイパーリンクをクリック（選択）すると、コード入力画面が表示されるので（ステップＳ５０７）、プログラムコードを入力する（ステップＳ５０８）。ステップＳ５０９では、入力されたプログラムコードを解析し、変数情報や関連するプログラムや依存するプログラム、類似するプログラムを検索して、そのプログラムコード入力画面へのハイパーリンクを生成する。
【００３７】
図６〜図８は、プログラム入力画面の一例を示す図である。図６〜図８に示すように、プラントの設備構成を定義しながら、各構成要素に対応するプログラムコードを入力していく。図６（ａ）は、空白の（何も入力されていない）入力画面である。図６（ａ）に示されるｅｄｉｔコマンドをクリック（選択）すると、図６（ｂ）に示されるような入力画面に変化する。図６（ｂ）において、最初の機能要素（構成要素）である“○○プラント”を入力する。また、この機能に依存する機能（構成要素）については、Ｗｉｋｉ形式による記述などを使ってハイパーリンクを構成するようにしておく。図６（ｂ）では、“[[”を使って依存する機能を記述しており、最初沈澱池、反応槽、最終沈澱池へのリンクを記述している。なお、このときの機能の型は“プラント”になる。なお、Ｗｉｋｉ形式についてはＷｉｋｉｐｅｄｉａ（ｈｔｔｐ：／／ｊａ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／）のＨｅｌｐに記載されている。図６（ｂ）の入力画面でｄｏｎｅをクリックすると、図７（ｃ）に示すような画面に変化する。図６（ｂ）にて入力した機能は、アンダーラインによりハイパーリンクが作られる。また入力した型は、見え消しで機能名の横に表示（図７（ｃ）では“プラント”と表示）される。図７（ｃ）に示される“最初沈澱池”をクリックすると、図７（ｄ）に示すような画面に変化する。図７（ｄ）に示されるように、画面左側にはプラントの設備構成が階層的に表示される。また、図８（ｅ）に示されるように、機能だけではなくプログラムもハイパーリンクとして表示される。図８（ｅ）にてＭＡＩＮ＿Ｐ＿１をクリックすると、図８（ｆ）に示すようなプログラムコードを入力する画面に変化する。図８（ｆ）では、初沈汚泥引抜に関するプログラムコードを入力している例を示している。また、図８（ｆ）の画面では、後述するが関連するプログラムや依存するプログラム、類似するプログラムが検索されてハイパーリンクで表示される。図８（ｆ）に示されるｄｏｎｅをクリックすることでプログラムの入力は完了する。
【００３８】
図９は、テストデータベース８０における変数情報８１の一例を示している。図９に示されるモジュールにおいて、変数Ｍ０２、Ｍ２４、Ｂ０２、Ｂ３６がプログラム解析部７５によって検出されている。変数Ｍ０２などはラダープログラムにおけるメモリアドレスの識別子であり、プログラムを記述するときによくアドレスが変わることがある。そこでＡ１などの別名を付けておき、テストを記述する際に使用する。また、この変数Ｍ０２の型はＷＯＲＤ型１６ビット長さの変数で、モジュールの入力変数として使われていることがわかる。なお、使用状況の欄におけるＩＮは入力変数として使用されていることを示し、ＯＵＴは出力変数、ＲＥＦは参照変数として使用されていることを示す。
【００３９】
以上の解析により得られた変数情報８１からは各モジュールで使われる変数の属性を知ることができるので、それに合わせてモジュール毎に含まれる変数の入力画面を構成する。モジュール毎に入力画面を構成するのは、解析により得ることができない変数の情報をオペレータにより入力させるためである。図１０は変数情報からマークアップ言語を使って画面を生成した例である。既成のテンプレートのような画面を用意することで簡単に画面を生成することができる。このとき各変数には別名が自動的に、あるいはオペレータの入力により作成される。この別名はテストを記述するときに変数を特定するために使うものである。図１０の入力画面７２の例では、オペレータによって変数の説明を入力させるようにしている。ただし、前述のように、変数情報は解析によって得られる情報のみで十分な場合もあり、必ずしも入力画面を構成して入力によって得る必要はない。このようにして得られた変数情報をプログラム入力画面に表示する。
【００４０】
以上で、試験対象プログラム９２の入力が完了し、テストに必要なプログラムの情報が得られた。次に、テストに必要なテストの情報、すなわちどのようなテストを行うのかをオペレータが入力するためのテスト入力画面を生成する。
【００４１】
図１１に、テスト入力画面生成部７１の動作をフローチャートにして示す。まず、キーボード４２により、プログラム入力画面を表示する。ステップＳ８０１において、テスト入力画面をつくるプログラムがなければ終了する。テスト入力画面をつくるプログラムがあれば、ハイパーリンクを辿りながらテストを入力する機能を選択する（ステップＳ８０２）。機能が選択できたらプログラムを選択する（ステップＳ８０３）。プログラム入力画面を表示し、コード入力画面にあるテスト作成ボタンを押し（ステップＳ８０４）、モジュール情報を読み込み（ステップＳ８０５）、テスト入力画面を生成する（ステップＳ８０６）。テスト入力画面において入力となるデータと、テストロジックとを入力する（ステップＳ８０７）。
【００４２】
図１２は、モジュール情報８９から生成されたテスト入力画面におけるテストロジックの入力画面部分を示したものである。ここでは変数情報８１で定義された別名を用いて、スクリプトを使ってロジック if( A3&A4 == true) { assert( A2 == A1+100 ); } を記述している。これはビット型変数であるＡ３とＡ４のいずれかがｔｒｕｅであるとき、ＷＯＲＤ型の変数Ａ２がＷＯＲＤ型の変数Ａ１より１００大きい数でない場合が異常であることを検出するロジックである。このようなテストロジックは、試験毎にオペレータが決める必要があり、テスト入力画面生成部７１によって自動で生成することはできないため、入力画面７２によってオペレータが入力するように構成している。このようにプログラマブルな条件を指定できるように構成することで、複雑な条件など、種々の状態を模擬した試験が行えるようになる。
【００４３】
図１３は、生成されたテスト入力画面の例である。図１３に示されるモジュールに関連する機能名は”初沈汚泥引抜“であり、モジュールで使用されている変数へのテストデータ入力画面部などが表示されている。テストデータやロジックは画面にある編集ボタンを押すことで編集モードに切り替わり編集が行えるようになる。
【００４４】
次に、実際にテストを行う場合、テスト編集部７３が、テスト入力画面情報８２を用いて、表示部２に図１３の例で示すようなテスト入力画面を表示させ、オペレータにテストロジックや必要なテストデータを入力させる。入力されたテストロジックと、別名でプログラムの変数にアクセスするためのプログラムを結合してテストプログラム８３を生成して、入力された変数データなどのテスト入力データ８４とともにテストデータベース８０に記録する。
【００４５】
このようにしてテストプログラム８３およびテストデータ８４が整った後、オペレータにより実行ボタンが押されると、テストプログラム実行部７４がテストデータベース８０に記録されたテストデータ８４とスクリプトで記述されたテストプログラム８３を読み込んで、ローダ９３にテストプログラム８３とテストデータ８４を送り、ローダ９３がＰＬＣ９４で実行可能な形式に変換してＰＬＣ９４上でテストが実行される。
【００４６】
テストが実行されると、テストプログラム実行部７４はＰＬＣ９４のメモリにある実行結果のデータを受け取り、テスト実行結果８５としてテストデータベース８０に記録する。また、テスト結果は表示部２に表示させることもできる。このようにして、テストプログラム実行部７４では、ＰＬＣ９４上でテストプログラムを実行させるとともに、テストの実行結果（テスト結果）を機能毎に、テスト実行単位で管理することができる。
【００４７】
図１４は、テストデータベース８０に記録されたテスト実行結果８５の例である。図１４によれば、Ａ水処理場に関するテストが１日単位で実行され、９月９日のテストではモジュール３４，５６についてはテストが成功していないが、次の日の９月１０日のテストではモジュール３４，５６のバージョンがともに０．８から１．０、１．１から２．０に更新されることでテストがクリアされていることがわかる。このようにテスト結果を一元的に管理することで機能単位、モジュール単位、日時単位といった側面で多角的に分析を行えるため試験の効率化を図ることが可能になる。
【００４８】
以上説明したように、本実施形態１によれば、プログラム解析部が自動で解析により得ることができないモジュール情報や変数情報の一部を、オペレータに入力させることで得ることができ、さらに、オペレータにテストロジックとテストデータを入力させることにより、複数の条件を組み合せたり、時間や状態変化を考慮したり、ある条件での試験結果を他の条件の入力データとして使ったりするなどプログラマブルな条件でプログラム試験を行うことができる。また、プラントを構成する構成要素に対応したプログラムを入力することができるため、事前にプラントの仕様を作成する必要がない。また、プラントの仕様に従ってプログラムの関係を分析することができるので、プログラムのもつ変数の量に依存することなく、関連するプログラムを容易に見つけることができる。
【００４９】
〈実施形態２〉
図１５は、本発明の実施形態２によるプログラム試験装置のプログラム検索部７７の動作を説明するためのプラント設備構成の例である。図１５に示すように、○○プラントの下位（下位階層）に施設Ａ〜Ｃがあり、施設Ａには設備１と設備２があることを示している。設備１は“□制御”型の機能でプログラムＰ１が対応づけられている。同様に、設備２は“Ｂ”型の制御をもつ機能でプログラムＰ４が対応づけられている。設備１は、さらに機器ａ、機器ｂの２つの機器を含んでいる。機器ａは“ポンプ”型でありプログラムＰ２が対応づけられている。機器ｂは“バルブ”型でありプログラムＰ３が対応づけられている。このような設備構成をもつプラントでプログラムＰ１に関連するプログラムを、プログラムのもつ変数を辿ることなく見つけることが可能であることが本発明の特徴である。
【００５０】
図１６は、本実施形態２におけるプログラム検索部７７の動作の概要を説明するフローチャートである。ステップＳ１３０１において、プログラムの検索が完了していれば終了する。完了していなければ、ハイパーリンクを辿ることによって、検索対象となるプログラムがもつ機能を選択する（ステップＳ１３０２）。ここでは選択した機能を設備１とする。次に、選択された機能入力画面が検索対象となるプログラムを選択する（ステップＳ１３０３）。ここでは検索対象となるプログラムをＰ１とする。ステップＳ１３０４において、選択したプログラム以外で選択した機能、つまり設備１に関連するプログラムを取得する。ここではそのようなプログラムはない。次に、選択した機能、つまり設備１の親機能、つまり施設１を上位機能とする他の機能を検索する（ステップＳ１３０５）。ここでは設備２が相当する。ステップＳ１３０６において、ステップＳ１３０５にて検索された機能に対応したプログラムのリストを取得する。ここでは設備２に対応したプログラムとしてＰ４が該当する。これらのリストの要素を関連プログラムとして、それぞれについてハイパーリンクを作成する。ステップＳ１３０７では、選択した機能に依存する機能が有するプログラムのリストを取得する。これらのリストの要素を依存プログラムとしてハイパーリンクを作成する。ここでは機器ａ、機器ｂのそれぞれに対応したプログラムＰ２、Ｐ３が該当する。ステップＳ１３０８では、選択した機器と同じ型の機能を検索する。ここでは設備５が該当する。ステップＳ１３０９において、その機能に対応したプログラムのリストを取得する。このリストの要素を類似プログラムとして、それぞれについてハイパーリンクを作成する。ここではプログラムＰ１０が該当する。このような結果を反映したプログラム入力画面を図１７に示す。
【００５１】
すなわち、プログラム検索部７４は、設備情報８７に基づいて一の構成要素に対応するプログラムに対して、一の構成要素と類似の処理を行う構成要素に対応する類似プログラム、一の構成要素と共通の直近であって上位階層の構成要素を有する構成要素に対応する関連プログラム、一の構成要素の下位階層の構成要素に対応する依存プログラムを含む所定の関係を有するプログラムを検索する。
【００５２】
以上説明したように、本実施形態２によれば、実施形態１と同様、プログラム解析部が自動で解析できないモジュール情報や変数情報の一部を、オペレータに入力させることで得ることができ、さらに、オペレータによりテストロジックを入力させることにより、複数の条件を組み合せたり、時間や状態変化を考慮したり、ある条件での試験結果を他の条件の入力データとして使ったりするなどプログラマブルな条件でプログラム試験を行うことができる。本実施形態２では、これに加えて、関連のある機能をテストすることができるため、テスト結果に異常があり、試験対象プログラムにバグがある可能性があると判断された場合など、影響のある機能のテストも行うことで、効率的にバグ検索を行うことができる。すなわち、変数を辿ることなく関連するプログラムや同じ階層の構成要素のプログラムを容易に検索することができるため、プログラムエラーの発生を未然に防ぐことができる。
【符号の説明】
【００５３】
１  ＣＰＵ、２  表示部、３  メモリ、４  入力部、５  ＣＤ−ＲＯＭドライブ、８  ハードディスク、２１  ディスプレイ、４１  マウス、４２  キーボード、７０  制御部、７１  テスト入力画面生成部、７２  ロジック入力部、７３  テスト編集部、７４  テストプログラム実行部、７５  プログラム解析部、７６  プログラム入力部、７７  プログラム検索部、８０  テストデータベース、８１  変数情報、８２  テスト入力画面情報、８３  テストプログラム、８４  テスト入力データ、８５  テスト実行結果、８６  テスト情報、８７  設備情報、８８  プログラム入力画面情報、８９  モジュール情報、９０  ＯＳ、９３  ローダ、９４  ＰＬＣ、８１０  変数情報領域、８９０  モジュール領域。
【図１】
2012103791.tif 000003
【図２】
2012103791.tif 000004
【図３】
2012103791.tif 000005
【図４】
2012103791.tif 000006
【図５】
2012103791.tif 000007
【図６】
2012103791.tif 000008
【図７】
2012103791.tif 000009
【図８】
2012103791.tif 000010
【図９】
2012103791.tif 000011
【図１０】
2012103791.tif 000012
【図１１】
2012103791.tif 000013
【図１２】
2012103791.tif 000014
【図１３】
2012103791.tif 000015
【図１４】
2012103791.tif 000016
【図１５】
2012103791.tif 000017
【図１６】
2012103791.tif 000018
【図１７】
2012103791.tif 000019