Coverage Cookbook/Метрики и процессы покрытия (Теория)/ru
- Метрики и процессы покрытия (en)
- Coverage Examples (Practice) (en)
- Requirements Writing Guidelines (en)
Содержание |
Покрытие/Что такое покрытие
Как говорится, "Что нельзя измерить, не может быть сделано." И это, конечно, верно в случаях, когда мы пытаемся определить прогресс верификации проекта или пытаемся ответить на вопрос: "Все готово?" Будь ваша методика моделирования основана на методе направленного тестирования или на настраиваемой псевдослучайной верификации, чтобы понять ход вашей верификации вам необходимо ответить на следующие вопросы:
- Все ли конструктивные особенности и требования, определенные в плане теста, были верифицированы?
- Есть ли такие строки кода или структуры в проекте, которые никогда не были использованы?
Покрытие — это метрика, которое мы используем в процессе моделирования, чтобы ответить на эти вопросы. Тем не менее, как только метрики покрытия стали неотъемлемой частью нашего процесса верификации, это дает возможности для более точных прогнозов работы проекта, а также предоставление средств для оптимизации нашего общего процесса верификации. На данном этапе мы можем задавать такие вопросы как:
- Когда мы тестировали функцию X, мы когда-нибудь проверяли функцию Y в то же самое время?
- Зависал ли наш прогресс верификации по неожиданным причинам?
- Существуют ли тесты, которые можно устранить, чтобы ускорить выполнение нашего набора регрессионных тестов и все ещё достигать наших целей покрытия?
Таким образом, покрытие — это метрика в моделировании, которое мы используем для измерения прогресса верификации и завершенности.
Наблюдаемость и управляемость
Основой для обсуждения покрытия является понимание понятий управляемость и наблюдаемость. Фактически, управляемость относится к возможности влиять или активировать встроенный конечный автомат, структуру, специальные строки кода или поведение в проекте, стимулируя различные порты ввода. Обратите внимание, что в то время как в теории моделирования тестовая программа имеет высокую управляемость портов ввода модели проекта во время верификации, она может иметь очень низкую управляемость внутренней структуры в рамках этой модели. В отличие от управления, наблюдение относится к возможности наблюдать эффекты конкретного внутреннего состояния конечного автомата, структуры или стимулированной строки кода. Таким образом, тестовая программа, как правило, имеет ограниченную возможность наблюдения, если она наблюдает только за внешними портами модели проекта (потому что внутренние сигналы и структуры часто неявно скрыты от тестовой программы).
Чтобы определить ошибку в проекте, используя подход моделирования тестовой программы, следующие условия должны выполняться:
- Тестовая программа должна создавать надлежащие входные воздействия для активации ошибки в проекте.
- Тестовая программа должна создавать надлежащие входные воздействия для распространения всех последствий (явлений), связанных с ошибкой в проекте, на выходной порт.
- Тестовая программа должна содержать монитор, который может обнаружить ошибку в проекте, которая была сначала активирована, затем распространена в точку, где может быть обнаружена.
Вполне возможно создать условия, где входной сигнал активирует ошибку проектирования, которая не распространяется на наблюдаемые выходные порты. В этих случаях принимается первое условие приведенное выше; однако, второе условие отсутствует, как показано на рисунке 1.
В целом, покрытие — это метрика, которое мы используем для определения качества управления тестовой программы. Например, покрытие кода может непосредственно определить строки кода, которые не были активированы из-за плохой управляемости исходящей от входного сигнала моделирования. Кроме того, функциональное покрытие может определить ожидаемые поведения, которые никогда не были активированы во время моделирования из-за плохой управляемости.
Хотя наши обсуждения в этом разделе сосредоточены на покрытии, важно отметить, что мы можем обратиться к проблемам наблюдения путем внедрения утверждений в модели проекта для обеспечения низкого уровня наблюдения и создания мониторов внутри и на выходных портах нашей тестовой программы для обеспечения высокого уровня наблюдения.
Резюме
Так что же такое покрытие? Проще говоря, покрытие — это метрика, которую мы используем для измерения прогресса верификации и её завершенности. Метрики покрытия говорят нам, какая часть проекта была активирована во время моделирования (то есть, качества управления тестовой программы). Или, что еще более важно, метрики покрытия определяют части проекта, которые не были активированы в процессе моделирования, что позволяет нам корректировать наш входной сигнал для улучшения верификации.
Существуют различные виды метрик покрытий доступные вам, и процесс, как их использовать описан в Coverage Cookbook examples.
Покрытие/Виды покрытия
Нет единственной метрики, которой было бы достаточно при полной характеризации процесса верификации. Например, мы могли бы добиться 100% покрытия кода во время регрессионного моделирования. Однако, это не означает, что 100% функциональности было верифицировано. Причиной этого является то, что покрытие кода не измеряет одновременное взаимодействие поведения внутри или между несколькими блоками проекта, а также не измеряет временной последовательности функциональных событий, которые происходят в проекте. Кроме того, мы могли бы достичь 100% функционального покрытия, но только достигнув 90% покрытия кода. Это может означать, что либо есть проблемы с точностью в нашей функциональной модели покрытия (то есть важное поведение в проекте отсутствовало в модели покрытия), или, возможно, некоторая функциональность была реализована так, что там не определены начальные значения (например, возможно, спецификация и план тестирования должны быть обновлены на некотором последующем шаге с изменением в требований). Таким образом, чтобы получить полное представление о ходе верификации проекта нам часто нужно несколько метрик.
Классификация покрытий
Перед началом рассмотрения видов метрик покрытия, полезно сперва определить различные классификации покрытий. В общем, существует несколько способов классифицировать покрытие, но два самых распространенных способа — это классифицировать их либо по методу создания (например, явные или неявные) или по происхождению источника (например, спецификация или реализация).
Например, функциональное покрытие является одним из примеров явной метрики покрытия, которая была определена вручную, а затем осуществляется инженером. В то же время, покрытие строк и покрытие выражений являются двумя примерами неявных метрик покрытия, так как их определение и реализация автоматически получены и извлечены из RTL описания.
Классификация пространства покрытия
Покрытие, связанное с двумя категориями, которые мы только что описали, может быть объединено, чтобы сформировать область покрытия, которое часто называют модель покрытие [1]. Например, точная область покрытия спецификации состоит из метрик покрытия, которые созданы вручную инженером, выделенные из требований проекта или спецификации. Другим видом точного покрытия является инструментарий, созданный инженером, который основан на скрытом поведении в реализации проекта, например, заполнение или опустошение стека, связанное с конкретным FIFO в RTL модели.
Кроме того, пространство покрытия неявной реализации состоит из метрик покрытия, которые автоматически извлекаются с помощью инструментов (таких как симулятор), и полученные от реализации проекта (например, RTL модели). Другая часть пространство покрытия неявной спецификации состоит из метрик покрытия, которые автоматически извлекаются с помощью инструмента, и полученные из спецификации проекта. Эта часть пространства покрытия в настоящее время область научных исследований, although there have been a few EDA tools recently emerge that attempt to automatically extract higher-level coverage properties by observing the effects of simulation patterns on an implementation. Отметим, что поведения более высокого уровня функционального не могут автоматически извлекаться из реализации в одиночку, поэтому они попадают в метриках покрытия, связанные с пространством покрытия неявной реализации.
Метрики покрытий
Существуют две основные формы метрик покрытия используемые сегодня в производстве:
- Метрики покрытия кода (Code Coverage Metrics (Implicit coverage))
- Метрики функционального покрытия (Functional Coverage/Assertion Coverage Metrics (Explicit coverage))
Ссылки
[1] A. Piziali, Functional Verification Coverage Measurement and Analysis, Kluwer Academic Publishers, 2004.