2. Создание прототипа односценарного Рассказа - VadimMustyatsa/three_trips GitHub Wiki

Создание карточки «Рассказа» может происходить при разных обстоятельствах и в разных формах, в зависимости от конкретной команды и её процесса. Иногда карточки создаются во время общих встреч команды, а иногда, как в приведённом выше гипотетическом примере, это делает какой-то отдельный её участник. При этом карточка может долгое время оставаться частью бэклога продукта (Product Backlog) в своём исходном виде и не рассматриваться командой до тех пор, пока не придёт подходящий момент (который может в результате так и не прийти, что является ещё одной отличительной особенностью гибкой разработки).

Бывают также ситуации, когда, помимо самого намерения добавить в продукт новую функцию, у заказчика есть ещё и некоторое видение её реализации. И это часто может привести к конфузу, поскольку многие команды по ошибке считают, что фиксировать какие-то детали заранее в гибкой разработке запрещено. На самом деле, это ещё один миф, поскольку видение реализации заказчиком, при должных договорённостях, никак не может навредить процессу последующего обсуждения «Рассказа» командой. Напротив – эта та самая информация, которая и формирует исходный «Рассказ», обсуждаемый далее командой. Именно из него вполне могут родиться отличные альтернативы, одну из которых выберет заказчик. Таким образом, это вопрос процесса и договорённостей, а не «методологическое табу».

Представим, что в рассматриваемом примере у «заказчика» в какой-то момент, ещё до очередной встречи с командой, такое видение появилось и он самостоятельно (если уже обладает соответствующим навыком) или с помощью одного из участников команды (менеджера, аналитика или даже тестировщика) добавляет к карточке соответствующий сценарий:

Былина: Илья Муромец и разбойники

  Как постаревший богатырь Илья Муромец
  Я хочу совершить свой финальный яркий подвиг
  Чтобы наверняка прославиться в веках

  Сценарий: Я побеждаю огромную банду разбойников без прямого применения силы
    Допустим я еду по чисту полю
      И натыкаюсь на станицу разбойников
      И разбойники меня окружают
      И я пытаюсь урезонить разбойников
      Но разбойники продолжают агрессию
    Если я стреляю из своего лука в сырой дуб
      И сырой дуб рассыпается в щепки
    То разбойники пугаются
      И разбойники предлагают мне выкуп за своё спасение
      Но я отказываюсь от выкупа
      И распускаю банду по домам

В виде коммита это выглядит следующим образом. А в виде новой версии файла следующим.

Любой сценарий на Gherkin должен начинаться с соответствующего служебного слова, чтобы парсер (синтаксический анализатор) используемого фреймворка мог «понять», что следующие строки являются сценарием и обрабатывать их соответствующим образом. За служебным словом следует заголовок сценария, содержательность и точность которого крайне важны для последующей работы с «Рассказом». Дело в том, что, когда в «Рассказе» появляется несколько сложных сценариев, его текст может занимать до нескольких десятков строк. Тогда читабельность «Рассказа» ощутимо падает, но заголовки сценариев позволяют ориентироваться в нём на приемлемом промежуточном уровне абстракции – более низком, чем название «Рассказа», но более высоком, чем непосредственный текст шагов (steps) сценариев (в том числе для этого в редакторе заголовки подсвечиваются хорошо выделяющимся цветом). В рассматриваемом случае заголовок рассказа поясняет обстоятельства (победа над огромной бандой разбойников) и суть (победа без прямого применения силы) финального подвига богатыря. Этого должно быть достаточно, чтобы точно распознать данный сценарий среди других.

