今年の3月に客先に納品した計測器の制御ソフトを使用した初の試験※1が完了したようだ。
ソフトウェアは実際に運用されてみるまで、どんなトラブルがでてくるかわからない怖さがある。幸い、大きなトラブルもなく完了したようで一安心した。

※1 航空機の定期的な試験。

計測器の制御ソフトとは
 計測値を手書きで記録するのは手間がかかり誤記する可能性もあるため、現在では測定器をパソコンに接続し、パソコンから測定の開始や停止を指示し、測定値もパソコンに記録するというのが標準的なスタイルとなっている。
 今回の依頼は「今までは、測定器メーカーが作成した制御ソフトを使っていたが、機能を絞り、またオリジナルの機能を追加したものを作成してほしい」というものだった。

機器制御ソフト作成の難しさ
機器通信がからんだソフト開発では、次の2つのリスクを覚悟しなければならない

[リスク1(通信の相手が不在) ]
通信というのは、キャッチボールと同じで、相手が居ないと実行できない。そして、この相手(今回は測定器)というのが、たいていは居ない。(機器の長期間借り出しができないため)。
仮に手元にあったとしても、キャッチボール(通信)をはじめる準備(何か臨時にセンサーを付ける等)が必要で、テスト環境をつくること自体にも手間がかかる。

[リスク2(ファームウェアの完成度が…) ]
 機器※2との通信内容が微妙に疑わしいことが多い。ファームウェアの不具合を制御ソフト側でこっそりカバーしている場合もある 。そういうことは、通信規約に書けないのでメーカー側の秘密になっていたりする。その他、通信規約仕様書には書かれていない内緒の約束ごとがあったりする。
それらが問題にならないのは、通信規約書を元に制御プログラムを作るようなユーザーがめったに存在しないからだ。こういう裏事情を解っていれば、開発中、メーカー側の問題が発覚しても、協力が期待できないことは、おわかりいただけると思う。

※2 組み込み型機器の場合、ユーザーが制御することを前提としているので、この手のリスクは低い

リスク回避のしかた

 リスク1への対処は、通信の相手側を、ソフトウェア(エミュレータ)として作成してしまうことだ。今回の通信相手は図の水色で囲った範囲になる。ファームウェア機能+ダミー計測値を入力できる機能をまるごと作成しなければならないので、手間も時間もかかるが、これをやらないかぎり、まず開発はおぼつかない。
リスク2への対処法は、通信データロガー(以下、ロガー)をつくることだ。測定機器とメーカー製の制御ソフトの間に、このロガーをかませて、規約どおりに通信を行っているかを見て検証する(図のハサミの部分で切って、データを見るようなイメージ)。これで、メーカーの秘密の仕様も、ほとんどがわかる。
納品するソフトウェア以外に、このような補助ソフトの作成も前提に、納期や見積もりを行わないと、開発の成功は難しい。発注側と受注側、双方に、これらの理解がないと、計画の頓挫は約束されたようなものだ。

苦労した点(データの表示)
 今回の開発で予想外に苦労した点は、データの表示部分である。データの表示というのは、通常、なんでもなさそうだが、通信が絡むと、仕様によっては、やっかいな問題が発生する。
今回の機器は、元来がデータ収集器であるため、一旦、計測を開始すると、計測値を次々と送り始める。それは、流しそうめんとよく似た状況だ。そうめん(データ)をすくった(受信した)のを確認してから、次を流して貰えれば問題ないのだが、ロガーというのは、そういう仕様になっていない。受信側の状態を考慮せず、ひらすらデータを流し続ける。停止コマンドを送信しても、すぐには止まらず、途中のそうめん(データ)は流れてくる。また流れてくる量(個数)もわからない。
このような仕様だと、食べる(表示)させるタイミングが難しくなる。結果的には、なんとかしたのだが、この表示部分は何度もコードを書き直した。


まとめ
 紆余曲折はあったが、結果的は想定内で完了した。やはりカギは、エミュレータの存在だったと思う。本試験中のプログラムの停止やデータの欠損はなんとしても避けなければならない。それを念頭に、エミュレータで何度もシミュレーションを行った。
 プログラム格言に「プログラムは意図したとおりには動かない。書いたコードの通りに動く」というのがある。プログラマーは、こうしたいと思ってコードを書き、実行することで意図したとおりに動くかを確認する。この作業を、それこそ、数百回、数千回と繰り返す。通信がからんだプログラムの場合、この実行という作業が、相手が居ないために十分できないことが多い。このため、どうしても「たぶん、動くと思いますけど…」みたいな自信のない返事になってしまう(悲しいことに、たいていは動いてくれない)。
エミュレータがあれば、この実行という確認作業をしているので、かなりの確信を持って返事ができるようになる。今回の開発でも、いままで以上に「備え(補助ソフト)あれば憂いなし」という感を強くした。
以上