Техника-тест дизайна: Анализ граничных значений (boundary value testing)
Мы используем cookie-файлы, чтобы получить статистику, которая помогает нам улучшить сервис для Вас с целью персонализации сервисов и предложений. Вы можете прочитать подробнее о cookie-файлах или изменить настройки браузера. Продолжая пользоваться сайтом без изменения настроек, вы даёте согласие на использование ваших cookie-файлов.
speech bubble

Техника-тест дизайна: Анализ граничных значений (boundary value testing)

Техника-тест дизайна: Анализ граничных значений (boundary value testing)

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

Перед изучением техники, рекомендуем ознакомиться с статьей "Техника тест-дизайна: Классы эквивалентности (equivalence partitioning)".

 

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

 

 

Введение в технику анализа граничных значений (boundary value testing)

Граничное значение (border condition, boundary condition) — это значение, которое находится на границе классов эквивалентности.

Техника анализа граничных значений (boundary value testing) — техника, проверяющее поведение системы, либо отдельного модуля на граничных значениях входных данных.

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

Требования:

П.1. При нажатии на кнопку «Загрузить», система должна проверять размер загружаемого файла и в соответствии с этим отправлять на определенный ftp сервер. До 100Мб на ftp сервер «Small», от 100Mb до 1000Mb на ftp сервер «Medium», больше 1000Mb на ftp сервер «Large».

 

Алгоритм применения техники граничных значений

  1. если в требованиях не указаны точные границы, необходимо уточнить у ответственных лиц(Аналитиков, Тим-лида);
  2. если в требованиях не указан шаг в диапазоне, уточняем у ответственных лиц(Аналитиков, Тим-лида);
  3. разбиваем требования на классы эквивалентности;
  4. определить граничные значения в каждом классе, исходя из полученных данных о шаге;
  5. написать проверки значения до границы, на границе и после неё

В требованиях неизвестен шаг в требованиях и точные границы размера фалов. Подходим к аналитику, задаём вопросы и получаем ответ:

  • Шаг равен 1Mb;
  • Сервер «Small» принимает до 100Mb включительно;
  • Сервер «Medium» принимает от 101Mb до 1000Mb включительно;

Без этих знаний мы не сможем грамотно и правильно протестировать модуль. А если бы мы не уточнили шаг, а он равен не 1Mb, а 1кб? Тогда граничное значение было уже не 100 Mb, а 99Mb 1023Kb. Существенная разница, не так ли?

Будьте бдительны с шагом и написанием тестов на основе данной техники. К примеру, мы тестируем систему, которая принимает платежи от 100 рублей. Значит, граничные значения получаются с шагом в 100.

Получаем следующие классы эквивалентности:

  1. 1 Mb - 100Mb;
  2. 101 Mb - 1000Mb;
  3. 1001 Mb - +бесконечность;

Применяем технику граничных значений:

  1. 0 – отправляем пустое поле, либо размер меньше 1 Мб
  2. 1 – отправляем файл размером 1 Mb, нижняя граница первого набора 1-100Mb
  3. 55 – любое значение из первого набора классов эквивалентности
  4. 99 – приграничное значение первого набора
  5. 100 – граница первого набора
  6. 101 - нижняя граница второго набора 101-1000Mb
  7. 789 - любое значение из второго набора классов эквивалентности
  8. 999 - приграничное значение второго набора
  9. 1000 - граница второго набора
  10. 1001 - нижняя граница третьего набора 1001 Mb - +бесконечность
  11. 1500 - любое значение из третьего набора классов эквивалентности

 

Пример тест-кейса на основе классов эквивалентности и граничных значений

IDEA(Идея): Загрузка файлов на ftp сервер «Medium» со страницы загрузчика
Title(Наименование): Проверка загрузки файла на ftp сервер «Medium» со страницы загрузчика
DATA (Тестовые данные):
101 Mb
789 Mb
999 Mb
1000 Mb
Steps(Шаги):
Tester Actions(Действие) Expected result(Ожидаемый результат) Actual result(Результат)
# Перейти на страницу /downloader Переход успешно осуществлен, на странице присутствует поле для загрузки файла Passed
# Нажать на поле загрузки файла Открылось дополнительное окно проводника для выбора файла/span> Passed
# Выбрать файл размерностью, согласно Data Файл выбран, имя отображается в поле для загрузки Passed
# Нажать кнопку загрузить Файл успешно загружен, появилось сообщение «Файл загружен на сервер ftp «Medium»» Passed

 

