Разработка тестового примера покрытия встроенной базовой логики
Разработка тестового примера покрытия встроенной базовой логики

Галантерейные товары и льготы, доставленные в кратчайшие сроки!

Предыдущая статья:Основы встраиваемых систем — тестирование основных концепций,Знакомит с основными понятиями, связанными с тестированием программного обеспечения.,Среди них точки знаний логического покрытия в тесте белого ящика относительно сложны.,В этой статье на примерах объясняется, как использовать сценарии использования тестов с различными уровнями покрытия.

1 Базовый пример

1.1 Пример 1

Есть следующая программа,дизайн Удовлетворить соответственнопокрытие заявленийипокрытие филиаловсамый эффективныйтествариант использования。

Язык кода:javascript
копировать
int x = 0;
int y = 0;

if (x > 0 && y > 0)
{
    y = y/x;
}

if (x > 1 || y > 1)
{
    y = y + 1;
}

x = x + y;

анализировать:

Для покрытия операторов требуется, чтобы все операторы были выполнены. Для этой программы только два оператора if должны быть истинными, например x=2, y=0.

Покрытие ветвей, также называемое покрытием решений, требует только того, чтобы все суждения могли получить все возможные значения. Для этой программы только два утверждения должны быть истинными и ложными, например, x = 2, y = 0 (оба if истинны). ; x=0,y=0 (оба if ложны) требуют двух вариантов использования.

1.2 Пример 2

Учитывая следующую программу, какое значение переменной i может наиболее эффективно обеспечить покрытие оценкой?

Язык кода:javascript
копировать
void main()
{
    int i = 0;
    int sum = 0;
    scanf("%d", &i);
    while(i <= 10)
    {
        sum += i;
        i++;
    }
    printf("%d\n", sum);
}

анализировать:

В этой программе оператор while является ветвью пути. Наиболее эффективный из них удовлетворяет покрытию суждений, то есть при минимальном количестве выполнений цикла суждение может быть истинным и ложным. Следовательно, если i=10, оно соответствует true, а в следующем цикле i становится равным 11, что соответствует false.

1.3 Пример третий

Учитывая следующую программу, сколько тестовых случаев требуется для обеспечения покрытия суждений?

Язык кода:javascript
копировать
 int func(int n)
 {
     if (n == 0)
     {
         return 33;
     }
     
     if (n == 1)
     {
         return 66;
     }
     
     if (n > 1)
     {
         return func(n - 1) + func(n - 2) + func(n - 3) ;
     }
     else
     {
         return 99;
     }
 }

анализировать:

В этой программе 2 if и 1 if-else составляют все суждения, которые удовлетворяют покрытию суждений, то есть все суждения должны быть истинными и ложными. Самый простой и интуитивно понятный вариант — использовать 4 варианта использования: n=0; n=2; n=-1. Обратите внимание, что в программе есть рекурсивные вызовы. 1 ) + func(0) + func(-1) выполнено;

2 продвинутых примера

Существует следующая программа для разработки тестовых примеров с различным логическим покрытием:

Язык кода:javascript
копировать
int test (int x, int y)
{
    int ret = 0;
    if (x > 0 && y > 0)
    {
        ret = x + y + 10; //Блок операторов 1
    }
    else
    {
        ret = x + y - 10; //Блок операторов 2
    }
    
    if (ret < 0)
    {
        ret = 0; //Блок операторов 3
    }
    
    return ret; //Блок операторов 4
}

анализировать: Согласно программе, сначала нарисуйте блок-схему:

2.1 покрытие выписок SC

дизайнудовлетворитьпокрытие заявлений(SC)изтествариант использования,То есть после запуска тестового варианта использования,Может конвертировать каждый исполняемый оператор в программувыполнен хотя бы один раз。

В этом примере все блоки операторов с 1 по 4 выполняются один раз.

данные вариантов использования

Блок операторов 1

Блок операторов 2

Блок операторов 3

Блок операторов 4

{x=3, y=3}

-

abef

{x=-3, y=0}

False

2.2 Определить покрытие DC

дизайнудовлетворитьТестовые случаи покрытия решений (DC), то есть после запуска тестовых примеров создайте ветви True и False для каждого суждения в программе.выполнен хотя бы один раз。

Покрытие решений, также называемое покрытием филиалов

данные вариантов использования

P1(x>0&&y>0)

P2(ret<0)

{x=3, y=3}

True

False

{x=-3, y=0}

False

True

2.3 Условное покрытие CC

дизайнудовлетворитьТестовые случаи условного покрытия (CC), то есть после выполнения тестовых случаев возможные значения каждого логического условия в программе.по меньшей мереудовлетворитьодин раз。

данные вариантов использования

C1(x>0)

C2(y>0)

C3(ret<0)

P1(x>0&&y>0)

P2(ret<0)

{x=3, y=0}

True

False

True

False

True

{x=-3, y=15}

False

True

False

False

False

2.4 Условное суждение распространяется на C/DC

дизайнудовлетворитьТестовые сценарии условного покрытия решений (C/DC), то есть после запуска тестовых примеров создайте ветви True и False для каждого решения в программе.выполнен хотя бы один раз,в то же время,делатьпрограммасерединаВозможные значения для каждого логического условияпо меньшей мереудовлетворитьодин раз。

данные вариантов использования

C1(x>0)

C2(y>0)

