Опубликован: 28.11.2007 | Уровень: специалист | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 3:

Тестирование программного кода (тестовые примеры)

4.1.2.1. Граничные условия

В тестовых примерах, прямо соответствующих тест-требованиям, обычно используются входные значения, находящиеся заведомо внутри допустимого диапазона. Один из способов проверки устойчивости системы на значениях, близких к предельным, - создавать для каждого входа как минимум три тестовых примера:

  • Значение внутри диапазона
  • Минимальное значение
  • Максимальное значение

Для еще большей уверенности в работоспособности системы используют пять тестовых примеров:

  • Значение внутри диапазона
  • Минимальное значение
  • Минимальное значение + 1
  • Максимальное значение
  • Максимальное значение - 1

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

char sum(char a, char b)
{
   return a+b;
}

вычисляющую сумму чисел a и b, будут переданы значения 255 и 255, то в случае отсутствия специальной обработки ситуации переполнения сумма будет вычислена неверно.

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

void abs_array(char array[], char size)
{
   for (int i=1;i<=size;i++)
   {
         array[i] = abs(array[i]);
   }
   return;
}

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

4.1.3. Проверка робастности (выхода за границы диапазона)

Робастность системы - это степень ее чувствительности к факторам, не учтенным на этапах ее проектирования, например, к неточности основного алгоритма, приводящего к ошибкам округления при вычислениях, сбоям во внешней среде или к данным, значения которых находятся вне допустимого диапазона. Чаще всего под робастностью программных систем понимают именно устойчивость к некорректным данным. Система должна быть способна корректно обрабатывать такие данные путем выдачи соответствующих сообщений об ошибках, сбои и отказы системы на подобных данных недопустимы.

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

  • Минимальное значение - 1
  • Максимальное значение + 1,

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

Таким образом, если изобразить допустимый интервал как на Рис 4.1, то можно видеть, что для тестирования интервальных значений достаточно 7 тестовых примеров - пяти допустимых и двух на робастность.

Рекомендуемые проверочные значения

Рис. 4.1. Рекомендуемые проверочные значения

В литературе часто встречается утверждение, что значение внутри интервала является избыточным и его тестирование не требуется. Однако, проверка внутреннего значения является полезной как минимум с психологической точки зрения, а также в случае, если интервал ограничен сложными граничными условиями. Также рекомендуется отдельно проверять значение 0 (даже если оно находится внутри интервала), т.к. зачастую это значение обрабатывается некорректно (например, в случае деления на 0).

4.1.4. Классы эквивалентности

При разработке тестовых примеров может возникнуть такая ситуация, в которой различные входные значения приводят к одним и тем же реакциям системы. Если при этом такие входные значения имеют что-то общее, то возможно объединение таких значений в классы эквивалентности, т.е. выполнение эквивалентного разбиения множества допустимых входных значений.

Разбиение на классы эквивалентности - это, в первую очередь, способ уменьшения необходимого числа тестовых примеров. Обычно, если в тест-требованиях специально не оговорено иное, при тестировании достаточно выполнить только один тестовый пример для каждого класса эквивалентности. Разбиение на классы эквивалентности особенно полезно, когда на вход системы может быть подано большое количество различных значений; тестирование каждого возможного значения привело бы к слишком большому объему тестирования.

Рассмотренные выше граничные условия могут служить примером классов эквивалентности:

  1. Значение из середины интервала.
  2. Граничные значения.
  3. Недопустимые значения за границами интервала.

Таким образом, тестирование граничных условий и робастности является частным случаем тестирования с использованием классов эквивалентности - вместо того, чтобы тестировать все недопустимые значения, выбираются только соседние с граничными.

При определении классов эквивалентности следует руководствоваться следующими правилами:

  • Всегда будет, по меньшей мере, два класса: корректный и некорректный
  • Если входное условие определяет диапазон значений, то, как правило, бывает три класса: меньше чем диапазон, внутри диапазона и больше чем диапазон. (Значения на концах диапазона могут трактоваться как граничные значения.)
  • Если элементы диапазона обрабатываются по-разному, то каждому варианту обработки будут соответствовать разные требования.

Другим примером разбиения на классы эквивалентности может служить тестирование открытия файла по его имени. В результате тестирования необходимо определить, все ли варианты имен обрабатываются системой согласно следующим тест-требованиям.

  1. Проверить, что в случае присутствия в имени файла символов, не являющимися буквами латинского алфавита и цифрами, система выводит сообщение об ошибке.
  2. Проверить, что в том случае, когда длина имени файла превышает 11 символов, система выдает сообщение об ошибке
  3. Проверить, что система не различает регистр символов имени при открытии файла.
  4. Проверить, что при открытии файлов с именами, не противоречащими требованиям 1-3, система открывает файл.

Входными значениями тестового примера являются различные имена файлов, выходными - реакция системы (ошибка или успешное открытие).

Можно выделить следующие классы эквивалентности:

По длине имени:

  1. Длина имени меньше 11 символов
  2. Длина имени равна 11 символам
  3. Длина имени больше 11 символов

По символам:

  1. Имя, состоящее из цифр и букв смешанного регистра
  2. Имя, состоящее из цифр и букв нижнего регистра
  3. Имя, состоящее из цифр и букв верхнего регистра
  4. Имя, состоящее только из цифр
  5. Имя, состоящее только из букв
  6. Имя, включающее знаки препинания (не буквенно-цифровые символы)
  7. Имя, включающее управляющие символы (не буквенно-цифровые символы)

Эти классы эквивалентности иллюстрируют, что проверки на границах интервалов применимы не только для тестирования арифметических операций и операций сравнения. Практически для любых данных, даже текстовых, можно определить "минимальные" и "максимальные" допустимые значения.

Илья Макаренко
Илья Макаренко

Добрый день.

Вопрос №1

Какова стоимость получения диплома о мини-МБА по данному курсу? Или ориентироваться на указанную на сайте?

Вопрос №2

Возможно ли начать обучение без потери результатов, не отправив документы на зачисление, а отправку выполнить позже?

Александр Медов
Александр Медов

Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?

Денис Сафронов
Денис Сафронов
Россия
жылдыз насырбекова
жылдыз насырбекова
Киргизия, бишкек