Пользовательские истории
Ссылка на [PDF] версию
Я, как пользователь, хочу добавить книгу в библиотеку, чтобы потом ее прочитать
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Добавить EPUB книгу в приложение |
3 | Предусловие | Пользователь находится на странице библиотеки |
4 | Запускающее событие | Пользователь открыл страницу библиотеки |
5 | Основной сценарий | 1. Пользователь перетаскивает файл электронной книги в окно приложения 2. Приложение дает обратную связь о том, что в окно был перетащен поддерживаемый файл 3. Пользователь отпускает файл в окно приложения 4. Приложение дает обратную связь о том, что добавляется новый файл 5. Приложение дает обратную связь о том, что был добавлен новый файл |
6 | Альтернативный сценарий | 1. Нажимает на кнопку добавления книги 2. Приложение открывает окно проводника для выбора файлов электронных книг 3. Пользователь выбирает файл в окне проводника 4. Приложение дает обратную связь о том, что добавляется новый файл 5. Приложение дает обратную связь о том, что был добавлен новый файл |
7 | Исключения | Если тип файла не поддерживается приложением, об этом дается обратная связь пользователю и файл не добавляется |
8 | Постусловия | Добавленные EPUB файлы скопированы в хранилище книг приложения |
Я, как пользователь, хочу отфильтровать книги библиотеки по тегам, чтобы найти все интересующие меня книги
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Фильтровать книги библиотеки по тегам |
3 | Предусловие | Пользователь находится на странице библиотеки, и в библиотеке есть книги с метаданными |
4 | Запускающее событие | Пользователь нажимает на кнопку "фильтры" |
5 | Основной сценарий | 1. Приложение отображает панель фильтров, причем отображаются только те фильтры, после применения которых останется одна или более книг 2. Пользователь нажимает на фильтр по году публикации "2024" 3. Приложение убирает фильтры, применение которых результирует в пустой список книг 4. Приложение фильтрует список отображаемых карточек книг в библиотеке на те, у которых год публикации "2024" |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | Библиотека отображает отфильтрованные книги |
Я, как пользователь, хочу произвести поиск по книгам библиотеки, чтобы найти книгу по названию или автору
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Искать книги библиотеки по названию и автору |
3 | Предусловие | Пользователь находится на странице библиотеки, и в библиотеке есть книги с названием и автором |
4 | Запускающее событие | Пользователь нажал на поисковую строку |
5 | Основной сценарий | 1. Пользователь начинает печатать "george o" 2. Приложение фильтрует список отображаемых карточек книг в библиотеке на те, у которых есть "george o" в названии или в авторе используя нечеткий поиск (fuzzy search) |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | Библиотека отображает отфильтрованные книги |
Я, как пользователь, хочу изменить шрифт книг, чтобы читать книгу с предпочитаемым шрифтом
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Поменять шрифт текста внутри книг |
3 | Предусловие | У пользователя открыто модальное окно настроек |
4 | Запускающее событие | Пользователь нажал на поле ввода "Book font family" |
5 | Основной сценарий | 1. Пользователь начинает вводить "Comi" 2. Приложение отображает выпадающий список из шрифтов, автодополняющих "Comi" 3. Пользователь нажимает на автодополнение "Comic Sans MS" 4. Приложение меняет шрифт текста внутри книг на "Comic Sans MS" |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | Во всех книгах теперь используется шрифт "Comic Sans MS" |
Я, как пользователь, хочу открыть книгу из библиотеки, чтобы ее прочитать
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Открыть книгу из библиотеки впервые |
3 | Предусловие | Пользователь находится на странице библиотеки, и у пользователя есть книги в библиотеке |
4 | Запускающее событие | Пользователь нажимает на одну из книг в библиотеке впервые |
5 | Основной сценарий | 1. Приложение переходит на страницу чтения для этой книги 2. Приложение отображает скелет-анимацию загрузки содержимого книги 3. Приложение загружает название книги, страницу секции книги, главу книги, текст секции книги |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | Открыто представление чтения книги на первой странице |
Я, как пользователь, хочу продолжить чтение книги с места где я остановился, чтобы не искать это место вручную
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Открыть книгу из библиотеки вновь |
3 | Предусловие | Пользователь находится на странице библиотеки, и у пользователя есть книги в библиотеке |
4 | Запускающее событие | Пользователь нажимает на одну из книг в библиотеке которую он уже читал |
5 | Основной сценарий | 1. Приложение переходит на страницу чтения для этой книги 2. Приложение отображает скелет-анимацию загрузки содержимого книги 3. Приложение загружает название книги, страницу книги, главу книги, текст секции книги |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | Открыто представление чтения книги на последне-открытой странице |
Я, как пользователь, хочу переводить выделенный текст из книги, чтобы узнать перевод текста не покидая приложение
№ | Название | Описание |
---|---|---|
1 | Действующие лица | Пользователь, приложение |
2 | Цель | Перевести выделенный текст книги |
3 | Предусловие | Открыто представление чтения для книги, и в настройках приложения выбран язык перевода "Russian" |
4 | Запускающее событие | Пользователь выделил текст и нажал ПКМ |
5 | Основной сценарий | 1. Приложение отображает контекстное меню с опциями "Copy", "Text-to-Speech", "Definition", "Mark", "Translate" 2. Пользователь нажимает на "Translate" 3. Приложение отображает всплывающий текст с переводом выделенного текста на язык перевода ― русский 4. Пользователь нажимает на любое место 5. Приложение скрывает всплывающий текст |
6 | Альтернативный сценарий | ― |
7 | Исключения | ― |
8 | Постусловия | ― |
Представленные User Story описывают взаимодействие пользователя с приложением с его точки зрения ― описано то как, пользователь делает только те действия, которые возможны для него в конкретный момент. Дополнительные возможности появляются только после реакции приложения на действия пользователя.
Разбор критериев хорошей User Story для User Story №1:
- Independent ― независима, т.к. не ссылается на/не зависит от других шести User Story
- Negotiable ― обсуждаемая, т.к. нигде не упоминается использование конкретных технологий или способов достижения целей, так, например, на шаге 2 основного сценария говорится об использовании приложением обратной связи, но не о том что она обязательно должна быть иконкой красного крестика или содержать определенный текст "Операция запрещена"
- Valuable ― ценная, т.к. описывает одни из первых действий пользователя после установки приложения, во время которых пользователь активно принимает решение о том, продолжать ли пользоваться приложением или нет
- Estimable ― оцениваемая, т.к. указан определенный формат книги, который необходимо поддерживать
- Small ― компактная, т.к. затрагивает только необходимые системы для осуществления добавления книги в библиотеку
- Testable ― тестируемая, т.к. полностью описаны предусловия, исключения и постусловия
Разбор критериев хорошей User Story для User Story №7:
- Independent ― независима, т.к. не ссылается на/не зависит от других шести User Story
- Negotiable ― обсуждаемая, т.к. нигде не упоминается использование конкретных технологий (сервисов-переводчиков)
- Valuable ― ценная, т.к. описывает функционал позволяющий удержать пользователя внутри приложения, без которого пользователю нужно было бы использовать сторонний сервис перевода и как последствие минимизировать приложение
- Estimable ― оцениваемая, т.к. определены требования (перевести выделенный текст), определено где это должно работать (в представлении чтение) и понятно как это сделать (использовать API сервиса-переводчика)
- Small ― компактная, т.к. описывает поведение одной функции из контекстного меню
- Testable ― тестируемая, т.к. из User Story понятно что нужно проверить соответствие/наличие перевода