Какие основные модели (методологии) разработки программного обеспечения существуют?

«Какие основные модели (методологии) разработки программного обеспечения существуют?» — вопрос из категории Методологии разработки, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Модель Ключевая характеристика Плюсы Минусы Когда использовать
Waterfall (Каскадная) Строгая последовательность этапов: анализ → дизайн → разработка → тестирование → внедрение. Простота управления, четкие этапы. Негибкость, изменения на поздних этапах очень дороги. Для проектов с полностью понятными и неизменными требованиями.
V-Model Развитие Waterfall. Каждому этапу разработки соответствует этап тестирования, что повышает качество. Ранний фокус на тестировании, хорошая документация. Такая же негибкость, как у Waterfall. Для критически важных систем, где качество и соответствие спецификациям — приоритет.
Agile (Гибкая) Итеративная и инкрементальная разработка короткими циклами (спринтами 1-4 недели). Высокая адаптивность к изменениям, частые поставки ценности. Требует высокой дисциплины команды, сложность долгосрочного планирования. Для проектов с изменяющимися или не до конца ясными требованиями. Включает Scrum, Kanban.
Iterative (Итеративная) Постепенная разработка, где каждая итерация добавляет новую функциональность, начиная с базовой. Риски снижаются раньше, возможность получить обратную связь. Архитектура может ухудшаться без рефакторинга. Для больших проектов, где можно выделить основное ядро.
Spiral (Спиральная) Циклическая модель с акцентом на анализ и минимизацию рисков на каждой итерации. Активное управление рисками, подходит для сложных проектов. Сложная в управлении, дорогая. Для крупных, дорогих и рискованных проектов (например, в оборонной или аэрокосмической отрасли).
DevOps Не столько модель, сколько культура и практика, объединяющая разработку (Dev) и эксплуатацию (Ops) через автоматизацию (CI/CD). Быстрые релизы, высокая стабильность, автоматизация рутинных задач. Требует изменения культуры и инструментов. Для проектов, где важна частота и надежность поставки обновлений.

Пример цикла в Agile/Scrum:

# Упрощенное представление спринта
def run_sprint(backlog):
    sprint_backlog = plan_sprint(backlog)  # Планирование спринта
    for day in sprint_duration:
        daily_standup()                    # Ежедневный стендап
        develop_and_test(sprint_backlog)   # Разработка и тестирование
    conduct_sprint_review()                # Обзор инкремента
    hold_sprint_retrospective()            # Ретроспектива для улучшений