25 / 37 · Теория
План проверки, покрытие и независимый эталон
Различайте прохождение тестов и соответствие спецификации; включайте границы, пересечения условий и минимальные контрпримеры в план проверки.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
План переводит спецификацию в проверяемые утверждения
Вместо «работает хорошо» запишите конкретные требования: состояние после reset, выход для нормального входа, хранение при остановке, обработка недопустимого входа, момент завершения. Свяжите каждое минимум с одним тестом и наблюдением, чтобы обнаружить пропуски.
| Функциональное утверждение | Воздействие | Наблюдение |
|---|---|---|
| Приоритет reset | reset и enable одновременно 1 | Следующее состояние начальное |
| Сохранение порядка данных | Последовательные асимметричные шаблоны | Значение и valid всех выходов |
| Точный циклический переход | Значения около максимума | M-1→0, без выхода за диапазон |
| Хранение при остановке | Вход меняется, accept=0 | Состояние неизменно |
| Перекрывающиеся шаблоны | 10101 | Обнаружение на 3-м и 5-м принятых входах |
Зачем нужен независимый эталон
Копирование срезовСрез выбирает непрерывный диапазон битов вектора. Выбранный диапазон определяет ширину результата и порядок битов. Подробнее RTL сдвига в эталон может скопировать и ошибку индекса. Другое представление — целочисленное умножение с modulo или сравнение суффикса строки — помогает взаимной проверке. Однако само отличие формы не доказывает независимость; проверьте небольшие случаи вручную.
Покрытие — не число успехов
Покрытие выполненных строк кода не равно проверке функциональных случаев. Пересечения reset×enable, state×input, full×push×pop способны выявлять ошибки. Добавляйте редкие важные комбинации направленными тестами, не полагаясь лишь на случайность.
У комбинационной схемы с N входами можно перебрать наборов, но последовательностная схема имеет также временные последовательности входов. Нужно анализировать достижимость состояний и сохранение инвариантовИнвариант — условие, которое должно выполняться при любом допустимом выполнении. Например, число хранимых элементов FIFO глубиной 4 всегда находится между 0 и 4 включительно. на всех переходах. Конечный журнал успешных симуляций не является математическим доказательством для неограниченного времени.
Создавайте ожидания независимо из спецификации, а не копируйте реализацию. При сбое сохраняйте не только факт, но и предшествующие вход и состояние.
- Спецификация и стимулы: Выберите границы и сочетания условий
- Независимая эталонная модель: Вычислите ожидаемое значение и момент его действительности
- Сравнение с DUT: Сравните в один и тот же момент наблюдения
- Запись первого несовпадения: Сохраните минимальный контрпример и seed
Уменьшайте сбой и фиксируйте его
Сохраните прежнее состояние, вход, ожидание и факт первого mismatch. Уберите ненужные воздействия, оставив минимальный контрпример, затем исправляйте. Повторно запускайте не только изменённый тест, но и существующие проверки границ и сбросаСброс возвращает состояние к заданному начальному значению. Нужно определить, синхронен он или асинхронен и имеет ли приоритет над другими управляющими сигналами. Подробнее.
Попробуйте сами
Покрытие RTL-кода 100%, прошли 10 000 случайных тестов, но reset и enable ни разу не были 1 одновременно. Что нужно добавить?
Прочитать объяснение
Уточните это пересечение в спецификации и добавьте направленный тест с ненулевым начальным состоянием, выявляющий приоритет. Покрытие кода или число тестов не заменяет проверку конкретного функционального условия.