Типы покрытия кода

Если у вас есть 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 для покрытия кода

Decision Coverage анализирует операторы, которые представляют решения в исходном коде. Решениями являются Булевы выражения, состоявшие из условий и одного или нескольких логических операторов C/C++ && или ||. Условия в переходящих построениях (если/еще, в то время как, делают - в то время как) являются решениями. Decision Coverage определяет процент общего количества результатов решения упражнения кода во время выполнения. Используйте этот тип покрытия, чтобы определить, тестируются ли все решения, включая ответвления, в вашем коде.

Примечание

Определение Decision Coverage для DO - 178C соответствие отличается от определения Simulink Coverage. Для соответствия Decision Coverage с DO - 178C, выберите уровень структурного покрытия Condition Decision для Булевых выражений, не содержащих && или || операторы.

Decision Coverage = (Количество выполняемых результатов решения / Общее количество результатов решения) *100

Пример Decision Coverage

Этот фрагмент кода содержит три решения:

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) для Покрытия кода

Измененное условие/Decision Coverage (MCDC) является степенью, до которой условия в рамках решений независимо осуществлены во время выполнения кода.

  • Все условия в рамках решений были оценены ко всем возможным исходам, по крайней мере, однажды.

  • Каждое условие в рамках решения независимо влияет на результат решения.

Покрытие MCDC = (Количество условий, оцененных ко всем возможным исходам, влияющим на результат решения / Общее количество условий в рамках решений) *100

Измененный Пример Условия/Decision Coverage

Для этого решения:

X || ( Y && Z )

следующий набор тестов поставляет 100%-е покрытие MCDC.

 XYZ

Тест № 1

001

Тест № 2

010

Тест № 3

011

Тест № 4

101

Цикломатическая сложность для покрытия кода

Цикломатическая сложность является мерой структурной сложности кода, который использует меру по сложности Маккейба. Чтобы вычислить цикломатическую сложность кода, покрытие кода использует эту формулу:

c=1N(on1)

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.

Реляционный контур для покрытия кода

Реляционное граничное покрытие кода исследует код, который начинает реляционные операции. Реляционные граничные метрики покрытия кода выравниваются с теми для покрытия модели, как описано в Реляционном Граничном Покрытии. Значения фиксированной точки в вашей модели являются целыми числами во время покрытия кода.

Функциональное покрытие

Функциональное покрытие определяет, были ли все функции вашего кода вызваны во время симуляции. Например, если существует десять уникальных функций в вашем коде, функциональные проверки покрытия, если все десять функций были выполнены, по крайней мере, однажды во время симуляции.

Покрытие вызова функции

Покрытие вызова функции определяет, были ли все сайты вызова функции в вашем коде выполнены во время симуляции. Например, если функции вызваны двадцать раз в вашем коде, проверки покрытия вызова функции, если все двадцать вызовов функции были выполнены во время симуляции.

Для просмотра документации необходимо авторизоваться на сайте