суббота, января 06, 2007

Почему agile не дружит с design

Мне нравятся методологии Agile и прочие XP. Мне нравится нацеленность на результат во всех их практиках, отсутствие формализма, гибкость и динамичность. Если кому-то XP кажется хаосом, значит он ничего не понял в этой методике.
Единственное что мне не нравится – недостаточное внимание к проектированию. В манифесте agile читаем:
«Самые лучшие архитектуры, требования и дизайны
систем создаются самоорганизующимися командами.»

Вероятно, это действительно так, когда команда состоит из таких зубров, как те, что писали этот манифест. Обычно все обстоит совсем иначе. Обычно все, как в статье Мартина Фаулера «Is design dead?»

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

В большинстве случаев, эволюционное проектирование - это нечто ужасное. В конце концов, все равно вместо дизайна системы вы получаете просто набор из специфических решений, каждое из которых затрудняет дальнейшие изменения в программном коде. Часто это вообще нельзя считать дизайном (и, уж конечно, такой дизайн никак нельзя назвать хорошим). Как говорит Кент, дизайн существует для того, чтобы дать возможность оперативно вносить в систему любые изменения. Если дизайн плох, то такая возможность исчезает. В результате вы будете иметь дело с энтропией программного продукта, и со временем и без того плохой дизайн системы станет еще хуже. Теперь вам будет не только сложнее вносить в систему изменения, но и отыскивать и исправлять ошибки, которые начинают множиться с катастрофической быстротой. Все это - кошмар разработок в стиле "code and fix", когда с течением времени исправление ошибок обходится все дороже и дороже.»

Хорошо написал Мартин, мне даже и добавить нечего. Далее в своей статье Мартин рассуждает о том, как при помощи таких практик XP как тестирование, рефакторинг, простой дизайн (YAGNI) и т.д., можно побороть этот кошмар.
Сейчас один из проектов, в которых я участвую, ведется по методике SCRUM уже второй год. С дизайном там ситуация примерно как описано выше. Все то, что призвано заместить отсутствие предварительного проектирования, к сожалению, не срабатывает.
Я, как и Фаулер, склонен относить себя к «трусливым XP-шникам», потому что предпочитаю иметь high level design системы перед тем, как приступать к разработке. И слава Богу, что все agile методологии позволяют мне такую «вольность». За что я их и уважаю.

Комментариев нет: