このページの本文へ

ここから本文

テクノロジー

技術レポート:アーカイブ

Category:交通システム

Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例

Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例

当所では、鉄道車両搭載機器の情報を統合制御し、機器監視、制御、乗務員支援を行う、車両情報管理装置(以下、TCMS(Train Control and ManagementSystem)のソフトウェア開発を行っている。電鉄各社では、より快適な車内つくりや安全性の向上、メンテナンスの効率化を常に図っており新車投入後の車両改造が多く、それにともないソフトウェア改造の機会が多い。そのため当所のソフトウェア開発は派生開発が中心で行われている。近年TCMSは、高度な機能を求められるようになり、ソフトウェアは次第に複雑となってきた。また電鉄各社からは納期の短縮要求や、TCMSが障害に陥った場合、電車が止まるなど社会的影響が大きいことから従来以上の高い品質を強く求められるようになってきた。一方、開発現場では長年の改変積み重ねによりプログラムは複雑化・肥大化する中、従来の開発手法から脱却できず工数だけが増大していた。客先のニーズに応えるには大幅な品質向上及び効率化が必要であり、そのためには抜本的品質改善が必要であった。そこで当所では、2015年下期より派生開発特有の「短納期」や「部分理解」といった問題に合理的に対応する方法として提供された開発アプローチであるXDDP(eXtreme DerivativeDevelopment Process)を導入し試行を行った。現在ではTCMSの開発スタイルに沿うよう、伊事版XDDPを確立させ品質向上に大きな成果を上げることができた。本稿では、従来の問題点を伊事版XDDPの構築によってどのように改善できたか、また効率化に向けての改善活動について紹介する。

Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例[PDFファイル]

参考情報:

  • この技術レポートは、当社が展開する公共・エネルギー事業の交通システムソリューションに係る技術について著述されたものです。
  • 交通システムソリューションは、神戸事業所伊丹事業所が提供しています。
Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例
1.まえがき
当社では、列車の複雑多岐な運行ダイヤを作成、信号機や転轍機を制御し、列車の安全運行を支援する運行管理システムの開発を行っている。本システムは、社会的に重要な役割を担ったシステムであり、欠陥流出は、メーカーの信頼失墜や人命にまで関わる可能性がある。そのため、ソフトウェアの信頼性確認に多くの手数と時間をかけている。加えて、列車走行に必要な連動制御パターンは、単純構造の駅でも数百項目となるため、最終顧客である鉄道会社には、膨大な承認図・試験エビデンスの提出が必要である。しかし、試運転期間中の仕様変更/追加の要求、ダイヤ改正や設備変更の改造工事が輻輳し、業務負荷が集中することも度々ある。そこで、試験効率向上を目的として、試験工数削減・試験における人為的ミスの防止に取り組み、幾つかの施策を行った。本稿では、運行管理ビジネスで採用している多様なLinuxディストリビューション環境で動作するマンマシン操作の記録/再生ツールの開発及びその適用事例を紹介する。2.マンマシン操作の記録/再生ツールの開発ツール開発にあたっては、実機での健全性確認試験においても使用することを前提とし、以下の仕様要件を設定した。① 多様なLinuxディストリビューション環境で動作② 実機試験で使用できる③ 汎用ソフトウェアを使用しない④ 仮想Linux環境でも動作⑤ 緻密な操作も記録/再生可能⑥ 試験エビデンスを自動取得ツールと連携できる⑦ 試験合否自動判定ツールと連携できる仕様要件を満たすため、Linux Input SubsystemとXWindow SubsystemのライブラリであるXlib、XTESTExtension Libraryを利用して開発を行った。2.1 Linux Input Subsystemの利用Linux Input Subsystemとは、デバイスドライバとアプリケーション間の入出力をイベントデバイスファイルを通して行うためのLinuxカーネルの一部である。キーボード入力、マウス操作をアプリケーションが認識するまでの流れを図1に示す。図1.キーボード入力を認識するまでの流れカーネルは、デバイスドライバを通してデバイスの入出力を解釈し、イベントデバイスファイルに出力する。イベントデバイスファイルは、接続されているデバイス毎に存在し、アプリケーションはこれらのイベントデバイスファイルを通して、デバイスの動作を認識することで、入力内容の表示、マウスカーソルの移動を行っている。イベントデバイスファイルに出力する内容は、/usr/include/linux/input.hに定義する。定義内容を図2及び表1に示す。図2.イベントデバイスファイル出力定義Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例神戸事業所 技術第4部 交通システム第2課塩谷 雅督44Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例一般論文表1.イベントデバイスファイル出力定義の説明番号説明① イベントの発生時間を示す。② キーボード入力、マウスクリック、マウスカーソル移動などイベントの種類を示す。③②イベントの内容を示し、②がキーボード入力の場合はキーの種別(A,B,Cなど)、②がマウスクリックの場合はクリックの種別、マウスカーソル移動の場合は方向軸を示す。④②がキーボード入力またはマウスクリックの場合、③の内容に対して押したか離したかを示し、②がマウスカーソル移動の場合は現在位置からの移動量を示す。 ツール開発にあたり、図3に示すように、イベントデバイスファイルのインプットイベントを外部ファイルへ記録し、再生時は記録したインプットイベントをイベントデバイスファイルへ出力し、デバイスの入力を模擬するツールを試作した。図3.試作したツールの動作例試作したツールで動作検証をした結果、キーボード入力を正確に再生することはできたが、緻密な画面のマウス操作は正確に再生することができなかった。マウスカーソル移動時に、デバイスファイルに出力されるインプットイベントは現在位置からの移動軸と移動量である。このため、記録時と再生時でマウスカーソルの開始位置が異なると、意図しない位置へマウスカーソルが移動してしまい、正確な再生ができなかった。そこで、マウスカーソルの移動は、2.2項に記述するX Window SystemのライブラリであるXlibとXTEST Extension Libraryを使用することとした。2.2 X Window Systemの利用X Window Systemとは、UNIXで標準的なGUI環境を実現するための仕組みである。X Window Systemはクライアント・サーバー方式で動作するシステムであり、サーバーはディスプレイやマウスなどの入出力デバイスを管理している。クライアントはディスプレイ上に描画する情報を作成する。クライアントからサーバーに対して、作成した描画の情報を送信し、サーバーがディスプレイに出力することで、画面の表示を行っている。画面上に表示されるマウスカーソルも同様の仕組みで移動し、表示される。XサーバーとXクライアントの関係を図4に示す。図4.XサーバーとXクライアントの関係2.1項に述べたとおり、インプットイベントの記録だけではマウス操作の正確な再生は実現できないため、XWindow Systemを利用して、ディスプレイ上の座標を取得し処理することにした。Xlib、XTEST Extension Libraryは、Xクライアント用のライブラリであり、Xサーバーに対する通信を簡単に実現できる。ツールの改修にはこれらのライブラリを使用した。マウス操作を正確に再生するには、デバイスファイルへのインプットイベントに加えて、マウスカーソルの位置を記録する必要がある。マウスカーソルの正確な位置を記録するために、Xlibで提供されているXQueryPointer関数を利用した。XQueryPointer関数は、Xサーバーに対して現在のマウスカーソルの座標を要求する関数である。マウス操作のインプットイベント出力時に、XQueryPointer関数で座標位置を取得し、操作記録ファイルにインプットイベントに加えて座標を記録するようにツールを改修した。マウスカーソルの座標記録時のツールの動作例を図5に示す。図5.マウスカーソルの座標記録時のツールの動作例45Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例再生時は、記録した座標にマウスカーソルを移動させる必要があるため、XTEST Extension Libraryで提供されているマウス操作を模擬することができる関数を利用した。表2に提供関数の説明を示す。表2.XTEST Extension Library提供関数関数名説明XFakeMotionEvent 指定座標へのマウスカーソル移動のフェイクイベントを発行する。XFakeButtonEvent マウスクリックのフェイクイベントを発行する。(右、左、ミドル、ホイール)図6に示すとおり、操作記録ファイルに記録されているインプットイベントがマウスカーソル移動であれば、記録した座標へマウスカーソルを移動するフェイクイベントをXサーバーに通知する。インプットイベントがマウスクリックであれば、マウスクリックのフェイクイベントをXサーバーに通知し、マウス操作の再生を行うようツールを改修した。図6.マウス操作再生時のツールの動作例図7. マンマシン操作の記録/再生ツールの構成46Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例ツールの動作検証を行った結果、マウス操作の正確な再生を実現することができた。今回作成したツールの構成を図7に示す。3.ツール適用事例マンマシン操作の記録/再生ツールを適用した事例を紹介する。3.1 回帰試験の自動化試験条件の設定、試験手順を分割して記録することで、試験条件の再現や試験組み合わせ手順の再生を容易に実現することができる。同時に試験エビデンスを取得し、結果の差異チェックによる合否判定を出力する回帰試験の自動化に取り組んだ事例について紹介する。(1) 試験条件の自動設定回帰試験は、試験記録時と同一の条件を設定する必要がある。手動での設定は時間がかかる上、ヒューマンエラーが発生することも考えられるため、条件設定は自動で行えるよう、シェルスクリプトを作成した。これにより、容易に同じ試験条件で回帰試験を実施できるようになった。(2) エビデンス自動取得試験エビデンスの取得漏れを防ぐために、試験エビデンスを自動で取得する仕組みを作成した。マンマシン操作の記録/再生ツール実行時にシェルスクリプトを引数として指定することにより、指定された挙動でシェルスクリプトを実行する機能を追加した。この機能を利用してエビデンス取得用のシェルスクリプトを用意すると、再生時は、記録時と同一のタイミングでエビデンスを自動取得できる。(3) 試験結果の合否自動判定(2)を利用して取得したエビデンスを比較し、試験結果の合否を自動判定するシェルスクリプトを作成した。合否自動判定シェルスクリプトのイメージを図8に示す。図8.合否自動判定シェルスクリプトのイメージ合否判定用シェルスクリプトは、画面ハードコピー、帳票、ダイヤグラム図、ログなど様々な種類のエビデンスを比較して差異のある箇所を出力する。画面ハードコピーに差異が存在する場合の例を図9に示す。(4) 回帰試験の自動化の応用改造時の回帰試験に活用するだけでなく、OS移行を伴うハードウェア更新工事においても、旧装置とOS移行後の図9. 画面ハードコピー差異出力の例47Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例新装置での動作比較に活用した。差異確認に活躍し、試験工数の削減・正確な比較結果の抽出に効果を発揮した。3.2 マンマシン操作を伴う負荷測定試験マンマシン操作を伴う負荷測定試験をマンマシンの記録/再生ツールを用いて行った。記録しておいたマンマシン操作を長時間繰り返し、メモリリーク等を測定した。人手では困難な連続操作を、効率的に実現することができた。4.むすび当初設定したツールの仕様要件を十分に満たした上で、回帰試験の自動化、負荷測定試験に応用活用が可能なツールを製作することができた。操作記録や動作設定の組み合わせにより、使用方法のバリエーションは無限にある。今後の展開としては、シェルスクリプトの工事毎カスタマイズの容易性向上を計画している。最後に、本開発及び執筆にあたり、支援頂いた関係各位に深く感謝を申し上げる。執筆者紹介塩谷 雅督 シオタニ マサトク2012年入社。主に運行管理システムのソフトウェア開発に従事。現在、神戸事業所技術第4部交通システム第2課。48Linux環境におけるマンマシン操作の記録/再生ツールの開発と適用事例