Привет, хабр. Меня зовут Кияшева Екатерина и я руковожу тестированием. Сегодня хочу поделиться своим чит‑листом обо всем.

Чит‑лист — набор стандартных проверок для многократного использования в различных приложениях, одинаковых по какой‑либо характеристике.

Я использую чит‑лист с тремя целями:

  1. передаю его своим коллегам, чтобы маст-хэв тесты не были забыты,

  2. заглядываю в него перед проверкой тестового покрытия коллег на малознакомом проекте,

  3. проверяю себя в ходе вычитки техзадания и при тест‑дизайне.

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


Чит‑лист разбит на 4 категории — Данные, Операции, Функциональности, Технология. В каждой категории собраны проверки для функционального тестирования системы с соответствующего ракурса. Я для себя приоритизирую категории сверху вниз:

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

  • Потом выясняю, какие простейшие операции с данными задействованы. В сущности любые функциональности можно свести к простейшим CRUD операциям выборки, добавления, обновления и удаления данных. Операции передачи и преобразования данных, как правило, также заканчиваются CRUD операцией, их результаты достовернее смотреть в базе данных, потому к числу простейших их не отношу.

  • Далее смотрю, есть ли типовые функциональности и типичные проверки для их тестирования.

  • И наконец смотрю, каким образом реализована функциональность и какие типовые проверки в связи с этим нужно провести.

В тестовое покрытие обычно включается по одной группе проверок из каждой категории. Но может быть и больше и меньше. Для примера, возьмем простейшую задачу «Протестировать функцию размещения товаров на витрине интернет магазина».

  1. Данные: для описания товаров используются строковые поля, числовые и дата. Рассматриваем проверки из групп «Строка», «Число», «Дата и время»,

  2. Операции: это операция добавления, группа в чит‑листе «Операция добавления записи (Insert)»,

  3. Функциональности: положим, для размещения товара нужно загрузить его фотографии, это группа «Функция загрузки файла»,

  4. Технология: мы проверяем систему на уровне UI‑интерфейса и это WEB приложение, соответственно читать нужно группы «UI интерфейс» и «WEB приложение».

Данные

При наличии входных параметров, например, полей ввода,  проанализировать dataset. Выбрать набор данных, на которых проводить тесты.

  • Строка

Выбрать 3 базовых значения

Наиболее популярные корректные данные с точки зрения целевой аудитории (ЦА), бизнес‑сценариев, предметной области.

Выбрать MIN и MAX длину строки

Граничные значения корректных данных в соответствии с требованиями и оракулами в тестировании. Поискать в интернете, какой MIN и MAX значения может быть — самая длинная/короткая фамилия, название города, название юр. лица и т. д.

  • Пример длиной строки: Сел Иван на коня и поскакал, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, скок‑скок, слез с коня. Приехал.

Выбрать допустимые и недопустимые символы

Допустимые РеГиСтР, раскладка, языки, цифры, спецсимволы, маска ввода в соответствии с требованиями и оракулами в тестировании.

  • Примеры языков:

    • English Pikachu,

    • 中國皮卡丘,

    • Pikachu français,

    • 日本のピカチュウ,

    • 한국 Pikachu.

  • Примеры спецсимволов:

    • пробелы в середине, начале, конце строки,

    • одни пробелы в строке,

    • <script>alert(123)</script>,

    • <.

  • Число

Исследовать число, выбрать базовое значение

Наиболее популярные и срединные корректные значения с точки зрения целевой аудитории (ЦА), бизнес‑сценариев, предметной области.

  • Область исследования целых чисел и примеры:

    • единицы измерения (г/ см/ руб/ лет и т. д.), в которых пользователь будет вводить и читать значения,

    • потребуется ли автоматическое определение и преобразование кратности, например,

      • 2000г=> 2кг,

      • 120мин=> 2ч,

      • 200см=> 2м и т. д.,

    • необходим ли разделитель групп разрядов и каким он будет, например

      • точка: 1.000,

      • пробел: 1 000,

    • есть ли значение по‑умолчанию или предустановленное значение (сохраняется, если пользователем ничего не введено).

  • Область исследования дробных чисел и примеры:

    • разрядность дробной части, например,

      • 1 знак после запятой: 0,1,

      • 2 знака после запятой: 0,01,

      • n знаков после запятой: 0,00..1,

    • формат десятичного разделителя, например

      • Десятичная точка: 10.01,

      • Десятичная запятая: 10,01,

    • метод округления, например

      • к ближайшему целому,

      • к меньшему или к большему,

      • к меньшему или большему по модулю,

    • продвинутые числа, например

      • 1Е-16,

      • F0.

Выбрать диапазон допустимых чисел

Граничные значения корректных данных в соответствии с требованиями и оракулами в тестировании.

  • логические MIN и MAX допустимые значения,

  • математические подмножества допустимых значений, например

    • ноль (!), положительные, отрицательные числа,

    • четные, нечетные числа,

  • диапазоны допустимых значений предметной области, например на базе

    • тарифов,

    • табелей, т.д.

  • Дата и Время

Исследовать дату/время, выбрать базовое значение

Наиболее популярные и срединные корректные значения с точки зрения целевой аудитории (ЦА), бизнес‑сценариев, предметной области.

  • Область исследования дат и времени:

    • дата и время по‑умолчанию,

    • допустимые форматы даты и времени при вводе, хранении и выводе данных, например,

      • Россия DD.MM.YYYYhh:mm:ss24.01.201 116:35:00,

      • СШАMM‑DD‑YYYYhh:mm:ss01–24–201 116:35:00,

      • Великобритания DD/MM/YYYYhh:mm:ss24/01/201 116:35:00,

      • Бельгия DD/MM/YYYYhh:mm:ss24/01/201 116:35:00,

      • Венгрия YYYY‑MM‑DDhh:mm:ss2011–01–2416:35:00,

      • Швейцария DD.MM.YYYYhh,mm,ss24.01.201 116,35,00,

      • Швеция YYYY‑MM‑DDhh.mm.ss2011–01–2416.35.00,

    • определение даты и времени в разных часовых поясах пользователей,

    • вариации автоматического определения даты и времени при вводе неточного значения, например,

      • по части значения — 01.01 для даты, 12 для времени,

      • значение без разделителей — 01 012 000 для даты, 0000 для времени,

      • значение с некорректными разделителями — 01,01,20 для даты, 00/00 для времени,

      • по строке — 9 января.