Далее следует текст шагов. Он делится на 3 секции, являющиеся решающими для семантической разметки сценария (при том, что для фреймворка все шаги равнозначны). В первой секции, начинающейся со специального слова «Допустим», приводятся шаги, задающие исключительно контекст сценария. Прежде чем произойдёт основное событие сценария (Илья Муромец победит разбойников), ему нужно сначала доехать «по чисту полю» до станицы разбойников, попасть в окружение и вступить с разбойниками в переговоры. Без этого сценарий не был бы понятен. И таких шагов должно быть ровно столько, чтобы обеспечить эту понятность – ни шагом больше. Поскольку каждый дополнительный шаг снижает читабельность сценария, являющуюся крайне важной в рамках BDD подхода.

Во второй секции, начинающейся со специального слова «Если», приводятся шаги, задающие основное условие выполнения сценария. Это «сердце» сценария, содержащее суть основного действия «пользователя». Чтобы победить разбойников без прямого применения силы, Илье нужно, по крайней мере, продемонстрировать эту силу, что он делает с помощью выстрела в «сырой дуб». За счёт того, что дуб «рассыпается в щепки», следует дальнейшая развязка. Поэтому данный шаг – тоже часть условия, то есть условие в этом сценарии двухшаговое. Если бы дуб не рассыпался, а, к примеру, стрела просто пронзила бы его, это не оказало бы на разбойников должного влияния, и они, с высокой степенью вероятности, продолжили бы свою агрессию, что привело бы к другому финалу «Рассказа», противоречащему его нарративу и заголовку сценария.

Наконец, в третьей секции, начинающейся со специального слова «То», приводятся шаги, задающие последствия выполнения условия сценария, то есть его развязку. Осознав силу выстрела Ильи и примерив её на себя, разбойники пугаются настолько, что не только полностью отказываются от своих изначальных намерений, но ещё и предлагают Илье выкуп за возможность не стать следующей мишенью. Этот вариант развития событий не попал ни в одну из найденных версий былины «Три поездки», но он является преобладающим в исходной былине «Илья Муромец и разбойники». И последние два шага третьей секции призваны усилить эффект воздействия былины на читателя с помощью подчёркивания важных положительных черт героя: милосердия, бескорыстия и мудрости. Илья не только не берёт выкуп, он ещё и распускает банду по домам, чтобы прекратить грабежи и кровопролитие, а также дать разбойникам шанс начать честную жизнь.

Таким образом, сценарий целиком вполне отвечает и своему заголовку, и нарративу всего «Рассказа». Финальный яркий подвиг состоит в бескровной победе над многократно превышающим по числу противником, что нетипично не только для самого Ильи Муромца, но и для других богатырей. Изначальная попытка урезонить бандитов показывает храбрость героя, не пустившегося в бегство от кажущейся неминуемой смерти. Косвенное применение силы демонстрирует не только её наличие и мощь, но и смекалку богатыря, наряду с упомянутым выше милосердием. Такой набор привлекательных особенностей былины и достоинств её героя вполне могут повлиять должным образом на читателей.

Стоит также отметить, что были изменены название былины и название файла соответственно. Новое название лучше подходит (по мнению автора «Рассказа») для новой версии (и соответствует оригинальному названию реальной былины с подобным содержанием). Такие переименования важны и в реальной разработке, поскольку названия используются и при навигации, и при ознакомлении с материалами. Крайне важно, чтобы они явно отражали смысл содержимого файла.

В сущности, представленный односценарный «Рассказ» уже может быть покрыт тестами и реализован в каком угодно виде: как компьютерный мультфильм или, к примеру, текстовая (Interactive Fiction) либо браузерная игра. Более того, даже если дать его труппе профессиональных актёров (или, к примеру, какой-нибудь из опытных команд «КВН»), они могут успешно сыграть его в нескольких версиях для совершенно разных категорий зрителей. Эта понятность широкому кругу специалистов (и даже неспециалистов), а также универсальность для большого числа возможных реализаций представляют огромное преимущество техники «Рассказов пользователя». Даже в самой былине аналогичный по содержанию эпизод содержит в 5-10 раз больше строк, чем в приведённом сценарии. При том что, как упоминалось ранее, былина – один из самых простых повествовательных жанров.