вторник, 24 декабря 2019 г.

Правила написания предварительных шагов в тест-кейсах

Ссылка на Хабр (там с оглавлением)

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

См также:
Что такое тест-кейс и как его писать — подробнее о тест-кейсах

Предварительные шаги — это все то, что поможет нам пройти тест-кейс, но прямого отношения к текущему тесту не имеет. Например, регистрация.

Скажем, чтобы поставить лайк под фото, мне нужно войти в систему. Вот чтобы я смогла войти в систему, мне сначала надо зарегистрироваться, если я не делала этого раньше. Но, если я подготовилась заранее, этот предварительный шаг можно выкинуть.

Это как когда готовишь. Скажем, шарлотку

Шарлотка


Предварительные шаги

Сходить в магазин и купить:
  1. Яйца;
  2. Яблоки;
  3. Муку;
  4. Молоко;
  5. Сахар



Шаги

  1. Яйца взбить с сахаром (взбивать не менее 5–7 минут).
  2. Добавить муку, хорошо перемешать.
  3. Яблоки почистить, удалить сердцевину, нарезать небольшими дольками.
  4. Форму для выпечки смазать маслом.
  5. На тесто выложить половину яблок (яблоки можно посыпать корицей).
  6. На яблоки вылить половину оставшегося теста.
  7. На тесто выложить оставшиеся яблоки.
  8. На яблоки вылить оставшееся тесто.
  9. Поставить в разогретую до 180 градусов духовку.
  10. Выпекать в течение 40–60 минут (в зависимости от размера формы).

Ожидаемый результат

Вкусная шарлотка! Которую родные уминают за 5 минут.


Фишка в чем? Если у меня уже есть яйца, я могу их не покупать. Но взбивать их мне все равно придется. Даже если я неделю назад взбивала яйца с сахаром, я не могу их взять сейчас (они же уже протухли!). То есть шаги я выкинуть не могу, сделав их заранее. А вот предварительные — вполне.

Также и в ИТ мире. Не надо радостно перетаскивать в предварительные шаги вообще все.
Например:

Предварительные шаги
Открыть сайт https://www.example.com/ 
Шаги 
Кликнуть на кнопку «Войти»…

Что? Какая кнопка? Где мне ее искать? На рабочем столе? Шаги должны быть независимыми. Если говорить про веб-сайт, я должна открыть новую вкладку в режиме инкогнито и там пройтись по всем шагам и у меня все получится. Поэтому выкидывать ссылку на сайт в предварительные шаги не надо, она важна для выполнения теста.

А вот если я уже заранее зарегистрировалась, то хоть в новой вкладке, хоть в новом окне открою все и пройдусь по шагам. Авторизация то будет работать, если вы укажете, под кем входить. А регистрация прямого отношения к тесту не имеет.

Какие еще могут быть предварительные шаги? Посмотрим на примере Дадаты. Тестируем функционал обработки файла. Он доступен только авторизованному пользователю → надо зарегистрироваться. И он небесплатный → нужно пополнить баланс. И, конечно, у нас должен быть на руках файл для загрузки.


Регистрация на сайте, пополнение баланса и подготовка файлов — предварительные шаги, они не имеют прямого отношения к тесту загрузки файла, это так, подготовка. Как они будут выглядеть? Допустим, мы хотим обработать файл-образец (есть такой в системе)

Предварительные шаги
  1. Зарегистрироваться (см. тест-кейс "Регистрация").
  2. Пополнить баланс (см. тест-кейс "Пополнение баланса").
  3. Скачать файл-образец (см. тест-кейс "Скачивание файла-образца")

На что обратить внимание при написании предварительных шагов? Давайте разберемся с правилами их написания.


1. Писать нужно обезличено


Повелительное наклонение неприятно читать: пойди, открой, сделай, нажми. Фи.
Превращаем в нейтральные глаголы: пойти, открыть, сделать, нажать…



2. Писать нужно в едином стиле


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

  1. Регистрация
  2. Пополни баланс
  3. Скачать файл-образец

Странно же, правда?
Приведем в порядок:

  1. Регистрация
  2. Пополнение баланса
  3. Скачивание файла-образца

Или

  1. Зарегистрироваться
  2. Пополнить баланс
  3. Скачать файл-образец

Оба варианта имеют право на существование, тут уж кому как больше нравится — существительное или глагол.


3. Можно ссылаться на другие тест-кейсы


Так как предварительные шаги прямого отношения к тесту не имеют → мы не расписываем их подробно. Если надо уточнить, как выполнить действие, дайте ссылку на другой кейс:

