Методологии
Методологии разработки программного обеспечения - это вообще не программирование, а управленческие модели. Но знать их полезно, хотя бы для расширения кругозора.
Waterfall Development
Каскадная разработка (она же «водопад») делит весь процесс на этапы «анализ - проектирование - реализация - тестирование - интеграция - поддержка». Это классический подход в промышленной разработке, где аналитики анализируют, архитекторы ставят задачи и так далее. Все начинается с технического задания, которое описывает весь проект в целом и каждую его часть в отдельности. Затем «по написанному» пишется программный код и уходит сначала в тестирование, потом во внедрение и на поддержку.
Iterative and Incremental Development
Итеративная разработка это то же самое, но «маленькими перебежками». В начале создается «нечто», что хотя бы смутно напоминает требуемый результат и кое-как работает. Этот «игрушечный» проект называется прототипом. Для него требуется анализ-проектирование-реализация-тестирование, тоже игрушечные, быстрые и дешевые. Это «итерация». Потом все повторяется, только не с самого начала, а с того места, где закончилась предыдущая итерация. Этот цикл доработок в конечном итоге вырастает в то, что хочет видеть заказчик и - самое главное! - продолжается дальше, до бесконечности адаптируясь к меняющимся реалиям бизнеса и пожеланий заказчика.
Feature-Driven Development
При разработка «от возможностей» прототип выполняет роль «скелета», на который в ходе каждой итерации добавляется новый функционал.
Test-Driven Development
Разработка на основе тестов - это когда сначала пишутся тесты и весь проект состоит из «заглушек», которые только и умеют, что эти тесты проходить, а потом они меняются на рабочий код. Новый функционал - это новые тесты и только ПОТОМ новый код. Обычно в реальном проекте тестирование проходит по остаточному принципу и поэтому не всегда на должном уровне. В TDD «покрытие тестами» всегда стопроцентное - это значит, что код всегда проверяем и работает так, как надо. Небольшой бонус - всегда, на любой стадии, у проекта актуальная проектная документация. Собственно, эти два аргумента и есть главное обоснование такого подхода к проектированию.
...и другие
Здесь ситуация обстоит приметно также, как и с парадигмами программирования. Их много, они постоянно появляются и доказывают свою полезность. Или не доказывают и умирают в забвении. Спорные «гибкие методологии» (Agile) очень хорошо выглядят на бумаге и столь же редко внедряются в том виде, в котором задумывались. Есть даже шутливая методология «just write code, motherfucker!», отражающая все неприятие программистами модных методологий, которые уводят весь процесс от непосредственно программирования в сторону разнообразных организационных «приседаний».