異なるOS(Windows、Linux、HP-UX)を搭載したワークステーション/ビルドサーバー環境への組込システム単体テストツールの展開
2021-04-15

ベクターのお客様のソフトウェアプロジェクトは、どの業界でもどんどん大規模化しています

効率を上げるためにビルドサーバーを配置し、開発のスピードアップが図られている一方で、Linux上にしか展開できないコンパイラーを使用しつつ、各種ターゲットとのインタラクションも含めた作業の大半はWindowsワークステーションで行いたい、というお客様のケースもあります。
そういった環境の場合、テスト環境構築はどのように行えばよいのでしょうか。ここでは2つのユースケースを取り上げます。これらは互いに少しずつ異なったユースケースで、それらの技術面/ユーザビリティー面の問題を具体的にどう処理したかと、それぞれの戦略が持つメリットについて説明します。

ユースケース1:テストツールをビルドサーバー本体にリモート展開

環境

先ごろ私たちが東アジアの企業で行った評価では、Linuxを実行しているサーバーに単体テストツールのVectorCASTを展開する必要が生じました。このサーバーはLinaro Linux用のコンパイラーをホストしています。お客様はこのコンパイラーにWindowsワークステーションからSSH経由でアクセスします。コードとコンパイル済みのバイナリーは共有ドライブに置かれて、LinuxサーバーとWindowsワークステーションの両方から利用できるようになっており、テストの際には、Windowsワークステーションからターゲットにプログラムをアップロードします。

画像:Windowsワークステーションからターゲットにプログラムをアップロード

ソリューション

こういった環境の場合、コンパイラーが置かれているビルドサーバー上にVectorCASTを展開するのが好ましいソリューションであることは明らかです。作業も難しくありません。ほとんどのLinuxは X Window Systemを使用してリモートのGUIターミナルに接続できます。そのため、必要なのはXmingなどのX WindowサーバーソリューションをWindows上にインストールすること、そしてWindows上のSSHクライアントから適切なコマンドを送ることのみです。これらのソリューションは多くの場合無料で使用できます。 

さらに、Linux上でのVectorCASTのインターフェイスとその機能は、Windows上でのそれと変わりありません。ユーザーから見た違いといえば、画面のリフレッシュが少し遅い程度ですが、ネットワークが十分速ければその差はごくわずかです。実際、ソリューションの開発時に、オフィスから100キロ以上離れた場所にあるコンピューターからVPN経由で接続してテストしたところ、応答時間は完全に許容範囲でした。

残った克服すべき技術的なハードルは1つ、すなわちテストの実行です。ターゲットがビルドサーバーから「見える」のであれば統合は簡単です。何といってもVectorCASTは、Linuxベースのものも含めて、極めて多彩な組込システムを統合できるのです。しかし今回の場合、サーバーからボードへのダイレクトな通信は不可能でした。そのため、実行はWindowsワークステーションを経由して行わなければなりません。 

考えられる選択肢の1つは、何らかのSCP/SSHサーバーソリューションをWindowsにインストールし、そのアクセス機能を使用してターゲットにアクセスする方法です。しかしそのためには、お客様がそういったサーバーを、VectorCASTを使用するすべてのWindowsワークステーションにインストールすることが不可欠で、それは少なからず使用上の障害となります。

この方法の代わりに、私たちは開発環境にすでに導入されている通信リソース、すなわちビルドサーバーと共有されているドライブ、そしてターゲットへのSSH/SCP接続を利用して、実行を自動化するWindows用のエージェントプログラムを設計することにしました。これには2つの点でテクニックが必要でした。1つは、共有ドライブで発生する恐れのある競合状態には特に注意しなければならず、そのためファイルが完全に保存されるまでそのファイルにはアクセスできないようにする必要があったことで、これは完全に解決できました。もう1つは、SSH/SCPパスワードのメカニズムに問題が見つかったことです。これが判明したのは、他のこのようなシステムで展開してきたパスワードレスによる自動化がLinaroで失敗したためでしたが、こちらの場合は、お客様が使用していたSSHクライアントを使用することで解決しました。 

ユーザーがエージェントを使用するにはいくつかの設定が必要です。すべての必須フィールドを正しく設定すると、エージェントはビルドサーバーからの特定のイベントを待機するようになります。イベントが検出されると、エージェントはターゲットに対してテストを実行します。この際、エージェントは複数のSSH/SCP実行可能ファイル(Cygwin、OpenSSH、puTTY)を利用します。エージェントにはまた、VectorCASTのフィールドアプリケーションエンジニアが、SSH/SCPベースでない他のシステムでエージェントを使用できるようにするためのモードがあります。

その他の考慮事項