Зарегистрироваться с именем «Д`Артаньян» (см. тест-кейс "Регистрация"). 
↓ 
Зарегистрируйся с таким-то именем. Если не знаешь как — welcome to тест-кейс регистрации.

Только помните, зачем делается отсылка на другой тест → чтобы, если у нас что-то поменяется в том действии (например, в регистрации), чтобы мы изменили это в ОДНОМ месте, в ОДНОМ тесте, а не в 100500.

Поэтому не надо писать «Зарегистрироваться в системе: зайти по ссылке А, нажать кнопку «Регистрация» в правом верхнем углу сайта, ввести в поле «имя» такое-то значение…». Завтра название кнопки изменится, вы во всех кейсах будете исправлять? А зачем?




4. Но не доходя до маразма ツ


Вот у нас в Дадате студенты пишут тест-кейсы на загрузку и обработку файлов. Чтобы им было проще, первый тест-кейс тренер сделал сам. Тест-кейс — на обработку файла-образца. Того, который система предоставляет для демонстрации своих возможностей.

Предварительные шаги выглядят так:

Предварительные шаги 
  1. Зарегистрироваться (см. тест-кейс "Регистрация").
  2. Пополнить баланс (см. тест-кейс "Пополнение баланса").
  3. Скачать файл-образец (см. тест-кейс "Скачивание файла-образца")

А потом студент тестирует, скажем, обработку файла в формате CSV. Угадайте с трех раз, как выглядят его предварительные шаги? Правильно!

Предварительные шаги 
  1. Зарегистрироваться (см. тест-кейс "Регистрация").
  2. Пополнить баланс (см. тест-кейс "Пополнение баланса").
  3. Скачать файл «Клиенты» (см. тест-кейс "Скачивание файла")

Вот и как я тут должна понять, что за файл я должна скачать? В формате CSV? С одной строкой и одной колонкой, с 10000 колонок? С разным форматом дат рождения? С весом в 5 Мб? Какой? ЧТО именно тестируется?

Некоторые студенты учитывают этот момент и пишут так:

  1. Скачать файл формата CSV (см. тест-кейс "Скачивание файла")

Но тут возникает новый вопрос — откуда скачать? Из тест-линка, внутри которого написан тест? Из какого-то общего хранилища? И что это за тест-кейс такой магический на скачивание файла, на который идет отсылка? Это ведь явная копипаста из примера. Там написано «тест-кейс на скачивание», значит, и я также напишу!




Почему в моем примере написано «скачать»? Потому что файл-образец в системе уже есть! И если мы хотим его протестировать, нам надо именно скачать то, что находится по ссылке «образец», а не какой-то свой прошлогодний файл в систему запихивать. Иначе какой смысл в этом тесте?

Отдельный тест-кейс на скачивание образца тоже сделан не просто так. Ведь нам надо убедиться в том, что по ссылке «образец» скачивается ровно то, что нам нужно. Что написано в ТЗ. Ведь в образце не какие-то абстрактные данные, они подобраны специальным образом, чтобы что-то показать, какие-то возможности системы.

Отдельный тест-кейс на скачивание образца:

  • Проверяет, что файл реально скачивается (а то будет big fail).
  • Проверяет, что внутри файла лежат правильные данные.

А еще на него можно сослаться в предварительных шагах других тестов. Там, где нам не важно, какой именно файл грузить — когда мы тестируем работу системы с разным исходным балансом (денег хватает на обработку / не хватает), исключение столбцов (в дадате есть такой функционал, чтобы не обрабатывать лишнего), или что-то другое.

В этом случае нам не важно наполнение файла. Мы просто хотим загрузить точно-работающий файл. И образец в этом случае идеален! Ведь если система не в состоянии обработать собственный образец — какое к ней может быть доверие? Тест на обработку образца идет первым в приоритете тестировщика.

А дальше мы уже исследуем, как реагирует система на разные форматы, разный вес, разное количество столбцов и колонок... И для этих тестов файлы придется готовить самостоятельно. Скачать то неоткуда!

Поэтому в предварительных шагах мы пишем о том, какой именно файл надо подготовить. Так и пишем: «Подготовить такой-то файл, см пример в аттаче».
Подготовить файл формата doc с данными из файла-примера (см аттач «Пример.doc») 
Подготовить файл с разными форматами дат рождения (см аттач «Даты рождения.xls») 
Подготовить файл картинкой внутри вместо текста (см аттач «Картинка. xls»)
Еще раз: не скачать. Подготовить. И никаких отсылок на мифический тест-кейс «Скачивание файла», что это за тест-кейс? Что он проверят в рамках нашей системы? И зачем нам на каждый тест-кейс писать отдельный тест-кейс на подготовку файла? Просто чтобы сослаться ради ссылки? Не надо.

Заметьте, как описан подготовительный шаг — мы готовим файл. Не скачиваем аттач, а готовим файл. И написано, что это за файл — вдруг аттач испарится завтра, случайно удалим? Все равно понятно, какой именно файл надо готовить )

А еще аттач может устареть — изменили функционал системы, файлы в старом формате уже не грузятся. Но если описано, ЧТО это за файл, тестировщик сможет его обновить!


5. Выкидывайте текст ради текста


«Кратко, но емко!» — главное правило оформления текстов. Будь то баг-репорт, тест-кейс или письмо Заказчику.

Текст ради текста всегда выкидываем. Сравните:

  1. Зарегистрироваться (см. тест-кейс "Регистрация").
  2. Зарегистрироваться на сайте https://www.example.com/ (см. тест-кейс "Регистрация").

Что лучше? Лучше первый вариант, так как там меньше текста. У нас ведь все тесты на сайт https://www.example.com/, зачем тогда лишний раз писать ссылку? Тем более что потом придется продублировать ее в основных шагах.

А если разработчик решит поменять URL ссылки? Зачем нам вносить лишние правки? Когда надо поменять в 10 местах, всегда есть шанс хоть одно продолбать → а в итоге у нас будет неактуальная тестовая документация.

Мы потому и выносим регистрацию в предварительные шаги. Чтобы не исправлять сотни кейсов, если что-то изменится. Поправить в одном месте, в одном кейсе.

Ок, а если выбирать из таких вариантов, что будет лучше? Подумайте сами, прежде чем прочитать ответ:

  1. Зарегистрироваться (см. тест-кейс "Регистрация").
  2. Зарегистрироваться с именем Ольга и email xxx@gmail.com (см. тест-кейс "Регистрация")

Правильный ответ — все зависит от контекста. Если нам важно зарегистрироваться именно с таким именем (проверяем женские имена, или имена с апострофом, или что-то еще) — это нужно указать в предварительном шаге с регистрацией.

А если нам неважно, будет email «xxx@gmail.com» или «olala@gmail.com» — зачем об этом писать? Если я умею регистрироваться, я как-нибудь справлюсь с придумыванием email. Если не умею — пойду в тест-кейс регистрации и пройду по нему.

Поэтому, если нам важен сам факт регистрации, будет лучше вариант 1. Если важны данные — вариант 2.


6. Предварительных шагов может и не быть — это нормально


Не надо высасывать их из пальца там, где они не нужны. Именно так и получаются тесты, в которых просто отсекли первые 2-3 шага и запихали в раздел «предварительные шаги» непонятно зачем.

Предварительные шаги 
  1. Открыть сайт https://www.example.com/
  2. Нажать на кнопку «Войти»
Шаги 
Ввести логин такой-то, пароль сякой-то 
↓ 
Шаги
  1. Открыть сайт https://www.example.com/
  2. Нажать на кнопку «Войти»
  3. Ввести логин такой-то, пароль сякой-то

Итого


Предварительные шаги — это все то, что поможет нам пройти тест-кейс, но прямого отношения к текущему тесту не имеет. Например, регистрация в системе. Или покупка ингредиентов для шарлотки =)

Правила описания предварительных шагов:
  1. Писать обезличенно — так приятнее читать, чем в повелительном наклонении
  2. Писать в одном стиле — а не «то глагол, то существительное»: то «регистрация», то «зарегистрироваться»
  3. Ссылаться на другие тесты можно — в шагах не стоит (чтобы они были независимые), а тут можно. Но без маразма типа «скачать файл, см тест-кейс такой-то», и отдельный тест-кейс на подготовку файла...
  4. Выкидывать лишнее нужно — кратко, но емко! Копипасту убираем, лишний текст тоже
  5. Предварительных шагов может и не быть — это нормально. Не стоит высасывать их из пальца просто потому, что «они должны быть!»

См также:
Что такое тест-кейс и как его писать — подробнее о тест-кейсах


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

15 комментариев:

  1. У себя в кровавом мы выработали следующее правило

    Все пишется в совершенном виде: пошел, открыл, сделал, нажад…

    Как показало практика, такое написание в разы снижает сопротивление

    ОтветитьУдалить
  2. Здравствуйте, обратите пожалуйста внимание на фразу :
    А дальше мы уже исследуем, как реагирует система на разные форматы, разный вес, разное количество столбоц и колонок... И для этих тестов файлы придется готовить самостоятельно. Скачать то неоткуда!

    ОтветитьУдалить
  3. Ольга, спасибо большое за статью!
    Только зачем мы молоко покупаем, если не используем его?

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

    ОтветитьУдалить
    Ответы
    1. То есть когда мы тестируем функционал веб-приложения, не связанный напрямую с регистрацией, но подразумевающий вход перед выполнением основных задач - то мы сами прописываем в предварительном шаге пользователю логин с паролем (как например в книге Савина в setup and add info), или даем ссылку на тест-кейс регистрации, или же подразумеваем что у него уже есть логин и пароль, чтобы выполнить последующие действия? Спасибо за ответ :)

      Удалить
    2. Нужно, конечно. Ведь без регистрации вы свой тест-кейс не выполните, а тест-кейс должен быть подробным, чтобы мы могли выполнить его с нуля

      Удалить