Найти в Дзене

Дизайн тестов: что не так с техникой проверки граничных значений

Недавно проходила тестирование по конкурсу на программу стажировки. Один из вопросов был по технике граничных значений, сколько должно быть проверок, 2 или 3? Оказалось, что тема не такая простая, как казалось. Давайте разбираться. Из теории мы знаем, что допустимые и недопустимые значения разбиваются на классы эквивалентности. Задача тестировщика - проверить поведение программы при вводе значений этих классов, т.е. вводя допустимые и недопустимые значения. Но мы также знаем, что время тестирования ограничено и мы всячески стараемся его сокращать, уменьшая количество проверок. Существует немало споров о границе, нужно ли ее включать в один из классов эквивалентности или проверять отдельно? Если граничное значение включено в один из классов, то проверяются, как правило, два соседних значения, принадлежащих разным классам. Например, если мы проверяем возраст, исполнилось ли пользователю 18 лет, то в этом случае будут проверены два соседних значения, 17 и 18. Если граничное значение прове

Недавно проходила тестирование по конкурсу на программу стажировки. Один из вопросов был по технике граничных значений, сколько должно быть проверок, 2 или 3? Оказалось, что тема не такая простая, как казалось. Давайте разбираться.

Изображение создано нейросетью ruDALL-E Malevich
Изображение создано нейросетью ruDALL-E Malevich

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

Существует немало споров о границе, нужно ли ее включать в один из классов эквивалентности или проверять отдельно? Если граничное значение включено в один из классов, то проверяются, как правило, два соседних значения, принадлежащих разным классам. Например, если мы проверяем возраст, исполнилось ли пользователю 18 лет, то в этом случае будут проверены два соседних значения, 17 и 18. Если граничное значение проверяется отдельно, то будут проверены 3 значения: 17, 18 и 19.

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

Тогда, чтобы понять, в чем же действительно проблема, в строгой математике или в чем-то другом, рассмотрим вопрос, как же возникают подобные ошибки в программах. Программист, работающий с датами, получает значение возраста, вычитая одну дату из другой: дату рождения из текущей даты. Могут ли возникнуть при этом ошибки? Да сколько угодно! Может быть неверно записан формат даты, могут быть ошибки при вводе данных, или формат даты получается путем преобразования строки текста. Если в алгоритме преобразования строки есть ошибка, то найти ее может быть не так просто. Она может встречаться не во всех случаях и не обязательно у граничных значений.

Мы знаем, что форматы даты могут быть разными: в одних случаях сначала записывается число . месяц . год, в других месяц / число / год. Пользователь программы может не знать, в каком порядке от него ожидается ввод данных. Ошибочным может быть также понимание требований программистом: он может подумать, что >18 это значит от 19.

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

Хотите узнать больше о техниках тестирования? Можно прочитать книгу, рассчитанную на начальный уровень знаний:

Тест-дизайн. Практическое руководство для начинающих