Если у вас есть лицензия 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++.
Для этого фрагмента кода цикломатическая сложность равняется 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). Значения фиксированной точки в вашей модели являются целыми числами во время покрытия кода.