Выбрать диапазон допустимых дат

Граничные значения корректных данных в соответствии с требованиями.

  • Области граничных значений даты и времени:

    • подмножества во временной шкале — в прошлом, в будущем, в настоящем,

    • последнее значение в единице времени

      • последняя секунда в часе, дне, году,

      • последняя дата в длинном и коротком месяце 30 или 31,

      • последняя дата в феврале в високосные и обычные годы 28 или 29

    • абсолютная MIN, MAX дата/время

      • статическая, например, дата рождения не меньше 1900 года,

      • динамическая, например, дата рождения не позже минус 18 лет от текущей даты,

    • диапазоны допустимых значений в соответствии с документами, например на базе

      • расписаний,

      • графиков, т.д.

  • Условия вычисления введенной даты и времени системой:

    • определение даты и времени в зависимости от часовых поясов пользователей и сервера,

    • определение времени в зависимости от времени года — зимнее и летнее время.

Операции

При наличии CRUD операций, выбрать перечень операций, задействованных в проверяемой функциональности. Проверить на уровне выборки, сохранения, обновления, удаления данных в БД. Проверить, что все поля сохранены, в полном объеме: строка не обрезана, разрядность числа сохранена, значение даты и времени сохранены корректно.

  • Операция добавления записи (Insert)

Сохранение базовых значений

Сохранить записи, состоящие из базовых значений и значений по‑умолчанию, выбранные в ходе тест‑дизайна данных (раздел «Данные») => Сохранение успешно.

Сохранение граничных значений

Сохранить записи, состоящие из граничных допустимых значений, выбранные в ходе тест‑дизайна данных (раздел «Данные») => Сохранение успешно.

Блокировка сохранения только необязательных параметров
  • Заполнить только необязательные для ввода поля, сохранить запись => Обязательные для заполнения поля подсвечены цветом, сохранение заблокировано.

  • Заполнить только обязательные для ввода поля, сохранить запись => Сохранение успешно.

Блокировка сохранения дубликатов

Выяснить, какое поле или комбинация полей должны быть уникальным. Сохранить дубликат => Сообщение об ошибке, сохранение заблокировано.

Блокировка сохранения недопустимых значений

Ввести недопустимые значения, выбранные в ходе тест‑дизайна данных (раздел «Данные»), сохранить запись => Поля, заполненные некорректно, подсвечены цветом. Сохранение заблокировано.

Автоматическое удаление конечных пробелов

Ввести пробелы в начале и конце строки, сохранить запись => Запись сохранена без конечных пробелов в начале и в конце.

Блокировка DDOS добавления

Отправить несколько запросов на добавление одной записи одновременно (эмуляция добавления во время зависания сервера) => Сохранена запись по первому пришедшему запросу, остальные отклонены.

  • Операция редактирования записи (Update)

Удаление части данных из записи

Взять максимально заполненную запись, в которой заполнены все возможные поля, добавлены связанные и дочерние данные. В режиме редактирования удалить все необязательные, связанные и дочерние данные, сохранить изменения => Изменения сохранены, данные удалены в полном объеме.

Обогащение записи данными

Выбрать минимально заполненную запись, в которой заполнены только обязательные поля. В режиме редактирования добавить данные, не обязательные для заполнения, всевозможные связанные и дочерние данные, сохранить изменения => Изменения сохранены, данные добавлены в полном объеме.

Изменение данных в записи

Выбрать запись, состоящую из базовых и срединных данных. Выполнить проверки из раздела «Операция добавления записи (Insert) — Сохранение граничных значений» на одной и той же записи в режиме редактирования.

Сохранение данных без изменения

Выбрать любую запись. В режиме редактирования записи ничего не менять, сохранить => Запись сохранилась, дубликатов не создалось

  • Операция удаления записи (Delete)

Удаление записи

Выбрать атомарную запись, удалить ее, подтвердить удаление => После подтверждения, запись удаляется.

Блокировка каскадного удаления связанных данных

Выбрать запись со связями. Например,

  • попытаться удалить должность, уже назначенную сотрудникам,

  • попытаться удалить метод расчета, уже используемый в вычислениях.

Удалить запись => Сообщение об ошибке, удаление заблокировано.

  • Язык поискового запроса (Select) 

Простой поиск по фрагменту слова

Выбрать фрагмент слова, встречающийся хотя бы в одной записи базы данных, вычислить количество записей с искомым фрагментом. Выполнить поиск по фрагменту слова => В выборку попали все записи с искомым фрагментом слова.

Простой поиск по словосочетанию

Выбрать словосочетание, встречающееся хотя бы в одной записи базы данных, вычислить количество записей с искомым словосочетанием. Выполнить поиск по словосочетанию => В выборку попали все записи с искомым словосочетанием.

Поиск в разных регистрах

Выполнить поиск по фрагменту слова в ВЕРХНЕМ регистре, потом сделать поиск этого же фрагмента в нижнем регистре => Количество записей в выборке при поиске в ВЕРХНЕМ и нижнем регистре совпадают.

Поиск на разных языках

Найти в базе данных слово на отличном языке, вычислить количество записей с этим словом. Выполнить поиск по выбранному слову => В выборку попали все записи с искомым словом.

Поиск слов с буквой Ё
  • Выбрать слово с буквой ё, встречающееся хотя бы в одной записи базы данных, вычислить количество записей с буквой ё. Выполнить поиск по букве ё => В выборку попали все записи с искомой буквой.

  • Вычислить количество записей с буквой ё и буквой е в составе. Выполнить поиск по букве е => В выборку попали все записи с буквой е в составе + записи с буквой ё в составе.

Поиск слов со спецсимволами в составе

Найти в базе данных слово со спецсимволами в составе, (пример слова со спецсимволом «юго‑запад») вычислить количество строк с выбранным спецсимволом. Последовательно выполнить несколько вариаций поиска выбранного слова включая и не включая спецсимвол (пример поискового запроса «юго‑запад», «югозапад», «юго запад») => Количество записей в выборке при поиске слова со спецсимволом совпадают, в выборку попали все записи с искомым словом.

Расширенный поиск

