Как проверить внутри цикла for (модульное тестирование)

Я использую VectorCAST для модульного тестирования с компилятором Green Hills и микроконтроллером Renesas v850e2v3, а VectorCAST указывает, что у меня есть две ветви для проверки в следующем цикле for.

typedef enum
{
    MIN_ENUM_VAL = 0x00,
    ENUM_VAL_1   = 0x01,
    ENUM_VAL_2   = 0x02,
    MAX_ENUM_VAL
} Enumeration_T;

void myFunction (void)
{
    int counter;
    for(counter = MIN_ENUM_VAL; counter < MAX_ENUM_VAL; counter++)
    {
        //Do something.
    }

    //Do something else.
}

Как я могу проверить эти ветки? На самом деле я не знаю, как проверить внутри цикла for.

3 ответа

Ваше определение выглядит подозрительно:

typedef enum
{
    MIN_ENUM_VAL = 0x00,
    ENUM_VAL_1   = 0x01,
    ENUM_VAL_2   = 0x02,
    MAX_ENUM_VAL
} Enumeration_T;

Вы действительно имеете в виду, что первый enum значение 1? Как насчет 0? Это законная ценность? Является MIN_ENUM_VAL действительно 0? Или же 1? Я бы ожидал:

MIN_ENUM_VAL = 0x00,
ENUM_VAL_1   = MIN_EUM_VAL,

MAX_ENUM_VAL это более правильное определение. Неправильно, но регулярно. Правильный "максимум" 2 - "нормальное" определение того, что у вас есть LAST_ENUM_VAL, что на один больше, чем истинный "максимальный" или "последний" (лицемерно, я знаю. Но кто вообще определяет эти соглашения?).

Если вы вставляете тестовый пример в myFunction() и запускаете его, он должен автоматически проходить через обе ветви, так как значения enum, меньшие MAX_ENUM_VAL, удовлетворяют ветви 'true', а MAX_ENUM_VAL удовлетворяет ветви 'false'. VectorCAST понимает переходы в циклах for как условные переходы по отношению к среднему подоператору. Это можно увидеть, вставив контрольные примеры базового пути, а затем прочитав раздел примечаний сгенерированных контрольных примеров.

В зависимости от покрытия кода и параметров, которые вы выбираете, вы можете включить или отключить условия ветвления для переменных управления циклом. Идея измерения покрытия кода цикла состоит в том, чтобы убедиться, что операторы внутри цикла выполняются до конца, т.е. нет. итераций, чтобы убедиться, что выражения оцениваются в соответствии с дизайном. Это может произойти после того, как в середине цикла будет сгенерировано какое-то исключение, и управление выйдет из цикла for до завершения указанных итераций цикла.

Глядя на пример вашего цикла for, если цикл выполняется для счетчика =MIN_ENUM_VAL до counter=MAX_ENUM_VAL, тогда инструмент покажет, что вы рассмотрели как истинную, так и ложную ветвь счетчика условий < MAX_ENUM_VAL, если тело цикла не имеет некоторого условия, которое вызывает перерыв перед counter=MAX_ENUM_VAL.

Другие вопросы по тегам