Позор тебе! — кричит начальник, найдя в приложении баг. Даже если не кричит, все равно стыдно: как я могла пропустить такое? Это же так очевидно, почему же не учла? Потому что не подумала об этом классе эквивалентности.
Искать классы эквивалентности сложно даже мне, тестировщику с 7+1-летним опытом — что говорить о моих студентах. В книгах и на лекциях ребятам все понятно. Но как только доходит до практики, начинается ступор. Как же их искать, классы эти? Я придумала аналогию с диснеевской героиней — Золушкой. Ребята говорят, лекция стала понятнее.
Будни Золушки
Мачеха рассыпала на полу гречку и овес, перемешала и сказала — «Разбирай!». Золушка три часа раскладывала кучки. Итог мучений — гречка к гречке, овес к овсу.
В каждом мешке своя крупа — свой класс эквивалентности
В тестировании то же самое: выделяем классы эквивалентности (крупу), ищем исключения, перепроверяем. Результат — ошибки находят тестировщики, а не начальство.
Выделяем крупу
В программе есть большая куча разных значений, которые можно проверить — куча крупы вперемешку. Мы пытаемся их разделить, выделить классы эквивалентности: понять, где гречка, где овес, а где чечевица.
Протестируем поле ввода имени при регистрации.
Имеет ли смысл вводить «Маша» и «Ольга»? В окне приветствия будут отображаться разные имена, но мы проверяем распространенные женские имена. Если регистрация работает на одном примере, на втором наверняка тоже. Кидаем к гречке оба: они в одном классе эквивалентности
А что насчет «Ивана»? Тоже распространенное имя, но мужское. А что, если система после регистрации присылает письмо «Уважаем(ый/ая)…»? Тогда реакция на разный пол должна быть разная. Кидаем к овсу, это уже не гречка, а другой класс эквивалентности
А что насчет «Розалинд Аруша Аркадина Алталун Флоренс Луна» ? Берем максимально большое имя, которое влезает на экран. Что будет? Мы предполагаем, что оно может вылезти за границы экрана. Кидаем к чечевице, это уже не гречка и не овес, а другой класс эквивалентности.
Где гречка, а где овес — определяем «на глазок». Используем логику и пытаемся понять, что уникального в данном конкретном поле. Видим там не просто «строковое поле», абстрактную крупу, а конкретику — если имя, то может быть простым, составным, унисекс…
Ищем исключения
Когда собрали гречку, изучаем мешок: сравниваем крупинки, они должны быть идентичны.
Я ввожу в поле «имя» формы регистрации: “Ольга” или “Маша”.
Нет разницы.
То, что все значения внутри класса одинаковые — обман зрения. Невозможно найти все баги в приложении или разобрать 2 миллиона крупинок и ни разу не ошибиться. Среди гречки попадается чечевица!
Вспомним поле ввода имени.
«Максим» и «Иван» — распространенные мужские имена, один класс.
Но при проверке «Максим» работает, а «Иван» — нет. Нельзя вводить меньше 5 символов. Или нельзя вводить имя «Иван».
Месяц назад мои коллеги зашли на сайт банка Х и попробовали оставить заявку на кредит. Ввели ФИО и получили отлуп — «Имя «Иван» вводить нельзя». И фамилию «Иванов», и отчество «Иванович».
Разработчики поставили защиту от тестовых данных — «Иванов Иван Иванович» вызывает подозрение. Но только условие связки компонентов выбрали OR, а не AND и нельзя было быть даже просто Иваном… Если фамилия Иванов ИЛИ имя Иван ИЛИ отчество Иванович — получай ошибку! Вам смешно, а это разные классы эквивалентности!
Мы выделили класс эквивалентности, мы собрали мешочек гречки и сказали, что здесь все идентично. Но мы могли ошибиться, что-то забыть, что-то не заметить. И именно поэтому мы должны все время использовать разные значения. Выделили для поля с именем «распространенные мужские имена», сегодня вводим «Иван», завтра «Максим»…
Перепроверяем
Тестирование — неточная наука, мы можем ошибаться в своих предположениях.
Даже если приложение работает одинаково на любых строках, даже если в требованиях говорится, что разницы между «Анной» и «Анной-Марией» нет, а мы все равно сомневаемся — проверяем. Требования — одно, код — совсем другое. Разработчики тоже ошибаются, вместо «только имена» читают «только одно слово с именем» и ставят ограничение на двойные имена. Или додумывают требование, что длинне 6 символов имен не бывает.
Лучше перебдеть, выполнить 20 тестов и найти баг, чем выполнить 10 и продолбать проблему.
РЕЗЮМЕ
Выделите классы эквивалентности (отдельно гречка, отдельно чечевица), поищите исключения и каждый раз используйте немного разные крупинки из кучки одного и того же класса.
- Подумайте, какими бывают «тестируемое поле».
- Представьте, какими не бывают «тестируемое поле».
- Поищите границы.
Из кучи возможных значений выделите группы классов эквивалентности
ДОМАШНЕЕ ЗАДАНИЕ
Проверка номера кредитной карты — как будете тестировать?
Наводящие вопросы:
- Каким чаще всего бывает номер?
- Каким он точно не бывает?
- Можно ли его писать и слитно, и через несколько пробелов?
- Что, если пробелы будут в «неправильных» местах?
- Что, если в номере будут буквы?
- Что, если номер будет пустой?
- Что, если номер будет длиннее положенного?
- Что, если номер будет из сплошных нулей?
- …
PS — это выдержка из моей книги для начинающих тестировщиков, написана в помощь студентам моей школы для тестировщиков
Картинки позаимствованы из лекций, интернета и от моей художницы Вики
Статья добавлена на Testbase в навык выделения классов эквивалентности. Теперь не потеряется!
Автор статьи: Ольга Назина
ООО «Тестбейз», ИНН 9727006330, ОГРН 1227700497309
Она же — ИП Назина Ольга Евгеньевна, ИНН 772791965180, ОГРНИП 315774600011282