exponenta event banner

Метрики покрытия кода 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

Покрытие по решению для покрытия по коду

Покрытие решений анализирует операторы, которые представляют решения в исходном коде. Решения - это логические выражения, состоящие из условий и одного или нескольких логических операторов C/C + +&& или ||. Условия в разветвленных конструкциях (if/else, while, do-while) являются решениями. Охват принятия решений определяет процент от общего числа результатов принятия решений, выполняемых кодом во время выполнения. Этот тип покрытия используется для проверки всех решений, включая филиалы, в коде.

Примечание

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

Охват решений = (Число выполненных решений/Общее число решений) * 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" );

Модифицированное условие/покрытие принятия решений (MCDC) для покрытия кода

Модифицированное покрытие условий/решений (MCDC) - это степень, в которой условия внутри решений независимо выполняются во время выполнения кода.

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

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

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

Пример покрытия измененным условием/решением

За это решение:

X || ( Y && Z )

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

 XYZ

Тестовый пример № 1

001

Тестовый вариант № 2

010

Тестовый пример № 3

011

Тестовый вариант № 4

101

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

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

c=∑1N (на 1)

N - количество решений в коде. on - количество результатов для n-ой точки решения. Покрытие кода добавляет 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, o1 равно 2 и o2 равно 2. Покрытие кода использует формулу с этими решениями и результатами и добавляет 1 для функции. Цикломатическая сложность для этого фрагмента кода:

c = (o1  − 1) + (o2  − 1) + 1 = (2 − 1) + (2 − 1) + 1 = 3

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

Покрытие реляционного граничного кода проверяет код, который имеет реляционные операции. Метрики покрытия реляционного граничного кода совпадают с метриками покрытия модели, как описано в разделе Покрытие реляционного граничного кода (покрытие Simulink). Фиксированные значения в модели являются целыми числами во время покрытия кода.

Связанные темы