2. User Stories: что это ?
#qa_talk #dataart #lviv
Как <роль/персона юзера>,
я <что-то хочу получить>
<с такой-то целью>
As a <role>,
I want <goal/desire>
so that <benefit>
3. User Stories: а зачем?
#qa_talk #dataart #lviv
• Провоцируют обсуждения внутри команды и с заказчиком;
• Разработчики сразу задумываются о реализации и
ограничениях системы;
• Тестировщики – о том, как проверить новый функционал
4. User Stories: модель INVEST
#qa_talk #dataart #lviv
I Independent Независимая Когда зависимостей нет,
планировать легче
N Negotiable Обсуждаемая Детали добавляются при
сотрудничестве
V Valuable Ценная Приносит ценность заказчику
E Estimable Оцениваемая Слишком большую или неточную
оценить трудно
S Small Небольшая Можно сделать в течение 1 спринта
T Testable Тестируемая Хорошие критерии приемки
5. • Воркшопы по написанию user story (на начальном
этапе проекта)
• Интервью с реальными пользователями
• Письма и звонки в техническую поддержку
• Наблюдения за пользователями
• Случайно замеченные пожелания заказчика
#qa_talk #dataart #lviv
User Stories: откуда они все время берутся?
6. Алиса, это пудинг. На что смотрим в первую очередь?
• на цель. это правильная цель?
• на персону/актера;
• на масштаб изменений;
• на то, какой блок системы будет
развиваться и изменяться;
• на версию и приоритет.
#qa_talk #dataart #lviv
7. Кто обсуждает User Story?
#qa_talk #dataart #lviv
Team +
Product Owner
Business Analyst +
Product Owner
Business Analyst +
Team
Team +
Product Owner
User Story выглядит
реально достижимой
- технически
- с точки зрения бизнеса
Критерии приемки
Разделение User Story
Приблизительное
оценивание
Дальнейшее разделение User
Story
Окончательное оценивание
Технические задачи
8. Кажется, чего-то не хватает…
#qa_talk #dataart #lviv
• Есть ли критерии приемки (acceptance criteria)?
• Есть ли дизайн (или макет)?
• Есть ли ограничения (или предусловия?)
• Какие компоненты системы затронуты?
9. А если в процессе работы внезапно возник вопрос?
• Задавайте его обязательно. Сразу.
• Не пытайтесь молча реализовать свое решение.
#qa_talk #dataart #lviv
10. Несколько слов про Backlog Grooming
#qa_talk #dataart #lviv
•составление новых User Stories
•декомпозиция User Stories на более мелкие
•оценка сложности
•добавление мокапов, критериев приемки,
новых сценариев, примеров
•обсуждение технических деталей реализации
•удаление устаревших User Stories
11. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Как пользователь, я хочу иметь кнопку, чтобы перейти
на другую страницу.
Как <роль/персона юзера>, я <что-то хочу получить>
<с такой-то целью>
формально все правильно…
12. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Как пользователь, я хочу иметь кнопку, чтобы перейти
на другую страницу
Зачем?
Как пользователь, я хочу иметь кнопку, чтобы быстро
попасть с экрана 1 на экран 9
Вывод: нужен ярлык.
13. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Зачем?
Как пользователь, я хочу быстро попасть с экрана 1 на
экран 9, чтобы 90% сценариев выполнялись быстрее
Вывод: в 90% сценариев экраны 2-8 не нужны, и у нас будет
экономиться время.
Как пользователь, я хочу иметь кнопку, чтобы быстро
попасть с экрана 1 на экран 9
14. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Зачем?
Как пользователь, я хочу выполнять 90% сценариев
быстрее, чтобы производительность службы поддержки
выросла
Вывод: а кому именно это выгодно?
Как пользователь, я хочу быстро попасть с экрана 1 на
экран 9, чтобы 90% сценариев выполнялись быстрее
15. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Зачем?
Как пользователь, я хочу выполнять 90% сценариев
быстрее, чтобы производительность службы поддержки
выросла
Вывод: изменилась роль.
Как менеджер, я хочу выполнять 90% сценариев быстрее,
чтобы производительность службы поддержки выросла
16. Cause-Effect Trap: выбираемся из ловушки
#qa_talk #dataart #lviv
Как менеджер, я хочу ярлык к экрану 9, чтобы
производительность службы поддержки выросла.
Как пользователь, я хочу иметь кнопку, чтобы перейти
на другую страницу.
Было:
Стало:
17. Разбиваем User Story: два совета
#qa_talk #dataart #lviv
1. Старайтесь выявить истории с низкой ценностью
2. Если удается, разделяйте истории на равные по
размеру
18. Разбиваем User Story: простота/сложность
#qa_talk #dataart #lviv
• «Как это сделать максимально просто?» - первая история
• Все вариации, сложности – другие истории
Пример
Как пользователь, я могу искать товары на сайте магазина.
19. Разбиваем User Story: простота/сложность
#qa_talk #dataart #lviv
Как пользователь, я могу искать товары на сайте магазина.
+ выбирая новинки за последний месяц;
+ сортируя по популярности;
+ исключая те, которых нет в наличии
20. Разбиваем User Story: шаги процесса
#qa_talk #dataart #lviv
• Первый и последний шаги - первая история
• Промежуточные шаги – другие истории
Пример
Как пользователь, я могу опубликовать резюме на сайте
поиска работы.
21. Разбиваем User Story: шаги процесса
#qa_talk #dataart #lviv
+ опубликовать резюме с сопроводительным письмом
+ просмотреть резюме перед публикацией
Как пользователь, я могу опубликовать резюме на сайте
поиска работы.
22. Разбиваем User Story: простой интерфейс
#qa_talk #dataart #lviv
• Максимально простой интерфейс - первая история
• Привлекательный, удобный интерфейс – другие истории
Пример
Как пользователь, я хочу подключаться к серверу с планшета.
23. Разбиваем User Story: простой интерфейс
#qa_talk #dataart #lviv
1 – я хочу ввести IP-адрес сервера вручную
2 – я хочу отсканировать QR-код с зашифрованным
адресом сервера
Как пользователь, я хочу подключаться к серверу с планшета.
24. Разбиваем User Story: группы данных
#qa_talk #dataart #lviv
• Каждый вариант данных – отдельная история
• Классика – истории про локализацию
Пример
Как пользователь, я хочу выбрать любой из 4 языков
интерфейса
25. Разбиваем User Story: группы данных
#qa_talk #dataart #lviv
+ українська
+ русский
+ English
+ Deutsch
Как пользователь, я хочу выбрать любой из 4 языков
интерфейса
26. Разбиваем User Story: операции
#qa_talk #dataart #lviv
• Каждая операция – отдельная история
• Классика – CRUD
Пример
Как пользователь, я хочу управлять своей учетной записью
27. Разбиваем User Story: операции (CRUD)
#qa_talk #dataart #lviv
+ я хочу создать новую учетную запись
+ я хочу изменить параметры учетной записи
+ я хочу удалить учетную запись
Как пользователь, я хочу управлять своей учетной записью
28. Разбиваем User Story: сначала функциональность
#qa_talk #dataart #lviv
• Сначала заставляем просто работать
• Затем реализуем нефункциональные требования
Пример
Как пользователь, я хочу находить квартиры в аренду в
нужном городе в указанный промежуток времени
29. Разбиваем User Story: сначала функциональность
#qa_talk #dataart #lviv
1 - я хочу находить квартиры медленно.
2 – я хочу находить квартиры очень быстро, поиск занимает
до 3 секунд.
Как пользователь, я хочу находить квартиры в аренду в
нужном городе в указанный промежуток времени
30. Разбиваем User Story: отделение спайка
#qa_talk #dataart #lviv
Пример
Как пользователь, я хочу оплатить покупку биткойнами
• Разрешение неопределенностей – первая история
• Разработка – другие истории
спайк
31. Разбиваем User Story: отделение спайка
#qa_talk #dataart #lviv
1 – я хочу исследовать оплату биткойнами (спайк, ограничен
во времени)
2 – я хочу реализовать оплату биткойнами
Как пользователь, я хочу оплатить покупку биткойнами
32. Модель Кано и User Experience
#qa_talk #dataart #lviv
Team +
Product Owner
Базовые свойства Основные свойства Восхищающие
свойстваСвойства продукта:
профессор Нориаки Кано
1980-е гг.
33. Модель Кано: базовые свойства
#qa_talk #dataart #lviv
Team +
Product Owner
Базовые свойства Основные свойства Восхищающие
свойства
Потребитель ожидает получить их по умолчанию.
• наличие не вызывает удовлетворенности
• отсутствие разочарование
• Автомобиль заводится
• Письмо доходит до получателя
• Билет на самолет обеспечивает
свободное место на рейсе
34. Модель Кано: основные свойства
#qa_talk #dataart #lviv
Team +
Product Owner
Базовые свойства Основные свойства Восхищающие
свойства
Прямо пропорционально влияют на удовлетворенность.
• основа для конкурентного преимущества
• их уровень влияет на стоимость
• % натурального вещества в соке
• Количество лошадиных сил в спортивном
автомобиле
• Объем бесплатного пространства у Gmail
35. Модель Кано: восхищающие свойства
#qa_talk #dataart #lviv
Team +
Product Owner
Базовые свойства Основные свойства Восхищающие
свойства
Всегда неожиданные, дополнительные.
• Отсутствие не влияет на удовлетворенность
• Наличие обязательное удовлетворение
• Вторая батарея с фотоаппаратом
• Резиновая уточка в купальном наборе
номера отеля
• Калькулятор в строке поиска Google
36. Модель Кано: что нам это дает?
#qa_talk #dataart #lviv
Team +
Product Owner
Базовые свойства Основные свойства Восхищающие
свойства
• Базовые свойства должны быть безупречны
• О продукте начинают говорить благодаря
восхищающим свойствам
• Со временем свойства «сползают» - ожидания
потребителей растут
37. И напоследок…
#qa_talk #dataart #lviv
“Software development
is a cooperative game
of invention and communication”
Alistair Cockburn