Забудьте Agile на минуту, подумайте, что означает «водопад».
Существует фаза требований, на которой каждый пытается выяснить, какие проблемы должен решить конечный продукт. Люди спорят об этом какое-то время, а потом все соглашаются на ряд требований. На этом этапе ваша сфера действия определена, контракты подписаны, и клиент может уйти и ждать, пока вы не найдете продукт, который отвечает этим определенным требованиям.
Далее идет один (или, может быть, два) этап (ы) проектирования. Проектировщики (которые могут быть, а могут и не быть разработчиками) спорят о том, КАК система должна идти вместе, чтобы соответствовать требованиям, подписанным. Могут возникнуть проблемы, если они не совсем понимают требование, что может означать, что они должны вернуться к клиенту, потенциально повторно открыть фазу требований (и получить еще один раунд согласований) или, по крайней мере, привести в действие управление изменениями. , Часто дизайнеры просто делают свои лучшие предположения. Они могут придумать логическую модель данных и множество UML, описывающих новую систему и то, как она должна работать. Тогда они подписывают это.
Теперь разработчики могут приступить к написанию кода на основе подписанного проекта. Могут возникнуть проблемы, если они не совсем понимают дизайн, что может означать, что они должны вернуться к дизайнеру, потенциально заново открыть фазу проектирования (и получить еще один раунд подписей) или, по крайней мере, привести в действие управление изменениями. , Проектировщики, в свою очередь, могут понять, что путаница действительно восходит к требованиям, а это означает, что они должны заново открыть обсуждения требований, подписать и продолжить управление изменениями. Часто программисты (у которых есть крайний срок) просто делают свои лучшие предположения. Они делают все возможное, чтобы сделать функциональный код. Затем они выпускают его для тестирования.
Теперь начинается фаза тестирования системы. Тестеры проводят тестирование, основываясь на своем понимании требований и дизайна, и регистрируют то, что они воспринимают как дефекты, в системе отслеживания ошибок / управления изменениями, заставляя разработчиков снова начать разработку, если они не видят проблему как недостаток проекта, который возвращает его обратно в проект и т. д. В конце концов системные тесты проходят и подписываются.
Наконец, клиент возвращается и проводит приемочные испытания новой системы. Именно здесь они решают, является ли решение, которое тестировали тестеры, разработчики и разработчики, действительно тем, что они хотят. Если это не так, вам, возможно, придется вернуться к этапу проектирования или даже пересмотреть требования.
Идея, стоящая за водопадом, заключается в том, что трудно (и очень нежелательно) вернуться назад после завершения фазы. Разные люди, как правило, участвуют в разных этапах, поэтому существует множество переключений, каждый из которых представляет большой риск неправильного толкования и потери информации. Существует также значительный разрыв между тем, когда клиенты говорят, что они хотят, и когда они видят, что было построено, и в это время реальные требования вполне могут измениться.
Agile методологии сосредоточены на прочном общении и сотрудничестве между всеми заинтересованными сторонами. Принцип «Сотрудничество с клиентом вместо переговоров по контракту» означает, что вам не нужно проходить серию подписей и отказов, а вместо этого просто работать вместе с заказчиком, каждая итерация определяет требования для части головоломки. и немедленное формирование тестов, дизайна и рабочего кода - со всеми игроками, связывающимися как можно более непосредственно (исключая затраты на перенос и риски). Рабочий код быстро тестируется заказчиком, что исключает риск временной задержки. Все действия происходят в совместном вихре, а не в нисходящем потоке.
Для отличного обзора того, что пытаются делать гибкие методологии, я настоятельно рекомендую «Гибкую разработку программного обеспечения: совместная игра» Эллиста Кокберна .