Что такое пользовательские истории
Пользовательская история (User Story) — это техника описания функций ПО от первого лица, то есть с использованием местоимения «я».
Функции бэклога продукта описывают пользовательские и функциональные требования. В истории входят как пользовательские требования, так и функциональные. Кроме того, они могут включать нефункциональные требования.
Создатель пользовательских историй — один из авторов Agile-манифеста разработки ПО Кент Бек (Kent Beck).
Преимущества пользовательских историй
По сравнению с другими техниками описания пользовательских требований User Story:
- Понятна и пользователю, и участникам команды разработки. Системный аналитик описывает истории на простом и понятном пользователям языке.
Если необходимо, системный аналитик может включить в историю профессиональный жаргон, которым владеют пользователи одного класса или конкретная персона, но он не должен использовать термины из области разработки ПО.
- Позволяет ограничить объём функциональности и спланировать сроки её реализации.
- Подходит при работе короткими итерациями. Из историй формируется бэклог продукта. Оттуда команда разработки переносит истории в бэклог итерации.
- Экономит время команды разработки. User Story позволяет кратко записать требования и обсудить их детали в ходе реализации.
- Акцентирует внимание на устном обсуждении требований с пользователями и командой разработки.
- Способствует единому пониманию требований. В обсуждении историй участвуют пользователи и команда разработки.
Из чего состоит пользовательская история
Рон Джеффрис (Ron Jeffries), ещё один автор Agile-манифеста разработки ПО, вывел три элемента, которые составляют пользовательские истории. Джеффрис назвал их 3C, то есть three C’s, или «три си»:
- Card (Карточка).
- Conversation (Обсуждение).
- Confirmation (Подтверждение).
В русском языке эквивалентом этого обозначения можно считать 3П (нет, это не про зарплату):
- Пишем.
- Проговариваем.
- Подтверждаем.
Системный аналитик описывает на карточке пользовательскую историю. Задача карточки — напомнить СА и команде разработки, что нужно обсудить детали этой истории. Обсуждение поможет системному аналитику и другим участникам команды разработки достичь единого понимания требований. Убедившись, что все друг друга одинаково поняли, системный аналитик записывает детали на карточку.
Пример для разбора: изучим составляющие User Story для соцсети, где пользователи рассказывают о жизни своих домашних питомцев. Пользователи хотят общаться с друзьями, показывать им фото питомцев и оценивать публикации друг друга.
1. Пишем
В 3C Джеффриса эта составляющая называется карточкой, потому что раньше пользовательские истории записывали вручную на индексных карточках. Так называются плотные листы бумаги небольшого размера (с линовкой или без неё), которые используются для ведения картотек.
Когда появились таск-менеджеры, от использования бумажных карточек отказались. Независимо от формата (бумажного или электронного) карточка состоит из:
- Названия.
- Шаблона записи истории.
- Примечаний.
- Критериев приёмки.
- Сценариев приёмки.
Название
Системный аналитик пишет на карточке её название, которое будет использоваться в обсуждении и переписке. Оно должно быть кратким. Название должно передавать суть функции и позволять отличить одну из них от других. Карточки могут называться так:
- «Написать другу».
- «Сделать публикацию».
- «Прикрепить к публикации фотографии».
- «Оценить публикацию».
Названия нужны для того, чтобы упростить коммуникацию в команде. Системному аналитику и другим участникам команды разработки гораздо проще сказать «Коллеги, давайте обсудим прикрепление фотографий к публикациям», чем «Коллеги, давайте обсудим, как пользователю социальной сети было бы удобно прикреплять фотографии к публикации, чтобы показать друзьям своего питомца».
Шаблон истории
Истории могут быть записаны в свободной форме, но на практике такой формат не помогает сформировать единое понимание для всех участников разработки. Поэтому британская IT-компания Connextra разработала шаблон записи истории: «пользователь — задача — цель» (Role — Feature — Reason). Его так и называют — «шаблон Connextra» (Connextra Format).
Connextra — одна из первых компаний, которые начали использовать гибкую модель разработки ПО. Когда сотрудники Connextra стали составлять бэклог с использованием историй, они столкнулись с проблемой: большинство людей часто не понимали, что должно быть написано в истории, и записывали пользовательские требования в свободной форме.
При взаимодействии с историями разработчикам приходилось искать автора истории и обсуждать с ним подробности. Со временем компания разработала собственный шаблон, который оказался настолько удачным, что Connextra продемонстрировала его на лондонской конференции XPDay 2001. После этого шаблон компании стали применять команды разработки по всему миру.
Шаблон истории — это структура описания целей и задач пользователя. Шаблон состоит из трёх частей:
- Как [кто?] (пользователь).
- Я хочу [чего?] (задача).
- Чтобы [для чего?] (цель).
В оригинале шаблон описывают так:
Как
В первой части шаблона СА записывает класс пользователя или имя персоны. Историю можно написать от лица организации, государственного органа или ПО, которое будет взаимодействовать с разрабатываемым продуктом.
Если карточка истории пишется от лица человека, лучше использовать в шаблоне персону, а не класс пользователя. Это позволяет конкретизировать историю, рассказать её: например, от лица Николая, мужчины 40 лет из Перми, который хочет прикрепить к публикации фотографию своего умного и серьёзного хомячка Бориса.
С помощью персон системный аналитик и команда разработки могут проявить больше эмпатии. Им будет проще найти решения, которые удовлетворят потребности пользователей. В этом случае команда и СА будут понимать, как их работа помогает людям, а значит, лучше вовлекутся в процесс разработки и получат больше удовлетворения.
Я хочу
Во второй части шаблона записывают задачу, которую пользователь хочет выполнить с помощью ПО. Важно описать именно то, что пользователь хочет сделать, не углубляясь в то, как эту задачу нужно выполнить.
Это значит, например, что в карточке истории не нужно упоминать элементы интерфейса, потому что:
- Пользователи хотят выполнять свои задачи, а не просто нажимать на кнопки или открывать окна на экране.
- Описание того, как пользователь работает с элементами интерфейса, отвлекает команду разработки от задач, которые он хочет выполнить.
- Особенности экранов определяются, когда историю обсуждает команда разработки. С момента создания карточки и до её обсуждения может пройти время, в течение которого пользовательский интерфейс может измениться, а значит, описывая его в карточке, системный аналитик зря потратил время.
- Обсуждая историю, участники разработки могут предложить свои варианты того, как можно реализовать пользовательский интерфейс. Члены команды могут предложить вариант получше, но они не понимают пользователя так, как СА, и могут не попасть в его цели. Системный аналитик должен рассказать им, что пользователь хочет сделать, чтобы вместе с ними определить, как задача может быть выполнена.
Во второй части шаблона слово «хочу» можно заменить на «должен» или другие глаголы, которые выражают отношение пользователя к задаче. Вряд ли все пользователи хотят вводить надёжный пароль при регистрации, они скорее должны задавать пароль, который поможет избежать кражи данных.
Чтобы
В третьей части шаблона записывается цель пользователя, для достижения которой он выполняет задачу. Цель — это проблема, которую он хочет решить, или возможность, которую он хочет использовать в рамках взаимодействия с ПО. Цель выражает ценность, которую можно получить при реализации истории.
Цель — конечное состояние, тогда как задача — это действие, которое направлено на достижение этого состояния. Цель стабильна и не изменяется с течением времени, задачи же могут меняться. Например, чтобы предложить гостям на ужин утку в апельсинах, достаточно выполнить задачу «заказать блюдо „Утка в апельсинах“», раньше для этого пришлось бы идти в магазин, покупать утку, апельсины, разделывать тушу, цитрусовые и дальше готовить их.
Эта часть истории важна, потому что задача, которую пользователь хочет выполнить, чтобы достичь своей цели, может не привести к желаемому. Команда разработки может предложить пользователям лучшие пути по достижению цели, так как они — эксперты в разработке ПО (обладают соответствующими знаниями, опытом и кругозором). Например, цель — показать друзьям своего питомца, её можно достичь с помощью разных задач:
- Добавить фото хомячка к публикации в социальной сети.
- Провести прямой эфир с хомячком.
- Создать виртуального хомячка.
История «Прикрепить фотографию» будет записана на карточке так:
«Как Николай, я хочу прикрепить фотографии к публикации, чтобы показать друзьям своего хомячка Бориса».