Если у вас есть лицензия 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++ &&
или ||
. Условия в переходящих построениях (если/еще, в то время как, делают - в то время как) являются решениями. 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.
Реляционное граничное покрытие кода исследует код, который начинает реляционные операции. Реляционные граничные метрики покрытия кода выравниваются с теми для покрытия модели, как описано в Реляционном Граничном Покрытии (Simulink Coverage). Значения фиксированной точки в вашей модели являются целыми числами во время покрытия кода.