C3(ret<0)

P1(x>0&&y>0)

P2(ret<0)

{x=3, y=3}

True

True

False

True

False

{x=-3, y=0}

False

False

True

False

True

2.5 Покрытие комбинации условий MCC

дизайнудовлетворитьТестовые случаи комбинированного покрытия (MCC) — это комбинации всех возможных значений условий для каждого решения в программе после запуска тестовых случаев.по меньшей мереудовлетворитьодин раз。

Обратите внимание на несколько моментов:

  • Комбинация условий применима только в том случае, если в одном и том же заключении присутствует несколько условий.
  • Условия в различных суждениях не обязательно объединять напрямую.
  • Для вынесения суждений с одним условием вам нужно только удовлетворить все ваши собственные ценности.

данные вариантов использования

C1(x>0)

C2(y>0)

C3(ret<0)

P1(x>0&&y>0)

P2(ret<0)

путь

{x=-3, y=0}

False

False

True

False

True

acdf

{x=-3, y=2}

False

True

True

False

True

acdf

{x=3, y=0}

True

False

True

False

True

acdf

{x=3, y=3}

True

True

False

True

False

abef

2.6 Покрытие пути ПК

дизайнудовлетворитьВариант использования для покрытия пути тестом (ПК),То есть после запуска тестового варианта использования,Сделайте каждый путь в программеперезаписано хотя бы один раз。

данные вариантов использования

C1(x>0)

C2(y>0)

C3(ret<0)

P1(x>0&&y>0)

P2(ret<0)

путь

Невозможный путь

-

-

-

-

-

abdf

{x=0, y=2}

False

True

True

False

True

acdf

{x=3, y=5}

True

True

True

True

True

abef

{x=-10, y=30}

False

True

False

False

False

acef

3 Исправление оценки состояния, охватывающее MC/DC

Модифицированное условное суждение охватывает MC/DC, его значение описано здесь:

MC/DC требует разработки соответствующего количества тестовых примеров для удовлетворения следующих условий:

  • Убедитесь, что каждый ввод и вывод появляются в программе хотя бы один раз.
  • Каждое условие в программе должно давать все возможные выходные данные хотя бы один раз.
  • И каждое условие в каждом суждении должно иметь возможность независимо влиять на результат суждения (то есть при предположении, что другие условия остаются неизменными, только изменение значения этого условия изменит результат суждения).

Существует следующая программа. Для удовлетворения модифицированного условного суждения требуется минимальное количество тестовых примеров:

Язык кода:javascript
копировать
bool func(bool x, bool y, bool z)
{
    if (x && (y || z))
    {
        return true;
    }
    
    return false;
}

Сначала нарисуйте блок-схему. Вот два способа ее нарисовать:

Для модифицированного покрытия условных решений:

  • Во-первых, вам нужно объединить условия. В этом примере решение P1 содержит 3 логических условия x, y и z. Их существует 8 комбинаций.
  • Затем рассчитайте варианты использования для каждого условия отдельно.,Правило:
    • В рамках суждения, где находится условие Сх (в данном случае Р1), кроме условия Сх, значения остальных условий совершенно одинаковы (например, для С1 — найти вариант использования, в котором значение x противоположно, а значение y и z одинаково)
    • Результат суждения противоположный (например, для C1 результаты суждения вариантов использования 2 и вариантов использования 6 противоположны)

По приведенным выше правилам можно получить следующую таблицу:

Форма наблюдения:

  • Для условия z необходимо выбрать варианты использования 5 и 6.
  • Для условия y необходимо выбрать варианты использования 5 и 7.
  • Для условия x вам нужно выбрать варианты использования 2 и 6, либо варианты использования 3 и 7, либо варианты использования 2 и 8.

Чтобы достичь минимального количества вариантов использования, удовлетворяющих MC/DC, можно использовать следующие дополнительные комбинации вариантов использования:

  • Комбинация 1: Вариант использования 2, Вариант использования 5, Вариант использования 6, Вариант использования 7
  • Комбинация 2: Вариант использования 3, Вариант использования 5, Вариант использования 6, Вариант использования 7

То есть для удовлетворения требований MC/DC необходимо как минимум 4 варианта использования.

Например, выберите комбинацию 1 и удалите избыточные варианты использования, чтобы получить следующую таблицу:

Давайте еще раз проанализируем:

  • Для условия х,Используйте варианты использования 2 и 6 для тестирования.,Значения y и z одинаковы (y=0,z=1),Результаты оценки P1 имеют разные значения (0 и 1).
  • Для условия у,Используйте варианты использования 5 и 7 для тестирования.,Значения x и z одинаковы (x=1,z=0),Результаты оценки P1 имеют разные значения (0 и 1).
  • Для условия z,Используйте варианты использования 5 и 6 для тестирования.,Значения x и y одинаковы (x=1,y=0),Результаты оценки P1 имеют разные значения (0 и 1).

Наконец, давайте сравним и углубим наше понимание, отметив на блок-схеме:

4 Резюме

В этой статье представлен тест программного обеспечения,Различные случаи покрытия логики в тесте белого ящика,включатьпокрытие выписок SC、Определить покрытие DC、Условное покрытие CC、Условное суждение распространяется на C/DC、Покрытие комбинации условий MCC、Покрытие пути ПК、Исправлено решение о состоянии, охватывающее Пример MC/DC.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose