Всегда тестируй ноль!
Всегда тестируй «ноль». Всегда:
— Заказ пиццы? Купить ноль штук.
— Калькулятор? Разделить на ноль.
— Видеоплеер? Открыть файл размером ноль байт.
Именно в нуле любят собираться ошибки. На сайте вроде просто поле, а где-то внутри система делит на него при подсчете процента покупки. Подставил ноль — все сломалось. Профит! Баг! Или продуман только позитивный сценарий — всегда заказывают больше нуля книг / пицц / настолок. Ввел ноль, а код обработки значения не написан. Опять сломалось… Или оставил поле пустым, а система тебе БАЦ, и эксепшен...
Поэтому тестируй ноль! Где? Давайте посмотрим.
Поле ввода — цифры есть
Числовое поле
Тут все просто. Если видим числовое поле, пробуем ноль
Число книг: ноль / не ноль.
Кол-во пар обуви: ноль / не ноль.
Возраст пациента: ноль / не ноль.
Номер заказа: ноль / не ноль.
Выручка в рублях: ноль / не ноль.
Коэффициент похожести: ноль / не ноль.
...
Заказ книг на OZON. Количество товара — числовое поле
Это логично, такую проверку делают многие. Легко найти число в числовом поле! :-)
Но что, если поле не числовое? Сразу затык.
Длина строки
Можно ли применить классы эквивалентности «ноль-не ноль» там, где числа исходно нет? Если мы вводим не числа, а буквы?
Тут нет чисел, только строковые поля
Конечно, можно! Кладем наше поле на числовую ось и получаем класс «длина строки». Та-а-а-ак, допустимое имя по ТЗ — от 3 до 6 символов. Окей, а как насчет нуля? Что будет, если оставить строку пустой? Так мы применяем класс «ноль-не ноль».
Длина имени: ноль / не ноль.
Длина эл почты: ноль / не ноль.
Длина пароля: ноль / не ноль.
Длина названия организации: ноль / не ноль.
...
Состояние объекта — цифр нет
Легко подставить ноль туда, где есть цифры. Несложно положить символьную строку на числовую ось и найти границы по длине строки. Что будет, если оставить строку пустой? А если заполнить? А если ввести только один символ (пограничное значение)?
Число книг: ноль / не ноль.
Символов в имени: ноль / не ноль.
Сложно применить класс «ноль / не ноль» там, где вроде бы нет цифр. И даже длины строки нет. В итоге тестировщик Вася ловит баг, но не может потом воспроизвести. Потому что не локализовал, не нашел точное условие → не записал его в шаги → задачу отложили → спустя месяц по шагам автора уже не воспроизводится, потому что его учетку удалили. А проблема была в ней, ведь Вася оплачивал продукты по PayPal до того, как возможность прикрыли. И забыли отмигрировать данные. На новой учетке даже возможности оплатить по PayPal нету (ноль) → баг не воспроизведется, ведь нам нужна учетка, где количество оплат по PayPal «не ноль».
И сидят Вася с Петей-разработчиком, копаются в логах, пытаются понять, как воспроизвести проблему. Или еще хуже — пожимают плечами, «А! Видимо, само починилось в рамках другой задачи» и закрывают баг как Cannot reproduce. И душа спокойна — теперь то работает! До тех пор, пока у реального пользователя баг не выстрелит. И тогда начнется паника, БЛОКЕР-приоритеты и все такое. А потом Петя поймет, в чем дело было, да даст Васе подзатыльник — сразу надо было про «ноль-не ноль» думать!
Учитесь видеть «ноль-не ноль» не только в числах и длине строк, но и в состояниях объекта:
Пользователь авторизован / не авторизован.
Заходил на сайт ранее / не заходил.
Заполнял профиль / не заполнял.
Аватарку загружал / не грузил.
Деньги снимал / не снимал.
Это самые крутые примеры класса, потому что о них не задумываются. Их пропускают. И именно поэтому их надо проверять. Как при поиске багов, так и при локализации конкретной ошибки: «Так-с, упало. А это всегда так или только при первом просмотре (раньше не смотрел — ноль, уже видел — не ноль)?».
Ноль на выходе
Не забывайте — ноль может быть не только на входе, но и на выходе!
На входе:
— Ввести ноль в числовое поле,
— Оставить строку символов пустой.
На выходе:
— После совершения покупки баланс уйдет в ноль.
— После обработки поле станет пустым.
— Поиск вернет ноль результатов (хотя на входе у нас непустая строка поиска).
— Отчет на указанную дату будет пустым (опять же, дата на входе была указана не-ноль).
Пример
При регистрации у нас три унылых символьных поля, там все просто — поле заполнено или нет. Давайте найдем все классы с нулем для обработки файлов!
1. Выбор файла (а вдруг пустой?)
Выбираем файл — Дадата отображает структуру. Если она вдруг неправильно определила тип, его всегда можно изменить в выпадающем списке:
2. Структура. Тут можно найти ноль?
Проверив структуру, переходим к предварительному результату. Если все ок, оплачиваем и получаем итоговый файл.
3. Предварительные результаты.
Они могут быть пусты, или баланс нулевой
Где здесь ноль?
— Файл может быть пустой: ноль строк, ноль колонок. Ок.
— Система распознает первую строку как шапку. А что, если у нас будет ноль «значимых» строк?
— Мы платим за обработку — а что, если у нас ноль рублей на счету? А что, если после обработки у нас станет ноль или даже меньше? Помним о том, что ноль может быть не только на входе, но и на выходе.
— А что, если у нас на выходе будет ноль данных? Если мы под видом ФИО пришлем фигню из серии “12345”? Да, колонки будут, но пустые же!
— А что, если на выходе вообще ничего? Присмотритесь к структуре, там же есть кнопка «Исключить столбец»! А что, если мы исключим все столбцы и получим на выходе ноль?
Столбцы можно исключать. И получить НОЛЬ на выходе!
Проверьте себя, найдите все нули в:
— форме обработки по одному человеку;
— личном кабинете;
— подсказках.
Чур, спойлеры в комментах не писать! =)
Просто в следующий раз, тестируя свою систему, вспомните о том, что ноль есть не только в числах и длинах полей. Ищите его там, где другие не ищут!
Другие примеры:
— Период сегодня-вчера, если он длится 0 дней
— Применение класса «ноль-не ноль» при подключении к JMS
— Как пустой JSON вешает библиотечку Axis
Другие примеры:
— Период сегодня-вчера, если он длится 0 дней
— Применение класса «ноль-не ноль» при подключении к JMS
— Как пустой JSON вешает библиотечку Axis
Вывод
ИЩИ НОЛЬ!
В числах
В длине строки
В состоянии (авторизован / нет)
В выходных данных
Везде ищи. Он есть!
PS — это выдержка из моей книги для начинающих тестировщиков, написана в помощь студентам моей Школы для начинающих тестировщиков.
сори. вот здесь : "... На новой учетке даже возможности оплатить по PayPal нету (ноль) → баг не воспроизведется, ведь нам нужна учетка, где количество оплат по PayPal «не ноль». " - можно комент?. пример кейса. спасибо
ОтветитьУдалитьТам по тексту и есть пример.
УдалитьВозможность была, ее использовали. Получаем количество раз НЕ ноль.
Потом возможность убрали. У новой учетки ее в принципе нет, поэтому «не ноль» получить в принципе нельзя.
И если есть проблема после миграции, на новых тестовых данных она воспроизведется "никогда"