В мире разработано несколько десятков методологий и подходов к организации процессов создания программного продукта. Условно их можно поделить на тяжелые (например, RUP компании Rational или CMM-SE института программной инженерии при университете Карнеги — Меллона) и легкие (называемые также экстремальными, гибкими или проворными).
Тяжелые методологии дают наибольший эффект в крупных компаниях, занятых промышленным выпуском ПО и готовых на многолетние инвестиции в кардинальную перестройку организационной структуры. Такие подходы обычно дают очень хорошие результаты, но процесс внедрения растягивается на несколько лет.
Легкие методологии предназначены для использования небольшими динамичными компаниями, работающими в условиях очень сжатых сроков, быстро меняющихся требований и необходимости обеспечения достаточно высокого качества. Внедрение таких методологий не требует ни серьезных инвестиций, ни перестройки структуры фирмы для своего внедрения — сотрудникам просто надо договориться о новом способе работы.
Классическая методология создания ПО, используемая в мире уже не один десяток лет, состоит из шести последовательных этапов — анализ требований, проектирование, кодирование, сборка, тестирование, внедрение/сопровождение. На ее основе разработаны конкретные популярные модели.
Модель “Водопад” предусматривает последовательный переход от фазы к фазе — поочередно выполняются определение системных требований, анализ требований к продукту, предварительное и детальное проектирование, кодирование, тестирование, объединение модулей, проверка работы всей системы, комплексное и системное тестирование и внедрение.
Последовательная модель также основана на возможности четкого определения требований к проекту, что позволяет создавать пилотные прототипы, постепенно увеличивая общие функциональные возможности системы и ведя разработку нескольких модулей параллельно.
Главная проблема подобных подходов — экспоненциальный рост времени на устранение выявляемых на последних этапах ошибок (особенно если они связаны с неверно спроектированной архитектурой системы или с плохо сформулированными требованиями).
На основе последовательной модели была разработана эволюционная (или спиральная) методология. Она ориентирована на использование в условиях, когда все требования не удается сформулировать заранее. При этом происходит многократное повторение цикла “анализ — проектирование — кодирование — тестирование”.
Экстремальные методологи
В последние годы рынок программистских услуг стал глобальным, возникли и успешно работают множество виртуальных и офшорных команд. В подобных условиях возросла конкуренция за выгодные заказы и появилась потребность в методиках организации труда, которые должны давать эффект, когда в ходе работ возможны существенные изменения требований или когда вообще неизвестно, что будет собой представлять конечный продукт, но сделать его надо обязательно к сроку и в рамках бюджета.