Altifigence Academy

25 / 37 · Теория

План проверки, покрытие и независимый эталон

Различайте прохождение тестов и соответствие спецификации; включайте границы, пересечения условий и минимальные контрпримеры в план проверки.

План переводит спецификацию в проверяемые утверждения

Вместо «работает хорошо» запишите конкретные требования: состояние после reset, выход для нормального входа, хранение при остановке, обработка недопустимого входа, момент завершения. Свяжите каждое минимум с одним тестом и наблюдением, чтобы обнаружить пропуски.

Функциональное утверждениеВоздействиеНаблюдение
Приоритет resetreset и enable одновременно 1Следующее состояние начальное
Сохранение порядка данныхПоследовательные асимметричные шаблоныЗначение и valid всех выходов
Точный циклический переходЗначения около максимумаM-1→0, без выхода за диапазон
Хранение при остановкеВход меняется, accept=0Состояние неизменно
Перекрывающиеся шаблоны10101Обнаружение на 3-м и 5-м принятых входах

Зачем нужен независимый эталон

Копирование срезовСрез выбирает непрерывный диапазон битов вектора. Выбранный диапазон определяет ширину результата и порядок битов. Подробнее RTL сдвига в эталон может скопировать и ошибку индекса. Другое представление — целочисленное умножение с modulo или сравнение суффикса строки — помогает взаимной проверке. Однако само отличие формы не доказывает независимость; проверьте небольшие случаи вручную.

Покрытие — не число успехов

Покрытие выполненных строк кода не равно проверке функциональных случаев. Пересечения reset×enable, state×input, full×push×pop способны выявлять ошибки. Добавляйте редкие важные комбинации направленными тестами, не полагаясь лишь на случайность.

У комбинационной схемы с N входами можно перебрать 2N2^N наборов, но последовательностная схема имеет также временные последовательности входов. Нужно анализировать достижимость состояний и сохранение инвариантовИнвариант — условие, которое должно выполняться при любом допустимом выполнении. Например, число хранимых элементов FIFO глубиной 4 всегда находится между 0 и 4 включительно. на всех переходах. Конечный журнал успешных симуляций не является математическим доказательством для неограниченного времени.

Создавайте ожидания независимо из спецификации, а не копируйте реализацию. При сбое сохраняйте не только факт, но и предшествующие вход и состояние.

Четыре точки наблюдения при проверке
  1. Спецификация и стимулы: Выберите границы и сочетания условий
  2. Независимая эталонная модель: Вычислите ожидаемое значение и момент его действительности
  3. Сравнение с DUT: Сравните в один и тот же момент наблюдения
  4. Запись первого несовпадения: Сохраните минимальный контрпример и seed

Уменьшайте сбой и фиксируйте его

Сохраните прежнее состояние, вход, ожидание и факт первого mismatch. Уберите ненужные воздействия, оставив минимальный контрпример, затем исправляйте. Повторно запускайте не только изменённый тест, но и существующие проверки границ и сбросаСброс возвращает состояние к заданному начальному значению. Нужно определить, синхронен он или асинхронен и имеет ли приоритет над другими управляющими сигналами. Подробнее.

Попробуйте сами

Покрытие RTL-кода 100%, прошли 10 000 случайных тестов, но reset и enable ни разу не были 1 одновременно. Что нужно добавить?

Прочитать объяснение

Уточните это пересечение в спецификации и добавьте направленный тест с ненулевым начальным состоянием, выявляющий приоритет. Покрытие кода или число тестов не заменяет проверку конкретного функционального условия.

Выбор действует в этом браузере. Его можно изменить внизу страницы.