Coverage Cookbook/Метрики и процессы покрытия (Теория)/ru — различия между версиями
(→Наблюдение и управление) |
ANA (обсуждение | вклад) м (мелкие исправления стиля) |
||
Строка 10: | Строка 10: | ||
ответить на следующие вопросы: | ответить на следующие вопросы: | ||
− | * | + | * Все ли конструктивные особенности и требования, определенные в плане теста, были верифицированы? |
− | * | + | * Есть ли такие строки кода или структуры в проекте, которые никогда не были использованы? |
− | Покрытие | + | Покрытие — это измерения, которое мы используем в процессе моделирования, чтобы ответить на эти |
− | вопросы. Тем не менее, как только измерения покрытия стали неотъемлемой частью нашего | + | вопросы. Тем не менее, как только измерения покрытия стали неотъемлемой частью нашего процесса верификации, |
это дает возможности для более точных прогнозов работы проекта, а также предоставление | это дает возможности для более точных прогнозов работы проекта, а также предоставление | ||
средств для оптимизации нашего общего процесса верификации. На данном этапе мы можем задавать такие вопросы как: | средств для оптимизации нашего общего процесса верификации. На данном этапе мы можем задавать такие вопросы как: | ||
− | * Когда мы тестировали функцию'' X'', мы когда-нибудь проверяли функцию'' Y'' в то же самое время? | + | * Когда мы тестировали функцию ''X'', мы когда-нибудь проверяли функцию ''Y'' в то же самое время? |
* Зависал ли наш прогресс верификации по неожиданным причинам? | * Зависал ли наш прогресс верификации по неожиданным причинам? | ||
− | * Существуют ли тесты, которые | + | * Существуют ли тесты, которые можно устранить, чтобы ускорить выполнение нашего набора регрессионных тестов (regression suite) и все ещё достигать наших целей покрытия? |
+ | |||
+ | Таким образом, покрытие — это измерение в моделировании, которое мы используем для измерения прогресса верификации и завершенности. | ||
− | |||
− | |||
<!-- == Coverage/What is coverage== | <!-- == Coverage/What is coverage== | ||
Строка 39: | Строка 39: | ||
Hence, coverage is a simulation metric we use to measure verification progress and completeness. --> | Hence, coverage is a simulation metric we use to measure verification progress and completeness. --> | ||
− | === | + | === Наблюдаемость и управляемость === |
− | Основой для обсуждения покрытия является понимание понятий '' | + | Основой для обсуждения покрытия является понимание понятий ''управляемость'' и ''наблюдаемость''. Фактически, |
− | + | управляемость относится к возможности влиять или активировать встроенный конечный автомат, структуру, специальные | |
строки кода или поведение в проекте, стимулируя различные порты ввода. Обратите внимание, что в то время как | строки кода или поведение в проекте, стимулируя различные порты ввода. Обратите внимание, что в то время как | ||
в теории моделирования тестовая программа имеет высокую управляемость портов ввода модели проекта во время | в теории моделирования тестовая программа имеет высокую управляемость портов ввода модели проекта во время | ||
Строка 71: | Строка 71: | ||
[[Файл:300px-WiC-1.png|300px|frame|center|Рисунок 1. Плохое наблюдение и управление не попадает ошибки]] | [[Файл:300px-WiC-1.png|300px|frame|center|Рисунок 1. Плохое наблюдение и управление не попадает ошибки]] | ||
− | В целом, покрытие | + | В целом, покрытие — это измерение, которое мы используем для определения качества управления тестовой программы. |
Например, покрытие кода может непосредственно определить строки кода, которые не были активированы из-за плохой управляемости исходящей от входного сигнала моделирования. Кроме того, функциональное покрытие может определить ожидаемые поведения, которые никогда не были активированы во время моделирования из-за плохой управляемости. | Например, покрытие кода может непосредственно определить строки кода, которые не были активированы из-за плохой управляемости исходящей от входного сигнала моделирования. Кроме того, функциональное покрытие может определить ожидаемые поведения, которые никогда не были активированы во время моделирования из-за плохой управляемости. | ||
− | Хотя наши обсуждения в этом разделе сосредоточены на покрытии, важно отметить, что мы можем обратиться к проблемам наблюдения путем внедрения {{Кр|assertions}} в модели проекта для обеспечения низкого уровня наблюдения и создания мониторов внутри и на выходных портах нашей тестовой программы для обеспечения высокого уровня наблюдения. | + | Хотя наши обсуждения в этом разделе сосредоточены на покрытии, важно отметить, что мы можем обратиться к проблемам наблюдения путем внедрения {{Кр|assertions}} (утверждения) в модели проекта для обеспечения низкого уровня наблюдения и создания мониторов внутри и на выходных портах нашей тестовой программы для обеспечения высокого уровня наблюдения. |
<!-- In general, coverage is a metric we use to meaure the controllability quality of a testbench. For example, code coverage can directly identify lines of code that were never activated due to poor controllability issues with the simulation input stimulus. Similarly, functional coverage can identify expected behaviors that were never activated during a simulation run due to poor controllability. | <!-- In general, coverage is a metric we use to meaure the controllability quality of a testbench. For example, code coverage can directly identify lines of code that were never activated due to poor controllability issues with the simulation input stimulus. Similarly, functional coverage can identify expected behaviors that were never activated during a simulation run due to poor controllability. | ||
Строка 81: | Строка 81: | ||
=== Резюме === | === Резюме === | ||
− | Так что же такое покрытие? Проще говоря, покрытие | + | Так что же такое покрытие? Проще говоря, покрытие — это измерение в моделировании, которое мы используем для измерения прогресса верификации и её завершенности. Измерение покрытия говорит нам, какая часть проекта была активирована во время моделирования (то есть, качества управления тестовой программы). Или, что еще более важно, измерение покрытия определяет части проекта, которые не были активированы в процессе моделирования, что позволяет нам корректировать наш входной сигнал для улучшения верификации. |
− | Существуют различные [https://verificationacademy.com/cookbook/Coverage/Kinds_of_coverage виды измерений покрытий] доступные вам, и | + | Существуют различные [https://verificationacademy.com/cookbook/Coverage/Kinds_of_coverage виды измерений покрытий] доступные вам, и процесс, как их использовать описан в [https://verificationacademy.com/cookbook/Coverage/Testplan_to_functional_coverage#Functional_Coverage_Examples Coverage Cookbook examples]. |
− | процесс, как их использовать описан в [https://verificationacademy.com/cookbook/Coverage/Testplan_to_functional_coverage#Functional_Coverage_Examples Coverage Cookbook examples]. | + | |
<!-- === Summary === | <!-- === Summary === | ||
Версия 21:12, 3 марта 2013
- Метрики и процессы покрытия (en)
- Coverage Examples (Practice) (en)
- Requirements Writing Guidelines (en)
Содержание |
Покрытие/Что такое покрытие
Как говорится, "Что нельзя измерить, не может быть сделано." И это, конечно, верно в случаях, когда мы пытаемся определить прогресс верификации проекта или пытаемся ответить на вопрос: "Все готово?" Будь ваша методика моделирования основана на методе направленного тестирования или на ограниченно случайной верификации, чтобы понять ход вашей верификации вам необходимо ответить на следующие вопросы:
- Все ли конструктивные особенности и требования, определенные в плане теста, были верифицированы?
- Есть ли такие строки кода или структуры в проекте, которые никогда не были использованы?
Покрытие — это измерения, которое мы используем в процессе моделирования, чтобы ответить на эти вопросы. Тем не менее, как только измерения покрытия стали неотъемлемой частью нашего процесса верификации, это дает возможности для более точных прогнозов работы проекта, а также предоставление средств для оптимизации нашего общего процесса верификации. На данном этапе мы можем задавать такие вопросы как:
- Когда мы тестировали функцию X, мы когда-нибудь проверяли функцию Y в то же самое время?
- Зависал ли наш прогресс верификации по неожиданным причинам?
- Существуют ли тесты, которые можно устранить, чтобы ускорить выполнение нашего набора регрессионных тестов (regression suite) и все ещё достигать наших целей покрытия?
Таким образом, покрытие — это измерение в моделировании, которое мы используем для измерения прогресса верификации и завершенности.
Наблюдаемость и управляемость
Основой для обсуждения покрытия является понимание понятий управляемость и наблюдаемость. Фактически, управляемость относится к возможности влиять или активировать встроенный конечный автомат, структуру, специальные строки кода или поведение в проекте, стимулируя различные порты ввода. Обратите внимание, что в то время как в теории моделирования тестовая программа имеет высокую управляемость портов ввода модели проекта во время верификации, она может иметь очень низкую управляемость внутренней структуры в рамках этой модели. В отличие от управления, наблюдение относится к возможности наблюдать эффекты конкретного внутреннего состояния конечного автомата, структуры или стимулированной строки кода. Таким образом, тестовая программа, как правило, имеет ограниченную возможность наблюдения, если она наблюдает только за внешними портами модели проекта (потому что внутренние сигналы и структуры часто неявно скрыты от тестовой программы).
Чтобы определить ошибку в проекте, используя подход моделирования тестовой программы, следующие условия должны выполняться:
- Тестовая программа должна создавать надлежащие входящие сигналы для активации ошибки проектирования.
- Тестовая программа должна создавать надлежащие входящие сигналы для распространения всех последствий, связанных с ошибкой проектирования в выходной порт.
- Тестовая программа должна содержать монитор, который может обнаружить ошибку проектирования, который был впервые активирован, затем распространен в точку обнаружения.
Вполне возможно создать условия, где входной сигнал активирует ошибку проектирования, которая не распространяется на наблюдаемые выходные порты. В этих случаях принимается первое условие приведенное выше; однако, второе условие отсутствует, как показано на рисунке 1.
В целом, покрытие — это измерение, которое мы используем для определения качества управления тестовой программы. Например, покрытие кода может непосредственно определить строки кода, которые не были активированы из-за плохой управляемости исходящей от входного сигнала моделирования. Кроме того, функциональное покрытие может определить ожидаемые поведения, которые никогда не были активированы во время моделирования из-за плохой управляемости.
Хотя наши обсуждения в этом разделе сосредоточены на покрытии, важно отметить, что мы можем обратиться к проблемам наблюдения путем внедрения assertions (утверждения) в модели проекта для обеспечения низкого уровня наблюдения и создания мониторов внутри и на выходных портах нашей тестовой программы для обеспечения высокого уровня наблюдения.
Резюме
Так что же такое покрытие? Проще говоря, покрытие — это измерение в моделировании, которое мы используем для измерения прогресса верификации и её завершенности. Измерение покрытия говорит нам, какая часть проекта была активирована во время моделирования (то есть, качества управления тестовой программы). Или, что еще более важно, измерение покрытия определяет части проекта, которые не были активированы в процессе моделирования, что позволяет нам корректировать наш входной сигнал для улучшения верификации.
Существуют различные виды измерений покрытий доступные вам, и процесс, как их использовать описан в Coverage Cookbook examples.
Покрытие/Виды покрытия
Ни одного одиночного измерения недостаточно при полностью characterizing процессе верификации. Например, мы могли бы добиться 100% покрытия кода во время нашей simulation regressions. Однако, это не означает, что 100% функциональности было верифицировано. Причиной этого является то, что покрытие кода не измеряет одновременное взаимодействие поведения внутри или между несколькими блоками проекта, а также не измеряет временной последовательности функциональных событий, которые происходят в проекте. Кроме того, мы могли бы достичь 100% функционального покрытия, но только достигнув 90% покрытия кода. Это может означать, что либо есть проблемы с точностью в нашей функциональной модели покрытия (то есть важное поведение в проекте отсутствовало в модели покрытия), или, возможно, некоторая функциональность была реализована так, что там не определены начальные значения (например, возможно, спецификация и план тестирования должны быть обновлены with some late stage change in the requirements). Таким образом, чтобы получить полное представление о ходе верификации проекта нам часто нужно несколько измерений.
Классификация покрытий
Например, функциональное покрытие является одним из примеров явного измерения покрытия, которое было определено вручную, а затем осуществляется инженером. В то же время, линейное покрытие и expression покрытие являются двумя примерами неявных измерений покрытия, так как их определение и реализация автоматически получены и извлечены из RTL описания.
Классификация пространства покрытия
Покрытие, связанное с двумя категориями, которые мы только что описали, может быть объединено, чтобы сформировать покрытие пространства, которое часто называют покрытие модели. [1] Например, explicit specification пространство покрытия состоит из измерений покрытия, которые созданы вручную инженером, вытекают из требований проекта или спецификации. Другим видом явного покрытия является приспособление, созданное инженером, которое основано на behavior encapsulated by the design implemention, таких как заполнение или опустошение событий, связанных с конкретным FIFO в RTL модели.
Кроме того, implicit implementation пространство покрытия состоит из измерений покрытия, которые автоматически извлекаются с помощью инструментов (таких как симулятор), и полученные от реализации проекта (например, RTL модели). Другая часть implicit specification пространство покрытия состоит из измерений покрытия, которые автоматически извлекаются с помощью инструмента, и полученные из спецификации проекта. Эта часть пространства покрытия в настоящее время область научных исследований, 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. Отметим, что поведения более высокого уровня функционального не могут автоматически извлекаться из реализации в одиночку, поэтому они попадают в измерения покрытия, связанные с implicit 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.