ビルドサーバーを使用するケースでは、インストール済みのツールや無料でダウンロードできるツールを利用する点で、これがほとんどの状況に対応できる最適なソリューションだと私たちは考えています。しかし、これで対応できないケースも存在するはずです。そのような事例の1つを次のユースケースで説明します。ただし、エージェントのアーキテクチャーは非常に柔軟に作られているため、VectorCASTのエンジニアは、これをベースにしたカスタムソリューションを考案できます。ご希望の場合は遠慮なくお問い合わせください

ユースケース2:VectorCASTを実行するクライアントとサーバーの間の完全なリモートビルドプロセス

環境

2番目のシステムも、上で説明したものとよく似た環境向けに設計されたものです。お客様は東アジアの企業で、HP-UXを実行しているシステム上で単体テストを実行する必要がありました。最終的な目標は、実際の結果から生成された期待値を多数のテストに設定し、それを後から新しいバージョンのHP-UX上で実行することですが、こういったテストの設定はVectorCASTの機能で対応できます。結果が一致しなかった場合は調査を行い、新しいバグが生じたのか、それとも逆に、新しいバージョンのHP-UXに移行したことで、これまで検出されてこなかったバグが解決されたのかを調べます。これもVectorCASTの典型的な基本アプリケーションの1つで、多くの業界が関心を寄せています。

ただし、今回はVectorCASTをHP-UXでは実行しません。残念ながら、一部の基本的なライブラリーがこのOSで使えなくなっているためで、そのようなコンテキストではX Window Systemのアプローチは機能しません。

ソリューション

私たちはVectorCASTをWindowsワークステーションにインストールし、HP-UX上の個々のコンパイラーとリンカーの操作をSCPとSSHを使用して実行するための機能を多数整備しました。プリプロセスとコンパイルに必要なファイルはコマンド実行前にそれぞれリモートでアップロードし、コマンドが正常に実行されたかは結果のモニタリングで確認するのですが、これはHP-UXサーバー上でのハーネスの実行も含めて完全にスクリプト化されており、ユーザーが手作業で行う必要はありません。「標準環境」というものがあるとすれば、まさにそれに近い環境で動作しているかのごとく、すべての操作がシームレスに行われます。唯一の違いはコマンドの実行にやや時間がかかることで、これはネットワーク速度に大きく依存します。

このようなアプローチでは、いうまでもなく2つの重要な問題に対処しなければなりません。1つはWindowsがPOSIXシステムでないことです。そのためHP-UXに渡すコマンドのパスはすべて修正し、POSIX互換のパスに置き換える必要があります。もう1つは、これは上に関連したことですが、Windowsがドライブ文字を使用するシステムであり、rootがHP-UXのrootと異なるため、パスのroot自体を変更する必要があることです。どちらの問題もスクリプト機能でうまく解決できました。

この後さらに、HP-UXコンパイラーのC言語固有の機能に由来する問題がいくつか生じましたが、パーサー機能をHP-UX固有の言語構成に対応するようにアップグレードすることで対応できました。VectorCASTはEDGパーサーに基づいています。これはこれまで何十ものコンパイラーをスピーディーに、しかも効率よくサポートしてきたパーサーで、業界一のパーサーといっても過言ではありません。

お客様は最終的に、HP-UXコードのテストにVectorCASTを使用できるようになりました。

まとめ

2つの環境はどちらもよく似ています。どちらのターゲットもPOSIXベースであり、エンジニアが共有ドライブとSSH/SCP操作とを組み合わせてコードにアクセスし、コンパイルすることも同じです。しかし、鍵となる領域にごくわずかな違いがあったため、採用するアプローチは別のものになりました。これは、お客様のニーズを理解することの大切さ、そして十分時間をかけてお客様の環境の技術仕様を調べることの大切さを反映しています。何といっても「悪魔は細部に潜む」のです。

詳細についてはこちらからお問い合わせください。

関連トピック

はじめての単体テスト

単体テスト、単体テストの効率化について解説している資料です。

詳細はこちら
ソフトウェア開発のライフサイクルを通してテスト作業を自動化

VectorCASTはC言語、C++に対応した組込の単体テストを自動化するための単体テストツールです。

詳細はこちら
導入事例|VectorCAST(日本精機株式会社)

フルグラフィッククラスター制御の単体テストにVectorCASTを採用

詳細はこちら
ホワイトペーパー|組込ソフトウェア開発を効率化する変更ベーステスト

VectorCASTのホワイトペーパー「組込ソフトウェア開発を効率化する変更ベーステスト」をダウンロードいただけます。

詳細はこちら
ホワイトペーパー|医療機器のテスト

世界的な医療機器/医療用品メーカーのお客様との間で先日完了したサービス案件について詳しく説明します。

詳細はこちら
ホワイトペーパー|バグの修正および防止コストの定量化

このホワイトペーパーでは、テストの効率向上に使用できる手法を取り上げます。

詳細はこちら