Открыть сервис

User story: метод описания требований

User story (с англ. — «пользовательская история») — это короткое описание функциональности программного продукта, сформулированное с точки зрения конечного пользователя, которое используется в гибких методологиях разработки (Agile, Scrum) для фиксации требований к системе. В отличие от традиционных технических заданий, user story фокусируется не на том, как должна работать система, а на том, какую ценность пользователь получит от её функции.

Сущность и формат

Классическая user story записывается по шаблону, предложенному разработчиком Майком Коном в книге «User Stories Applied» (2004):

Как <роль пользователя>, я хочу <действие/функция>, чтобы <цель/выгода>.

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

Такой формат обеспечивает три ключевых аспекта:

  • Роль — определяет, для кого создаётся функция;
  • Действие — описывает требуемую функциональность;
  • Цель — объясняет бизнес-ценность или мотивацию пользователя.

Помимо основной формулировки, полноценная user story должна удовлетворять критериям INVEST (акроним, также введённый Коном):

  • Independent — независимость от других историй;
  • Negotiable — возможность обсуждения и изменения;
  • Valuable — ценность для пользователя или заказчика;
  • Estimable — возможность оценки трудозатрат;
  • Small — малый размер (реализация в пределах одной итерации);
  • Testable — возможность проверки результата.

Отличие от традиционных требований

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

Это различие отражает принцип Agile-манифеста: «Люди и взаимодействия важнее процессов и инструментов». User story рассматривается не как документ, а как триггер для диалога. Пока история не реализована, она считается «обещанием обсудить» (термин Рона Джеффриса).

Критерии приёмки

Для того чтобы история считалась завершённой, к ней добавляются критерии приёмки (acceptance criteria) — конкретные условия, при выполнении которых функция считается реализованной корректно. Они описывают сценарии использования и граничные случаи. Например, для истории о списке избранного критерии могут включать: «товар добавляется в список одним кликом», «список сохраняется после перезагрузки страницы», «пользователь может удалить товар из списка».

Критерии приёмки часто оформляются в виде сценариев в формате Given-When-Then (предпосылка-действие-результат), популяризированном в Behaviour-Driven Development (BDD):

  • Given (дано) — исходное состояние системы;
  • When (когда) — действие пользователя;
  • Then (тогда) — ожидаемый результат.

Иерархия и декомпозиция

User story не является единственным уровнем описания требований в Agile. Существует иерархия артефактов:

  • Эпик (epic) — крупная история, которая не может быть реализована за одну итерацию и требует декомпозиции. Например, «интеграция с платёжным шлюзом» — эпик, который распадается на истории «выбор способа оплаты», «обработка успешного платежа», «обработка ошибки оплаты».
  • Тема (theme) — группа историй, объединённых общей целью или областью функциональности.
  • Задача (task) — техническая работа по реализации истории, которая может не иметь прямой пользовательской ценности (например, «настроить SSL-сертификат»).

Декомпозиция эпиков в истории происходит на этапе бэклог-рефайнмента (уточнения бэклога) совместно с командой разработки.

Происхождение и развитие

Термин «user story» возник в конце 1990-х годов в рамках методологии Extreme Programming (XP), созданной Кентом Беком. В XP истории использовались как замена громоздким спецификациям: заказчик писал короткие карточки с описанием нужных функций, а разработчики оценивали их трудоёмкость.

В 2001 году, после публикации Agile-манифеста, практика распространилась в рамках Scrum и других гибких методов. В Scrum истории составляют основу бэклога продукта — упорядоченного списка работ. Владелец продукта приоритизирует истории по ценности для бизнеса, а команда на спринт-планировании выбирает истории для реализации.

С течением времени появились расширения и вариации формата. Например, job story (история задачи), предложенная Аланом Клементом, фокусируется на контексте и мотивации: «Когда <ситуация>, я хочу <мотивация>, чтобы <ожидаемый результат>». Также существует практика написания историй от лица системы или бизнеса, а не только конечного пользователя.

Практические аспекты применения

В реальной разработке user story используется как единица планирования и оценки. Команды оценивают трудозатраты на реализацию истории в относительных величинах (стори-поинтах) и используют эти оценки для расчёта скорости (velocity) и прогнозирования сроков.

Распространённые ошибки при написании историй:

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

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

Критика

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

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

Загружаем BFOmetr…