Выяснить, есть ли расширенный поиск, изучить язык поискового запроса (wildcard/ regexp) — какие спец символы обрабатываются, как метасимволы ([ ] \ / ^ $. | ? * + ( ) { }). Примеры расширенного поиска:

  • Поиск всех слов из поискового запроса: найти в базе данных 2 слова (например, «небо»,»земля»), встречающиеся в нескольких записях, вычислить количество таких записей. Выполнить поиск (пример, «небо*земля) => В выборку попали все записи с искомыми словами, вне зависимости от количества слов, которые разделяют искомые слова.

  • Поиск любого слова из поискового запроса: найти в базе данных 2 слова, которые оба встречаются в записи или любое из них, вычислить количество таких записей. Выполнить поиск (пример, «небо|земля») => В выборку попали все записи с искомыми словами — где есть оба слова + где есть первое слово + где есть второе слово.

  • Исключение слова из поиска: выбрать слово, которое встречается не во всех записях базы данных, подсчитать количество записей. Выполнить поиск (пример, «‑земля») => В выборку попали все записи, где не встречается искомое слово.

  • Поиск точного слова или фразы: выбрать фразу, которая по отдельным словам встречается в нескольких записях, а в точности только в одной. Выполнить поиск (пример, «Под большим шатром») => В выборку попала одна искомая запись.

  • Операция ETL (обновления массива записей, Select-Insert-Update-Delete)

Миграция массива данных

Исследовать область выборки в системе‑источнике, должны ли загружаться все данные или за некоторый временной интервал (были созданы в искомый диапазон, были обновлены в искомый диапазон). Подсчитать количество записей, которые должны выгрузиться из системы‑источника. Сделать выгрузку из системы‑источника в систему‑получатель =>

  • Выгруженные записи из системы‑источника соответствуют заданным условиям интервала. Количество записей в системе‑получателе равно количеству выгруженных записей из системы‑источника.

  • В системе‑получателе данные однородны — даты мигрировали, как даты, числа, как числа, разрядность чисел сохранена (или преобразована в соответствии с требованиями), в строках отсутствуют неожиданные спецсимволы.

  • Все обязательные для заполнения поля в системе‑источнике, заполнены в системе‑получателе.

  • Количество связанных данных в системе‑источнке, совпадает с количеством связанных данных в системе‑получателе. Выборочно сопоставить количество в нескольких группах данных (например, количество сотрудников в 3 разных отделах должно быть одинаковым в системе‑источнике и системе‑получателе).

Миграция добавленных, обновленных и удаленных данных в массиве

Выполнить или эмулировать действия с 3 разными записями в системе‑источнике: добавить новую, обновить, удалить. Сделать выгрузку из системы‑источника в систему получатель => В системе‑получателе записи обновлены в полном объеме.

Миграция нетипичных данных и граничных значений

В системе источнике выбрать самые необычные записи, где встречается очень длинная или очень короткая строка, есть спецсимволы или пробелы, необычный формат даты, необычный формат числа, запомнить их. Сделать выгрузку из системы‑источника в систему получатель => В системе получателе проверяемые записи полностью идентичны (или преобразованы в соответствии с требованиями).

Обработка некорректных данных в массиве

Сэмулировать записи с некорректными данными в системе‑источнике:

  • поле, обязательное для заполнения — пустое,

  • значение больше/меньше допустимого по длине или величине,

  • в поле неверный тип данных

Сделать выгрузку из системы‑источника в систему‑получатель => Система‑получатель успешно выполнила загрузку, отвергла записи с некорректными данными с комментариями причины, в логах сохранена информация о количестве загруженных и отвергнутых записей.

Миграция максимально большого массива данных

Взять или эмулировать максимально большой массив записей в системе‑источнике — максимум записей, которые могут быть, все поля в записях заполнены. Сделать выгрузку из системы‑источника в систему‑получатель =>

  • Время миграции данных из одной системы в другую удовлетворяет требованиям.

  • В логах фиксируется прогресс загрузки и финальный итог — сколько записей загружено.

  • Количество загружаемых записей из системы‑источника равно количеству в системе приемнике.

Функциональности

При тестировании типовой функциональности, выбрать ее из списка и выполнить типовые проверки.

  • Функция регистрации

Регистрация учетной записи

Выполнить проверки из радела:

  • «Операция добавления записи (Insert) — Сохранение граничных значений»,

  • «Операция добавления записи (Insert) — Блокировка сохранения только необязательных параметров»,

  • «Операция добавления записи (Insert) — Блокировка сохранения дубликатов»,

  • «Операция добавления записи (Insert) — Блокировка сохранения недопустимых значений»,

  • «Операция добавления записи (Insert) — Автоматическое удаление конечных пробелов»,

  • «Операция добавления записи (Insert) — Блокировка DDOS добавления»,

где,

  • всегда обязательны для заполнения «Логин», «Пароль», «Подтверждение пароля»,

  • всегда уникальны поля «Логин», «Телефон», «E‑mail»,

  • в маске поля «E‑mail» всегда есть символ @.

Зарегистрировать учтеную запись => Пользователь зарегистрирован, авторизуется в своей учетной записи. Пароль пользователя нигде не фигурирует в открытом виде — URL, логах, базе данных.

Ошибка подтверждения пароля при регистрации

Ввести различные значения в поля «Пароль» и «Подтверждение пароля» => Поля подсвечены цветом, сообщение об ошибке отражает суть ошибки. Регистрация заблокирована.

Блокировка регистрации без согласия на обработку персональных данных

Проверить наличие опции «Согласие на обработку персональных данных», опция есть!

Отключить опцию, попытаться зарегистрироваться => Поле подсвечено цветом, сообщение об ошибке отражает суть ошибки. Регистрация заблокирована.

  • Функция сброса пароля

Сброс пароля учетной записи

Выполнить проверки из радела:

  • «Операция добавления записи (Insert) — Сохранение граничных значений»,

  • «Операция добавления записи (Insert) — Блокировка сохранения только необязательных параметров»,

  • «Операция добавления записи (Insert) — Блокировка сохранения дубликатов»,

  • «Операция добавления записи (Insert) — Блокировка сохранения недопустимых значений»,

  • «Операция добавления записи (Insert) — Автоматическое удаление конечных пробелов»,

  • «Операция добавления записи (Insert) — Блокировка DDOS добавления»,

где всегда обязательны для заполнения «Пароль» и «Подтверждение пароля». Изменить и подтвердить пароль => Пароль изменен, Пользователь авторизуется под новым паролем, не может авторизоваться под старым паролем или без пароля.

При наличии админки для сброса паролей, выполнить перечень проверок под пользователем (сбросить свой пароль) и под админом (сбросить пароль пользователя).

