Embedded Test 20 · テスト計画とケーススタディ — 全部をつなぐ

Chapter 20

テスト計画とケーススタディ — 全部をつなぐ

この章のゴール.

03 章〜19 章の個別技を、一つのテスト計画に束ねる筋道をつかむこと。リスクから優先度を決め、 面を洗い出し、層(スモーク→機能→堅牢→長時間)で並べ、道具を割り当てる。 最後に、生成 AI が書いた架空の BLE 温度ロガーを題材に、計画からバグ発見まで通しで追う。

この章で使う既出の用語(定義は各リンク先). USB(01 章 2 節)、アナログ(01 章 2 節)、オラクル(01 章 8 節)、規格(01 章 3 節)、pytest(02 章 3 節)、ハーネス(02 章 7 節)、刺激(02 章 1 節)、電源(02 章 2 節)、発熱(03 章 5 節)、オシロ(04 章 8 節)、UART(05 章 1 節)、I²C(06 章 1 節)、SPI(06 章 1 節)、DAC(07 章 2 節)、スキャン(09 章 2 節)、接続(09 章 2 節)、mitmproxy(11 章 4 節)、RTL-SDR(12 章 2 節)、URH(12 章 8 節)、CAN(13 章 5 節)、Facedancer(13 章 4 節)、スループット(14 章 1 節)、デッドライン(14 章 1 節)、ヒストグラム(14 章 3 節)、HIL(15 章 8 節)、カウンタ溢れ(16 章 5 節)、道具(16 章 2 節)

1. 計画は「リスク×面」から

やみくもに全部テストはできない。どこが壊れると痛いか(リスク)と、どこから触れるか(面)を掛けて優先度を決める。

テストは軽い順に層で積む——下ほど速く多く性能(レイテンシ・スループット)セキュリティ(攻撃面・秘密・認証)堅牢・長時間(枯渇・ストレス・ソーク)境界・異常(不正入力・接続の乱れ)機能(各機能が仕様どおり)スモーク(起動・基本応答/毎コミット)上へ行くほど HIL・ハーネス・CI(15・18 章)の価値が上がる
図20-1 テストのピラミッド。

2. テストを層で積む — ピラミッド

一気に全部やらず、軽い順に積む。下ほど速く多く、上ほど重く少なく。

  1. スモーク: 起動する・基本状態に入る・応答する(毎コミット、数秒)
  2. 機能: 各機能が仕様どおり(03 章〜13 章の観測でオラクル)
  3. 境界・異常: 境界値・不正入力・接続の乱れ(10 章・16 章)
  4. 堅牢・長時間: リソース枯渇・電源/環境ストレス・ソーク(16 章、夜間)
  5. セキュリティ: 攻撃面・秘密・認証(17 章)
  6. 性能: レイテンシ・ジッタ・スループット(14 章)

上へ行くほど HIL(15 章)とハーネス(18 章)と CI(18 章)の価値が上がる。

3. 面ごとに道具を割り当てる — 早見表

面/観点主な道具章
状態・電力シャント/PPK2/Otii3
デジタル信号ロジアナ+オシロ、sigrok4
UARTUSB-シリアル、ロジアナ5
I²C/SPIロジアナ、偽センサ(自作)6, 19
アナログDAC/ADC、DMM7
デバッグpyocd/OpenOCD、RTT/SWO8
BLEbleak、nRF Connect、sniffer9, 10
Wi-Fi/ネットnmap、Wireshark、mitmproxy11
サブGHzRTL-SDR、URH、rtl_43312
USB/CANlsusb、usbmon、Facedancer13
タイミングオシロ、GPIO トグル、SWO14
統合自動化HIL、pytest、pyvisa、CI15, 18
面ごとに道具を割り当てる——3〜19 章の技を配置する状態・電力(3 章)シャント / PPK2 / Otiiデジタル信号(4 章)ロジアナ + オシロ / sigrokI²C・SPI(6 章)ロジアナ / 偽センサ(自作)BLE(9・10 章)bleak / nRF Connect / snifferWi-Fi・ネット(11 章)nmap / Wireshark / mitmproxyサブGHz(12 章)RTL-SDR / URH / rtl_433統合自動化(15・18 章)HIL / pytest / pyvisa / CI
図20-2 面×道具の早見表(抜粋)。

4. ケーススタディ — 架空の BLE 温度ロガー

生成 AI に書かせた「電池駆動の BLE 温度ロガー」を題材に、通しで追う。仕様: I²C 温度センサを 1 秒ごとに読み、BLE で通知、閾値超過で警報、ボタンで履歴消去、USB で設定。

計画(リスク×面): 高リスクは「警報が出ない」「電池が異常に減る」「秘密が漏れる」。まずここへ道具を当てる。

ケーススタディ:BLE 温度ロガーを計画から発見まで通す計画リスク×面層で実行スモーク→性能道具を当てる各章の技バグ発見実際の欠陥見つかる典型欠陥省電力の抜け(3 章)/閾値の境界取り違え(7・16 章)/長さ検査なしでハング(10 章)/通信競合でデッドライン破り(14 章)/無認証書き込み・平文通知(17 章)/24 時間後にメモリリーク(16 章)
図20-3 ケーススタディの流れと発見。

通しの流れと、実際に出そうなバグ:

  1. スモーク(03 章・05 章): 電流波形で起動を確認。だがスリープ時電流が想定の 100 倍——スリープに入り損ねている(電力バグ、生成 AI が省電力を実装し忘れ)。03 章の PPK2 で即発見。
  2. 機能(06 章・09 章): I²C を覗くと 1 秒ごとに読んでいる。BLE スキャン(09 章)で通知値を確認。偽センサ(06 章)で 85 ℃ を返すと——警報が出る。ただし閾値がちょうど 85 のとき出ない(> と >= の取り違え、境界バグ)。07 章・16 章の境界攻めで発見。
  3. 堅牢(10 章・16 章): BLE の履歴消去コマンドに巨大長を書き込むと——ハング(長さ検査なし、バッファ溢れ)。生存確認(10 章)が落ちを検知、入力を保存。
  4. タイミング(14 章): 警報の GPIO をオシロで測ると中央値 40 ms だが、まれに 600 ms(BLE 通信と競合)。デッドライン 100 ms を破る。ヒストグラムの裾で発見。
  5. セキュリティ(17 章): BLE の設定キャラクタリスティックが無認証で書ける、通知値が平文、USB 文字列に開発機のシリアルが残存。09 章・11 章・13 章の観測を攻撃者目線で。
  6. 仕組み化(15 章・18 章): 上を HIL+pytest ハーネスにして、AI が直すたび CI で全再現。夜間ソークで24 時間後にメモリリークで通知停止(16 章)も判明。

こうして「計画→層→道具→発見→仕組み化」が一周する。個々の技(03 章〜19 章)が、計画(本章)という背骨で一本につながる。

5. 生成 AI 製ファームで特に狙う所

本シリーズの動機(AI にコーディングさせた組み込み)ゆえに、経験上ここがよく出る:

6. 手を動かす

テスト計画を組み立てる


この章のポイント

このシリーズを終えたあなたは、外から機器の状態を読み、刺激を与え、堅牢性と守りを試し、 それを自動の仕組みに育てる道具箱を手にしている。次は、手元の実機で一つ、電流波形を眺めることから始めよう。