Этот пример показывает приложение анализа покрытия к простой проблеме проектирования и сравнивает требования покрытия для различных метрик.
В этом примере используйте MATLAB® Function в модели Stateflow® как среда, чтобы выполнить простой алгоритм для определения, когда два прямоугольника пересекутся.
Алгоритм использует координаты для прямоугольников в форме источника, высоты и ширины, объединенной вместе в четырех векторах элемента. Алгоритм берет два прямоугольных вектора в качестве входных параметров и возвращает один булев выходной параметр, чтобы указать, пересекаются ли прямоугольники.
Логика этого алгоритма реализована в функции rct_intersect. Первый оператор if проверяет на перекрытие оси Y, то есть, если первый прямоугольник полностью ниже второго, или второе полностью ниже первого. Второй оператор if проверяет на перекрытие оси X, то есть, если первый прямоугольник полностью справа от второго, или второе полностью справа от первого.
И Y и перекрытие оси X должны присутствовать для прямоугольников, чтобы пересечься. Если перекрытие оси Y не является существующим перекрытием оси X, не проверяется. Эта логика может быть структурирована только с помощью одного оператора if или ворвана следующие операторы if.
Тестовые требования, чтобы достигнуть конкретного уровня покрытия строго зависят от структуры закодированной реализации. Полное покрытие оператора требует по крайней мере двух тестов. Один тест не должен накладываться в оси Y, приводящей к выполнению первого оператора out = 0;
. Другой тест должен наложиться в оси Y, но не в оси X, приводящей к выполнению второго оператора out = 0;
.
Эта модель включает простую функцию визуализации, чтобы показать относительные положения обоих из прямоугольников, используемых в каждом тесте.
Просмотрите отчет HTML путем прокрутки к информации о покрытии, отображенной для функции MATLAB.
Полный Decision Coverage требует истины и ложного результата для каждого оператора if. Полный Decision Coverage еще выполняется оператор для каждого оператора if (явный или подразумеваемый), который улучшает вероятность нахождения ошибок.
Этот пример требует трех тестов для полного Decision Coverage. Один тест тестирует истинный результат на оператор if верхнего уровня. Два теста тестируют истинные и ложные результаты на вложенный оператор if, когда оператор if верхнего уровня является ложным.
Заметьте, что оба ключевых слова if
окрашены в зеленый, потому что они были оба протестированы истина и ложь.
Полное условие и покрытие MCDC требуют 5 тестов. Этот уровень покрытия менее чувствителен к модификациям, которые заканчиваются, когда операторы if заменяются && и операторами в условиях. Требования покрытия, чтобы полностью удовлетворить эту метрику были бы тем же самым, даже если бы было только один оператор if.
Эти тесты имеют ясную симметрию с этими двумя тестами для покрытия оператора. Каждый - X или зеркальное отображение оси Y теста покрытия оператора. Это гарантирует независимую верификацию обоих условий в каждом из операторов if.
Заметьте, что целое выражение для каждого оператора if окрашено в зеленый.
Закройте модель в качестве примера.