При наличии лицензии Simulink ® Coverage™ можно запустить моделирование SIL или PIL, которое создает метрики покрытия кода для сгенерированного кода модели. Моделирование выполняет несколько типов анализа покрытия кода.
Покрытие инструкций определяет количество инструкций исходного кода, которые выполняются при выполнении кода. Используйте этот тип покрытия, чтобы определить, была ли хотя бы один раз вызвана каждая инструкция в программе.
Охват ведомостей = (количество выполненных ведомостей/общее количество ведомостей) * 100
Этот фрагмент кода содержит пять инструкций. Для достижения 100% -ного покрытия ведомостей необходимо как минимум три тестовых случая. В частности, тесты с положительными значениями x, отрицательными значениями x и нулевыми значениями x.
if (x > 0) printf( "x is positive" ); else if (x < 0) printf( "x is negative" ); else printf( "x is 0" );
Состояние покрытия анализирует операторы, которые включают условия в исходный код. Условия - это логические выражения C/C + +, содержащие операторы отношений (<, >, <=, или >=), операторы уравнений (!= или ==) или логические операторы отрицания (!), но которые не содержат логических операторов (&& или ||). Этот тип покрытия определяет, было ли каждое условие оценено для всех возможных результатов хотя бы один раз.
Охват условий = (Количество выполненных результатов условий/Общее количество результатов условий) * 100
В этом выражении:
y = x<=5 && x!=7;
существуют следующие условия:
x<=5 x!=7
Покрытие решений анализирует операторы, которые представляют решения в исходном коде. Решения - это логические выражения, состоящие из условий и одного или нескольких логических операторов C/C + +&& или ||. Условия в разветвленных конструкциях (if/else, while, do-while) являются решениями. Охват принятия решений определяет процент от общего числа результатов принятия решений, выполняемых кодом во время выполнения. Этот тип покрытия используется для проверки всех решений, включая филиалы, в коде.
Примечание
Определение покрытия по решению для DO-178C соответствия отличается от определения покрытия по Simulink. Для обеспечения соответствия покрытия принятия решений DO-178C выберите Condition Decision структурный уровень покрытия для логических выражений, не содержащих операторов & & или | |.
Охват решений = (Число выполненных решений/Общее число решений) * 100
Этот фрагмент кода содержит три решения:
y = x<=5 && x!=7; // decision #1 if( x > 0 ) // decision #2 printf( "decision #2 is true" ); else if( x < 0 && y ) // decision #3 printf( "decision #3 is true" ); else printf( "decisions #2 and #3 are false" );
Модифицированное покрытие условий/решений (MCDC) - это степень, в которой условия внутри решений независимо выполняются во время выполнения кода.
Все условия в рамках решений оценивались по всем возможным результатам по крайней мере один раз.
Каждое условие в рамках решения независимо влияет на результат решения.
Охват MCDC = (Количество условий, оцениваемых для всех возможных результатов, влияющих на результат решения/Общее количество условий в решениях) * 100
За это решение:
X || ( Y && Z )
следующий набор тестов обеспечивает 100% покрытие MCDC.
| X | Y | Z | |
|---|---|---|---|
Тестовый пример № 1 | 0 | 0 | 1 |
Тестовый вариант № 2 | 0 | 1 | 0 |
Тестовый пример № 3 | 0 | 1 | 1 |
Тестовый вариант № 4 | 1 | 0 | 1 |
Цикломатическая сложность - мера структурной сложности кода, использующая меру сложности Маккейба. Для вычисления цикломатической сложности кода покрытие кода использует следующую формулу:
1)
N - количество решений в коде. on - количество результатов для n-ой точки решения. Покрытие кода добавляет 1 к номеру сложности для каждой функции C/C + +.
Для этого фрагмента кода цикломатическая сложность равна 3:
void evalNum(int x)
{
if (x > 0) // decision #1
printf( "x is positive" );
else if (x < 0) // decision #2
printf( "x is negative" );
else
printf( "x is 0" );
}
Код содержит одну функцию, имеющую две точки решения. Каждый пункт принятия решения имеет два результата. Используя предыдущую формулу, N равно 2, o1 равно 2 и o2 равно 2. Покрытие кода использует формулу с этими решениями и результатами и добавляет 1 для функции. Цикломатическая сложность для этого фрагмента кода:
c = (o1 − 1) + (o2 − 1) + 1 = (2 − 1) + (2 − 1) + 1 = 3
Покрытие реляционного граничного кода проверяет код, который имеет реляционные операции. Метрики покрытия реляционного граничного кода совпадают с метриками покрытия модели, как описано в разделе Покрытие реляционного граничного кода (покрытие Simulink). Фиксированные значения в модели являются целыми числами во время покрытия кода.