(57)【要約】【課題】  鉄道運行管理システムの試験の実行、評価のためには多大な工数を必要とするため、効率的に試験を実行する必要がある。【解決手段】  本発明では、試験の実行状況を元に試験フェーズを特定し、試験間の依存関係を元に現在のフェーズで優先的に確認すべき試験を選択することで、効率的に試験を実行するための方法を提供する。すなわち、検証装置は、列車自動制御装置から取得した試験の実行状況に基づいて試験フェーズを推定する試験状況特定部と、試験間の依存関係に関する情報であるテストケース定義テーブルを記憶する記憶部と、試験フェーズと依存関係に基づいて、現在のフェーズにおいて、優先すべき試験を選択する試験選択部と、選択された試験を実行するよう選択された試験の情報を列車自動制御装置に送信する試験実行部と、を備える。【選択図】図3
2015022386.tif 000002
【特許請求の範囲】
【請求項１】
列車の運行に関する試験を行い、前記試験の実行状況を検証装置に送信する列車自動制御装置と、
前記列車自動制御装置から取得した前記試験の実行状況に基づいて試験フェーズを推定する試験状況特定部と、
試験間の依存関係に関する情報であるテストケース定義テーブルを記憶する記憶部と、
前記試験フェーズと前記依存関係に基づいて、現在のフェーズにおいて、優先すべき試験を選択する試験選択部と、
選択された試験を実行するよう前記選択された試験の情報を前記列車自動制御装置に送信する試験実行部と、
を備えた検証装置とを備え、
前記列車自動制御装置は、前記検証装置から受信した前記選択された試験を実行する
ことを特徴とする鉄道運行管理システム。
【請求項２】
請求項１に記載の鉄道運行管理システムにおいて、
前記検証装置の前記記憶部は、更に、
前記試験の検証項目情報である検証項目テーブルを記憶し、
前記試験選択部は、前記試験の検証項目情報に従って、実行すべき試験項目を選択する
ことを特徴とする鉄道運行管理システム。
【請求項３】
請求項２に記載の鉄道運行管理システムにおいて、
前記検証装置の前記記憶部は、更に、
前記列車の設備情報に関する情報である設備テーブルと、
前記列車のダイヤに関する情報であるダイヤテーブルとを備え、
前記検証装置の前記試験実行部は、
前記テストケース定義テーブルに記憶された前記依存関係からその時点での各モジュールにおけるバグの収束状況を求め、
モジュール間関係テーブルの情報と組合せることで、前記列車よりも前の時間帯に相当する前方方向の依存関係のあるモジュールはすべて収束しているが前記列車のモジュールは収束していないモジュールを検索し、
検索されたモジュールに関する試験を集中して選択する
ことを特徴とする鉄道運行管理システム。
【請求項４】
請求項３に記載の鉄道運行管理システムにおいて、
前記検証装置の前記記憶部は、更に
前記試験の実行状況の結果を記憶する実行履歴テーブルを備え、
前記テストケース定義テーブルに記憶された前記依存関係と、前記実行履歴テーブルに記憶された前記試験の実行状況の結果に基づいて、前記試験において不合格となった試験を拡張元とする試験を実行対象から削除し、新たな試験を選択する
ことを特徴とする鉄道運行管理システム。
【請求項５】
検証装置と列車自動制御装置が実行する鉄道運行管理方法において、
前記列車自動制御装置は、列車の運行に関する試験を行い、前記試験の実行状況を検証装置に送信し、
前記検証装置は、前記列車自動制御装置から取得した前記試験の実行状況に基づいて試験フェーズを推定し、
試験間の依存関係に関する情報であるテストケース定義テーブルを記憶し、
前記試験フェーズと前記依存関係に基づいて、現在のフェーズにおいて、優先すべき試験を選択し、
選択された試験を実行するよう前記選択された試験の情報を前記列車自動制御装置に送信し、
前記列車自動制御装置は、前記検証装置から受信した前記選択された試験を実行する
ことを特徴とする鉄道運行管理方法。
【請求項６】
請求項５に記載の鉄道運行管理方法において、
前記検証装置は、更に、
前記試験の検証項目情報である検証項目テーブルを記憶し、
前記試験選択部は、前記試験の検証項目情報に従って、実行すべき試験項目を選択する
ことを特徴とする鉄道運行管理方法。
【請求項７】
請求項６に記載の鉄道運行管理方法において、
前記検証装置は、更に、
前記列車の設備情報に関する情報である設備テーブルと、
前記列車のダイヤに関する情報であるダイヤテーブルとを記憶し、
前記テストケース定義テーブルに記憶された前記依存関係からその時点での各モジュールにおけるバグの収束状況を求め、モジュール間関係テーブルの情報と組合せることで、前記列車よりも前の時間帯に相当する前方方向の依存関係のあるモジュールはすべて収束しているが前記列車のモジュールは収束していないモジュールを検索し、
検索されたモジュールに関する試験を集中して選択する
ことを特徴とする鉄道運行管理方法。
【請求項８】
請求項７に記載の鉄道運行管理方法において、
前記検証装置は、更に
前記試験の実行状況の結果を記憶する実行履歴テーブルを記憶し、
前記テストケース定義テーブルに記憶された前記依存関係と、前記実行履歴テーブルに記憶された前記試験の実行状況の結果に基づいて、前記試験において不合格となった試験を拡張元とする試験を実行対象から削除し、新たな試験を選択する
ことを特徴とする鉄道運行管理方法。
【請求項９】
列車自動制御装置から取得した前記試験の実行状況に基づいて試験フェーズを推定する試験状況特定部と、
試験間の依存関係に関する情報であるテストケース定義テーブルを記憶する記憶部と、
前記試験フェーズと前記依存関係に基づいて、現在のフェーズにおいて、優先すべき試験を選択する試験選択部と、
選択された試験を実行するよう前記選択された試験の情報を前記列車自動制御装置に送信する試験実行部と、
を備えることを特徴とする検証装置。
【請求項１０】
請求項９に記載の検証装置において、
前記記憶部は、更に、
前記試験の検証項目情報である検証項目テーブルを記憶し、
前期試験選択部は、前記試験の検証項目情報に従って、実行すべき試験項目を選択する
ことを特徴とする検証装置。
【請求項１１】
請求項１０に記載の検証装置において、
前記記憶部は、更に、
前記列車の設備情報に関する情報である設備テーブルと、
前記列車のダイヤに関する情報であるダイヤテーブルとを備え、
前記試験実行部は、
前記テストケース定義テーブルに記憶された前記依存関係からその時点での各モジュールにおけるバグの収束状況を求め、
前記モジュール間関係テーブルの情報と組合せることで、前記列車よりも前の時間帯に相当する前方方向の依存関係のあるモジュールはすべて収束しているが前記列車のモジュールは収束していないモジュールを検索し、
検索されたモジュールに関する試験を集中して選択する
ことを特徴とする検証装置。
【請求項１２】
請求項１１に記載の検証装置において、
前記記憶部は、更に
前記試験の実行状況の結果を記憶する実行履歴テーブルを備え、
前記テストケース定義テーブルに記憶された前記依存関係と、前記実行履歴テーブルに記憶された前記試験の実行状況の結果に基づいて、前記試験において不合格となった試験を拡張元とする試験を実行対象から削除し、新たな試験を選択する
ことを特徴とする検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鉄道運行管理システム及び検証装置におけるプログラムの品質確保と工数削減に向けた試験に関する。
【背景技術】
【０００２】
近年、地球温暖化などの問題を受け、エネルギー効率の高い大量輸送交通システムとして鉄道が見直されている。そのため、様々な国々で鉄道運行管理システムの導入が検討されている。
【０００３】
鉄道運行管理システムは、線路配線に応じてプログラムを構築する必要がある。駅の線路配線は多様であるため、鉄線区や駅ごとに独自のプログラムが開発されている。さらに近年の線路配線の複雑化や制御の高度化によりプログラムが大規模化してきており、プログラム開発の長期化、コストの増大を招いている。
【０００４】
一方で鉄道運行管理システムにおける障害は、鉄道を利用する多くの利用者や鉄道事業者に影響を与えることとなる。そのため、鉄道運行管理システムには高い品質が求められることとなる。プログラムの大規模化に伴い、試験件数も膨大となってきている。効率的に試験を実行することも必要となる。
【０００５】
特許文献1では、バグの重要度や修正進捗の情報により、優先して取り組むべきバグを選定し、対策修正することを支援する技術が開示されている。特に、バグごとのソフトウェア開発プロジェクトが受けたダメージ量がユーザによって入力され、バグ票に記録されたバグのプロジェクト進捗に対するダメージが大きいものから順に並べ替えることが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2005-228241号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献1に記載の技術では、バグのプロジェクト進捗に対するダメージが大きいものから順に修正及び試験を進めているが、効率的に試験が行えない可能性がある。例えば、処理Aと処理Bが存在し、処理Aの結果を受けて処理Bを実行する場合には、処理Aのバグを先に修正しないと、処理Bの試験を行う意味がなく、試験の効率が悪くなる。同様に、前提となる試験の結果がOKとなった場合にのみ、より複雑な試験を実施する方が効率が良い。
【０００８】
そこで、本発明の目的は、試験間の依存関係、試験の実行状況を考慮した効率的な試験を実現することである。
【課題を解決するための手段】
【０００９】
開示する鉄道運行管理システムは、検証装置と、列車自動制御装置とを備える。列車自動制御装置は、列車の運行に関する試験を行い、試験の実行状況を検証装置に送信し、検証装置は、列車自動制御装置から取得した試験の実行状況に基づいて試験フェーズを推定する試験状況特定部と、試験間の依存関係に関する情報であるテストケース定義テーブルを記憶する記憶部と、試験フェーズと依存関係に基づいて、現在のフェーズにおいて、優先すべき試験を選択する試験選択部と、選択された試験を実行するよう選択された試験の情報を列車自動制御装置に送信する試験実行部と、を備え、列車自動制御装置は、検証装置から受信した選択された試験を実行する。
【発明の効果】
【００１０】
本発明により、効率的に試験を行うことができるようになり、工数を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】鉄道運行管理システムの全体構成
【図２】列車自動制御装置の構成図
【図３】検証装置の構成図
【図４】モジュール間関係テーブル
【図５】テストケース定義テーブル
【図６】設備テーブル
【図７】ダイヤテーブル
【図８】列車テーブル
【図９】手動操作テーブル
【図１０】検証項目テーブル
【図１１】実行履歴テーブル
【図１２】テストケース登録手段
【図１３】テストケース登録画面
【図１４】テストケース実行手段
【図１５】テストケース実行画面
【図１６】バグ出現数の遷移
【発明を実施するための形態】
【００１２】
以下、本発明の実施の一形態を、図面を参照しながら詳細に説明する。
【００１３】
図1は、列車94の運行を管理する鉄道運行管理システムのシステム全体構成例である。鉄道運行管理システムは、計画系システム91と、列車自動制御装置92と、地上装置93と、列車94と、地上設備群95から構成される。列車自動制御装置92は、計画系システム91によって決定された列車ダイヤ情報及び地上装置93によって収集された地上設備群95の状態情報を、ネットワークを介して取得する。列車自動制御装置92は、軌道回路951によって得られる列車94の在線位置と前期列車ダイヤ情報に記載された出発時刻や計画進路を参照し、列車94の進路上に設置されている信号機952や転轍機953を地上設備群95を介して制御する。検証装置1が検証する対象とするのは、列車自動制御装置92で動作するプログラムである。なお、実運用時は、図１上の計画系システム91 、列車自動制御装置92、及び地上設備93が動作し、試験時は、列車自動制御装置92、検査装置1が動作する。
【００１４】
図2は、テスト対象となる列車自動制御装置92の構成図の例である。
列車自動制御装置92は、演算をするCPU11、プログラムや演算に関係する一時的な情報を記憶するメモリ12、データやプログラムを格納するハードディスクなどからなる記憶部13と、キーボードやマウスなどの入力部14、ディスプレイなどの出力部15、ネットワークと通信する通信部16を含む。列車自動制御装置92は、記憶部13に記憶したプログラムやデータをメモリ12にロードし、CPU11で演算することでプログラムを実行する。
【００１５】
列車自動制御装置92は、記憶部13にデータとして設備テーブル41、ダイヤテーブル42、プログラムとして変化検出51、制御監視52、列車追跡53、進路制御54、及びダイヤ管理55を格納する。
【００１６】
設備テーブル41は、後述する設備テーブル23のサブセットで、設備ID232、設備種別233、外方軌道回路234、内方軌道回路235、現在状態237の情報を格納する。
【００１７】
ダイヤテーブル42は、後述するダイヤテーブル24のサブセットで、列車ID242、駅ID243、番線ID244、着時刻245、発時刻246の情報を格納する。
【００１８】
列車テーブル43は、後述する列車テーブル25のサブセットで、列車ID252、現在在線位置255の情報を格納する。
【００１９】
列車自動制御装置92の機能を実現する変化検出51、制御監視52、列車追跡53、進路制御54、ダイヤ管理55の各種プログラムは、設備テーブル41、ダイヤテーブル42、列車テーブル43を参照し、地上設備93からの設備情報、計画系システム91からのダイヤ情報を入力とし、地上設備93への制御出力、出力部14または通信部へのアラームを出力として実行する。
【００２０】
図3は、列車自動制御装置92で動作するプログラムを検証する検証装置1の構成図の例である。
【００２１】
検証装置1は、演算をするCPU11、プログラムや演算に関係する一時的な情報を記憶するメモリ12、データやプログラムを格納するハードディスクなどからなる記憶部13と、キーボードやマウスなどの入力部14、ディスプレイなどの出力部15、ネットワークと通信する通信部16を含む。列車自動制御装置92は、記憶部13に記憶したプログラムやデータをメモリ12にロードし、CPU11で演算することでプログラムを実行する。
【００２２】
検証装置1は、記憶部13にデータとしてモジュール間関係テーブル21、テストケース定義テーブル22、設備テーブル23、ダイヤテーブル24、列車テーブル25、手動操作テーブル26、検証項目テーブル27、実行履歴テーブル28を格納する。
【００２３】
検証装置1は、列車自動制御装置92を構成する変化検出51、制御監視52、列車追跡53、進路制御54、ダイヤ管理55の各種プログラムの動作を確認する。各種プログラムを実行するため、図示しないが、検証装置1は記憶部に記憶部13に設備テーブル41、ダイヤテーブル42、変化検出51、制御監視52、列車追跡53、進路制御54、ダイヤ管理55を格納する。プログラム群への入力となる設備情報とダイヤ情報は、テストケース実行手段32が生成して、プログラム群に渡す。前記プログラム群からの出力である制御出力とアラームは、テストケース実行手段32が受け取る。
【００２４】
図4は、モジュール間関係テーブル21である。
【００２５】
モジュール間関係テーブル21は、検証対象である列車自動制御装置92で動作するプログラムモジュール間の関係を示したものである。
【００２６】
図4(b)はモジュール間の依存関係を示したものである。例えば、進路制御は制御監視と列車追跡とダイヤ管理の結果を受けて実行するものとなる。
【００２７】
図4(a)はモジュール間の関係をテーブル形式で示したものである。
【００２８】
モジュール間関係テーブル21は、モジュールID211、依存モジュールID212、検証種別213を格納する。
【００２９】
モジュールID211は、実行系で動作するモジュールを指定する。
【００３０】
依存モジュールID212は、モジュール実行時に事前に実行するモジュールで、該当モジュールでの実行結果を利用する。
【００３１】
検証種別213は、モジュールの動作が正しいかを検証する内容を指定する。検証種別は、検証項目テーブル27の検証種別で指定する。
【００３２】
図5は、テストケース定義テーブル22である。
【００３３】
テストケース定義テーブル22は、検証するために実行するテストケースの定義を示したものである。テストケース間には拡張関係があり、既存のテストケースを拡張して新しいテストケースを定義することができる。
【００３４】
図5(b)はテストケース間の拡張関係を示した図である。例えば、テストケースT12は、テストケース11に手動操作M12を追加したときのテストケースとなる。
【００３５】
図5(a)はテストケース間の拡張関係を含んだテストケースの定義をテーブル形式で示したものである。
【００３６】
テストケース定義テーブルは、テストケースID221、拡張元テストケースID222、開始時刻223、終了条件224、設備定義ID225、ダイヤ定義ID226、列車定義ID227、手動操作定義ID228、検証項目ID229、NG回数22Aを格納する。
【００３７】
テストケースID221は、テストケースの識別子である。
【００３８】
拡張元テストケースID222は、ベースとなるテストケースを示したものである。拡張元のテストケースに対し、手動操作と検証項目を拡張し、新しいテストケースを作成する。
【００３９】
開始時刻223は、テストケース実行手段32がテストケースを実行するときに開始時刻として設定する時刻である。
【００４０】
終了条件224は、テストケース実行手段32がテストケースを終了するときの条件である。終了条件には、テストケース実行手段32がテストケースを実行するときの現在時刻が指定した時刻になった場合と、列車が指定した軌道回路に移動した場合とがある。
【００４１】
設備定義ID225は、設備テーブル23で定義する設備群を示す識別子である。
【００４２】
ダイヤ定義ID226は、ダイヤテーブル24で定義するダイヤを示す識別子である。
【００４３】
列車定義ID227は、列車テーブル25で定義する列車群を示す識別子である。
【００４４】
手動操作定義ID228は、手動操作テーブル26で定義する手動操作を示す識別子である。
【００４５】
検証項目ID229は、検証項目テーブル27で定義する検証項目を示す識別子である。
【００４６】
NG回数22Aは、テストケースを実行してNGとなった回数である。典型的なテストケースとして登録する場合には初期値を0に、試験をすることで新たに不具合が見つかったことにより登録する場合には初期値1を設定する。
【００４７】
図6は、設備テーブル23である。
【００４８】
設備テーブル23は、設備定義ID231、設備ID232、設備種別233、外方軌道回路234、内方軌道回路235、初期状態236、現在状態237、制御要求238を格納する。
【００４９】
設備定義ID231は、テストケース定義テーブルで指定する一連の設備群を表す識別子である。設備ID232は、テストケース内で設備を一意に特定する識別子である。設備種別233は、信号機、軌道回路がある。設備種別により、記入する項目が変化する。外方軌道回路234は、設備種別233が信号機の場合に、信号機の外方にある軌道回路の設備IDを記入する。
【００５０】
例えば、信号機2RBの外方軌道回路は1Tである。内方軌道回路235は、設備種別233が信号機の場合に、信号機の内方にある軌道回路群の設備IDを記入する。信号機の第１内方から最終内方の順に記入する。例えば、信号機2RBの内方軌道回路は2T 4Tである。  初期状態236は、設備の初期状態を定義する。状態は定位または反位である。現在状態237は、テストケース実行手段32を実行中の設備の状態である。制御要求238は、テストケース実行手段32を実行することによる設備の制御要求の有無を示す。制御要求は、定位、反位、空(なし)のいずれかである。
【００５１】
図7は、ダイヤテーブル24である。
【００５２】
ダイヤテーブル24は、ダイヤ定義ID241、列車ID242、駅ID243、番線ID244、着時刻245、発時刻246を持つ。
【００５３】
ダイヤ定義ID241は、テストケース定義テーブルで指定する一連のダイヤ情報を表す識別子である。
【００５４】
列車ID242は、テストケース内で列車を一意に特定する識別子である。
【００５５】
駅ID243は、列車が通過する駅の識別子である。例えば、列車AはX→Y→Zの順に通過する。
【００５６】
番線ID244は、列車が通過する駅内の番線の識別子である。
【００５７】
着時刻245は、列車が該当駅の該当番線に到着する予定時刻を記入する。
【００５８】
発時刻246は、列車が該当駅の該当番線を出発する予定時刻を記入する。
【００５９】
図8は、列車テーブル25である。
列車テーブル25には、列車定義ID251、列車ID252、発生条件253、発生場所254、現在在線位置255、在線カウント256を持つ。
【００６０】
列車定義ID251は、テストケース定義テーブルで指定する一連の列車群を表す識別子である。
【００６１】
列車ID252は、テストケース内で列車を一意に特定する識別子である。
【００６２】
発生条件253は、テストケース実行手段32がテストケースを実行するときに、列車を発生させる条件を示す。開始時、発生させる時刻などを指定する。開始時の場合は、テストケースの実行開始時に列車を生成する。発生させる時刻の場合は、テストケースを実行中にその時刻となったときに列車を生成する。
【００６３】
発生場所254は、発生条件を満たしたときに、列車を生成する場所を信号機及び軌道回路で指定する。
【００６４】
現在在線位置255は、列車が在線している信号機及び軌道回路の設備IDを設定する。
【００６５】
在線カウント256は、列車在線位置で指定した軌道回路に在線している時間を示す。
【００６６】
図9は、手動操作テーブル26である。
【００６７】
手動操作テーブル26は、手動操作定義ID261、実行条件262、操作内容263を持つ。
【００６８】
手動操作定義ID261は、テストケース定義テーブル22で指定する手動操作を表す識別子である。
【００６９】
実行条件262は、テストケース実行手段32が手動操作を実行する条件を示す。実行条件には、実行時刻、または、列車が軌道回路に進入などを指定する。実行時刻の場合は、テストケース実行手段32により現在時刻が指定した実行時刻となった場合に、該当する手動操作を実行する。列車が軌道回路に進入の場合には、テストケース実行手段32により該当列車が該当軌道回路上に在線するようになったときに、該当する手動操作を実行する。
【００７０】
操作内容263は、手動操作の内容を指定する。信号機の手動G現示、信号機の手動R現示、ダイヤの番線変更、ダイヤの着時刻変更、ダイヤの発時刻変更などを指定する。
【００７１】
図10は、検証項目テーブル27である。
検証項目テーブル27は、検証項目ID271、検証種別272、検証内容273を持つ。
検証項目ID271は、テストケース定義テーブルで指定する検証項目を示す識別子である。
検証種別272は、変化検出、設備アラーム、ダイヤ情報、列車生成、列車消去、列車移動、進路、順序、制御アラームがある。
【００７２】
検証内容273は検証種別により異なる。
検証種別272が「変化検出」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラム内で設備状態としてあるべき状態を指定する。
検証種別272が「設備アラーム」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラムが出力すべきアラーム情報と対象設備を指定する。
検証種別272が「ダイヤ」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラム内のダイヤとしてあるべき値を指定する。
【００７３】
検証種別272が「列車生成」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラムが在線となったことを検知したことで、生成されるべき列車情報と在線位置を指定する。
検証種別272が「列車消去」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラムが非在線となったことを検知したことで、消去されるべき列車情報と在線位置を指定する。
【００７４】
検証種別272が「列車移動」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラム内で列車が移動する軌道回路群を順番に指定する。
検証種別272が「順序」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラム内で、特定の軌道回路を通過する列車の順序を指定する。
【００７５】
検証種別272が「制御アラーム」の場合、検証内容273には、検証対象となる列車自動制御装置92のプログラムが出力すべきアラーム情報と対象列車を指定する。
【００７６】
図11は、実行履歴テーブル28である。
実行履歴テーブル28には、時刻281、履歴種別282、履歴内容283がある。
時刻281は、実行状態を記録する時刻を格納する。
【００７７】
履歴種別282は、設備、列車、ダイヤ、アラームがある。
【００７８】
履歴内容283は、履歴種別282により異なる。
【００７９】
履歴種別282が「設備」の場合、履歴内容283には、検証対象となる列車自動制御装置92のプログラムにおける、設備ID及び設備状態を格納する。
【００８０】
履歴種別282が「列車」の場合、履歴内容283には、検証対象となる列車自動制御装置92のプログラムにおける、列車ID及び列車在線位置を格納する。
【００８１】
履歴種別282が「ダイヤ」の場合、履歴内容283には、検証対象となる列車自動制御装置92のプログラムにおける、ダイヤ情報を格納する。
【００８２】
履歴種別282が「アラーム」の場合、履歴内容283には、検証対象となる列車自動制御装置92のプログラムが出力したアラームメッセージを格納する。
【００８３】
図12は、テストケース登録手段31の手順を示したフローチャートである。図13は、テストケース登録手段31を実行するときのテストケース登録画面61である。
【００８４】
テストケース登録手段31は、事前に典型的な線路形状・ダイヤにおける動作確認をする場合と、実行環境においてバグが発生したときにバグが修正されたことを確認する場合に、実行される。
【００８５】
テストケース登録手段31は、ユーザに既存のテストケースを拡張するか選択させる(ステップ1)。
【００８６】
テストケース登録手段31は、ステップ1でユーザが拡張しないを選択した場合、ステップ3に進む(ステップ2)。
【００８７】
テストケース登録手段31は、テストケース実行手段32がテストケースを実行するときの開始時刻を入力する(ステップ3)。開始時刻の入力結果は、テストケース定義テーブル22の開始時刻223に登録する。
【００８８】
テストケース登録手段31は、ユーザに設備定義を入力させる(ステップ4)。設備定義の入力結果は、テストケース定義テーブルの設備定義ID225及び設備テーブル23に登録する。設備定義の方法は、設備テーブル23にあるようにテーブル形式で入力する方法、線路形状窓613にあるように信号機や軌道回路などの線路部品を組合せて入力する方法とがある。なお、設備テーブル23に既登録の設備定義の中から同一のものを選択しても良い。また、設備テーブル23の現在状態237及び制御要求238は、テストケース実行手段32で動的に設定するものであるので、本ステップで入力する必要はない。
【００８９】
テストケース登録手段31は、ユーザにダイヤ定義を入力させる(ステップ5)。ダイヤ定義の入力結果は、テストケース定義テーブル22のダイヤ定義ID226及びダイヤテーブル24に登録する。ダイヤ定義の方法は、ダイヤテーブル24にあるようにテーブル形式で入力する方法、ダイヤ窓614にあるように、縦軸に駅及び番線、横軸に時刻を設定したグラフ上にダイヤスジを入力する方法がある。なお、ダイヤテーブル24に既登録のダイヤ定義の中から同一のものを選択しても良い。
【００９０】
テストケース登録手段31は、ユーザに列車定義を入力される(ステップ6)。列車定義の入力結果は、テストケース定義テーブル22の列車定義ID227及び列車テーブル25に登録する。列車定義の方法は、列車テーブル25にあるようにテーブル形式で入力する方法、線路系形状窓613に描かれた軌道回路上に生成する列車を指定する方法とがある。なお、列車テーブル25に既登録の列車定義の中から同一のものを選択しても良い。また、列車テーブル25の現在在線位置255及び在線カウント256は、テストケース実行手段32が動的に設定するものであるので、本ステップで入力する必要はない。
【００９１】
テストケース登録手段31は、ユーザに手動操作定義を入力させる(ステップ7)。手動操作定義の入力結果は、テストケース定義テーブル22の手動操作定義ID228及び手動操作テーブル26に登録する。手動操作定義の方法は、手動定義テーブルにあるようにテーブル形式で入力する方法、ステップ3〜ステップ6で入力した開始時刻、設備定義、ダイヤ定義、列車定義の情報を元に、テストケース実行手段32をステップ実行して状態を確認することで、対話的にユーザが指定したタイミングで手動操作定義を入力する方法とがある。
【００９２】
テストケース登録手段31は、ユーザに検証項目を入力させる(ステップ8)。検証項目の入力結果は、テストケース定義テーブル22の検証項目ID229及び検証項目テーブル27に登録する。
【００９３】
テストケース登録手段31は、ユーザに登録種別を入力させる(ステップ9)。登録種別には、典型動作確認、バグ修正確認がある。バグ修正確認の場合には、一度バグが発生していることであるため、テストケース定義テーブル22のNG回数22Aに1を登録する。
【００９４】
なお、ステップ2では、ステップ1でユーザが拡張するを選択した場合、ステップ7に進む。この場合、テストケース定義テーブルに登録済みのテストケースを拡張し、新たなテストケースを作成することとなる。新たに作成したテストケースは、既存のテストケースに対し、手動制御による拡張を行ったものとなる。このとき、拡張元テストケースID222には、ステップ1で選択したテストケースのテストケースID221を登録する。開始時刻223、終了条件224、設備定義ID225、ダイヤ定義ID226、列車定義ID227には、ステップ1で選択したテストケースのものを登録する。
【００９５】
以上により、テストケースを登録する。
【００９６】
図14は、テストケース実行手段32の手順を示したフローチャートである。図15は、テストケース実行手段32を実行するときのテストケース実行画面62である。
【００９７】
テストケース実行手段32は、実行環境において発生したバグが修正されているか、元々正常に動作している機能が正常に動作したままでありデグレーションが発生していないかを確認するために実行する。ユーザは、検証対象となる列車自動制御プログラムを指定して、テストケース実行手段32を起動する。すなわち、列車自動制御装置９２が、列車の運行に関する試験を行い、試験の実行状況を検証装置に送信し、検証装置１の試験状況特定部が、取得した試験の実行状況に基づいて試験フェーズを推定する。
【００９８】
テストケース実行手段32は、試験フェーズの推定をする(ステップ1)。テストケース実行手段32は、テストケース定義テーブル22に格納されているテストケースについて、モジュールごとのバグの収束状況を調査する。すなわち、検証装置１の記憶部は、列車の設備情報に関する情報である設備テーブル２３と、列車のダイヤに関する情報であるダイヤテーブル２４とを備え、検証装置１の試験実行部は、テストケース定義テーブル２２に記憶された依存関係からその時点での各モジュールにおけるバグの収束状況を求め、モジュール間関係テーブルの情報と組合せることで、列車よりも前の時間帯に相当する前方方向の依存関係のあるモジュールはすべて収束しているが、列車のモジュールは収束していないモジュールを検索し、検索されたモジュールに関する試験を集中して選択する。  テストケース定義テーブル22の検証項目ID229から、検証項目テーブル27の検証種別272を取得する。さらにモジュール間関係テーブル21を参照することで、検証種別213からモジュールID211を特定することができる。すなわち、検証装置１の記憶部は、試験の検証項目情報である検証項目テーブル２７を記憶し、試験選択部は、試験の検証項目情報に従って、実行すべき試験項目を選択する。
【００９９】
図16に開発プロジェクトの時間に対するバグ出現数の関係を示すバグ曲線を示す。一般に、開発プロジェクトにおいて、序盤はバグ曲線の傾きが小さく、中盤はバグ曲線の傾きが大きく、終盤はバグ曲線の傾きが小さくなる。終盤のバグ曲線の傾きが小さくなっていれば、バグが収束していると考える。
【０１００】
図4に示すように、制御監視は変化検出に依存している。変化検出のバグが収束していないのであれば、変化検出のバグを検証する試験フェーズであると判断する。一方、変化検出のバグが収束していて、制御監視のバグが収束していないのであれば、制御監視のバグを検証する試験フェーズであると判断する。モジュール間の依存関係は完全なツリー構造ではないため、複数のモジュールに対して試験フェーズであると判断することができる。
【０１０１】
テストケース実行手段32は、関連試験の抽出を行う(ステップ2)。テストケース実行手段32は、テストケース定義テーブル22を参照し、ステップ1で推定した試験フェーズとなっているモジュールについてのテストケースを抽出する。同じテストケースであっても、NGの回数が多いものが優先的になるように並べる。
【０１０２】
テストケース実行手段32は、ステップ2で抽出したテストケース群に対し、ステップ3〜ステップ8を実行する。すなわち、検証装置１の試験選択部（テストケース実行手段３２）は、検証装置１の記憶部に記憶された試験間の依存関係に関する情報であるテストケース定義テーブル２２による依存関係と、試験フェーズに基づいて、現在のフェーズにおいて、優先すべき試験を選択し、検証装置１の試験実行部は、選択された試験を実行するよう選択された試験の情報を列車自動制御装置９２に送信する。そして、列車自動制御装置９２は、検証装置１から受信した選択された試験を実行する。
【０１０３】
テストケース実行手段32は、状態を初期化する(ステップ3)。
【０１０４】
テストケース定義テーブル22の開始時刻223を参照し、テストケース実行手段32の現在時刻として登録する。設備テーブル23を参照し、現在状態237の値として初期状態236の値を設定する。また、ダイヤテーブル24を参照し、検証対象となる列車自動制御装置92のダイヤテーブル42にダイヤを設定する。さらに、列車テーブル25を参照し、現在在線位置255と在線カウント256を空に設定する。
【０１０５】
テストケース実行手段32は、以降、テストケース定義テーブル22で指定する終了条件224が満たされるまで、ステップ5〜ステップ7を繰り返す。
【０１０６】
テストケース実行手段32は、状態を更新する(ステップ4)。
【０１０７】
テストケース実行手段32は、現在時刻を更新する。設定として定義する1周期の時間に合わせ、現在時刻を1周期の時間分進める。
【０１０８】
テストケース実行手段32は、テストケース定義テーブル22及び設備テーブル23を参照し、実行中のテストケースにおける設備テーブル23の制御要求が反位となっていたら、該当設備の現在状態237を反位に変更し、制御要求238を空にする。
【０１０９】
テストケース実行手段32は、テストケース定義テーブル22及び設備テーブル23を参照し、実行中のテストケースにおける設備テーブル23の制御要求が定位となっていたら、該当設備の現在状態237を定位に変更し、制御要求238を空にする。
【０１１０】
テストケース実行手段32は、テストケース定義テーブル22及び手動操作テーブル26を参照し、実行中のテストケース及び拡張元のテストケースにおける手動操作が実行条件を満たしているかをチェックする。実行条件262を満たしている場合には、操作内容263を実行する。操作内容263には、設備状態の更新、ダイヤの更新がある。設備状態の更新の場合には、設備テーブル23の現在状態を更新する。ダイヤの更新の場合には、ダイヤテーブル24の番線・着時刻・発時刻等を更新する。
【０１１１】
テストケース実行手段32は、列車の在線位置を更新する(ステップ5)。
【０１１２】
テストケース実行手段32は、列車テーブル25の現在在線位置255が空の列車に対して、発生条件を満たしているかをチェックする。発生条件を満たしている場合、発生場所の値を現在在線位置255に設定し、在線カウント256を1に設定する。
【０１１３】
テストケース実行手段32は、列車テーブル25の現在在線位置255が設定されている列車に対して、在線カウント256をインクリメントする。在線カウント256が設定として定義する一定数以上の値となった場合には、該当軌道回路を通り過ぎたとみなして、列車の現在在線位置255を変更する。
【０１１４】
変更後の現在在線位置255を決定するために、変更前の現在在線位置255の信号機に対し、設備テーブル23の内方軌道回路235を参照する。
【０１１５】
現在在線位置255の軌道回路が設備テーブル23の内方軌道回路235の最終以外の場合には、現在在線位置255の軌道回路を1つ先に進める。また、現在在線位置255の更新に合わせて、設備テーブル23の現在状態を更新する。更新前の在線位置の軌道回路の現在状態237を定位に、更新後の在線位置の軌道回路の現在状態237を反位に更新する。例えば、現在在線位置が2RAの2Tの場合には、2RAの3Tに更新する。合わせて、軌道回路2Tの現在状態237を定位に、軌道回路3Tの現在状態237を反位に更新する。
【０１１６】
現在在線位置255の軌道回路が設備テーブル23の内方軌道回路235の最終の場合には、その最終内方軌道回路を設備テーブル23の外方軌道回路234としている信号機を検索する。見つかった信号機のうち、現在状態237が反位となっているものがあれば、該当信号機に移動することとなるため、該当信号機及び信号機の第1番目の内方軌道回路を列車の現在在線位置255として設定する。該当する信号機が見つからない場合には、列車の現在在線位置255を更新しない。また、現在在線位置255の更新に合わせて、設備テーブル23の現在状態を更新する。見つかった信号機の現在状態を反位から定位に更新する。更新前の在線位置の軌道回路の現在状態237を定位に、更新後の在線位置の軌道回路の現在状態237を反位に更新する。例えば、現在在線位置が2RAの3Tで信号機3Rの現在状態237が反位となっている場合には、現在在線位置255を3R 5Tに更新する。合わせて、信号機3Rの現在状態237を定位に、軌道回路3Tの現在状態237を定位に、軌道回路5Tの現在状態237を反位に更新する。
【０１１７】
テストケース実行手段32は、検証対象となる列車自動制御装置92のプログラムを実行する(ステップ6)。列車自動制御装置92のプログラム群への入力となる設備情報とダイヤ情報は、それぞれ設備テーブル23の現在情報23、ダイヤテーブル24を渡す。列車自動制御装置92のプログラム群からの出力である信号機制御出力がある場合には、設備テーブル23の制御要求238に制御要求内容を設定する。制御要求内容は、反位または定位である。また、列車自動制御装置92のプログラム群からの出力であるアラームを受け取った場合には、実行履歴テーブル28にアラームの情報を登録する。さらに、テストケース実行手段32は、列車自動制御装置92のプログラムにおける、設備、ダイヤ、列車の状態を実行履歴テーブル28に登録する。
【０１１８】
以上を、テストケース管理テーブルの終了条件が満たされるまで続ける。
テストケース実行手段32は、ステップ3〜ステップ6によりテストケースの実行が終了したら、実行結果を検証する(ステップ7)。テストケース実行手段32は、検証項目テーブル27と実行履歴テーブル28を参照する。
【０１１９】
検証種別272が「変化検出」の場合、実行履歴テーブル28の履歴種別282が設備の情報を取り出して、該当設備の状態が検証内容273を満たしているかを確認する。
【０１２０】
検証種別272が「設備アラーム」の場合、実行履歴テーブル28の履歴種別282がアラームの情報を取り出して、該当設備から検証内容273指定のアラームが出力されているかを確認する。
【０１２１】
検証種別272が「ダイヤ」の場合、実行履歴テーブル28の履歴種別282がダイヤの情報を取り出して、ダイヤが検証内容273を満たしているかを確認する。
【０１２２】
検証種別272が「列車生成」の場合、実行履歴テーブル28の履歴種別282が列車の情報を取り出して、該当列車の情報が検証内容273の軌道回路の場所で生成されたかを確認する。
【０１２３】
検証種別272が「列車生成」の場合、実行履歴テーブル28の履歴種別282が列車の情報を取り出して、該当列車の情報が検証内容273の軌道回路の場所で消去されたかを確認する。
【０１２４】
検証種別272が「列車移動」の場合、実行履歴テーブル28の履歴種別282が列車の情報を取り出して、該当列車の情報が検証内容273の軌道回路の順に移動しているかを確認する。
【０１２５】
検証種別272が「順序」の場合、実行履歴テーブル28の履歴種別282が列車の情報を取り出して、該当軌道回路を通過した列車を時刻でソートするなどして、検証内容273の通過順序を満たしているかを確認する。
【０１２６】
検証種別272が「制御アラーム」の場合、実行履歴テーブル28の履歴種別282がアラームの情報を取り出して、該当列車から検証内容273指定のアラームが出力されているかを確認する。
【０１２７】
テストケースの検証結果がNGとなった場合には、テストケース定義テーブル22のNG回数22Aの数をインクリメントする。
【０１２８】
テストケース実行手段32は、ステップ7の検証によりNGとなった場合、ステップ2で抽出したテストケース群の中から、NGとなったテストケースに依存しているテストケースを取り除く(ステップ8)。図5において、テストケースTC13はテストケースTC12に依存しているため、テストケースTC12でNGとなった場合、テストケースTC13を実行してもNGとなる可能性が高いため、テストケースTC13を取り除く。すなわち、検証装置１の記憶部は、試験の実行状況の結果を記憶する実行履歴テーブル２８を備え、テストケース定義テーブル２２に記憶された依存関係と、実行履歴テーブル２８に記憶された試験の実行状況の結果に基づいて、試験において不合格となった試験を拡張元とする試験を実行対象から削除し、新たな試験を選択する。
【０１２９】
以上を、未実行のテストケースがなくなるまで続ける。
テストケース実行手段32は、テストケースの実行結果を表示する(ステップ9)。テストケース実行画面62の検証結果622のように、ステップ2で抽出したテストケースごとに、検証結果を表示する。
【０１３０】
本発明により、効率的に試験を行うことができるようになり、工数を削減することができる。さらに、検証対象のプログラムを修正するごとに、本発明による試験を継続的に進めることにより、典型的に確認すべき試験項目や、過去に発生した試験項目を自動的に試験することができるため、デグレーションを防ぐことができ、プログラムの品質を高めることも可能になる。
【符号の説明】
【０１３１】
1 検証装置
21 モジュール間関係テーブル
22 テストケース定義テーブル
23 設備テーブル
24 ダイヤテーブル
25 列車テーブル
26 手動操作テーブル
27 検証項目テーブル
28 実行履歴テーブル
31 テストケース登録手段
32 テストケース実行手段
61 テストケース登録画面
62 テストケース実行画面
91 計画系システム
92 列車自動制御装置
93 地上設備
【図１】
2015022386.tif 000003
【図２】
2015022386.tif 000004
【図３】
2015022386.tif 000005
【図４】
2015022386.tif 000006
【図５】
2015022386.tif 000007
【図６】
2015022386.tif 000008
【図７】
2015022386.tif 000009
【図８】
2015022386.tif 000010
【図９】
2015022386.tif 000011
【図１０】
2015022386.tif 000012
【図１１】
2015022386.tif 000013
【図１２】
2015022386.tif 000014
【図１３】
2015022386.tif 000015
【図１４】
2015022386.tif 000016
【図１５】
2015022386.tif 000017
【図１６】
2015022386.tif 000018