TL; DR
Пользовательские истории предназначены для документирования того, какую ценность следует добавить в продукт и почему. Детали реализации (например, как значение должно быть добавлено, проверено, измерено или проверено) ограничены историей, но не содержатся в них. Они намеренно оставлены как отдельные артефакты для поддержания гибкости и гибкости в рамках.
Спецификации и подробности реализации чаще всего фиксируются в других артефактах, таких как сценарии и сценарии разработки на основе приемочных испытаний (ATDD), разработки на основе тестов (TDD) и разработки на основе поведения (BDD). Эти конкретные артефакты не являются обязательными для среды Scrum, но они, безусловно, дадут вам хорошую отправную точку, если у вас еще нет других эффективных средств управления процессом.
Пользовательские истории не являются спецификациями
Оригинальный постер (ОП) задал следующий вопрос :
[A] клиент хочет по-разному обрабатывать разные кредитные карты, существуют строгие требования, которые должны быть реализованы и известны, чтобы можно было написать контрольные примеры ... ГДЕ Я ДОЛЖЕН СДЕЛАТЬ ЭТО, ЕСЛИ НЕ В ИСТОРИИ?
Пользовательская история - это функция, которая обеспечивает ценность , предоставляет некоторый контекст для руководства разговорами о реализации и точку зрения, связанную с потребителем ценности, который извлечет выгоду из ценности, предоставляемой функцией.
Весь смысл истории пользователя заключается в том, что детали реализации не носят предписывающий характер. Команда может реализовать эту функцию любым способом, который доставит указанное значение потребителю значения в соответствующем контексте.
Рабочий пример
Образец пользовательской истории
Это легче объяснить, если вы начнете с менее неоднозначного набора пользовательских историй. Поскольку ОП не предоставил полезную пользовательскую историю, которая следует за мнемоникой INVEST , я изобрел ее для примера. Рассмотрим следующую историю:
Как пользователь, который предпочитает платить картой Discover,
я бы хотел сделать покупки с помощью карты Discover,
чтобы не ограничиваться Visa, Mastercard или American Express.
Это обеспечивает конкретную функцию, предоставляет некоторый контекст, который может определять решения, которые должна принять команда, и идентифицирует потребителя как клиента, владеющего картой Discover. Это не набор спецификаций, но это то, что вам нужно для правильной беседы с заказчиком и командой о том, как лучше всего реализовать историю во время итерации разработки.
Анализ и внедрение
Фактическая реализация зависит от команды. Команда должна будет провести некоторый анализ, чтобы определить:
- Самый простой способ реализовать новую функцию.
- Какой из различных вариантов реализации будет легче поддерживать в будущем, без накопления технического долга.
- Как применять принципы «открыто-закрыто» и «YAGNI», чтобы гарантировать, что ваша новая функция надежна и не перегружена.
Одним из основных принципов Agile Manifesto является взаимодействие с клиентами. Кросс-функциональная, самоорганизующаяся команда ожидается , чтобы иметь возможность сотрудничать с клиентом , чтобы выработать детали реализации в рамках руководящих принципов , предусмотренных в пользовательской истории.
Если ваши пользовательские истории написаны не очень хорошо, или если у команды нет навыков или зрелости процесса для того, чтобы выполнить достаточно точный анализ, требуемый их гибкой средой, то это, очевидно, будет намного сложнее, чем должно быть. Целые книги были написаны на предмет того, как создавать хорошие пользовательские истории на должном уровне детализации; к сожалению, серебряной пули нет, но это ловкий навык для ловких команд.
Тест-управляемый и управляемый поведением дизайн
Лучший способ убедиться в том, что анализ обоснован и что его реализация является разумной и поддерживаемой, заключается в использовании методов TDD и BDD. Например, учитывая историю выше, команда должна захватить запланированную реализацию с помощью таких артефактов, как:
Особенности огурца с тестируемыми сценариями.
Это наиболее полезно для разработки приемочных тестов и документирования ожиданий пользователей в отношении поведения приложений. Например, пользовательская история должна иметь одну или несколько связанных функций Cucumber, которые описывают, как пользователь может проверить с помощью карты Discover, и как этот процесс выглядит для пользователя.
Тесты RSpec, которые проверяют поведение (не внутренние детали реализации) новых функций кода.
Это наиболее полезно для документирования и проверки предполагаемого поведения функции в приложении. Например, пользовательская история будет стимулировать создание модульных и интеграционных тестов, которые гарантируют, что использование карты Discover вызывает любое поведение, специфичное для карты, которое требуется приложению для авторизации продажи через платежный шлюз.
Конкретные инструменты не имеют значения. Если вам не нравятся Cucumber или RSpec, используйте любые инструменты или методологии, которые лучше всего подходят для вашей команды. Однако дело в том, что детали реализации основаны на истории пользователя , но не предписываются ею . Вместо этого реализация (или спецификации, если вы предпочитаете) - это детали, которые необходимо проработать во время разработки функции на основе сотрудничества.