Если у вас есть Embedded Coder®, Simulink® Coverage™ может выполнить несколько типов анализа покрытия кода для моделей в программном обеспечении в режиме (SIL) цикла, процессоре в режиме (PIL) цикла, и для кода в поддерживаемых Блоках s-function.
Покрытие оператора определяет количество операторов исходного кода, которые выполняются, когда код запускается. Используйте этот тип покрытия, чтобы определить, был ли каждый оператор в программе вызван, по крайней мере, однажды.
Покрытие оператора = (Количество выполняемых операторов / Общее количество операторов) *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++ &&
или ||
. Условия в переходящих построениях (если/еще, в то время как, делают - в то время как) являются решениями. 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" );
Измененное условие/Decision Coverage (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 является количеством результатов для n th момент принятия решения. Покрытие кода добавляет 1 к номеру сложности для каждой функции C/C++.
Для этого фрагмента кода:
void evalNum( int x ){ if (x > 0) printf( "x is positive" ); else if (x < 0) printf( "x is negative" ); else printf( "x is 0" ); }
цикломатическая сложность равняется 3.
Реляционное граничное покрытие кода исследует код, который начинает реляционные операции. Реляционные граничные метрики покрытия кода выравниваются с теми для покрытия модели, как описано в Реляционном Граничном Покрытии. Значения фиксированной точки в вашей модели являются целыми числами во время покрытия кода.
Функциональное покрытие определяет, были ли все функции вашего кода вызваны во время симуляции. Например, если существует десять уникальных функций в вашем коде, функциональные проверки покрытия, если все десять функций были выполнены, по крайней мере, однажды во время симуляции.
Покрытие вызова функции определяет, были ли все сайты вызова функции в вашем коде выполнены во время симуляции. Например, если функции вызваны двадцать раз в вашем коде, проверки покрытия вызова функции, если все двадцать вызовов функции были выполнены во время симуляции.