Если у вас есть 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
Decision Coverage анализирует операторы, которые представляют решения в исходном коде. Решения являются логическими выражениями, состоящими из условий и одного или нескольких логических операторов
C/C + + &&
или ||
. Условия в ветвящихся конструкциях (если/else, while, do-while) являются решениями. Decision Coverage определяет процент от общего количества результатов принятия решений, которые выполняются в коде во время выполнения. Используйте этот тип покрытия, чтобы определить, все ли решения, включая ветви, в вашем коде проверены.
Примечание
Определение Decision Coverage для DO-178C податливости отличается от определения Simulink Coverage. Для податливости Decision Coverage DO-178C, выберите Condition Decision
структурное покрытие для логических выражений, не содержащих & & или || операторов.
Decision Coverage = (Количество выполненных результатов решения/Общее количество результатов решения) * 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 |
Цикломатическая сложность является мерой структурной сложности кода, которая использует меру сложности Маккейба. Чтобы вычислить цикломатическую сложность кода, покрытие кода использует эту формулу:
N - количество решений в коде. o n - количество результатов для nth точка принятия решения. Покрытие кода добавляет 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, o 1 = 2, а o 2 = 2. Покрытие кода использует формулу с этими решениями и результатами и добавляет 1 для функции. Цикломатическая сложность для этого фрагмента кода:
c = (o 1 − 1) + (o 2 − 1) + 1 = (2 − 1) + (2 − 1) + 1 = 3
Реляционная граница покрытия кода исследует код, который имеет реляционные операции. Реляционные метрики покрытия кода границы совпадают с метриками для покрытия модели, как описано в Реляционном покрытии границы ( Simulink Coverage). Значения с фиксированной точкой в вашей модели являются целыми числами во время покрытия кода.