Принудительный разлогин со всех устройств при сбросе пароля

Авторизоваться в нескольких клиентах (устройствах/ браузерах). В одном из них изменить пароль => После смены пароля происходит автоматический разлогин во всех клиентах. В каждом из них авторизация успешна только с новым паролем.

Прерывание во время сброса пароля

Вызывать сброс пароля, получить в почте ссылку на форму сброса пароля. Перейти по ссылке, закрыть форму. Повторно перейти по ссылке, изменить пароль => После прерывания операции смены пароля, пользователь может авторизоваться по старому паролю. После завершения операции пользователь может авторизоваться только по новому паролю.

Ошибка подтверждения пароля при сбросе

Сбросить пароль, перейти по ссылке в почте, на форме изменения пароля ввести разные пароли в поле «Пароля» и «Подтверждения пароля» => Выводится сообщение об ошибке, авторизация по старой паре логин — пароль успешна.

Блокировка смены пароля на тот же самый

Попытаться сменить пароль на тот же самый => Сообщение об ошибке, сохранение нового пароля заблокировано, авторизация по старой паре логин — пароль успешна.

Блокировка многократного сброса пароля по одной ссылке

Вызвать сброс пароля, получить в почте ссылку на форму смены пароля. Перейти по ссылке, на форме сменить и сохранить новый пароль. Повторно перейти по ссылке из письма => Происходит переход на форму с сообщением об ошибке, на форме есть ссылка на вызов функции сброса пароля.

Блокировка использования устаревшей ссылки на сброс пароля

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

  • Функция авторизации

Стандартная авторизация

Авторизоваться => Доступ есть, в URL нет логина/пароля пользователя, в логах и куках нет пароля пользователя.

Блокировка авторизации без логина

Авторизоваться без логина => Доступ отсутствует, сообщение об ошибке отражает суть ошибки.

Блокировка авторизации без пароля

Авторизоваться без пароля => Доступ отсутствует, сообщение об ошибке отражает суть ошибки.

Блокировка авторизации с ошибочным паролем

Авторизоваться с неверным логином/ паролем => Доступ отсутствует, сообщение об ошибке отражает суть ошибки.

Блокировка перебора паролей

Авторизоваться с одним логином и неверным паролем 10 раз => Доступ отсутствует, сообщение о временной блокировке.

Количество неуспешных попыток авторизации и время блокировки оговаривается в требованиях.

Блокировка авторизации под заблокированной учетной записью

Авторизоваться под заблокированной учетной записью => Доступ отсутствует, сообщение об ошибке отражает суть ошибки.

Уведомление об авторизации с другого устройства

Предварительно выяснить, есть ли функция уведомлений о несанкционированном доступе. Авторизоваться в системе с одного клиента (браузера/ устройства). Повторно авторизоваться со второго клиента (браузера/устройства) => Пользователь успешно авторизован в обоих случаях, получает уведомление (например в почту) об авторизации на втором клиенте.

Сохранение сессии при авторизации
  • Предварительно отключить опцию «Запомнить меня», авторизоваться, закрыть — открыть браузер => Пользователь попадает на форму авторизации.

  • Предварительно включить опцию «Запомнить меня», авторизоваться, закрыть — открыть браузер => Пользователь попадает в систему авторизованным.

Автоматическое продление аутентификации при достижении refresh date

Установить короткий срок refresh date и expiration date. Авторизоваться, дождаться времени наступления refresh date, выполнить действие в интерфейсе => Доступ сохранен, expiration date продлен.

  • Функция принудительной авторизации (force auth)

Принудительная авторизация по ссылке force auth

Перейти из почты по ссылке force auth => Пользователь попадает в систему

  • авторизованным,

  • на страницу, указанную в ссылке,

  • pop‑up»ы и рекламные банеры, не относящиеся к содержанию письма, отключены.

Блокировка авторизации после "протухания" ссылки force auth

Дождаться протухания ссылки force auth и перейти по ней => Сообщение об ошибке, пользователю доступна форма авторизации.

  • Функция разлогина

Принудительный разлогин пользователем

Авторизоваться в разных вкладках браузера, разлогиниться на одной из них => Доступ отсутствует во всех вкладках браузера.

Принудительный разлогин со всех устройств

Предварительно выяснить, есть ли функция разлогина со всех устройств во время принудительного разлогина. Авторизоваться на разных клиентах (браузерах/устройствах), разлогиниться с одного из них, обновить страницу на втором => Пользователь попадает на форму авторизации.

Разлогин при потере аутентификации на клиенте

Авторизоваться, удалить куки в браузере, обновить страницу => Доступ отсутствует, пользователь попадает на форму авторизации.

Разлогин при истечении access token

Установить короткий срок refresh date и expiration date. Авторизоваться, дождаться времени наступления expiration date, выполнить действие в интерфейсе => Доступ заблокирован, пользователь попадает на форму авторизации.

  • Функция платежа и покупки

Успешный платеж

Выполнить несколько платежей в каждый доступный банк => Транзакция выполнена успешно, баланс банковской карты уменьшен на сумму тестового платежа, баланс пользователя в системе увеличен на сумму тестового платежа либо проведена покупка. Сохранилась история пополнения баланса пользователя в системе.

Блокировка платежа из-за нехватки средств

Сделать попытку платежа на сумму превышающую баланс на банковской карты => Транзакция заблокирована, запрос вернул сообщение об ошибке, текст ошибки отражает ее суть, баланс пользователя в системе НЕ увеличен, покупка НЕ проведена. Сохранилась история о попытке пополнения баланса.

Блокировка платежа из-за недоступности платежной системы

Предварительно эмулировать недоступность платежной системы, сделать попытку платежа => Транзакция заблокирована, запрос вернул сообщение об ошибке, текст ошибки отражает ее суть, баланс пользователя в системе НЕ увеличен, покупка НЕ проведена. Сохранилась история о попытке пополнения баланса.

Отложенная отмена платежа

Выполнить успешный платеж, дождаться пополнения баланса пользователя в системе, сделать отмену платежа через платежную систему => Ожидаемый результат в зависимости от требований, или уменьшение баланса пользователя на сумму отмененной покупки, или блокировка отмены платежа.

  • Функция фильтров, сортировок, пагинации

Выборка записей по фильтру

