Интро
Неважно кто я, как меня зовут, где работаю и сколько опыта. Цель статьи больше похожа на крик души, а не на желание похвастаться и показать очередное "а вот у нас так работает", вывалив список, который до завтра не прочитать, назвав его кратеньким и пририсовав майнд-карту, больше самого списка. Будет здорово, если описанное ниже кому-то да поможет. Делалось все для веб-приложения. Насколько оно универсально - решать каждому, но подойдет и на десктоп, и на мобилки. Просто нужно подогнать под себя, поняв суть описанного
Начало
Про чек-листы однозначно слышал каждый тестировщик. Про чит - маловероятно. Я хочу отбросить общую терминологию в сторону, ибо сколько людей столько и мнений, и порой диву даешься, сколько можно услышать разных определений на термин. Поэтому просто передам суть:
Чек-лист - список проверок
Чит-лист - список универсальных проверок
Одно слово, а какие разные судьбы. В чем универсальность? В том, что чит-лист (недооценен) статичен и изредка дополняем (сколько бы рефакторинга вы там не провели). Это список проверок, которые не меняются от типа поля (имею в виду текстовые к текстовым, числовые к числовым и т.д). За основу же создания чек-листа берем два варианта (остальное можно отбросить):
-
Краткий. Описание в виде связки глагол + существительное. Без ожидаемого результата. Никому, кроме вас непонятен
-
Подробный. Описание в виде связки глагол + существительное. С ожидаемым результатом и описанием логики. Более доходчивый (даже для самого себя; даже спустя много времени)
Пойдем по второму пути (потому что ты не хочешь писать тест-кейсы на каждый чих)
Поехали
Возьмем чит-лист и назовем его "Поле ввода" (он же инпут) и организуем его следующим образом, разделив на три общих блока (Дизайн, Состояние, Действие) и добавим элементы, которые есть у каждого поля:
ОБЩЕЕ (проверки характерны для любого вида поля)
ДИЗАЙН:
o Цвет, размер, расположение, шрифт и т.п.
o Hover, disabled, failed, unfocused с текстом
СОСТОЯНИЕ:
o По умолчанию: active/disabled, fill/empty
o Обязательно/не обязательно
- При обязательном > вывод ошибки при сохранении пустого поля
ДЕЙСТВИЕ:
o При наведении курсор мыши меняется на text
o При нажатии курсор text устанавливается в поле
o Ввод cпецсимволов/альт-кодов
o Ввод и вставка (Ctrl + V) минимального/максимального количества символов с пробелами и без
- При ограничении кол-ва символов > вывод ошибки с количеством разрешенных символов
o Ввод пробелов:
- Перед/после символов > отбрасываются
- Внутри, между символов > корректно обрабатываются
- Множество одних пробелов > выводится ошибка/отбрасываются
o Ввод клавиатурных сокращений: Backspace, Delete, Home, End, Shift + печатать символы, Shift + Стрелки вправо/влево/Home/End, Ctrl + Стрелки вправо/влево, Ctrl + C/X/V/Z
ЛЭЙБЛ
ДЕЙСТВИЕ:
o При пустом поле находится внутри него
o При установке курсора в поле, съезжает на верхнюю границу поля
o При снятии фокуса с пустого поля, съезжает обратно внутрь поля
o При заполненном поле и снятии фокуса с него, остаётся на верхней границе поля
ПЛЕЙСХОЛДЕР
ДЕЙСТВИЕ:
o Исчезает при установке курсора в поле/Исчезает при вводе текста
Далее, идет разделение на типы:
ТЕКСТОВЫЙ (проверки характерны только для текстового вида поля)
ДЕЙСТВИЕ:
o Ввод на кириллице/латинице: регистр букв верхний/нижний/комбинированный
o Ввод чисел > выдается ошибка/не вводятся
ЧИСЛОВОЙ (проверки характерны только для числового вида поля)
ДЕЙСТВИЕ:
o Ввод 0
o Ввод отрицательных чисел
o Ввод продвинутых чисел:
- Экспоненциальное (123e-5)
- Двоичное (0b1111)
- Восьмеричное (0o17)
- Шестнадцатеричное (0xFF)
o Ввод дробных чисел с разным разделителем (0.0001; 0,0001)
o Ввод чисел с запятыми, точками, пробелами (1,000,000; 1.000.000; 1 000 000)
o Ввод текста > выдается ошибка/не вводится
Пример:
Возьмем текстовое поле. Оно обязательное и имеет ограничение в 150 символов
С чего начинаем? Из чист-листа "Поле ввода" берем блоки ОБЩЕЕ + ТЕКСТОВЫЙ и соединяем. Забираем или отбрасываем проверки, нехарактерные для этого поля. Под конец комбинации будет готов чек-лист, где ты и дизайн уже проверил, и логику, и получится он таким:
-
Обязательное
При пустом поле: вывод ошибки при сохранении (или сразу под полем при снятии фокуса с поля)
-
Ограничение количества символов: 150
При превышении: вывод ошибки с количеством разрешенных символов
Вот и весь чек-лист. Я абсолютно серьезно. Наша бизнес-логика (задача, требования, ТЗ, постановка, whatever) заключается в обязательности и ограничении поля в 150 символов. Все. Их и записываем. Остальное проверяется глазками и ручками за доли секунды в постоянно повторяющейся связке чит + чек листы. Если вы проверяете дизайн, вписывая его в чек-листы и, не дай бог, в тест-кейсы - мои соболезнования. Дизайн проверяется глазками и в сравнении. Ручками же проверяются вводы различных символов различными способами. И все это никуда не надо записывать. В чит-листе уже описаны проверки, которые просто не стоит забывать делать. А в конце комбинаторики получаешь не только готовый чек-лист, но и вопросы к дизайнеру, аналитике и разработчикам, а твой продукт/бэклог станет чище от тривиалов и миноров, на заведение которых так калит тратить время. А если у вас на проекте еще и тестировщиков подключают на этапе прототипирования, то прям ммммм. Берешь читы и задаешь вопросы
Остальные примеры:
-
Возьмем числовое поле. Оно необязательно и не имеет ограничений
Из чист-листа "Поле ввода" берем блоки ОБЩЕЕ + ЧИСЛОВОЙ и соединяем. В чек-лист записываем требования к полю -
А что делать, если надо проверить... дату/время (подставь сюда своё)?
Выносим дату/время в отдельный чит-лист и снова комбинируем. Берем чит-лист "Поле ввода" (оттуда берем блоки ОБЩЕЕ + ЧИСЛОВОЙ) + чит-лист "Дата/время"
Чит-лист для Даты/времени (да, здесь нет американской записи даты, AM/PM, датапикера (потому что очень часто это стороннее решение) и т.п. Никто не мешает дописать самим):
ОБЩЕЕ (только для даты/времени)
ДЕЙСТВИЕ:
o Проверка UTC на корректность даты и времени в разных часовых поясах, а также зимнее/летнее время
ДАТА
o Ввод дня:
- Двумя нолями
- Первой цифрой больше 3
- Больше 31
o Ввод месяца:
- Двумя нолями
- Первой цифрой больше 1
- Больше 12
o Ввод года:
- Первой цифрой 0
- Меньше ста пятидесяти лет от текущего
- Больше текущего
o Автоподстановка точек после завершения ввода дня и месяца
o Ввод и выбор через datapicker даты меньше/больше текущей
14/18 ЛЕТ
o Полная текущая дата должна быть равна или больше даты ДР на 14/18 лет соответственно
ВИСОКОСНЫЙ ГОД
o Проверка корректности даты на 29 февраля
ВРЕМЯ
o Ввод часа:
- Первой цифрой больше 2
- Больше 23
o Ввод минут/секунд:
- Первой цифрой больше 5
- Больше 59
o Автоподстановка двоеточия после завершения ввода часа и минут
o Проверка на 00:00:00
СКЛОНЕНИЕ
СЕКУНДА:
o 0, 5-20, 25-30, 35-40, 45-50, 55-59 - секунд
o 1, 21, 31, 41, 51 - секунда
o 2-4, 22-24, 32-34, 42-44, 52-54 - секунды
МИНУТА:
o 0, 5-20, 25-30, 35-40, 45-50, 55-59 - минут
o 1, 21, 31, 41, 51- минута
o 2-4, 22-24, 32-34, 42-44, 52-54 - минуты
ЧАС:
o 0, 5-20 - часов
o 1, 21 - час
o 2-4, 22-23 - часа
ДЕНЬ:
o 1-21, 31 - день
o 2-4, 22-24 - дня
o 0, 5-20, 25-30 - дней
НЕДЕЛЯ:
o 0 - недель
o 1 - неделя
o 2-4 - недели
МЕСЯЦ:
o 1-4 - месяц
o 0, 5-12 - месяцев
ГОД:
o 1 - год
o 2-4 - года
o 0, 5-20 - лет
И так далее... Любые блоки легко комбинируются. Если поле текстовое + селект (он же дропдаун, он же выпадающий список), комбинировать блоки общее + текстовое + селект + функция поиска (если выпадающий список большой, то он обязан быть). Если у вас поле для ввода ФИО, то берете блоки общее + текстовое + селект + чит-лист ФИО (подсмотрите у ДаДаты). Если поле комбинированное текст + числа... ну, ты понял что делать
Итого
Цель статьи каждый для себя найдет сам по мере понятия материала. Если до всего этого ты дошел сам — молодец. Это редкость, когда человек не манки‑тестер, а думает что делает и пытается улучшить. Вот и статья написана в таком стиле, что не дает готового решения, а всего лишь подталкивает в нужном направлении к жизни без геморроя и без нагромождения «кратеньких, в 20 страниц, шаблонов, в которых все понятно».
Автор:
Eventoi