リモートワークでテストを行うためのヒント

## 1. はじめに
リモートワーク（在宅勤務、テレワーク）が推奨されるこのご時世[^1]ですが、リモートワークでテストを行うにあたり以下のようなハードルが考えられます[^2]。

1. 実機の持ち出し
2. 勤務時間外の自動テストの実行

これらを解決しようとするとオフィスに実機を置いたままリモートから操作やモニタリング、自動実行を行うシステムが欲しくなります[^3]。そこで、これまでに筆者が書いた記事からリモートワークに使えそうなものをピックアップしました。

リモートテストシステム例[^4]
![embedded_ci6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/9efed86c-93cf-5858-60d9-339ea92faf78.png)

## 2. 基本的なアプローチ
実機に近い側から上流に向かってアプローチを列挙します。

1. 実機のスイッチをソレノイドで押したりスイッチから線材を飛ばしてリレーでON/OFFする
2. 実機の操作子の電圧出力の代わりにDACで所定の電圧を出力し実機のA/Dに入力する
3. 実機のアナログ電圧出力をマイコンのA/Dで測定する
4. コマンド制御のマイコン治具でソレノイドやリレー、DAC、ロボットアームを操作する
5. Webカメラで実機を撮影したりHDMIビデオキャプチャでGUIをキャプチャする
6. VISA対応の測定器で信号を測定する
7. テストランナーで自動化する

## 3. テストランナー
VPN経由でリモートからExcelを操作したりPythonのスクリプトをJenkinsでキックする方法があります。

