К основному контенту

Acceptance Testing: Test First

Автор: Алименков Николай.

На последнем Agile Gathering V мне неоднократно задавали вопрос: "Как можно писать acceptance тесты на несуществующий функционал?". Я приводил примеры написания таких тестов с использованием некоторых фреймворков. Но потом я в очередной раз задумался о самом понятии acceptance теста. Acceptance (приемочное) тестирование служит для того, чтобы принимать сделанный функционал и делать выводы о его готовности. Когда функционал принят, то все acceptance тесты переходят в разряд регрессионных тестов (для проверки работоспособности существующего функционала).

С ручными acceptance тестами все просто. Берем acceptance критерии, которые предоставляет заказчик (одна из причин, почему QA должны участвовать в планировании и тесно работать с заказчиками при подготовке тестов), снабжаем данными и оформляем в виде тест кейса. Когда функционал готов, то тест кейс прогоняется и делается вывод о его готовности. Проблема только в том, что для повторения написанных тестов необходимо опять непосредственное участие QA. Поэтому многие команды прибегают к автоматизации данных тестов постфактум, то есть когда функционал уже принят. И тут появляется несколько проблем. Во первую очередь при автоматизации тратится изрядное количество времени (часто больше чем при написании ручного теста). При этом время на автоматизацию выделяется уже в следующей итерации, что нарушает ее scope и затрудняет планирование. В добавок после автоматизации изначальный тест кейс в принципе не представляет интереса и может быть "утилизирован" (явная демонстрация излишков на производстве).

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

Неочевидная проблема заключается в том, что ручное тестирование склонно к компромисам. Я попытаюсь пояснить на примере веб приложения. Предположим заказчик хотел иметь кнопку для перехода на другую страницу. Разработчики посчитали нужным сделать вместо этого ссылку. При проверке QA (уставший после рабочего дня или же просто по невнимательности) подумал что ссылка тоже неплохо и принял функционал. И тут проявляется парадокс готового функционала: "Автоматизация acceptance теста на готовом функционале ограничивает его рамками конкретной реализации". Если на странице не будет кнопки, то ее нажатие никто не зафиксирует. Изначально автоматизированный тест "беспощаден" и не пропустит неточность даже если будет прогоняться 1000 раз.

Есть еще один парадокс - парадокс "отложенной работы". Он заключается в том, что когда что-то откладывается на потом, то обычно либо не делается вовсе, либо делается "спустя рукава". Это же можно сказать об автоматизации acceptance тестов в будущем. Обычно на это не хватает времени по причине гонки за новым функционалом.

На мой взгляд современные средства для acceptance тестирования позволяют достаточно легко писать тесты наперед. Это помогает разработчикам повысить уверенность в законченности своей работы и правильности (полноте) требуемого функционала без постоянного взаимодействия с QA. Таким образом команда становится более целостной и помогает друг другу достигнуть единой цели - разработки качественного продукта.

У нас с Алексеем Кривицким в планах проведение тренингов по acceptance тестированию, в которых будут освещаться эта и другие проблемы. Ждите анонсов на сайте и в рассылках. ;)

ПОПУЛЯРНОЕ

Шаблоны декомпозиции Пользовательских Историй (User Stories)

Автор: Richard Lawrence
Переведено с английского проектом Agile Translations


Хорошие Пользовательские Истории следуют INVEST модели, предложенной Биллом Вейком (Bill Wake). Они независимые (Independent), обсуждаемые (Negotiable), ценные (Valuable), поддающиеся оценке (Estimable), небольшие (Small) и тестируемые (Testable). Именно требование к размеру приводит нас к необходимости делить большие Пользовательские Истории, однако, даже после разбиения, они все еще должны следовать этой модели.
Многие начинающие agile-команды пытаются разделять Пользовательские Истории по архитектурным слоям: одна история для пользовательского интерфейса, другая — для базы данных, и так далее. Такой подход может удовлетворять критерию “небольшая”, однако, не сможет похвастаться тем же в случае с “независимая” и “ценная”. За девять лет работы с гибкими методологиями, я определил девять шаблонов разбиения Пользовательских Историй на хорошие, небольшие истории.

Скрамбан - собираем лучшее

Автор: Илья Павличенко.


Иногда я слышу фразу - «теперь у нас будет СкрамБан». И, к сожалению, наблюдаю, что чаще всего это означает, что у команды теперь не будет ни полноценного Скрама, ни внедренного должным образом Канбана. Хотя это понятие (СкрамБан) подразумевает и первое, и второе. Таким образом, команды лишают себя преимуществ обоих методов, переходя в серую зону неопределенности.

Привожу цитату Алана Шалловея, одного из родоначальников Канбана (полностью его блог-пост по этому вопросу можно прочесть здесь):
«Теперь стало модно у многих Скрам команд уходить от итераций и кросс-функциональных команд и говорить, что теперь у них внедрен Канбан. Я принимаю то, что в Канбане отсутствует и первое, и второе. Но Канбан не определяется отсутствием итераций или кросс-функциональных команд. Он определяется визуализацией, управлением потока, наличием явных полиси и т.д. Если у вас был Скрам и вы решили уйти от итераций - у вас не Канбан. Вы даже и близко не подошли к тому, чтобы приблизиться…

Календарь тренингов по Agile

Наши партнёры по тренингам: