皆さん、この夏はいかがお過ごしでしたか?
今年もとても暑かったですね( ´ー`)

私はサブスクで海外ドラマ漬けの日々を送っていました。
ゲームが原作のゾンビ系のドラマです。 (ウィルスじゃなくて菌の方)
こういう系を観るたびに、ゾンビは走っちゃいけないと強く思います。
しかし本当に恐ろしいのは人間なのかも…。
殺伐とした世界でのサバイバル…一話一話観るごとに映画を一本観たような重さがありますね(^^)

…そして、あっという間に夏は過ぎ、秋の風とともに現実に戻って参りました。

あ~あ、気付いたらタスク終わってたりしないかなあ( ˘ω˘ )

なんてことを思っても終わらないので
自分の代わりに動いてくれるものを導入しましょう。
そう、殺伐としたテストの現場に救いをもたらすAUTOmealです。

今回は特別編、シリアル通信についてです!!

 

はじめに。前回の振り返り

AUTOmealは、組込み機器のテストにおける「制御」「計測」「判定」を、人に代わって自動で実行してくれる、
夢のようなソリューションです。

連載第1回、第2回、第3回ではそれぞれ「制御」と「計測」、そして「判定」をやってみました。

第1回:制御編の振り返り

制御編では、Pythonスクリプトを使ってデモボードを自動制御してみました! ボタンをポチポチしたり、距離センサの前で手を近づけたり離したりするところを AUTOmealが代わりにやってくれたわけです。
【記事へのリンク】💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:制御編~」

第2回:計測編の振り返り

計測編では、使用するI/Fボードの設定を追加して、計測をできるようにしました! ロジックやアナログ、PWMの波形をリアルタイムで計測してAUTOmealアプリ上に表示させるところをご覧いただきました。 波形の表示だけでなく、スクリプトを使って取得した値をログに出力させることもできました。
波形のChart表示だけでなく、スクリプトを使って取得した値をログに出力させることもできました。
【記事へのリンク】 💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:計測編~」

第3回:判定編の振り返り

判定編では、制御、計測した結果を判定してみました!
LEDの点灯/消灯やフィンの動作状況などをどのようにPythonスクリプトで判定しているのかもご覧いただきました。
判定まで実施できれば回帰テストも使いまわしで行けるのでテストが圧倒的に楽になります。
【記事へのリンク】 💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:判定編~」

第3回までで「制御」「計測」「判定」ひととおりご紹介したため、
これでもうAUTOmealの基礎はバッチリ!!
なのですが、まだまだご紹介したいことがあります。

気になっている方も多いでしょう、
シリアル通信部分のテストについて、どのように自動化すればいいのか?
というところをご紹介いたします!

自動化するにあたって、AUTOmealが周辺機器やモニタツールにまるっと成り代わることもできますし、
今使っているツールやテスト環境と組み合わせることで既存の資源を利用しながら自動化を図ることも可能なため、
「もうテストのシステムができあがってるし、今更自動化は難しいよな…」
とお悩みの方にもおすすめです。

 

シリアル通信のテスト

通信部分のテストの現状

組込み業界ではシリアル通信を用いられることも多いかと思います。
その際はどの部分をどのように確認しているでしょうか?

1. RAMの監視

通信そのものではなく、
通信を行った結果、正しく処理されたかをメモリの内容から判断する方法ですね。

従来のRAMの監視は以下のように行われることが多いのではないでしょうか?

  • PCとターゲット基盤を直接繋いでPCのRAMモニタで監視、書き換え (ターゲットにRAMアクセスIFが存在する)
  • PCとターゲット基盤の間に専用のRAMモニタツールを挟んでPCのRAMモニタで監視

この場合、監視のためのログ確認は目視で確認する必要があります。

通信内容はもちろん、RAMの内容も把握していないと処理が正しいかどうか判断することは難しいです。
また、RAMの書き換えもRAMモニタから手動で実施する必要があり、
作業者に負担がかかっています。

専用のモニタツールを用いる場合は接続もその分多くなり、
煩わしさもあるかと思います。

PCやモニタツールを利用したRAMの監視

2. オシロスコープやラインモニタでの通信内容の確認

シリアル通信ラインの電気的なHi/Loを横取りして、通信内容を確認する方法です。

オシロスコープや市販のラインモニタツール等を使用して通信ラインを監視し、
流れているデータが期待値通りか目視で確認します。

やはりオシロスコープに慣れていなかったり、
ツールによっては準備が大変で手間取ってしまったり、
プロービングに失敗してしまうこともあります。

ここも手作業、目視での確認のため
作業者への負担がかかるところです。

オシロスコープでの通信内容の確認

3. シミュレータでの周辺機器代替

実際の周辺機器と繋ぐ代わりに、
シミュレータをターゲット基盤と繋げてデータのやり取りを確認する場合もあります。

実機に成り代わってターゲットからのデータが期待値通りかチェックしたり、
ターゲットからのデータに応じて、レスポンスとしてデータを送信します。

周辺装置の代わりに疑似的なものを用いることができるというのは利点ですが、
内製でイチからシミュレータを作っていたり、
結局は手動操作、目視確認になり、

やはり人の手をかける必要があります。

シミュレータを用いたデータ送受信操作とモニタリング

AUTOmealなら、
上記で示したような従来のテスト方法における課題を解決することができます。

AUTOmealで実現する自動化

では、AUTOmealではどのようにして通信部分のテストを自動化しているのか、
かんたんに解説します。

通信部分のテストの例としては、周辺機器とターゲット機器が通信をしていて、UARTを用いている想定です。

AUTOmealを使用するとこの構成をどのように変更可能になるのか、
かんたんに図にしてみました。

まず、AUTOmealのTestRunnerはPCのCOMポートを利用してシリアル通信の送受信を行います。
シリアル変換用のケーブル等は別途準備が必要ですが、ネットでもお安く手に入るものなのでご安心ください。

これによって、
ターゲットと通信を行っている周辺機器に成り代わって、疑似的な通信再現を行います
そのため、テストの際にわざわざ周辺機器を用意する必要がなくなります。
もちろん、周辺機器を繋げて通信部分のテストをすることも可能です。

使うものを減らすことができるだけでもありがたいでありますが、
それを自動化できてしまうというのがこのソリューションのすごいところですね。

データの送受信はTestRunnerから手動で行うことができますが、
TestRunnerが操作できる部分はPythonスクリプトで自動化が可能です。

送受信したデータもログに残りますし、UI上で通信内容を確認できます。

スクリプトにより自動化することで、
今まで様々な機器を用いながら手作業で行っていたテスト業務を
AUTOmealが一手に担ってくれます。

たとえば、

  • 周辺機器をAUTOmealに置き換えて
  • ターゲットとのシリアル通信を再現し
  • その通信電文をモニタリングして
  • 意図した内容になっているか確認し
  • 意図しない内容の場合はNGとする

というようにテストを作ることもできます。

このあたりのテストは内製のツールを使ったりして行ってきたという方も多いのではないでしょうか?

お手製のものだとツールを作ったり使ったりするにも時間がかかったり、
独自の知識が必要になるかと思いますが、

AUTOmealだと学習コストが少なく、
かつ汎用的に使えるのでおすすめです。

 

GUI上からのシリアル通信送受信

今回もトライアルセットの内容を用いてシリアル通信部の操作を試してみたいと思います。
トライアルセットでは、TestRunner (PC) がCPU2に成り代わってCPU1とシリアル通信 (UART) をします。 
まずは、GUI上からの手動操作をやってみます。

トライアルセットにはコマンド定義ファイルの SerialCommand_1.csv が含まれているため、
プロジェクトを開くと、コマンド定義ファイルの内容が読み込まれてシリアル操作パネルに表示されます。

ターゲットやテストに合わせてコマンドの形式もそれぞれかと思います。
csvファイルで任意にかんたんに設定することができるため、このあたりも汎用的にお使いいただけます。
送信コマンドの定義が膨大な数あるときに地味にありがたいですね。

SerialCommand_1.csv
csvに記載したコマンドがシリアル操作パネルに表示

csvだけでなく、GUI上からもコマンドの定義が可能です。
次の動画は、GUI上からコマンドを定義してシリアル通信の送受信をしている様子です。

今回のシリアル通信では1ポートのみ使用していますが、現時点では2ポートまで同時に通信可能です。
さらに、次バージョンのV1.3では最大8ポートが使用可能になります!

GUI上からのコマンド送受信

リアルタイムで送受信される通信の内容を確認できるため、
デバッグにも活用しやすいですね。

もちろんリアルタイムで確認することもできますし、過去ログデータを開いて後から確認することもできます。
アプリからReportViewerを開くと、どのコマンドをいつ送受信したかが分かります。
また、タイムスタンプで他の制御・計測内容と同期しているため、
送受信したコマンドをクリックすると、MainWaveformもそのときの時間軸に移動します。
シリアル通信の送受信内容と実機の波形の様子を合わせて見られるのはAUTOmealならではですね!

 

シリアル通信部のテスト自動化

それでは、いよいよシリアル通信部分のテスト自動化をやってみたいと思います。

スクリプトは、トライアルで提供しているサンプルスクリプト Serial.py を使用します。
下記のようなかんたんな操作を実行するスクリプトです。

  • PCがCPU2になり替わりCPU1 に対してスクリプト内に記述したコマンドを送信する
  • CPU1から受信したコマンドを表示する

上記のような処理をPythonスクリプトで書くと次のようになります。

import automeal as am
import time

# UARTを送信します
# シリアル通信設定の Port1 から パケット を送信します。
print(“シリアル通信設定の Port1 から パケット を送信します。”, flush = True)
am.send_serial(“Port1”, [0x01, 0x02, 0x03, 0x04, 0x05, 0x06])

# 送信待ちを行います。
time.sleep(0.5)

# 受信したパケットの表示を行います
print(“受信したパケットの表示を行います。”, flush = True)
result_serial = am.get_latest_serial(“Port1”, “R”)
if len(result_serial) == 0 :
    print(‘受信データはありません。’, flush = True)
else :
    print(f’Port1受信データ:{result_serial.hex()}’, flush = True)

am.send_serial は指定のコマンドを送信するAPIです。
ここでは送信したいコマンドを直で記述して送信するようにしていますが、
SerialCommand_1.csv からコマンドを読み込んで送信することも可能です。

今回のスクリプトはシリアル通信部分のみのテストを記述していますが、
実際には、ロジックやアナログのテストと組み合わせて記述することで、
「実機のこのボタンを押したとき、シリアル通信ではこのコマンドが送信されている。」
というように、他のインターフェースと合わせて動作の確認ができる点も
AUTOmealの嬉しいところです。

出力ペインに表示されるログはプロジェクトフォルダのReportsに含まれる
OutputLog.log からも確認できます。
実際はCIツールを活用してコマンドラインからの実行で自動テストを回すため、
リアルタイムでの画面の確認はあまりしないかと思いますが、
ReportViewerでもログでも後からしっかり確認できるため安心ですね。

今回はトライアルセットの内容でのご紹介だったため、かんたんなコマンドの送受信処理の例になりましたが、
こちらの例を元に、それぞれのテスト対象や環境で活用できそうかどうかのイメージを付けていただけたら幸いです。

 

通信部分のテスト自動化してみた感想

手順の観点からいうと

なんか、前回までとそんな変わらなくない?身構えてたけど全然ラク。

というのが正直な感想です。
コマンド定義以外は前回までとほぼ同じでした。

スクリプトに関しても今回も処理部分はコピペ、ちょい変でいけました!
Pythonスクリプトは、実際の処理部分以外はだいたい変更がないため、
一度ベースを作ってしまえば少し手を加えるだけでかんたんに自動テストでやりたいことができてしまいますね。

学習コストがだいぶ抑えられるなというのを、この4回目までやってきてすごく感じています。

内製だったり、専用のツールやオシロスコープだと、
なんだかんだ言って使い方の資料があまりまとまっていなかったり、
使いこなせるようになるまで教えてもらいながら結構使い込まないといけなかったり、
よく分からないつまみやボタンが多くて、しばらく使わなかったら
「あれ、これどうするんだけ?」となりがちな気がします。
その点、やっぱりAUTOmealは誰でもかんたんに使えそうな感じです。

シリアル通信部分のテスト自動化というところに対しては、
届きそうで届かなかった痒いところに手が届く感がありますね。

そして、めちゃくちゃスマートにその体験をお届けされている感が半端ないです。(語彙力)

「おおー!すごーい!!」ってなるようなことを、涼しい顔してやってる。
同じクラスにいたら心の中でちょっと嫉妬しちゃうような存在…。

AUTOmeal…どこまで行くのでしょうか

 

最後に

いかがでしたか?

今回は、シリアル通信部分にテスト自動化を取り入れるヒントをお届けできたのではないかなと思います。

シミュレータや通信内容を確認するツールはそれぞれあり、
テストをサポートする環境をいくらかは整えてきていても、
そこを自動化する一歩がなかなか踏み出せないという方もいらっしゃったのではないでしょうか?

今後もAUTOmealに関する記事を随時お届けしていくので、お楽しみに!

だんだんと肌寒さを感じる季節となってきました。
体調を崩しやすい時期になりますためお体ご自愛下さい。

最後までお読みいただき、ありがとうございました!

テスト自動化ツールまとめ
~どれを使えばいいのか書いてみた~

年々、大規模化するソフトウェア開発。品質に対する要求レベルも上昇しており、テストにかかる工数も増加しています。そこで、自動化へ一歩踏み出す皆さんが導入からつまずかないよう、テスト自動化の始め方と自動化ツールについてまとめてみました。
記事を読む

【 無料でみれる! 】
組込み開発向けテスト自動化プラットフォームAUTOmeal デモ動画

AUTOmealによる環境構築から実際の自動テストの様子まで、基本的な使い方をデモンストレーションいたします。ぜひ実動作をご覧いただき、その効果をご確認ください。

お申し込みはこちら!