Почему могут возникать ошибки? Пример программного кода, в котором программист может указать неправильное равенство:

If (file.size() < 100 ){
    Load.toSmall(file);
} 
else if (file.size() > 100) { 
    Load.toMedium(file); 
} 
else if (file.size() >= 1000) { 
    Load.toLarge(file);
}

В коде, наблюдаем сразу 3 проблемы:

  1. If (file.size() < 100 ) { Load.toSmall(file); } else if (file.size() > 100) { Load.toMedium(file); } else if (file.size() >= 1000) { Load.toLarge(file); }
  2. что будет, если файл равен 100 Мб?
  3. в условие file.size() >= 1000 пользователь никогда не попадёт, так как файл загрузится уже здесь file.size() > 100.

По статистике, именно в знаках неравенства(граничных значениях) отлавливается большинство багов. Программист мог не уточнить, понять по своему предъявляемые требования к модулю, а на деле должно работать иначе.

 

Применение техники анализа граничных значений для времени

Воспользуемся одним из примеров разбиения распорядка дня на классы эквивалентности:

  1. Пробуждение 6:00-6:15;
  2. Зарядка 6:16-6:30;
  3. Завтрак 6:31-7:00;
  4. Умывание 7:01-7:20;
  5. Сбор на работу 7:21-7:40;
  6. Дорога на работу 7:41-9:00;
  7. Работа 9:01-18:00;
  8. Дорога домой 18:01-19:00
  9. Душ, отдых, ужин 19:01-20:00;
  10. Личные дела 20:01-22:00;
  11. Сон 22:01-5:59;

Шаг является 1-ой минутой. Как вы можете догадаться, необходимо «вокруг» каждой границы выделить по 2 случая, например: «Пробуждение» 6:00, 6:01, 6:14, 6:15.

И для окончательного завершения тестового покрытия, добавляем одно значение из диапазона класса эквивалентности, например, 6:09. И проведя аналогичные манипуляции с остальными диапазонами, получим вполне хорошее тестовое покрытие.

 

Пример чек-листа проверки граничных значений для времени

Tester Actions(Действие) Actual result(Результат) Comment(Комментарий)
Проверить статус «Пробуждение» на странице /timeout Passed  
Проверить статус «Зарядка» на странице /timeout Passed  
Проверить статус «Завтрак» на странице /timeout Passed  
Проверить статус «Умывание» на странице /timeout Passed  
Проверить статус «Сбор на работу» на странице /timeout Passed  
Проверить статус «Дорога на работу» на странице /timeout Passed  
Проверить статус «Работа» на странице /timeout Passed  
Проверить статус «Дорога домой» на странице /timeout Passed  
Проверить статус «Душ, отдых, ужин» на странице /timeout Passed  
Проверить статус «Личные дела» на странице /timeout Passed  
Проверить статус «Сон» на странице /timeout Passed  

По нему тестировщик проверит следующие значения, например, для статуса «Пробуждение» 6:00, 6:01, 6:09, 6:14, 6:15.

 

Пример тест-кейса проверки граничных значений для времени

IDEA(Идея): Модуль, проверяющий время по распорядку дня для сотрудника
Title(Наименование): Проверка статуса «Пробуждение» при вводе в поле «Время» времени на странице /timeout
DATA (Тестовые данные):
Tester Actions(Действие) Actual result(Результат)
6:00 Статус «Пробуждение»
6:01 Статус «Пробуждение»
6:09 Статус «Пробуждение»
6:14 Статус «Пробуждение»
6:15 Статус «Пробуждение»
Steps(Шаги):
Tester Actions(Действие) Expected result(Ожидаемый результат) Actual result(Результат)
# Перейти на страницу /timeout Переход успешно осуществлен, на странице присутствует поле для ввода времени Passed
# Ввести в поле «Время» данные Data Значение введено Passed
# Нажать кнопку «Отправить» Ожидаемый результат согласно таблице Data Passed

 

Заключение

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

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

 

Для комментирования необходимо авторизоваться