### 3.1 Python版テストランナー
「Lチカで始めるテスト自動化」シリーズ1～11、13～14、17、19～28を編集し[技術書典で頒布](https://techbookfest.org/product/5661312486998016)しています。

1. [Lチカで始めるテスト自動化](https://qiita.com/pbjpkas/items/fd4bd2689deda2d793aa)
2. [Lチカで始めるテスト自動化(2)テストスクリプトの保守性向上](https://qiita.com/pbjpkas/items/337bce392281ee5f0526)
3. [Lチカで始めるテスト自動化(3)オシロスコープの組込み](https://qiita.com/pbjpkas/items/b80b7e199a5aed4688a4)
4. [Lチカで始めるテスト自動化(4)テストスクリプトの保守性向上(2)](https://qiita.com/pbjpkas/items/a02c4128baf5a3f2a46c)
5. [Lチカで始めるテスト自動化(5)WebカメラおよびOCRの組込み](https://qiita.com/pbjpkas/items/9af9e6441e1e20c5909e)
6. [Lチカで始めるテスト自動化(6)AI(機械学習)を用いたPass/Fail判定](https://qiita.com/pbjpkas/items/405d55f809da1221b867)
7. [Lチカで始めるテスト自動化(7)タイムスタンプの保存](https://qiita.com/pbjpkas/items/8e3c4330f4a81d30bd53)
8. [Lチカで始めるテスト自動化(8)HDMIビデオキャプチャデバイスの組込み](https://qiita.com/pbjpkas/items/58f84c347e44fb9d5635)
9. [Lチカで始めるテスト自動化(9)6DoFロボットアームの組込み](https://qiita.com/pbjpkas/items/7a4cb4c59886b1fd2cf9)
10. [Lチカで始めるテスト自動化(10)6DoFロボットアームの制御スクリプトの保守性向上](https://qiita.com/pbjpkas/items/c011d7ad6f98bc1458d5)
11. [Lチカで始めるテスト自動化(11)ロボットアームのコントローラ製作](https://qiita.com/pbjpkas/items/fa6d2956ea3dd18b3584)
12. [Lチカで始めるテスト自動化(12)書籍化の作業メモ](https://qiita.com/pbjpkas/items/e76a763de7f496d5430c)
13. [Lチカで始めるテスト自動化(13)外部プログラムの呼出し](https://qiita.com/pbjpkas/items/717b2aba39798d8cab1d)
14. [Lチカで始めるテスト自動化(14)sleepの時間をランダムに設定する](https://qiita.com/pbjpkas/items/4f023917f31f6096eb6b)
15. [Lチカで始めるテスト自動化(17)コマンド制御のBLE Keyboard & MouseをM5Stackで製作しiOSアプリをテストスクリプトで操作する](https://qiita.com/pbjpkas/items/3df58743644128a11b9e)
16. [Lチカで始めるテスト自動化(19)Webカメラの映像を録画しながらテストスクリプトを実行する](https://qiita.com/pbjpkas/items/589243af5c9ff0dc933c)
17. [Lチカで始めるテスト自動化(20)複数のカメラ映像の同時録画](https://qiita.com/pbjpkas/items/cdfc0238b54bf197e98a)
18. [Lチカで始めるテスト自動化(21)キーボード入力待ちの実装](https://qiita.com/pbjpkas/items/9e3c21c3cd375635568a)
19. [Lチカで始めるテスト自動化(22)DACをコマンドで制御してLチカする](https://qiita.com/pbjpkas/items/35d1450804f3bfbe238e)
20. [Lチカで始めるテスト自動化(23)ブレッドボード互換のユニバーサル基板](https://qiita.com/pbjpkas/items/ca510b483e7f36e97d96)
21. [Lチカで始めるテスト自動化(24)コマンドの実行結果を任意のCSVファイルへ出力する](https://qiita.com/pbjpkas/items/7751a08eaaa0e3d50298)
22. [Lチカで始めるテスト自動化(25)Windowsでもテスト終了時にpass/failに応じてメロディを流す](https://qiita.com/pbjpkas/items/5d8ca74b011d4c8d6e43)
23. [Lチカで始めるテスト自動化(26)テストランナーのモジュール化](https://qiita.com/pbjpkas/items/ce2d032f9ee9d641a229)
24. [Lチカで始めるテスト自動化(27)矩形の画像を動画のフレームから切り出してファイルに保存する](https://qiita.com/pbjpkas/items/a99cdfa1b4e5d9e62b3e)
25. [Lチカで始めるテスト自動化(28)Webカメラの映像にフレームの情報を重畳する](https://qiita.com/pbjpkas/items/72f5f3dc0298aac4bb2d)

### 3.2 Raspberry Pi Zero WHとIoT学習HATキットで動かすPython版テストランナー
PDF化したものを[技術書典で頒布](https://techbookfest.org/product/6323836549070848)しています。
<strike>※Raspberry Pi OSはBusterをご利用ください。BullseyeはWiring Piが非推奨となりGPIOコマンドが動作しなくなりました（[参考](https://akizukidenshi.com/catalog/faq/goodsfaq.aspx?goods=K-14568)）。</strike>

1. [Lチカで始めるテスト自動化(15)Raspberry Pi Zero WHでテストランナーを動かして秋月のIoT学習HATキットに進捗を表示する](https://qiita.com/pbjpkas/items/a2e7551ae10f7dce2505)
2. [Lチカで始めるテスト自動化(16)秋月のIoT学習HATキットにBME280を接続してテスト実行環境の温度・湿度・気圧を取得する](https://qiita.com/pbjpkas/items/0a48ca71a2de0042e188)
3. [Lチカで始めるテスト自動化(18)秋月のIoT学習HATキットの圧電ブザーでテスト終了時にpass/failに応じてメロディを流す](https://qiita.com/pbjpkas/items/43a609581cc68b7ea2fd)
4. [Raspberry Pi OS Bullseyeで圧電ブザーでメロディを鳴らす](https://qiita.com/pbjpkas/items/438354ae3054466c4df1) 

### 3.3 電源オンオフの自動化
書き下ろしを追加しPDF化したものを[技術書典で頒布](https://techbookfest.org/product/fFeUevUbL3NQrNbf5n4WEQ)しています。
- [電源をオンオフするテスト手順を自動化する](https://qiita.com/pbjpkas/items/e96bf25ea2af901e31ad)
- [電源をオンオフするテスト手順を自動化する - Raspberry Pi編](https://qiita.com/pbjpkas/items/d7a2225b9670b759162d)

### 3.4 JenkinsによるPython版テストランナーの自動実行
- [マイコンのUARTコマンド制御をJenkins、Raspberry Pi、Pythonで行う](https://qiita.com/pbjpkas/items/f2f8eeab76dda95891d6)
- [Arduino治具とオシロスコープをRaspberry Piに接続してテストベンチを組み、Jenkinsでテストを自動化する](https://qiita.com/pbjpkas/items/c33c6c55a927eccc4d85)
- [自作の自動テストツールをJenkinsで実行する](https://qiita.com/pbjpkas/items/2bf60fc5bdb61eb5e850)
- [Raspbian GNU/Linux 10 (buster)のJavaをJava 8に入れ替えてRaspberry Pi Zero WをJenkinsのエージェントとして利用する](https://qiita.com/pbjpkas/items/12b35bf07421bcf21d32)

### 3.5 Excel版テストランナー
- [ArduinoとオシロスコープをExcelで制御して測定する](https://qiita.com/pbjpkas/items/7da7ff99e7226fa84bcb)
- [ArduinoとオシロスコープをExcelで制御して測定する(2) シャッタースピードの自動測定](https://qiita.com/pbjpkas/items/615a6eca0894c784e87a)
- [ストップウォッチを使う性能テストを実ステップ300行に満たない自動テストシステムで自動化する](https://qiita.com/pbjpkas/items/d525d7d19095d1e26452)

## 4. テスト治具
- [Arduino Leonardoで多目的ツールの製作](https://qiita.com/pbjpkas/items/97dbf835b0aab6725e94)
- [リレーの駆動回路（Lチカで始めるテスト自動化・4章）](https://qiita.com/pbjpkas/items/fd4bd2689deda2d793aa#4-%E3%83%AA%E3%83%AC%E3%83%BC%E9%A7%86%E5%8B%95%E5%9B%9E%E8%B7%AF)
  - [Lチカで始めるテスト自動化 -2- リレー駆動回路の設計](https://techbookfest.org/product/5299462253576192)
- [ソレノイドの駆動回路（ArduinoとオシロスコープをExcelで制御して測定する(2) シャッタースピードの自動測定 付録）](https://qiita.com/pbjpkas/items/615a6eca0894c784e87a#x-%E4%BB%98%E9%8C%B2%E9%A7%86%E5%8B%95%E5%9B%9E%E8%B7%AF%E3%81%AE%E6%A4%9C%E8%A8%8E)

## 5. 番外編：組込みシステムの参考書
組込みシステムの構築が初めてなら[「Arduinoで学ぶ組込みシステム入門」をテストエンジニアやQAにおススメする3つの理由](https://qiita.com/pbjpkas/items/f7ba8aa48f92240a217e)もどうぞ。

## 6. おわりに
リモートテストシステムという切り口で筆者の記事を整理しました。ご参考になれば幸いです。

[^1]: 2020年4月7日に新型コロナウイルスの感染拡大を抑え込むため緊急事態宣言が出されました。
[^2]: このほかボール盤などテストツールを製作するための工作機器や評価機材の設置なども考えられますがひとまず脇に置きます。
[^3]: クラウドに実機を置くわけにもいかないので…
[^4]: 記事に書いていないものも入っています