Проверить все имеющиеся фильтры по одному:

  • фильтр — выпадающий список: последовательно отфильтровать сначала по первому, потом по последнему значению => количество отфильтрованных записей по выбранному значению равно количеству записей, выбранных из БД аналогичной выборкой,

  • фильтр — строковое поле: последовательно отфильтровать по слову, потому по фрагменту слова => количество отфильтрованных записей по выбранному значению равно количеству записей, выбранных из БД аналогичной выборкой,

  • фильтр — начальная и конечная дата: последовательно выполнить 3 фильтрации, «начальная дата < конечной даты», «начальная дата = конечной дате», «начальная дата > конечной даты» => 1) количество отфильтрованных записей по выбранному диапазону равно количеству записей, выбранных из БД аналогичной выборкой, 2) в результаты фильтрации попали записи по выбранной дате, 3) система уведомляет пользователя, что фильтр установлен некорректно,

  • фильтр — календарь: выяснить, с какой даты должен работать фильтр, отфильтровать данные по минимально возможной дате => количество отфильтрованных записей по выбранному значению равно количеству записей, выбранных из БД аналогичной выборкой.

Во всех случаях визуально видно, когда фильтр выключен, когда включен.

Выборка записей по комбинации фильтров

Исследовать фильтры, выявить иерархию фильтров, если она есть. Пример головного фильтра в иерархии — фильтр — календарь, выводит все записи на выбранную дату, которые можно фильтровать по другим параметрам. Выяснить должна ли сбрасываться фильтрация при переключении головного фильтра, по‑умолчанию должна.

Сортировка записей
  • отсортированы по‑умолчанию при открытии страницы. Часто «Дата» в обратном порядке + «ФИО» в прямом порядке.

  • Проверить все имеющиеся кнопки сортировки по одной => Визуально видно включена ли сортировка поля и в каком порядке отсортированы записи. Фактическая сортировка записей соответствует статусу кнопки.

  • Проверить максимально запутанные комбинации сортировок. Включить сортировку 5 поля, потом 1, потом 3, потом 2, поменять направление сортировки 5 поля и т. д. => В результате любой последовательности включения и выключения кнопок сортировки визуально должно быть понятно, как отсортированы записи. Если непонятно, вероятно нужно удалять лишние связи между кнопками сортировки.

Работа с отфильтрованными и отсортированными данными

Отфильтровать записи, включить сортировку, переключиться на другую страницу (любую не первую). В получившейся выборке открыть одну запись в режиме редактирования, внести изменения и сохраниться => После сохранения происходит переход в этот же список записей, на ту же страницу, также отфильтрованных и отсортированных, как до начала операции редактирования.

  • Функция поисковых запросов

Автоматическое удаление конечных пробелов

Ввести в поисковую строку слово с пробелами в начале и в конце слова. Выполнить поиск => В результатах выборка с искомыми словами без учета введенных пробелов.

Сохранение параметров поиска при переключении страниц

Выполнить поиск, который даст поисковую выборку на несколько страниц. Выполнить переключения между страницами, перейти к последней странице, потом к первой => Результаты поиска сохраняются.

Поиск на разных уровнях, в разных областях

Выяснить области поиска, он выполняется в рамках страницы или всего сайта, среди статей, документов, картинок, сообщений, т.д., по заголовкам и/или по содержанию. Последовательно выполнить поиск несколько раз таким образом, чтобы в выборку попали записи из каждого уровня и области => Результаты выборки соответствуют поисковому запросу.

Включение и отключение поиска

Выяснить, есть ли требования к количеству символов в поисковой строке для включения поиска, для отключения поиска.

  • Последовательно выполнить поиск слишком короткой строки, потом слишком длиной строки => Сообщение об ошибке, текст ошибки соответствует ее сути.

  • Последовательно выполнить поиск по максимально допустимой короткой и длиной строке => Результаты выборки соответствуют поисковому запросу.

Включение поисковой подсказки

Выяснить, должна ли включаться поисковая подсказка и с какого введенного символа, есть ли требования к релевантности записи в подсказке, какое максимальное количество записей может выводиться в подсказке.

  • Ввести в поисковую строку фрагмент слова, чтобы подсказка появилась, удалить по одному символу, ввести тот же фрагмент, удалить по одному символу, ввести другой фрагмент => Поисковая подсказка выводится в соответствии с требованиями к количеству символов и релевантности.

  • Ввести в поисковую строку фрагмент слова, чтобы подсказа появилась, выбрать предложенный в подсказке вариант => В поисковую строку вводится текст из подсказки.

Ошибка поиска: слишком большая выборка

Выяснить, как должен вести себя поиск при попытке выборки, например, всех записей — выводить все записи, не выводить ничего или сообщать об ошибке. Какое количество записей в результатах поиски считается «слишком большим».

Ошибка поиска: ничего не найдено

Выполнить поиск фразы, которой нет в базе данных => Сообщение об ошибке, текст ошибки соответствует ее сути.

  • Функция ETL (извлечение — преобразование — загрузка данных)

Загрузка по расписанию или событию

Выяснить, как инициируется миграция данных из одной системы в другую, по расписанию, либо по событию. Инициировать старт загрузки => В логах системы зафиксированы дата и время старта загрузки.

Блокировка загрузки при недоступности связанной системы

Сэмулировать потерю связи со связанной системой, инициировать старт загрузки => Ошибка в логах системы‑инициатора загрузки, текст ошибки отражает ее суть, загрузка отменена, выслано уведомление на почту.

Прерывание и восстановление загрузки

Инициировать старт загрузки, прервать процесс в середине, снова инициировать старт => В системе‑инициаторе загрузки сохранились логи о количестве загруженных записей и всех записях, которые должны были загрузиться при первой операции. При повторной загрузке данные загружены в полном объеме, нет дубликатов и недостающих записей, в логах системы сохранен статус об успешной загрузке.

Влияние загрузки на работу пользователей

Выяснить, как долго выполняется миграция данных, влияет ли на работу пользователей и каким образом (работа с системой блокируется, система тормозит), в какое время планируется выполнять миграцию данных (рабочее, нерабочее).

  • Функция загрузки файла

Загрузка файла

Выяснить все способы загрузки файла — по ссылке, с ПК, методом перетаскивания файла в область загрузки, все допустимые расширения фала (пример, txt, xls, xlsx, exe, jpeg, xml, html, zip), допустимый минимальный и максимальный вес файла.

Последовательно выполнить загрузку файла

  • всеми доступными способами,

  • всех доступных расширений,

  • максимально и минимально допустимого веса,

  • ENG/ РУС названием.

