Methodologies

Методологии #

Методологии разработки программного обеспечения - это вообще не программирование, а управленческие модели. Но знать их полезно, хотя бы для расширения кругозора.

Waterfall Development #

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

Iterative and Incremental Development #

Итеративная разработка это то же самое, но “маленькими перебежками”. В начале создается “нечто”, что хотя бы смутно напоминает требуемый результат и кое-как работает. Этот “игрушечный” проект называется прототипом. Для него требуется анализ-проектирование-реализация-тестирование, тоже игрушечные, быстрые и дешевые. Это “итерация”. Потом все повторяется, только не с самого начала, а с того места, где закончилась предыдущая итерация. Этот цикл доработок в конечном итоге вырастает в то, что хочет видеть заказчик и - самое главное! - продолжается дальше, до бесконечности адаптируясь к меняющимся реалиям бизнеса и пожеланий заказчика.

Feature-Driven Development #

При разработка “от возможностей” прототип выполняет роль “скелета”, на который в ходе каждой итерации добавляется новый функционал.

Test-Driven Development #

Разработка на основе тестов - это когда сначала пишутся тесты и весь проект состоит из “заглушек”, которые только и умеют, что эти тесты проходить, а потом они меняются на рабочий код. Новый функционал - это новые тесты и только ПОТОМ новый код. Обычно в реальном проекте тестирование проходит по остаточному принципу и поэтому не всегда на должном уровне. В TDD “покрытие тестами” всегда стопроцентное - это значит, что код всегда проверяем и работает так, как надо. Небольшой бонус - всегда, на любой стадии, у проекта актуальная проектная документация. Собственно, эти два аргумента и есть главное обоснование такого подхода к проектированию.

…и другие #

Здесь ситуация обстоит приметно также, как и с парадигмами программирования. Их много, они постоянно появляются и доказывают свою полезность. Или не доказывают и умирают в забвении. Спорные “гибкие методологии” (Agile) очень хорошо выглядят на бумаге и столь же редко внедряются в том виде, в котором задумывались. Есть даже шутливая методология “just write code, motherfucker!”, отражающая все неприятие программистами модных методологий, которые уводят весь процесс от непосредственно программирования в сторону разнообразных организационных “приседаний”.