Критерии пользовательской истории
Пользовательская история должна быть:
- Независимой (Independent).
- Обсуждаемой (Negotiable).
- Ценной (Valuable).
- Оцениваемой (Estimable).
- Масштабируемой (Sized Appropriately).
- Тестируемой (Testable).
Названия этих критериев складываются в акроним INVEST, поэтому их и называют INVEST-критериями.
Шаблон и INVEST-критерии помогают команде разработки достичь единого понимания пользовательской истории и реализовывать её более эффективно.
Независимая
В бэклоге одна история должна не зависеть от других. Это значит, что её реализация не затронет реализацию других историй.
Есть три вида зависимости историй:
- Пересечение (Overlap Dependency) — негативный вид зависимости, при котором разные истории включают в себя одни и те же пользовательские требования.
- Порядок (Order Dependency) — допустимый вид зависимости, при котором истории должны реализоваться в определённом порядке. То есть нельзя, например, приступить к реализации истории «Оплатить счёт» до тех пор, пока не реализована история «Получить счёт».
- Включение (Containment Dependency) — может быть полезным видом зависимости, при котором одна история включает в себя несколько других.
Например, история «Как пользователь, я хочу редактировать свои данные в личном кабинете, чтобы иметь возможность их исправить» может состоять из более мелких историй: «Как пользователь, я хочу редактировать номер телефона в личном кабинете, чтобы изменить его в случае смены номера», «Как пользователь, я хочу редактировать адрес электронной почты, чтобы изменить его в случае смены почтового сервиса» и так далее.
Когда системный аналитик пишет карточку истории (да, мы говорим именно так), в первую очередь нужно следить за тем, чтобы у неё не было пересечений с другими историями. Представьте, что занимаетесь разработкой приложения для обмена файлами. Есть две пользовательские истории:
- Как пользователь, я хочу сохранять файлы на Google Диск, чтобы они были доступны с любого устройства.
- Как пользователь, я хочу сохранять файлы на Яндекс Диск, чтобы они были доступны с любого устройства.
Команда разработки пришла к выводу, что для создания функции сохранения файла на диск, который выберут первым, потребуется пять дней, а для добавления поддержки второго типа хранилища потребуется ещё два дня. В описанных историях сложно определить, с какой истории начать и разработку какой именно нужно оценить в пять дней, какой — в два.
Таким образом, эти истории зависят друг от друга, так как пересекается их функциональность (сохранение файла в облачное хранилище).
Чтобы убрать пересечения, можно объединить две истории в одну: «Как пользователь, я хочу сохранять файлы в облачном хранилище, чтобы они были доступны с любого устройства».
Если при объединении история включает в себя слишком много функций, команда не успеет реализовать её в течение одного спринта. Тогда историю можно декомпозировать, то есть разбить на меньшие истории.