Функциональная спецификация и гибкие процессы

В традиционном водопаде требования были собраны - как правило, в документе MS-Word - после эзотерического шаблона. В "строгой" модели водопада этот документ заморожен после фазы требования, и процесс управления изменениями/изменениями отвечает за введение контролируемых изменений. (**) [Как правило, документ превращается в "живой документ" и в конечном итоге "живой кошмар" ]

В настоящее время я должен возглавить проект, который представляет собой переписывание существующего настольного приложения в Интернет (от VB 6.0 до ASP.Net). Клиент имеет базовую версию приложения, которую он хочет переписать. [Так что требования заморожены... Никакой сползание области видимости. Модель данных, которая будет повторно использоваться как есть. Переносятся только интерфейсы/Бизнес-правила. Глядя на приложение, я считаю, что это не более 3/4 основных экранов и что он.

Некоторые из членов команды хотят документировать (старая школа мысли, на мой взгляд), все это, прежде чем они начнут новую разработку. Я и некоторые другие чувствуют, что довольно легко перевести пользовательский интерфейс в Интернет, искать старый код, писать бизнес-логику, выполнять автоматические модульные тесты, перейти к интеграционным тестам и доставлять экран за экраном (или бизнес-функцию по функциям)

Мой вопрос: В Agile-разработке, как я это делаю, я остаюсь "гибким", если не буду оптимизировать это. Мое мнение заключается в написании подробной документации, является анти-подвижным. Как вы думаете? Как бы гибкий гуру приблизился к вышеупомянутой проблеме (переписать существующее приложение VB 6.0 на ASP.Net)?


Отказ от ответственности:  Создание функциональной спецификации на 1000 страниц может быть связано с договорными обязательствами, политической необходимостью, система может быть действительно сложной (теперь определение "сложность" - это путешествие в мутную страну).

Ответ 1

Во-первых, вы можете создать документацию и оставаться гибкой, если клиент или владелец продукта запрашивают (готовность заплатить за) документацию.

Расширьте свою документацию постепенно и итеративно, как вы это сделаете с кодом. Испытайте немного, немного кода и... немного документируйте.

Я вижу три способа сделать это: либо укажите время, чтобы написать документацию в оценке задач, создать конкретные задания документации, либо иметь элементы/истории документации.

Риск, связанный с документацией, заключается в том, что их можно планировать очень поздно, долгое время после этого были реализованы, поэтому я не буду рекомендовать это.

Задачи документации имеют то преимущество, что видно в планировании итерации, поэтому их нельзя забывать или пропускать.

Ответ 2

Agile не означает "никаких спецификаций". Это означает испытание и выпуск рано и часто (но не обязательно к производству).

Задержка в Scrum - это "спецификация". Если вы фактически не записываете и не управляете списком функций, вы будете терять функции, и вы НИКОГДА не сможете выяснить, когда продукт будет выпущен (вы не сможете оценить объем работы, оставшийся, поскольку у вас есть не знаю, где вы находитесь или сколько осталось сделать). Список функций ДОЛЖЕН управляться кем-то. Самый простой способ сделать это - записать все, что должен делать продукт (вы можете получить как можно более сложную формулировку и определение), а также следить за тем, что было сделано и что нужно делать. Как еще вы назначите работу разработчикам и статус отчета "management?

Ответ 3

Я много думал об этом - мы работаем в среде Scrum, и у нас возникли трудности с организацией документации.

То, к чему я сейчас направляюсь, хотя это довольно рано, поэтому я не знаю, пройдет ли это испытание на длительный срок, - это использовать вики для документации.

В основном, рабочий процесс следующий:

  • Истории появляются в отставании
  • История попадает программистом
  • Программист выполняет код, а в DoD (определение Done) также должен написать несколько тестов против новой функциональной функции и должен отредактировать вики, чтобы добавить страницу для новой функциональной функции.

Вики организованы с шаблонами mediawiki, в значительной степени вдохновленными страницами dc mediawiki extensions, с именем функции, версией, в которую она была введена, что-нибудь, что может быть полезно. Шаблон добавляет пиктограммы для различения различных видов функций (и их статуса).

В конце дня, wiki имеет большое преимущество, позволяя вам добавить страницу документации, не беспокоясь о том, где и как ее поместить, но, очевидно, регулярно вам нужен кто-то, кто стоит и организует беспорядок.

Важно помнить, какой инструмент вы используете, так это то, что разработчик должен написать какой-то документ сразу после его разработки (включая технические аспекты) - и не раньше, а не через несколько месяцев после...

Ответ 4

По моему мнению, функциональная спецификация необходима в зависимости от того, как задействована техническая команда с продуктом и насколько старшей является команда. Если техническая команда участвует в определении продукта, вам определенно потребуется меньше документации, потому что будет меньше возможностей для предположений. Если у вас есть команда инженеров, которые являются юниорами, вам нужна более сильная документация, иначе вещи не будут выполнены так, как они были определены в конце спринтов.
Также имейте в виду, что удаленным командам требуется дополнительная документация в виде функциональных спецификаций из-за естественного барьера, не находящегося рядом с заинтересованными сторонами и провидцами продукта. Наличие передовых функциональных спецификаций является особенностью гибкой. Я видел много технических команд, где задачи, которые описаны исключительно пользовательской историей, и я часто видел, что эти команды не смогли достичь выпусков и оправдали ожидания заинтересованных сторон.

Этот вопрос очень широк, и есть много мнений, но, на мой взгляд, это можно свести к тому, что разработчикам не нужно угадывать требования.

На самом деле я считаю, что успех и качество результатов обратно пропорциональны количеству догадок/предположений, которые разработчики должны сделать. Я думаю, что маневренность возрастает с тем, насколько хорошо указано что-то, потому что у вас будет меньше ошибок и будет тратить меньше времени на исправление этих ошибок.

Ответ 5

Если создание Function Spec является контрактной необходимостью, вы должны тщательно подумать, что происходит в нем. Вам может быть отказано в оплате, если вы не выполнили то, что обещаете в своей функциональной спецификации.

К сожалению, вы не будете оставаться очень проворными, если вы примете этот процесс. Действительно ли клиент хочет использовать те же функции для переписанного приложения? Если да, то почему он переписывается? Я уверен, что есть функции, которые никогда не используются.

Я бы не стал документировать старую версию. У вас уже есть ссылка, сама программа. В программном обеспечении нет двусмысленности.

Написание документов не является проворным. Разработка чего-то без приоритетов и получение обратной связи от вашего клиента. Важным аспектом гибкости является покупка от клиента. Если они не верят в это, проект будет иметь более трудное время, чем нужно.

Ответ 6

Как уже указывалось, Agile не означает, что документация не имеет большого значения - "работающее программное обеспечение по полной документации".

То, как я подхожу к документации, - это почти перевернуть вещи на голове и рассмотреть практически всю часть документации (включая кодовые и модульные тесты в качестве технических спецификаций). Таким образом, рассказ (или любой другой механизм, который вы используете для разделения работы), описывающий требования к бизнесу/пользователю, должен быть достаточно подробным для оценки командой, выполняющей работу; в противном случае он является неполным и неопределенным. Кроме того, что-то, что я делаю в своей собственной практике, если, по оценкам, история (или что-то другое) занимает больше одного рабочего дня, чтобы соответствовать определению команды "done", она, скорее всего, будет разбита (это распыление, а затем компиляция в конечном итоге приводит к довольно обширная документация, но не предполагает, что столько неизвестных, сколько этого не делает, - и может привести к довольно интересным повторным использованием и раскрытиям шаблонов).

Пример использования требований стиля BDD:

Given I am working on a document
When I select "Save As..."
Then a menu should appear allowing me to choose a name, 
and a file type, 
and a location in the file system,
and a file should be created in the file system

Нам может понадобиться/нужно добавить элементы пользовательского интерфейса для выполнения этого, пунктов меню, раскадровки, сочетаний клавиш и т.д. к этому описанию (у нас может быть несколько вариантов одной и той же темы "сохранение файла" ). И так далее.

Все эти связанные артефакты могут быть прикреплены к базовому рассказу/требованию; в результате чего более полная документация. Но добавьте только те истории, которые вы фактически реализуете, в документацию по веб-версии программного обеспечения.

Здесь, где вещи становятся видными на голове и становятся более "гибкими". Во время разработки и после разработки выполняется пересмотр документированного требования и добавление изменений/модификаций/улучшений, внесенных в редактирование команды (без необходимости прохождения CCB с документацией). Возможность редактировать/обновлять документацию и связанные с ней активы, не просматривая все панели обзора и многое другое, или бросая документ "обратно через стену", когда мы выясняем во время разработки, что документ неполным каким-то образом, позволяет нам адаптировать к неизвестным - поэтому, Agile.

В этой документации должна быть какая-то форма контроля версий или истории, которая позволяет нам описать желаемую систему, а также описать фактически реализованную систему - отметив другой ответ/предложения относительно документации, являющейся частью определения Done ( что я тоже делаю). (Wikis хороши для этого, однако полностью интегрированная концепция немного более желательна - например, возможность связать билет с файлом в багажнике в системе управления версиями будет приятной.)

В заключение. Создание исчерпывающей документации впереди, которая не может быть изменена во время и/или вскоре после усилий по развитию, не позволит вам быстро развиваться, чтобы быстро адаптироваться к неизвестным. Тем не менее, для ссылки на Leading Lean Software Development, в которой они упоминают, что если политики не позволяют использовать определенные методы/процессы должным образом, то не имеет значения, говорите ли вы, что вы худой (или схваченный, или гибкий).

Один из способов убедиться, что вы не чрезмерно исчерпывающий - вероятно, мог бы использовать этот настрой в этом ответе - должен писать только то, что вам нужно, когда вам нужно (подобные концепции существуют в развитии вообще). Другим было бы заставить всех понять, что вам не нужно пытаться понять все, что впереди (самый большой переход от Waterfall к Agile) - мы задокументируем каждую идею, и она может или не может закончиться выпуском. И, наконец, осудите (и удалите) все, что больше не применяется... Я помню, что однажды видел документацию для системы, и, когда я просмотрел систему, половина документа больше не применялась к системе.

Ответ 7

Поскольку у вас есть документ, описывающий, что должен делать продукт, я бы использовал его как начальное отставание и начал раскалывать работу в кусках размера укуса, заказанных с самого высокого до самого низкого приоритета. Затем каждый набор кусков обрабатывался во время итерации. Вкратце, используйте Scrum с исходным документом в качестве отставания.

Я бы не пошел прямо к реализации, не выполняя эту работу по установлению приоритетов. Это не требует много написания, но больше ссылок на части, которые вы хотите решить.

Я бы не документировал все это заранее.

Кроме того, у вас будут некоторые задачи, непосредственно связанные с платформой, которую вы решаете, и эти задачи должны быть захвачены и добавлены в резервное хранилище.

Кроме того, вы можете понять, что не хотите выполнять все требования после нескольких итераций.

Ответ 8

Agile имеет документ функциональной спецификации в виде гибких списков функций, отставания продуктов и даже до самого спринта как задачи в спринте. Тот факт, что они не называются документами, не делает их меньше. И отличие от Functional Spec в водопаде?... Agile Functional Spec содержит только то, что требуется (lol), поэтому менее объемный, помните свое "Рабочее программное обеспечение по полной документации"?