Chapter 02
テスト設計の土台 — 刺激・観測・判定と、機材の選び方
この章のゴール.
1 つのブラックボックステストを「刺激 → 観測 → 判定」の 3 段で設計でき、 テストダブル(模擬相手)・自動化・機材の選び方の全体像を持つこと。
この章で使う既出の用語(定義は各リンク先). USB(01 章 2 節)、アナログ(01 章 2 節)、オラクル(01 章 8 節)、ブラックボックステスト(01 章 1 節)、仕様書(01 章 3 節)
1. テストの最小単位 — 刺激・観測・判定
どんなブラックボックステストも、この 3 つに分解できる。
| 段 | やること | 例 |
|---|---|---|
| 刺激(stimulus) | 対象に入力を与える | ボタンを押す、BLE で書き込む、センサ値を注入する、電源を入れる |
| 観測(observation) | 外に現れる反応を測る | LED、UART ログ、消費電流、無線パケット、応答時間 |
| 判定(assertion) | オラクル(01 章)と照合して合否を出す | 「100 ms 以内に LED が点いたか」 |
「刺激なしの観測」はモニタリング(ただ眺める)であり、テストではない。 テストは必ず「こう入れたら、こうなるはず」という形を持つ。生成 AI が書いた機能を検証するときは、仕様の 1 文を 1 テストに落とすのが基本である。
AI 生成コードで特に効くテストの型.
- 仕様の直訳: 仕様書の「〜すること」を、そのまま刺激・観測・判定に変換する
- 境界と異常系: AI は正常系のデモは通すが、境界値(0、最大、オーバーフロー)や異常入力(不正なパケット、順序違反)で崩れやすい。ここを厚くする(16 章)
- 不変条件: 「どんな操作をしても消費電流が上限以下」「無線が切れても再接続する」——正常/異常を貫く条件
- 状態遷移: 「接続 → 認証 → データ → 切断」の順序を、飛ばしたり逆にしたりして確かめる
2. テストダブル — 相手を模擬する
組み込み機器は「相手」があって動く。センサ、通信先、クラウド、ユーザー。 本物の相手を毎回用意するのは大変で、しかも本物は都合の悪い入力(壊れたデータ、極端な値)を出してくれない。そこで相手を模擬する(テストダブル、test double)。
| 模擬する相手 | 実現 |
|---|---|
| センサ / 周辺 IC | I²C/SPI で偽の応答を返すマイコン(06 章・19 章)、アナログ値を DAC で注入(07 章) |
| 通信相手(BLE セントラル、Wi-Fi AP、サーバ) | PC + ドングルで役を演じる(09 章〜12 章) |
| ユーザー操作 | リレー・トランジスタでボタンを電気的に押す(15 章) |
| 電源 | プログラマブル電源で電圧を可変・瞬断(03 章・16 章) |
| 時間・環境 | 温度チャンバ、振動、光——または対応する信号を注入 |
模擬相手は「意地悪ができる」ことが本物より優れている点である。本物のセンサは正しい値しか出さないが、模擬なら NaN・範囲外・応答なしを自在に作れる。
3. ハーネスと自動化
1 回のテストを手で行うのは学習には良いが、回帰(毎回同じテストを繰り返して劣化を検出)には自動化が要る。 テスト対象を取り囲む刺激・観測・判定の仕掛け一式をテストハーネス(test harness)と呼ぶ。
- PC が司令塔になり、計測器・ドングル・治具を制御する
- pytest などのフレームワークで「刺激 → 観測 → assert」を記述する(18 章)
- 結果を機械可読な形(JUnit XML、ログ)で残し、CI で回す
- 実機が要るので、CI には実機を接続したテストランナー(HIL、15 章)を置く
4. 機材の全体像 — 何を揃えるか
観測点ごとに道具が違う。全部を最初に買う必要はなく、対象に応じて足す。
| 分類 | 道具 | 用途 | 章 |
|---|---|---|---|
| 見る(デジタル) | ロジックアナライザ(Saleae、fx2lafw + sigrok) | バス・GPIO の観測とプロトコルデコード | 04〜06 |
| 見る(アナログ) | オシロスコープ | 波形、タイミング、電源リプル | 04・07 |
| 測る(電源) | プログラマブル電源、電流計、パワーアナライザ(Otii、ppk2) | 消費電流プロファイル | 03 |
| 話す(シリアル) | USB-シリアル変換、USB-I²C/SPI アダプタ(FT2232、Bus Pirate) | UART/I²C/SPI の送受信 | 05〜06 |
| 無線を見る | BLE ドングル + bluetoothctl/bleak、Wi-Fi モニタ、SDR(RTL-SDR、HackRF) | 無線の観測と能動 | 09〜12 |
| 注入・刺激 | マイコン(自作治具)、DAC、リレー、信号発生器 | 模擬相手・刺激 | 07・15 |
| 中を覗く(半BB) | デバッグプローブ(J-Link、CMSIS-DAP)、OpenOCD/pyOCD | レジスタ・メモリ | 08 |
| 司令塔 | PC + Python、pyvisa、sigrok、pytest | 自動化 | 18〜19 |
「まず 1 万円のロジックアナライザと USB-シリアル」から.
安価なロジックアナライザ(fx2lafw 互換)+
sigrok/PulseViewと、USB-シリアル変換があれば、 UART・I²C・SPI・GPIO の大半が観測できる。無線は BLE なら数百円のドングル +bleak、 電波の広い観測は RTL-SDR(数千円)から。高い機材より、観測点を正しく選ぶことが先である。
5. グラウンドとレベル — 壊さないための基本
観測点にプローブを当てる前に、毎回確認する。
- 共通グラウンド: 測定器と対象の GND をつなぐ。つながないと波形が化ける・危険
- 電圧レベル: 対象が 3.3V ロジックなら、5V トレラントでないプローブや治具を当てると壊す。レベル変換(レベルシフタ)を挟む
- 入力インピーダンス・容量: プローブの容量が高速信号を鈍らせる(基板アートワーク編で扱う RC による波形なまりと同じ)。高速線には低容量プローブ
- 給電の競合: 対象が自分で電源を持つのに、治具からも給電すると競合する。どちらが電源を供給するか決める
6. 手を動かす
テストを 3 段に分解する
この章のポイント
- テストは 刺激 → 観測 → 判定 の 3 段。仕様の 1 文を 1 テストに落とす
- AI 生成コードは境界・異常系・不変条件・状態遷移で崩れやすい。そこを厚く
- テストダブルで相手を模擬する。本物より「意地悪できる」のが利点
- ハーネスで自動化し、回帰と CI に載せる(18 章)
- 機材は観測点ごと。安価なロジアナ + USB-シリアル + BLE ドングル + SDR から
- プローブ前にグラウンド・電圧レベルを必ず確認