Создание чек-листов из чит-листов

302c8c2ed033c19827ed080478c45bc8

Интро

Неважно кто я, как меня зовут, где работаю и сколько опыта. Цель статьи больше похожа на крик души, а не на желание похвастаться и показать очередное «а вот у нас так работает», вывалив список, который до завтра не прочитать, назвав его кратеньким и пририсовав майнд-карту, больше самого списка. Будет здорово, если описанное ниже кому-то да поможет. Делалось все для веб-приложения. Насколько оно универсально — решать каждому, но подойдет и на десктоп, и на мобилки. Просто нужно подогнать под себя, поняв суть описанного

Начало

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

Чек-лист — список проверок
Чит-лист — список универсальных проверок

Одно слово, а какие разные судьбы. В чем универсальность? В том, что чит-лист (недооценен) статичен и изредка дополняем (сколько бы рефакторинга вы там не провели). Это список проверок, которые не меняются от типа поля (имею в виду текстовые к текстовым, числовые к числовым и т.д). За основу же создания чек-листа берем два варианта (остальное можно отбросить):

  1. Краткий. Описание в виде связки глагол + существительное. Без ожидаемого результата. Никому, кроме вас непонятен

  2. Подробный. Описание в виде связки глагол + существительное. С ожидаемым результатом и описанием логики. Более доходчивый (даже для самого себя; даже спустя много времени)

Пойдем по второму пути (потому что ты не хочешь писать тест-кейсы на каждый чих)

Поехали

Возьмем чит-лист и назовем его «Поле ввода» (он же инпут) и организуем его следующим образом, разделив на три общих блока (Дизайн, Состояние, Действие) и добавим элементы, которые есть у каждого поля:

ОБЩЕЕ (проверки характерны для любого вида поля)

ДИЗАЙН:
	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 символов

С чего начинаем? Из чист-листа «Поле ввода» берем блоки ОБЩЕЕ + ТЕКСТОВЫЙ и соединяем. Забираем или отбрасываем проверки, нехарактерные для этого поля. Под конец комбинации будет готов чек-лист, где ты и дизайн уже проверил, и логику, и получится он таким:

Вот и весь чек-лист. Я абсолютно серьезно. Наша бизнес-логика (задача, требования, ТЗ, постановка, whatever) заключается в обязательности и ограничении поля в 150 символов. Все. Их и записываем. Остальное проверяется глазками и ручками за доли секунды в постоянно повторяющейся связке чит + чек листы. Если вы проверяете дизайн, вписывая его в чек-листы и, не дай бог, в тест-кейсы — мои соболезнования. Дизайн проверяется глазками и в сравнении. Ручками же проверяются вводы различных символов различными способами. И все это никуда не надо записывать. В чит-листе уже описаны проверки, которые просто не стоит забывать делать. А в конце комбинаторики получаешь не только готовый чек-лист, но и вопросы к дизайнеру, аналитике и разработчикам, а твой продукт/бэклог станет чище от тривиалов и миноров, на заведение которых так калит тратить время. А если у вас на проекте еще и тестировщиков подключают на этапе прототипирования, то прям ммммм. Берешь читы и задаешь вопросы

Остальные примеры:

  1. Возьмем числовое поле. Оно необязательно и не имеет ограничений
    Из чист-листа «Поле ввода» берем блоки ОБЩЕЕ + ЧИСЛОВОЙ и соединяем. В чек-лист записываем требования к полю

  2. А что делать, если надо проверить… дату/время (подставь сюда своё)?
    Выносим дату/время в отдельный чит-лист и снова комбинируем. Берем чит-лист «Поле ввода» (оттуда берем блоки ОБЩЕЕ + ЧИСЛОВОЙ) + чит-лист «Дата/время»

Чит-лист для Даты/времени (да, здесь нет американской записи даты, 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 страниц, шаблонов, в которых все понятно».

© Habrahabr.ru