25 / 37 · 概念
検証計画・カバレッジ・独立した参照モデル
テスト通過と仕様充足を区別し、境界・交差条件・最小反例を検証計画に結び付けます。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
検証計画は仕様を検査可能な主張へ変えます
「正しく動く」の代わりに、リセット後状態・正常入力の出力・停止中の保持・不許可入力の扱い・完了時点など、具体的な主張を書きます。各主張に一つ以上のテストと観測点を結ぶと、抜けた条件を見つけやすくなります。
| 機能的主張 | 刺激 | 観測 |
|---|---|---|
| リセット優先 | reset と enable を同時に 1 | 次状態が初期値 |
| データ順序の保存 | 非対称パターンの連続入力 | 全出力の値と valid |
| 正確な境界循環 | 最大状態の前後 | M-1→0、範囲外値なし |
| 停止中の保持 | 入力を変更し accept=0 | 記憶状態が不変 |
| 重なるパターンを許容 | 10101 | 第 3・第 5 受入入力で検出 |
独立した参照モデルが必要な理由
シフト RTL と同じスライススライス ベクトルから連続するビット範囲を選ぶ演算です。選択範囲が結果の幅とビット順を定めます。 詳しく見るを参照モデルに写すと、インデックスの誤りも写す場合があります。整数の乗算・剰余や文字列の末尾比較など、別表現で仕様を実装すると相互確認に役立ちます。ただし表現が違うだけで独立性が証明されるわけではないので、小例を手で確認します。
カバレッジは通過回数ではありません
コード行が実行されたことと、機能条件を検査したことは異なります。reset×enable、state×input、full×push×pop などの交差条件が誤りを示す場合があります。ランダムだけに任せず、まれで重要な組合せを指向性テストで加えてください。
入力 N 個の組合せ回路は 組を全数検査できますが、順序回路には入力の時間列もあります。状態の到達可能性と、全遷移で不変条件不変条件 許可されたすべての実行で、常に真でなければならない条件です。例えば深さ 4 の FIFO の格納数は常に 0 以上 4 以下です。が保たれるかを解析します。有限のシミュレーション通過記録を、無制限時間の数学的証明と表現してはいけません。
実装を写した期待値ではなく、仕様から独立して正解を作ります。失敗時は実値だけでなく、直前の入力と状態も記録します。
- 仕様・刺激: 境界と交差条件を選ぶ
- 独立した参照モデル: 期待値と有効時点を計算
- DUT と比較: 同じ観測時点で照合
- 最初の不一致を記録: 最小反例とシードを保存
失敗を小さくして記録する
最初の不一致の以前の状態・入力・期待値・実値を保存します。不要な刺激を減らして最小反例にしてから修正します。修正したテストだけでなく、既存の境界・リセットリセット 状態を仕様で定めた初期値に戻す制御です。同期式か非同期式か、他の制御より優先されるかを合わせて定めます。 詳しく見る検査も回帰実行してください。
自分で考えてみましょう
RTL コードカバレッジが 100% でランダムテスト一万回が通りましたが、reset と enable が同時に 1 の例がありません。何を補いますか。
解説を見る
その交差条件を仕様で確認し、優先順位が現れる非ゼロ初期状態からの指向性テストを追加します。コードカバレッジや回数は、特定の機能条件の検証を代替しません。