新型コロナウィルスの流行で、すっかりリモートワークが一般的になり、
また、業務効率化もより一層求められるようになりました。

現場に行かずとも、リモートでテストがしたい!
でも、そんな環境を作る予算がない…!

自動化を活用して業務効率化させたい!
でも、自動化を導入していくノウハウがない…!

一体どうすれば…!!

という組込み機器開発についてまわるお悩みを聞いてきました。

「そんな組込み業界にいるからこそ、組込みソフトウェア開発ならではのテスト自動化の課題を解決したい。」
弊社では、そのような思いを胸に、
小さなところから少額で始められるテスト自動化ソリューション「Small Start Kit」(通称SSKit)
をご提供してまいりましたが、

そのSSKitをリニューアルし、
その名も新たに「AUTOmeal (オートミール)」として販売しております!(とても健康志向な名前ですね!)

AUTOmealは、ターゲットとなる組込み機器の「制御・計測・判定」を軸として、
SSKitよりさらに汎用的に、お手軽にテスト自動化を実現するプラットフォームです。

まあ、それはさておき!

この記事では、
自動テスト初心者な社内エンジニアの私が、実際にAUTOmealを使ってみた様子を
数回に分けてお届けしていきます。

「自分もやってみたいけど、まだ敷居がなぁ…」と感じている皆さん、
なにを隠そう、これを書いております私自身も自動テストは未知の世界です。
(´-`).。oOテストの世界、奥深すぎる…
みなさんと同じ感覚でレポートをお届けしていきますので、
ぜひチェックしていただければ!と思います。

また、この内容は、ターゲットデモボード含めてAUTOmealのトライアルキットを使用しているため、
もしご興味をお持ちいただけましたら、是非お気軽にトライアルへお申し込みください!

今回の記事では、「パート1:制御」についてお届けします。

 

はじめに。AUTOmealとは?

冒頭でも少し触れましたが、
AUTOmealは気軽に自動化を始められるテスト自動化プラットフォームです。
以下の4つの要素から構成されており、かんたんにターゲットとなる組込み機器の「制御・計測・判定」をすることができます。

・マネージャアプリ:テストの実行管理
・ランナーアプリ:テストシナリオの実行と結果判定
・テストユニット(ラズパイ):ターゲット機器に対する制御・計測
・拡張I/Fボード:ターゲット機器との接続

各部の役割がはっきりしているので分かりやすいですね。

灰色の文字は実装予定の機能です。

まず注目したいのは「拡張I/Fボード」

上記4つの要素のひとつ、拡張I/Fボードは、テストユニットとターゲット機器の接続に使うボードです。
ターゲットや目的に合わせてラズパイに付け替えることで、AUTOmealを様々な機器に対して使用していただけるようになります。
例えば、
「このターゲットに対してはロジック信号での制御・計測をしたいから、ロジック入出力用に今回はこのI/Fボードを使おう!」
といった感じです。

これにより、ツール自体はシンプルに、かつ、汎用性を持たせることができます。
開発が進むにつれてテストが必要な機能が増えたときには、また拡張I/Fボードを追加すればいいので、
そのステップに合わせて構成を組み替えることがかんたんにできます。
(開発者談)

また、いざ自動テストに取り組もう!となったとき、
・自分たちの環境ではどこを自動化することができるのか
・どんな自動化が最適なのか
いろいろ手探りで進めていくことになりがちです。
そんなときにも、I/Fボードの付け替え機能が活用できそうですね。

そして、次の注目ポイントは
Pythonで自動テストの命令が出せるところです!

馴染みのあるシンプルな言語でテストスクリプトを作成可能で、シナリオ作成が楽々。
しかも、自動テストを実施する際は、スクリプトを実行するだけで制御から計測、判定までやってくれる…!

機器のボタンをポチポチしたりセンサに手をかざしたりして、その結果を元にこまごまとOK/NGを記載していく…
そんな気の遠くなる作業ともおさらばです。

ツールはサンプルスクリプトやスクリプトのレファレンスと共にお届けするので、
シナリオをちゃんと作れるのかと不安な方もご安心ください。
また、ScriptGenerator を使うことで、
Python の知識が無くてもテストスクリプトを作成することが可能です。
(開発者談)

構成や機能などに関するもっと細かい説明は、以下の記事内で触れています。
コチラも是非ご覧ください。

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

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

 

ハードウェアの用意

さてさて、テスト自動化環境を構築していきましょう。
まずはハードウェアの用意をしていきます。

上記でご紹介したラズパイ、拡張I/Fボード、そして今回のテスト対象となるターゲット機器を持ってきました。
ターゲット機器は、トライアルでも一緒に貸し出しを行っているデモボードです。
フィンやファン、LCD、LEDやセンサなどが付いており、
AUTOmealの機能をひととおり確認できるようになっています。

拡張I/Fボード

拡張I/Fボードは、トライアルと同様の構成で、
ロジック入出力ボードアナログ入力ボード、アナログ出力ボードパルス入出力ボード
上記4つをラズパイにアタッチしました。
ロジック信号とアナログ信号、パルス信号の制御/計測をできるようにしておきたいためです。

拡張I/Fボードは、写真のように複数段重ね付けすることも可能で、
MAX8段まで付けられます。
(開発者談)

テストユニットはラズパイと拡張I/Fボードを組み合わせることで汎用的に活用可能です。

各ハードウェアの接続

テストユニットとPCはLANケーブルで繋ぎます。
テストユニットとデモボードは、フラットケーブルやジャンパ線などで繋ぎました。
※お写真では少し見えづらくなってしまいましたが…

なにやら難しげに思っていましたが、いざやってみると
ターゲット(デモボード) ⇔ テストユニット(拡張I/Fボード) ⇔ PCを繋げればいいだけ!

繋げるだけでかんたんにできました!!

各ハードウェアの接続もシンプル。

接続する場所に気を付けながら繋げるだけなので、とてもかんたん。
構成も小さいし、使用するものも小さいので、わずらわしさがありませんでした。

ターゲットデモボードの概要

トライアルでも使用しているターゲットデモボードの基本的な仕様は以下のとおりです。
温度情報や距離値は各センサからの取得だけでなく、つまみでも電圧を調整できるようになっています。

ターゲットデモボード
名称説明
電源ターゲットデモボード ACアダプターを差して使う電源。
SW1ターゲットデモボードの電源を ON/OFF するスイッチ。上:ON、下:OFF。
SW11温度情報を、THERMO_VR から得るか、温度センサから得るかを切り替えるスイッチ。
左:THERMO_VR、右:温度センサ。
SW12距離値の元となる電圧を、SENSOR_VR から得るか、距離センサから得るかをを切り替えるスイッチ。
左:SENSOR_VR、右:距離センサ。
SW13ファンからのフィードバックを遮断するかどうかを切り替えるスイッチ。
上:導通、下:遮断。
ボタンセットキー入力で各部の動きを制御する。
THERMO_VR温度を調整する可変抵抗器。左に回すと温度の値が大きくなる。
SENSOR_VR距離値の元となる電圧を調整する可変抵抗器。左に回すと距離の値が大きくなる。
Level LED距離値に応じて点灯する LED の個数が変化する。
7セグ取得した温度とボタン操作で設定した閾値を表示する。
LCDファンの回転数、AT/MT の状態、ミュートの状態を表示する。
ファンAT の場合は温度が閾値を超えた際に強弱が切り替わり、MT の場合はボタン操作で強弱が切り替わる。
フィン(サーボモータ)AT の場合は自動で首振り動作をし、MT の場合はファンに対して垂直、かつ 2 つのフィンが並行の状態で停止している。
ブザー距離値が閾値を超えた際や、エラーが発生した際に鳴動する。今回はミュートにしておきます。

トライアルをやってみようとしても、何を対象にしようか迷ってしまうことがあるかもしれませんが、
AUTOmealのトライアルでは、上記のようなターゲットも同封されているため、
気軽にできますね!

何か新しく始めたり、導入しようとするとき、結構セットアップに時間が掛ってしまいがちですが、
さすが「はじめやすい」が売りの一つということもあり、
セットアップ的にも始めるときのハードルが低い気がしました。

 

Pythonでテスト自動実行してみた

ここまででハードウェアの接続は完了。
いざ、実際にテストを実行していきます!

テストユニットを制御するランナーアプリ上でプロジェクトを作成すると、このような画面が表示されます。

実際のアプリ画面です。

オシロスコープのように入出力信号の波形が見ることができるようになっています。
AUTOmealでは、Pythonスクリプトを読み込ませ自動で操作することも、
ランナーアプリUIから手動で操作することも可能です。

また、どのボードを使用するかや、ボード上のどのチャンネルを表示させるかも
ランナーアプリ上から設定することが可能です。
今回は計測用のアナログ入力ボードは使用しないため、それ以外の3つのボードを設定しました。

使用するボードの設定が可能です。

さて、プロジェクトとI/Fボードの設定をしたところで、
今回はPythonで記述したテストシナリオに沿ったテストを実行させることをしてみたいと思います!

スクリプトは
・どんなテストを実行したいか
・どんな値を計測したいか
・結果判定をどのようにするか
などに合わせて作ることができるのが嬉しいですね。

先にもご説明しましたが、アプリにはサンプルのスクリプトやレファレンスが付いてくるので、
どんな感じでスクリプトを書けばいいのか分からないというときの参考にできるでしょう。

とはいえ、
「Pythonスクリプトでかんたんにテスト自動化できて、コストも削減できます!」と言われても、
じゃあ、そのスクリプトを作るにはどれくらいの労力がいるのか?
ここ、気になるポイントですよね。

そこで、今回使用するスクリプトの抜粋を公開!
慣れてしまえばかんたんに作成が可能です。
どんなテストでもおおよそ同じような記述方法かと思いますので、ご参考になれば・・・。

import automeal as am
import time

###
#ロジック出力
###

# ボタンを代替します。
# GP10制御ch1~ch3 初期化します。
# 制御ch1~3 をHiにします。
print(“ch1~3の初期化としてHiにします。”)
am.write_logic_rpigp10(“Board1”, 1, True)
am.write_logic_rpigp10(“Board1”, 2, True)
am.write_logic_rpigp10(“Board1”, 3, True)

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

# GP10制御ch1に繋がるボタンを押下します。
# 制御ch1 をLoにします。
print(“ch1(風量切り替えボタン) を Lo にします。”)
am.write_logic_rpigp10(“Board1”, 1, False)

# 押下したままで待ちを行います。
time.sleep(0.5)

# GP10制御ch1に繋がるボタンを放します。
# 制御ch1 をHiにします。
print(“ch1(風量切り替えボタン) を Hi にします。”)
am.write_logic_rpigp10(“Board1”, 1, True)

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

i = 0
while(i < 5):

  # GP10制御ch2に繋がるボタンを押下します。
  # 制御ch2 をLoにします。
  print(“ch2(温度閾値変更ボタン(下)) を Lo にします。”)
  am.write_logic_rpigp10(“Board1”,2, False)

  # 押下したままで待ちを行います。
  time.sleep(0.5)

  # GP10制御ch2に繋がるボタンを放します。
  # 制御ch2 をHiにします。
  print(“ch2(温度閾値変更ボタン(下)) を Hi にします。”)
  am.write_logic_rpigp10(“Board1”, 2, True)

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

  i+=1

###
#アナログ出力
###

# 温度センサの代替をします。
print(“Board2 (アナログ出力ボード)のch1 に1200mVのアナログ電圧を出力します。”)
am.write_analog_amao(“Board2”, 1, 1200)

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

###
#PWM出力
###

# ファンからのフィードバックを代替します。
print(“Board4 (PWM入出力ボード)の出力ch1 に12Hz、50%のPWMを出力します。”)
am.write_pwm_ampio(“Board3”, 1, 12,50)

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

このようなスクリプトを書いて、次のようなシナリオを作成します。

  1. テストを開始する
  2. ファンの風量を切り替える (ロジック出力)
  3. 温度の閾値を下げる (ロジック出力)
  4. 温度センサの代替をする (アナログ出力)
  5. ファンからのフィードバックを代替する (パルス出力)
  6. テストを終了する

今回はPython3.11.3でスクリプトを実行します。
シナリオファイル.pyを指定して実行するだけで、
それをアプリが読み込んでくれて、
ラズパイに指示してくれて、
そこから疑似信号を出力、
I/Fボードを介してターゲットを制御してくれます。

そしてターゲットからの信号を計測し、
結果判定もスクリプトで定義できます。

仕組みもシンプルで分かりやすい!
制御の様子は以下の動画でご覧ください。
アプリ、(Pythonを実行する)コマンドライン、ターゲット機器、それぞれの動きをお確かめいただけます。

「制御してみましょう!」といってもPythonを実行するだけなのでとても楽ですね。これなら誰でもできそう!

コマンドライン上で何が実行されるかを確認しながら、実機の動きを見ることができました。
また、アプリ上のMainWaveformをみることで、どのような信号が出ているのかを確認することもできます。

今回は自動テスト実施中にリアルタイムで確認しましたが、
もちろん過去データの参照が可能なため、
・どのようにテストが実施され
・どのような動きをしていたか
を、後から確認することができます

制御するものを組み合わせることで
テストのバリエーションを展開していくこともできます。

 

制御の自動化ってかんたん

今回、AUTOmealでPythonからターゲットの制御をやってみましたが、
感想としては、
楽で、かんたんだった
というのが一番です。

ぜひ、テストで苦しんでいる方々におすすめしたいです。

個人的なお話しですが、
統合テストや妥当性確認をしたときにずっとボタンをポチポチしてると
「私は何をやってるんだろう…」
という気持ちになることもありますし、
テストケースをどこまで実施したか、意識が飛んでしまいそうになることもあります。
同じような境遇の方もいらっしゃるのではないでしょうか?

それに対して、実際にAUTOmealを使って自動テストをしてみて、
こういうソリューションがあったらだいぶ楽になるなと感じました。
もちろん業務など時間的にもそうですし、精神的にも楽になりそう。

このAUTOmeal、引き続き改良中ということで、
今後もさらなる機能追加や使いやすさの向上が期待されます。
これからも楽しみです!

 

最後に

いかがでしたか?
「テスト自動化を検討しているけど、なかなか敷居が高い…どうしたらいいのだろう…。」
という方に少しでもご興味をお持ちいただけたのであれば幸いです。

どうしたらいいのか分からないからこそ、
少しずつ、試しながら自動化を取り入れていく。
それができるのがAUTOmealです。

コンセプトや詳細な機能、活用事例などはデモにてご説明させていただきます。
ひととおり機能を確かめられるトライアルは、2週間ほどお試しいただけます。
是非お気軽にお問い合わせください!

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

【 無料セミナー 】
組込み開発向けテスト自動化プラットフォームAUTOmeal デモウェビナー

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

お申し込みはこちら!