=> Файл загружен, сохранен в базе данных, доступен для просмотра. Название файла сохранено в системе в корректной кодировке.

Одновременная загрузка нескольких файлов

Выяснить, должна ли работать постановка в очередь на загрузку сразу нескольких файлов. Выбрать несколько файлов, загрузить их в систему => Файлы загружены, все сохранены в базе данных и доступны для просмотра.

Долгая загрузка тяжелого файла
  • Выбрать очень тяжелый файл (например, видеоролик), загрузить его

  • Взять большое количество файлов, загрузить их

=> В ходе загрузки пользователю выводится preloader (или progress bar), по окончании загрузки файл(ы) доступны для просмотра.

Блокировка загрузки файла с недопустимым расширением

Выполнить загрузку нескольких файлов недопустимого расширения (пример, txt, xls, xlsx, exe, jpeg, xml, html, zip) => Сообщение об ошибке, текст ошибки соответствует ее сути, загрузка заблокирована.

Блокировка загрузки файла недопустимого веса

Последовательно выполнить загрузку слишком легкого файла, слишком тяжелого файла => Сообщение об ошибке, текст ошибки соответствует ее сути, загрузка заблокирована.

Блокировка загрузки битого файла

Выполнить загрузку битого файла => Сообщение об ошибке, текст ошибки соответствует ее сути, загрузка заблокирована.

Блокировка загрузки файла из недопустимого места

Ввести некорректный путь до файла (некорректная ссылка или некорректный адрес файла на ПК) => Сообщение об ошибке, текст ошибки соответствует ее сути.

Блокировка загрузки файла с недопустимым названием

Выяснить, есть ли требования к наименованию файла (длине наименования, составу символов, поддерживаемым языкам). Выполнить загрузку файла с недопустимой длиной названия, недопустимыми символами в названии => Сообщение об ошибке, текст ошибки соответствует ее сути, загрузка заблокирована.

  • Функция импорта данных из файла EXCEL

Загрузка шаблона файла

Шаблон загрузки есть! Скачать и загрузить шаблон => Файл загружен в полном объеме:

  • все записи и колонки в них,

  • загруженные данные в правильной кодировке,

  • данные со всех страниц, если шаблоном предусмотрена загрузка данных из нескольких страниц EXCEL,

  • EXCEL‑объекты, если шаблоном предусмотрена загрузка диаграмм, картинок.

Блокировка загрузки файла, не соответствующего шаблону

Скачать шаблон загрузки и испортить его:

  • удалить первую строку с заголовком, выполнить загрузку файла,

  • удалить колонку с данными, выполнить загрузку файла.

=> Сообщение об ошибке, текст ошибки соответствует ее сути.

Загрузка файла, сохраненного в разных редакторах

Последовательно загрузить EXCEL, сохраненный в разных редакторах (пример, MS Office, Google Docs, Libre Office) => Файл загружен в систему, кодировка загруженных данных корректная.

  • Функция импорта данных из файла CSV

Обработка разделителей при загрузке

Выяснить, какой спецсимвол будет служить разделителем колонок (пример, «Tab», «,», «;», «|»). Исследовать массив данных, который планируется загружать через CSV. В нем не должно встречаться символов, зарезервированных под разделители, если не предусмотрено экранирование этих символов. Последовательно выполнить загрузку CSV со всеми доступными разделителями => Файл загружен в полном объеме:

  • все записи и колонки в них,

  • данные разбиты между колонками, как в исходном массиве,

  • загруженные данные в правильной кодировке.

Загрузка экранированных спецсимволов

Выяснить, есть ли в CSV экранирование спецсимволов и каких (пример, «\»», «\»», «\n»). Выполнить загрузку CSV файла со всеми спецсимволами, которые должны экранироваться => Файл загружен в полном объеме, спецсимволы загружены в систему корректно: без косой черты, распознаны и сохранены как текст.

  • Функция блокировки пользователей

Блокировка пользователя

Заблокировать пользователя =>

  • Пользователь не может авторизоваться в системе, видит уведомление о блокировке, в тексте уведомления указан срок блокировки,

  • Ни с каких балансов пользователя ничего не списывается в течение всего периода блокировки.

Автоматическая разблокировка пользователя

Дождаться срока окончания блокировки пользователя, авторизоваться под ним => Авторизация в систему успешна.

Принудительная разблокировка пользователя

Принудительно разблокировать пользователя, авторизоваться под ним => Авторизация в систему успешна.

Технология

Выбрать тип проверяемого ПО и базовые проверки для него.

  • UI интерфейс

Проверить удобство добавления и редактирования текста в полях ввода
  • Перейти в режим добавления записей, заполнить поля ввода вручную, заполнить копипастой (Ctrl+С — Ctrl+V) => Текст добавлен в поле ввода.

  • Перейти в режим редактирования записей, отредактировать поля ввода с начала строки, в середине строки => Текст изменен в поле ввода.

Проверить подсказки к полям ввода

Рассмотреть все поля ввода на форме => Поля снабжены подсказками (tooltip, hint, placeholder), подсказки разворачиваются полностью, в тексте нет опечаток.

Проверить удобство работы с многошаговой формой
  • Последовательно заполнить каждый шаг формы =>

    • Есть прогресс бар заполненности шагов, отражает количество всех и заполненных шагов.

    • Следующий шаг недоступен, пока не заполнены обязательные поля на текущем шаге (если это предусмотрено требованиями).

    • Есть возможность вернуться к предыдущим шагам на каждом следующем шаге формы.

  • Заполнить несколько шагов формы, не сохраняться, вернуться к первому шагу => Введенные на первом шаге данные сохранены в полях ввода. Поля не очистились.

  • Заполнить несколько шагов формы, не сохраняться, закрыть форму => Запрос подтверждения на закрытие с предупреждением, что данные будут утеряны, если не сохраниться.

Проверить управление с клавиатуры

Отложить мышь, заполнить форму с помощью клавиатуры =>

  • По‑умолчанию активно первое обязательное для заполнения поле ввода.

  • По нажатию Tab происходит переход между полями последовательно слева направо, сверху вниз.

  • Поле ввода в фокусе — подсвечивается.

  • По‑умолчанию активна кнопка подтверждения или сохранения, срабатывает по клику на Enter.

