リプレイ/障害注入を試す(設備の間欠障害)
このサンプルは リプレイ(シナリオ録画→決定論再生)と障害注入を、実機なしで通しで試すためのものです。「現場でしか出ない間欠障害(正常 → 異常 → 無応答)」を録画したシナリオを同梱しているので、録画工程を飛ばして「開く → 再生」からすぐ始められます。
TCP 7100LineFrameシナリオ同梱対話/素モード障害注入実機不要
このページでできること
- 録画済みシナリオを実機なしで決定論再生し、「正常往復が続いた後に突然の異常 → 無応答」という間欠障害を何度でも同じ形で再現する。
- 対話モード/素モードと再生速度の違いを体感する。
- 送信に障害(遅延・ロス・切断)を注入し、テスト対象アプリのタイムアウト・リトライ・再接続処理を検証する。
- 最後に「自分の通信ではどう使うか」を判断フローで掴む。
リプレイ・障害注入の各設定項目の網羅的な説明は リプレイ/障害注入 を参照してください。このページは手順に絞っています。
登場人物(役割)
実機は要りません。CommSim 本体=実機役(録画シナリオを再生)、CommSim.Sample=アプリ役(要求を送る)の 2 本だけで完結します。
CommSim.Sampleアプリ役:Read を連投
⇄
CommSim 本体実機役:シナリオを再生
⇠ 実機不要
実機使わない
CommSim.Sample で「動かすサンプル=リプレイ(設備の間欠障害)」を選ぶと、アプリ役のポートが自動的に 7100 になり、CommSim 本体(
device-replay.commsim=7100 待受)と一致します。ポート番号を手で合わせる必要はありません。用意するもの
| ファイル | 内容 |
|---|---|
device-replay/device-replay.commsim | 実機役スタブのプロジェクト(TCP 7100・LineFrame 構造体定義つき・応答はリプレイで返すためルールは空) |
device-replay/scenarios/device-replay.commscenario | 録画済みシナリオ(正常往復9回 → 異常ステータス → 無応答 → 末尾にテレメトリ)。プロジェクト既定のシナリオ保存先 scenarios/ に同梱(「シナリオを開く」の初期フォルダもここ) |
device-replay/device-replay.commsim-struct | LineFrame 構造体定義のみの可搬ファイル(別プロジェクトへのインポート用) |
これらは CommSim.Sample の実行フォルダ内 samples/device-replay/ に同梱されています。実機は不要です。
ステップA:すぐ再生する(まず動かす)
- CommSim 本体で
samples/device-replay/device-replay.commsimを開く(「ファイル」→「ファイルから開く…」/Ctrl+O)。 - セッション「設備スタブ(リプレイ) (TCP 7100)」の「起動」をクリックして待ち受け状態にする。
- 「リプレイ/障害注入」タブ(セッションの 5 番目タブ)を開き、「シナリオを開く」で
device-replay.commscenarioを選ぶ。シナリオ名「設備の間欠障害(正常→異常→無応答)」とステップ数が表示される。 - モード=対話、速度=×5 を選び「再生」を押す(受信待ちの状態になる)。
- CommSim.Sample を起動し、上部の「動かすサンプル」で「リプレイ(設備の間欠障害)」を選ぶ。① ペインのポートが 7100 になる。
- ① ペインの「起動」(接続)→「デモ送信」を押す。① が Read ch0 を連投し、CommSim 本体が録画通りの応答を返す。
device-replay.commscenario を読み込むと、ステップ数(25 ステップ・Sequential)が表示される。モード=対話・速度(等倍〜即時/×5)を選んで「再生」。次のステップ C で使う障害注入は隣の独立タブにある。観察できること
- RXRead 要求(① → 本体)ポーリング
- TX値 100,101,102… 正常応答正常往復が 8〜9 回続く
- TX異常ステータス応答★間欠故障の瞬間
- --(無応答)以降は応答なし。① 側で受信が止まる=タイムアウト
A5 01 01 00 A7)ごとに「リプレイ送信」で録画どおりの応答が返る。値が …69→6A→6B→6C(105→106→107→108)と正常に増えた後、突然 A5 82 01 0E 36(異常ステータス)に切り替わる——これが「正常往復が続いた後の間欠故障」。何度再生しても同じ順序で同じ壊れ方になる(決定論再生)。再生中はヘッダに「リプレイ中」バッジ(停止ボタン付き)が出て、タブヘッダも「自動応答(停止中)」「リプレイ(▶ 実行中)」に変わる。無応答区間では、CommSim 本体が次の受信を 約 5 秒(ReceiveTimeoutMs)待ってから次へ進みます。一連の流れを目視できたら、速度を「即時」にして再生し直すと、異常箇所まで一瞬で到達でき、デバッグの反復が速くなります。
素モードも見てみる
シナリオ末尾には単方向のテレメトリ(機器 → アプリの周期送信)が入っています。モードを「素」に切り替えて再生すると、アプリの要求を待たずにテレメトリだけが時刻順に流れます(センサの周期送出のような一方向通信の再現)。
テレメトリの単方向送出は素モードに切り替えて確認するのが分かりやすいです(対話モードのまま最後まで再生すると、無応答のタイムアウトを経た後に流れます)。
ステップB:自分で録画してみる(実機なし)
同梱シナリオを再生できたら、次は自分でシナリオを作る番です。実機がなくても、CommSim をスタブとして動かし、CommSim.Sample から数往復させて録画できます。
- CommSim 本体で新規プロジェクト(または別のスタブセッション)を用意し、応答ルールやオートメーションで「機器役の応答」を設定して起動する。
- CommSim.Sample(または任意のクライアント)から数往復ぶんの要求を送る。
- CommSim 本体の「ログ」タブに送受信が記録されるのを確認する。
- ログペインのツールバーの「シナリオとして保存」をクリックする。
- 保存ダイアログで
.commscenarioとして保存する。 - 別セッション(または同じセッション)の「リプレイ」タブで「シナリオを開く」→「再生」すると、いま録画した往復が再現される。
実機がある場合は、プロキシ(中継)モードで実機との通信をそのまま記録してシナリオ化できます。詳しくは 中継とキャプチャ を参照してください。
ステップC:障害注入を足す
リプレイに障害注入を重ねると、テスト対象アプリが異常系(タイムアウト・リトライ・再接続)を正しく処理できるかを検証できます。「障害注入」タブ(6番目タブ)で「障害注入を有効にする」をオンにし、値を入れてから再生します。
障害設定は起動中でも変えた時点ですぐ反映されます(再起動は不要)。ただしシードだけは起動中は変更できません——乱数列の途中で種を変えると「同じシードなら同じ壊れ方」という決定論が崩れるためです。シードを変えるときはセッションを停止してください。
設定 → 観察できる症状
| 障害注入の設定 | アプリ役(CommSim.Sample)で観察できる症状 |
|---|---|
| 遅延 800ms + ゆらぎ 400ms | 応答が 0.8〜1.2 秒遅れて届く。アプリのタイムアウトが 1 秒未満なら「応答なし」扱いになる |
| ロス率 50% | 平均で 2 回に 1 回、応答フレームが届かない(送信に対し受信が欠ける)。リトライ実装の検証に使える |
| 切断(送信 5 回で) | 5 パケット目の送信直後に接続が切れ、アプリ側に接続断が観測される |
| シードを変える | ロス・ゆらぎの出方が変わる。同じシードなら毎回同じ壊れ方(決定論)=再現と多様性を切り替えられる |
- RXアプリ → CommSim:要求
- TXCommSim → アプリ:応答(遅延あり)遅延+ゆらぎを付加
- --(ドロップ)ロス率により送出をスキップ
- RXアプリ → CommSim:リトライアプリがタイムアウトを検知
自分のケースへの当てはめ方
このサンプルの流れを、自分の通信に応用するときの判断の糸口です。
| 問い | はい | いいえ |
|---|---|---|
| 対象の通信は要求 → 応答型か? | 対話モード(受信を待って応答を返す) | 一方向のテレメトリなら素モード(時刻順に送出) |
| 実機が手元にあるか? | プロキシで録画(実機との通信をそのまま記録) | スタブ+CommSim.Sample(または手動送信)で録画(ステップB) |
| チェックサム/可変長があるか? | 先に構造体定義を用意(Sum8 ならこのサンプルの構造体が参考になる) | そのまま録画・再生でよい |
「実機でしか出ない不具合」を 1 度だけプロキシで録画できれば、以降は実機なしで何度でも同じ条件を再現してデバッグできます。これがリプレイの一番の使いどころです。
次に読む
- リプレイ/障害注入 — 各設定項目・モード・速度・障害パラメータの詳細
- 中継とキャプチャ — 実機との通信を録画してシナリオ化する
- ← チュートリアル一覧に戻る