Метрики покрытия кода Simulink

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

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.

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

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

Похожие темы