Проверить согласованность состояния и внешнего вида элементов
  • Рассмотреть все элементы формы, кликнуть на каждый => Визуально видно:

    • состояние индикаторов, фильтров, сортировок — включены они или выключены,

    • кликабельность элементов — доступно ли поле для ввода, доступна ли кнопка для нажатия.

  • Поводить курсором по элементам формы => над полями ввода курсор преобразуется в палец.

Проверить единообразие
  • Для новой формы. Сопоставить форму с другими формами приложения, с аналогичной формой аналогичных приложений (если известен ближайший конкурент, его приложением) => В новой форме сохранен стиль приложения. Расположение полей и кнопок привычен пользователю.

  • Для формы после обновления ее дизайна. Сопоставить новую версию формы с ее старой версией => В обновленной форме сохранились все индикаторы, поля и кнопки по сравнению со старой версией. Никакая функциональность формы не потеряна для пользователя после ее обновления.

  • WEB приложение

Проверить на соответствие 152ФЗ

Осмотреть приложение на предмет сбора персональных данных =>

  • Под каждой панелью с полями сбора персональных данных есть флажок согласия на сбор, хранение и обработку персональных данных.

  • Весь сайт работает на https протоколе. На каждой странице всплывает уведомление о сборе и хранении куков до тех пор, пока пользователь его не закроет.

Проверить брендирование страниц
  • Проверить все вкладки сайта => Каждая имеет наименование, есть favicon.

  • Инициировать 404 ошибку (ввести правильный домен и неправильный адрес страницы) => Страница с описанием ошибки брендированная.

  • Инициировать 5ХХ ошибку (запросить страницу заглушку, которая подставляется на случай недоступности сервера) => Страница с ошибкой брендированная.

Проверить в разных масштабах страницы

Увеличить масштаб страницы до 150% (Ctrl+), уменьшить масштаб страницы до 70% (Ctrl‑) => Текст масштабируется и ни на что не наезжает, фотографии и картинки не разъезжаются, горизонтальный скролл не появляется.

Проверить на ошибки фронта
  • Кликнуть на все ссылки => Нет битых ссылок. Все страницы сайта находятся на одном домене.

  • Открыть консоль браузера, кликнуть на все динамические элементы внутри страницы => Критические ошибки отсутствуют.

Проверить кроссбраузерность

поддерживаемого браузера, MIN версии каждой поддерживаемой ОС.

Если нет требований и приложение уже используется боевыми пользователями, запросить гугл/яндекс метрики.

Если нет требований и приложение еще не используется боевыми пользователями погуглить статистику популярных девайсов и браузеров (с учетом территории будущих пользователей).

Отсмотреть работу приложения в девайсах и браузерах из полученного списка.

Проверить переходы по прямым ссылкам

Попробовать перейти к страницам сайта по прямой ссылке:

  • не авторизованным пользователем => Пользователь попадает на страницу авторизации.

  • пользователем без соответствующих прав доступа => Сообщение об ошибке, текст ошибки соответствует ее сути.

  • к недоступному контенту по условиям сайта (например, доступ к контенту не оплачен, пользователем не выполнены необходимые действия для открытия контента) => Сообщение об ошибке, текст ошибки соответствует ее сути.

Проверить загрузку страниц на медленном соединении

Сэмулировать медленное соединение в браузере (на вкладке Network в DevTools), пройтись по страницам, выполнить самые «медленные» операции => Картинки начинают загружаться сразу, есть кэширование, по возможности есть предварительная загрузка контента. При выполнении «долгих» операций выводится preloader.

Проверить работу с пользовательскими настройками браузера

Включить в браузере настройку «Блокировщик всплывающих окон», перезагрузить страницу, вызвать всплывающее окно => Критичная информация из всплывающего окна выводится альтернативным способом — открывается в новой вкладке (пример, предпросмотр документа), выводится на этой же странице.

  • Мобильное приложение

Проверить установку, обновление, удаление приложения
  • Изучить системные требования к приложению, на каких характеристиках смартфонов поддерживается приложение. Минимум, наименьшую поддерживаемую версию ОС смартфона и сторы (App Store), на которых будет оно будет размещено. Последовательно установить приложение из каждого доступного стора на смартфон:

    • с наименьшей поддерживаемой версией ОС, наиболее популярной, самой свежей => Приложение успешно скачивает на смартфон, устанавливается, есть в списке приложений смартфона, открывается.

    • не поддерживаемой версией ОС (слишком старой) => Сообщение об ошибке, текст ошибки соответствует сути, скачивание приложения заблокировано.

  • Обновить версию приложения из стора => Обновления успешно скачиваются на смартфон, приложение успешно открывается.

  • Удалить приложение со смартфона. => Приложение и все его артефакты удаляются со смартфона.

Проверить разрешения приложения
  • Исследовать разрешения, необходимые для установки (данные о местоположении, календарь, камера, контакты, микрофон, список вызовов, т.д.):

    • установить приложение, выполнить функции, использующие эти разрешения. => Разрешения есть, функции выполняются, как ожидается,

    • через настройки смартфона отобрать разрешения у установленного приложения, снова выполнить эти же функции => Сообщение об ошибке, текст сообщения соответствует его сути.

  • Исследовать, использует ли приложение особые разрешения (автозапуск, работа поверх других окон). Установить приложение, выполнить функцию, для которой требуется особое разрешение => Сообщение о необходимости выдать разрешение. При согласии автоматический перевод пользователя в соответствующие настройки смартфона.

Проверить на разном соединении, потерю и восстановление связи
  • Приложение выполняет свои функции на любом канале связи.

  • Разорвать соединение, выполнить несколько действий в приложении, восстановить связь => Приложение не крашится, есть сообщение об ошибке в интерфейсе пользователя и логах, текст сообщения соответствует его сути. После восстановления соединения приложение работает в штатном режиме, никакие данные не утеряны.

Проверить обработку типовых жестов
  • Исследовать работу типовых жестов в приложении (пример, клик, перетаскивание, стягивание, растягивание, т.д.), проверить их в приложении => Управляющие элементы кликаются, «карусели» пролистываются, картинки увеличиваются и уменьшаются, файлы перетаскиваются.

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

Проверить реакцию на команды со смартфона

Запустить приложение, с помощью кнопок смартфона свернуть — развернуть, закрыть — открыть, вернуться на предыдущий экран, увеличить — уменьшить — выключить звук, выключить — включить смартфон => Работа приложения соответствует ожиданиям.

Проверить реакцию на входящие сигналы

