Если у вас есть 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 является количеством результатов для 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
Реляционное граничное покрытие кода исследует код, который начинает реляционные операции. Реляционные граничные метрики покрытия кода выравниваются с теми для покрытия модели, как описано в Реляционном Граничном Покрытии. Значения фиксированной точки в вашей модели являются целыми числами во время покрытия кода.
Функциональное покрытие определяет, были ли все функции вашего кода вызваны в процессе моделирования. Например, если существует десять уникальных функций в вашем коде, функциональные проверки покрытия, если все десять функций были выполнены, по крайней мере, однажды в процессе моделирования.
Покрытие вызова функции определяет, были ли все сайты вызова функции в вашем коде выполнены в процессе моделирования. Например, если функции вызваны двадцать раз в вашем коде, проверки покрытия вызова функции, если все двадцать вызовов функции были выполнены в процессе моделирования.