В своей книге «Agile Software Requirements» Дин Леффингуэл сделал заявление, которое сбивает с толку не только приверженцев «лёгких методологий», но и опытных аналитиков.
Заявление выглядит так:
User Stories Are Not Requirements
Пользовательские истории — это не требования
Конечно, кажется странным, зачем детально описывать что то, что не является требованиями, в книге с названием «Гибкие требования». Но давайте попробуем разобраться, что же автор на самом деле имел в виду.
У понятия «требование к ПО» много определений. Пожалуй, общепризнанным является определение IEEE:
Требование — это условие или возможность, необходимое пользователю для решения его задачи или достижения цели.
Пользовательские истории идеально подходят под это определение. Общепринятый формат пользовательской истории — это описание возможности, в котором обозначен и пользователь, и его цель или задача. В чём же дело?
В книге автор поясняет (перевод взят отсюда):
Несмотря на то, что user stories играют в огромной степени роль, ранее принадлежавшую спецификациям требований (SRS), сценариям использования
И в этом перечне «тонких различий» мы не видим абсолютно ничего, что противоречило бы традиционному определению требований. Разве что самое первое утверждение заставляет вспомнить, что требования бывают разного уровня детализации. А все остальные больше похожи на борьбу с воображаемыми призраками: в каждом видится противопоставление
Неужели Дин Леффингуэл поддался веянию, характерному для некоторых адептов Agile: максимально дистанцироваться от накопленного до Agile опыта разработки, объявив всё старое плохим и неэффективным? Но он не был замечен в таком экстремизме, да и во всей книге это единственный момент подобного противопоставления.
Я думаю, что он просто не очень удачно выразил свою мысль. Пользовательские истории — это, несомненно, способ описания требований, и вся книга именно об этом. Но сложившиеся подходы работы с требованиями к пользовательским историям неприменимы. Попытка их применения не даст ожидаемых результатов.
Под сложившимися подходами, которые нужно пересмотреть, я в первую очередь, понимаю критерии хороших требований. Это та часть работы с требованиями, которой обязательно учат всех аналитиков (в том числе и на тренингах Вебурситета). Попав в
Давайте посмотрим на эти критерии повнимательнее. В интернете можно найти разные перечни критериев хороших требований, но все они похожи друг на друга. Возьмём, например, список отсюда.
Опыт показывает, что наилучшим требованием считается такое, которое может быть охарактеризовано как:
Похоже, что пользовательские истории соответствуют не всем перечисленным критериям. Давайте возьмём один из примеров из книги Майка Кона «User Stories Applied: For Agile Software Development» и посмотрим, насколько он им соответствует.
Пользователь может просмотреть информацию о каждой вакансии, представленной в результатах поиска.
Пройдёмся по списку.
Корректно ли это требование? С технической точки зрения — наверное, да. С юридической точки зрения оно не может быть корректным или некорректным по определению: пользовательские истории не должны рассматриваться как договорные обязательства.
Можно ли назвать это требование полным? Не похоже. Например, о какой информации идёт речь? Майк Кон предлагает решить эту проблему добавлением уточняющих заметок вроде «Марко говорит, что нужно показывать описание, уровень зарплаты и город».
Чётко и однозначно ли оно? Это трудный вопрос. С одной стороны, цель пользователя выражена достаточно однозначно. Для разработчика контекст очевиден: он знает, что разрабатывает сайт для поиска работы, и сразу представляет себе, о чём идёт речь и как может выглядеть результат. С другой стороны, опытный аналитик знает, что нельзя полагаться на то, что кажется очевидным, и может задать массу уточняющих вопросов.
Вывод: мы можем считать это требование однозначным, если доверимся способности программиста правильно понимать общий контекст задачи. Это тоже очень необычно для аналитика, привыкшего писать спецификацию, не полагаясь на квалификацию разработчика и его вовлечённость в тему.
Вопрос совместимости с другими требованиями пропустим, потому что мы в данном случае о них ничего не знаем.
Проверяемо ли требование? Этот критерий тесно связан с критерием полноты: если требование неполно, то непонятно, как проверять его выполнение. Но для пользовательских историй используется особая практика выполнения этого критерия: в их состав включаются приёмочные тесты. При этом они не столько играют роль традиционных
Вердикт: мы считаем критерий проверяемости выполненным только после того, как в пользовательскую историю включены приёмочные тесты, являющиеся неотъемлемой частью требований. Это очень не похоже на традиционный подход, по которому тесты разрабатываются отдельно от спецификации требований, и вокруг них выстраиваются собственные процессы.
Трассируемость является не столько свойством самих требований, сколько особенностью процессов (или практик) и возможностью инструментов, используемых для работы с ними. Пропустим этот критерий, чтобы не уходить в сторону от темы.
Критерий выполнимости «в рамках бюджета и сроков» в традиционном виде вообще неприменим в Agile. Этот критерий нужен для того, чтобы в спецификацию не попадали требования, которые при реализации сорвут график или сломают бюджет проекта.
Этот критерий призван бороться с двумя рисками. Первый состоит в том, что некоторые требования могут оказаться в принципе нереализуемыми в рамках создаваемого продукта. Это чаще всего нефункциональные требования, к которым пользовательские истории не относятся.
Второй риск состоит в том, что требование, включенное в спецификацию, окажется слишком трудоёмким в реализации. Поскольку в Agile не практикуется разработка спецификации требований заранее, эта проблема решается «по месту»: если оценка показывает, что история не реализуема, то она не попадёт в бэклог очередной итерации. От её реализации либо откажутся, либо пересмотрят историю, разбив её на более мелкие. То есть проблема «плохого» по этому критерию требования решается сразу: если требование плохое, то оно просто отбрасывается.
Критериям модульности и независимости наша история вполне соответствует.
Что же мы получаем в итоге? Важнейшие критерии «хороших требований» — полнота, однозначность, проверяемость и выполнимость — в традиционной форме неприменимы к пользовательским историям. Проблемы, для преодоления которых были введены эти критерии, решаются специфичными для Agile способами: добавлением уточняющих заметок и приёмочных тестов в результате обсуждений, доверием к программистам и отказом от принципа «нет ничего очевидного», а также естественными для Agile короткими итерациями с переоценкой требований перед каждой итерацией. Собственно, все подходы Agile заточены на быстрое решение этих проблем, благодаря чему попытки решить их на уровне спецификаций становятся неактуальными.
Всё это означает, что накопленный опыт может оказать медвежью услугу аналитику, если он попытается применять его в условиях
Введение в профессию аналитика 2 900 руб. | |
Введение в профессию аналитика (демо) Бесплатно | |
Вебинары Сообщества Аналитиков Бесплатно | |
SQL для непрограммистов (СЕРТИФИКАТ) 999 руб. | |
SQL для непрограммистов Бесплатно |