Запустить приложение, принять входящий звонок, получить и прочитать смс, получить и прочитать push‑уведомление, получить и выключить звонок будильника => После совершения операции приложение также открыто и работает в штатном режиме.

Проверить работу с пользовательскими настройками телефона
  • Последовательно включить на смартфоне и проверить работу приложения в режимах «Не беспокоить», «В полете», «Без звука», «Ночной режим» => Пользователь получает уведомление о причинах и рекомендации, как восстановить работку приложения, каждый раз, когда оно не может выполнить свою функцию из‑за нехватки разрешений.

  • Включить на смартфоне режим «Экономия трафика» и проверить работу приложения => Весь критичный контент загружен, ничего не разъехалось.

Проверить потребление ресурсов телефона
  • Исследовать, сколько времени должна длиться стандартная сессия пользователя. Замерить на сколько хватает ресурсов телефона при длительном использовании приложения (расход заряда, потребление процессора и оперативной памяти) => Смартфон не должен перегреваться или необычно быстро разряжаться.

  • Замерить скорость выполнения операций при работе с большим количеством данных (большое количество записей, фотографий, файлов) => Любые операции, длящиеся более 2с, снабжены прелоадером. По возможности выполнена предзагрузка всего контента до начала работы с ним. БОльшая часть операций выполняется менее, чем за 1 с.

В любом случае смартфон должен работать в штатном режиме на протяжение целевой пользовательской сессии. Сессия пользователя может длиться от 10–20 минут, до нескольких часов, в зависимости от назначения приложения.

  • Почтовые письма

Проверить в разных почтовых клиентах

Выяснить топ-5 почтовых клиентов:

  • Проверить «Входящие» в различных почтовых клиентах => Письмо не валится в «Спам».

  • Открыть письмо в различных почтовых клиентах => Текст и картинки не разъезжаются, нет опечаток, письмо соответствует макету.

  • API-интерфейс

Проверить Request

Выполнить API запрос => Данные передаются по безопасному протоколу https, сертификат исправен. Обработка запроса системой получателем выполняется только после авторизации запроса в системе получателе. Генерируется токен.

Проверить Response

Разобрать ответ => В позитивных тестах, код 200 не гарантирует корректной работы. В негативных тестах, код ошибки не всегда соответствует фактической ошибке. В теле ответа должно выводиться пояснение, что не так.

Проверить URL кодирование/декодирование

Отправить в параметрах запроса спецсимволы, рус. символы, пробелы => Русские символы, спецсимволы и пробелы кодируются системой отправителем и декодируются системой получателем в исходный текст.

Комментарии (20)


  1. mokhin-denis
    00.00.0000 00:00

    А почему cheat, а не check?


    1. Tsegelnikov
      00.00.0000 00:00
      +1

      Сам термин чит-лист впервые встретил в материалах Лаборатории Качества. И там он подразумевал чек-лист с универсальными/типовыми проверками, который можно таскать с одного проекта на другой.

      В основном чек-лист делается под определённую фичу/приложение. И между проектами его сильно не потаскаешь.


  1. kerim_line
    00.00.0000 00:00

    хороший чит-лист, есть основные минимальные проверки


  1. visirok
    00.00.0000 00:00

    Очень впечатляет! Больших Вам успехов в его применении!

    А генераторы конкретных тестов вы для него не строили?


    1. ekiyasheva Автор
      00.00.0000 00:00

      О, спасибо! Надеюсь работа впечатляет в хорошем смысле :)

      Про генераторы не думала… этот чит-лист, по сути, список структурированных рекомендаций, на что обращать внимание. Какие-то из рекомендаций применимы в каждом конкретном случае, какие-то нет. Некоторые применимы всегда.

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

      Даже не знаю, как их можно автоматизировать, но было бы очень интересно узнать, как Вы это видите, на уровне идеи

      Замечу однако, что проходя по перечисленным проверкам в диалоге с разработчиком, я часто нахожу критичные недоработки задолго до начала тестирования. Может быть, его можно было бы как-то адаптировать для разработчиков?..


      1. visirok
        00.00.0000 00:00

        Надеюсь работа впечатляет в хорошем смысле

        Как многолетний практик, ещё раз подтвержу, что Ваш лист дорогого стоит.
        Детали можно обсудить в личке.


  1. astenix
    00.00.0000 00:00

    Поиск слов с «буковой» Ё :)))))))


    1. ekiyasheva Автор
      00.00.0000 00:00

      Спасибо за редактуру, поправила. Мне и правда не хватает редактора :) И это не сарказм, автоматический, как я вижу, не справился.


  1. Squoworode
    00.00.0000 00:00

    Вот и раскрыта тайна, почему люди путают педали газа и тормоза...

    Спойлер

    Газ справа, тормоз посередине


  1. ProTestingInfo_QA
    00.00.0000 00:00

    Крутая работа, буду рекомендовать коллегам. Спасибо большое за передачу знаний.


    1. ekiyasheva Автор
      00.00.0000 00:00

      Большое спасибо! Буду рада, если чит-лист будет реально полезен и распространится, особенно со ссылкой на первоисточник ;)

      С большим вниманием обработаю обратную связь, что удобно — не удобно, хватает — не хватает. Обратная связь может навести на идеи его масштабирования.


  1. alekslynx
    00.00.0000 00:00

    Достаточно интересный список проверок, спасибо!


    1. ekiyasheva Автор
      00.00.0000 00:00

      Спасибо за обратную связь :)


  1. Allene
    00.00.0000 00:00

    Спасибо. За полезные напоминалки в удобном формате .


    1. ekiyasheva Автор
      00.00.0000 00:00

      Спасибо за обратную связь :)


  1. dramkruzok
    00.00.0000 00:00

    Вот это труд. Спасибо большое!


    1. ekiyasheva Автор
      00.00.0000 00:00

      Мерси :) буду рада узнать, как полет, удобно ли пользоваться и чего не достает


  1. artsiom-rusau
    00.00.0000 00:00

    Отличный чит-лист! Обязательно поделюсь со своими студентами и в блоге :)


    1. ekiyasheva Автор
      00.00.0000 00:00

      Мерси :) буду рада узнать, как полет, удобно ли пользоваться и чего не достает


  1. Mamalazer
    00.00.0000 00:00

    Отличная статья, спасибо. Можно пополнить раздел с API проверками из этой статьи https://habr.com/ru/post/704090/ или добавить ссылку, если автор не против