Жизненный цикл разработки ПО

Настоящая статья отвечает на вопросы: что такое жизненный цикл программного обеспечения (ПО)? Для чего он необходим и какие этапы или стадии охватывает? (кратко рассмотрим каждую стадию) Какие специалисты привлекаются на каждом из этапов? Что из себя представляют основные модели жизненного цикла и чем они могут быть полезны разработчику?

Введение (идея, основные определения)

«Нет ничего постоянного, кроме изменений»
- утверждал Гераклит Эфесский

Изменения вездесущи.
Поэтому, лучше управлять изменениями, иначе изменения начнут управлять проектом, связанным, в нашем случае, с процессом создания ПО, что приведет к хаосу и неразберихе. Дадим некоторые определения

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

Область информатики, имеющая дело с созданием систем ПО называется программной инженерией.

Изменений в процессе создания ПО много и причин их возникновения также большое количество: изменения в проекте могут быть как из-за внешних (законодательство, конкуренция), так и внутренних условий (бюджет, ресурсы).
Они могут возникнуть, и возникают чаще всего, из-за изменений требований пользователей. Они возникают из-за выявленных дефектов и необходимости добавления нового функционала, совершенствования системы. Причин громадное множество!.

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

Так возникает идея жизненого цикла создания программного продукта. Дадим определение жизненному циклу разработки ПО:

Жизненный цикл программного обеспечения (ЖЦ) - это последовательность этапов и процессов, через которые проходит программное обеспечение от момента возникновения идеи до завершения эксплуатации.

Целью жизненного цикла является обеспечение структурированного и методичного подхода к разработке, поддержке и улучшению ПО.

В биологии термин «жизненный цикл» (англ. lifecycle) означает «изменения, которые происходят в жизни животного или растения». В программной инженерии жизненный цикл означает изменения, которые происходят в «жизни» программного продукта.

Зная на каком этапе находится проект становится ясно какие основные процессы в нем происходят и какие задачи предстоит выполнить.

Типичные стадии ЖЦ следующие:

  1. Анализ требований
  2. Проектирование
  3. Реализация
  4. Внедрение
  5. Сопровождение

Стадии жизненного цикла ПО

 

Стадии жизненного цикла программного обеспечения

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

Жизненный цикл разработки ПО и профессии Жизненный цикл разработки ПО и ИТ-специалисты участвующие в работе на каждой из стадий.

Этап-1. Анализ требований

Требования пользователя – утверждения на естественном языке, либо графические представления в виде диаграмм, схем, содержащие сведения, какие услуги ожидаются от системы и ограничения, при которых система должна работать.

Анализ требований включает действия по их определению и составлению их списка. Определение требований – одна из самых больших проблем любого жизненного цикла разработки ПО. Пользователям часто неясно, что они требуют от системы. Часто они не знают реальные требования, преувеличивают их, предъявляют противоречивые требования и т.д. В общении между людьми высок риск неправильного истолкования истинного значения требования. Как вам например такое заявление: «Я знаю, что вы полагаете, что вы поняли то, что вы думаете, что я сказал, но я не уверен, что вы сделали то, что вы слышали, и не то, что я подразумевал»

Есть много методов и технологий выявления требований, например:

  • интервьюирование пользователей и экспертов предметной области
  • анкетные опросы пользователей
  • наблюдение как пользователи выполняют свои задачи
  • изучение существующих документов системы
  • изучение подобных систем ПО
  • - совместные совещания разработчиков и клиентов.

Список требований образует спецификацию требований, с разных точек зрения. Анализ требований завершается созданием технического задания, который составляется обычно по шаблону и описывает все требования к программному продукту: функциональные (что должно быть выполнено) и нефункциональные требования (как? качества системы), требования к данным, ограничения системы (законы, безопасность).

Стоит упомянуть также о приоритизации требований на основе важности и стоимости реализации.

На этом этапе работают следующие специалисты:

Менеджер проекта

  • Планирование и координация этапа анализа требований.
  • Управление коммуникациями между заказчиком и командой разработки.
  • Обеспечение соблюдения сроков и бюджета.
  • Бизнес-аналитик

    • Сбор и документирование требований.
    • Анализ потребностей пользователей и бизнеса.
    • Формирование спецификаций и технического задания.

    Системный аналитик

    • Анализ технических требований.
    • Оценка взаимосвязи между различными компонентами системы.
    • Подготовка документации, описывающей технические аспекты системы.

    Бизнес-аналитик

    Этап-2. Проектирование

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

    Такое структурное проектирование задает «красоту системы» или ее архитектуру. Главная цель – получить систему, которая является приемлемой – понятной, достаточно легко изменяемой, расширяемой, масштабируемой.

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

    Архитектурное, структурное проектирование:

    • Разработка общей архитектуры системы, определение основных компонентов и их взаимодействия.
    • Выбор архитектурного стиля (например, клиент-серверная архитектура, микросервисная архитектура, слоистая, монолитная и т.д).
    • Обеспечение масштабируемости, надежности и безопасности системы.

    Детальное проектирование:

    • Разработка подробных планов и схем для каждого компонента системы.
    • Использование UML-диаграмм (диаграммы классов, последовательностей, состояний и т.д.) для визуализации структуры и поведения системы.
    • Определение интерфейсов, баз данных и других деталей реализации.
    • Дизайн пользовательского интерфейса.

    На этом этапе привлекаются следующие специалисты:

    Архитектор ПО

    • Разработка архитектуры системы.
    • Определение основных компонентов и их взаимодействия.
    • Выбор архитектурного стиля и технологий.

    UI/UX дизайнер

    • Проектирование пользовательского интерфейса
    • Создание прототипов и макетов.
    • Обеспечение удобства использования и привлекательного дизайна.

    ИТ архитектор

    Этап-3. Реализация (кодирование)

    Реализация в большой мере связана с программированием. Программирование начинается с преобразования проекта в код, начальный код не должен программироваться вручную, код должен формироваться из моделей проекта. Сейчас проще всего это сделать с использованием нейросетей (ChatGPT).

    Далее полученный код должен быть скорректирован вручную в процессе интеграции в единое целое, работающий компонент, выполняющий заданный функционал системы.

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

    Отладка – процесс поиска и удаления из ПО «блох» или багов, ошибок в процессе выполнения программы. Тестирование – процесс поиска ошибок путем сравнения реального поведения программы с эталонным, требуемым.

    Различные уровни тестирования:

    • Модульное тестирование: Тестирование отдельных компонентов (модулей) системы для проверки их правильности.
    • Интеграционное тестирование: Тестирование взаимодействия между модулями, чтобы убедиться в правильной интеграции компонентов.
    • Системное тестирование: Полное тестирование всей системы для проверки соответствия всех требований и выявления возможных дефектов.

    Первый уровень – модульное тестирование легко автоматизируется, поэтому разработчик параллельно основному коду пишет модульные тесты для его проверки. Остальными уровнями тестирования занимается уже тестировщик.

    На этом этапе привлекаются следующие специалисты:

    Разработчик ПО

    • Написание кода согласно техническому заданию и проектной документации.
    • Разработка модулей и компонентов системы.
    • Участие в код-ревью (изучении кода) и рефакторинге кода (его улучшении).

    Тестировщик (QA инженер)

    • Разработка и выполнение тестовых сценариев.
    • Проведение юнит-тестирования, интеграционного тестирования и системного тестирования.
    • Документирование и отслеживание дефектов.

    Системный администратор (DevOps инженер)

    • Настройка и управление средами разработки, тестирования и производства.
    • Автоматизация сборки, тестирования и развертывания ПО.
    • Обеспечение бесперебойной работы системы.

    Программист пишет код

    Этап-4. Внедрение

    «Целое – больше чем сумма его частей»
    - утверждал Аристотель (384-322 гг. до н.э.)

    На этом этапе происходят процессы интеграции и развертывания ПО, обучение пользователей. Интеграция собирает приложение из набора компонентов, предварительно созданных и проверенных тестами. Внедрение – передача системы клиентам для использования.

    На современном этапе развития интеграцию и внедрение стараются сделать как можно быстрым и прозрачным процессом посредством автоматизации выпуска новых версий ПО в процессе непрерывной поставки и развертывания CI/CD.

    Интеграция и развертывание ПО:

    • Объединение всех компонентов системы и развертывание их в рабочей среде.
    • Проведение финальных тестов для проверки работоспособности в реальной среде.
    • Решение возможных проблем с совместимостью и производительностью.

    Обучение пользователей:

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

    На этом этапе могут привлекаться следующие специалисты:

    Системный администратор (DevOps инженер)

    • Развертывание ПО в рабочей среде.
    • Настройка инфраструктуры и интеграция компонентов системы.
    • Мониторинг и управление производительностью системы.

    Менеджер по внедрению

    • Планирование и координация процесса развертывания.
    • Обеспечение плавного перехода от тестирования к эксплуатации.
    • Решение проблем, возникающих при внедрении.

    Технический писатель

    • Создание документации для пользователей.
    • Подготовка руководств и справочных материалов.
    • Обеспечение доступности и понятности информации.

    Тренер по ПО

    • Проведение тренингов и обучающих сессий для пользователей.
    • Подготовка учебных материалов и презентаций.
    • Поддержка пользователей в процессе освоения новой системы.

    Обучение пользователей

    Этап-5. Сопровождение

    На этом этапе происходят процессы эксплуатации, поддержки функционирования и сопровождения ПО. Программный продукт уже внедрен и ежедневно используется в работе заказчика. Сопровождение подразумевает как фиксацию и устранение возникающих проблем, так и развитие продукта, добавление новой функциональности (в этом смысле, стадия сопровождения трудноразличима от стадии разработки).

    Обновления и исправления:

    • Регулярное обновление ПО для добавления новых функций, улучшения производительности и исправления ошибок.
    • Выпуск патчей и обновлений безопасности для защиты системы от угроз.

    Техническая поддержка пользователей:

    • Обеспечение поддержки пользователей через различные каналы (телефон, email, онлайн-чаты).
    • Решение проблем, возникающих у пользователей при работе с системой.
    • Сбор обратной связи для дальнейшего улучшения программного продукта.

    На стадии сопровождения привлекаются следующие специалисты:

    Технический специалист поддержки

    • Обработка запросов и обращений пользователей.
    • Диагностика и решение проблем.
    • Обеспечение оперативной помощи и консультаций.

    Системный администратор, специалист по безопасности

    • Мониторинг сети, реагирование на инциденты.
    • Поддержка сетевой инфраструктуры
    • Обеспечение защиты данных и инфраструктуры.

    Администратор баз данных

    • Мониторинг баз данных, реагирование на инциденты.
    • Поддержка и оптимизация баз данных.
    • Резервное копирование и восстановление данных.

    Специалист службы поддержки

    Модели жизненного цикла ПО

    Модели жизненного цикла описывают различные подходы к разработке и поддержке программных продуктов.
    Грубо можно разделить на две основные категории: водопадные и итеративные.

    Рассмотрим водопадную модель с обратной связью и некоторые итеративные модели.

    Водопадные модели

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

    Преимущества:

    • Четкая структура и документация
    • Простота управления проектом
    • Определенность в сроках и бюджете

    Недостатки:

    • Жесткость - низкая гибкость при изменении требований
    • Риск ошибок - ошибки, обнаруженные на поздних этапах, могут быть дорогими в исправлении
    • Сложность внесения изменений на поздних этапах - неэффективны для проектов с быстро меняющимися требованиями

    Возможности использования:

    • Подходит для проектов с четко определенными требованиями.
    • Эффективна для небольших и средних проектов с низким уровнем неопределенности.
    • Используется в проектах, где важно соблюдение строгих стандартов и нормативов.

    Пример
    Аэрокосмическая промышленность: Разработка программного обеспечения для управления полетами, где важна строгая последовательность этапов и тщательная проверка на каждом этапе.

    Классическая каскадная модель водопада

    Каскадная модель водопада

    Модель водопада с обратной связью

    Модель водопада с обратной связью

    Итеративные, пошаговые модели

    Итеративные модели предполагают циклическое повторение этапов разработки, что позволяет постепенно улучшать продукт.

    1. Инкрементная модель

    Инкрементная модель предполагает разработку ПО через серию нарастающих инкрементов (версий), где каждая новая версия добавляет функциональность к предыдущей.

    Преимущества:

    • Гибкость: Легкость внесения изменений на каждом этапе.
    • Раннее тестирование: Каждый инкремент тестируется отдельно.
    • Постепенное внедрение: Возможность предоставления пользователям частично работающего продукта на ранних стадиях.

    Недостатки:

    • Планирование: Сложность планирования всего проекта.
    • Интеграция: Риск несовместимости инкрементов - возможны проблемы при интеграции новых функций с уже существующими.

    Возможности использования:

    • Подходит для проектов с нечеткими и изменяющимися требованиями.
    • Эффективна для крупных проектов, требующих постепенного внедрения.
    • Используется в проектах, где важно предоставление раннего доступа к функциональности.
    • Разработка новых продуктов с высокой степенью риска.

    Пример
    Мобильные приложения: Разработка мобильного приложения с регулярными обновлениями, добавляющими новые функции и улучшения.

    Инкрементная модель

    Инкрементная модель - новая версия добавляет функционал

    2. Спиральная модель

    Спиральная модель сочетает элементы итеративного и водопадного подходов, включая анализ рисков на каждом витке спирали. Каждый виток включает этапы планирования, анализа рисков, разработки и тестирования (инженерии), оценки проекта клиентом.

    Преимущества:

    • Управление рисками: Включение анализа и минимизации рисков на каждом этапе.
    • Гибкость: Возможность адаптации к изменениям и улучшений на каждом витке.
    • Пользовательская вовлеченность: Регулярное взаимодействие с пользователями и получение обратной связи.

    Недостатки:

    • Сложность: Требует высококвалифицированных специалистов и тщательного управления.
    • Стоимость: Может быть дорогой из-за постоянного анализа рисков и итераций.

    Возможности использования:

    • Подходит для крупных и сложных проектов с высокими рисками.
    • Эффективна для проектов с неопределенными или изменяющимися требованиями.
    • Используется в проектах, где важен тщательный анализ и управление рисками.

    Спиральная модель

    Спиральная модель - включает анализ рисков

    1 - начальный сбор требований и планирование проекта,
    2 - планирование после оценки проекта клиентом,
    3 - анализ рисков, основанный на начальных требованиях,
    4 - анализ рисков, основанный на реакции клиента

    Пример
    Разработка систем безопасности: Создание комплексных систем безопасности, где важен постоянный анализ рисков и адаптация к новым угрозам.

    3. Итеративная модель

    Итеративная модель предполагает разработку ПО через серию повторяющихся циклов (итераций), где каждый цикл включает все основные этапы разработки: анализ, проектирование, реализацию и тестирование. Каждая такая итерация - маленький "водопад" типичных стадий жизненного цикла.

    Преимущества:

    • Гибкость: Быстрая обратная связь от пользователей.
    • Раннее выявление ошибок: Возможность раннего выявления и исправления ошибок, адаптация к изменяющимся требованиям.
    • Постепенное улучшение: Постепенное улучшение продукта на каждом этапе.

    Недостатки:

    • Планирование: Требует тщательного планирования и управления итерациями.
    • Ресурсоемкость: Может быть требовательна к ресурсам и времени (Сложность оценки общего прогресса проекта, риск "бесконечной" разработки)

    Возможности использования:

    • Подходит для проектов с нечеткими и меняющимися требованиями.
    • Эффективна для проектов, где важно быстрое предоставление функциональности.
    • Используется в проектах, требующих постоянного улучшения и адаптации.
    • Разработка инновационных продуктов.

    Итеративная модель

    Итеративная модель - серия повторяющихся итераций (водопадов))

    Пример
    Разработка веб-приложений: Создание веб-приложений с регулярными релизами и улучшениями на основе обратной связи от пользователей.

    4. V-образная модель

    V-образная модель является расширением водопадной модели, подчеркивающей взаимосвязь между этапами разработки и тестирования. Каждый этап разработки имеет соответствующий этап тестирования.

    Преимущества:

    • Структурированность: Четкая иерархия этапов и их соответствий.
    • Тестирование: Раннее планирование тестирования и его интеграция на каждом этапе. Раннее обнаружение дефектов.
    • Документирование: Подробная документация на каждом этапе.

    Недостатки:

    • Жесткость: Трудно вносить изменения после завершения этапов.
    • Длительный процесс: Может быть медленным и неэффективным для проектов с быстро меняющимися требованиями.

    Возможности использования:

    • Подходит для проектов с четко определенными требованиями.
    • Эффективна для проектов, требующих строгого соблюдения стандартов и нормативов.
    • Используется в проектах, где важна тщательная проверка и тестирование на каждом этапе.

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

    V-модель

    V-модель разработки ПО
    Источник

    Заключение

    Выбор базовой модели жизненного цикла ПО зависит от специфики проекта, требований заказчика и особенностей команды разработки. Каждая модель имеет свои преимущества и недостатки, поэтому важно тщательно анализировать условия проекта перед выбором подходящей методологии.

    Процесс создания и эксплуатации ПО специфичен и уникален для каждого проекта, это скорее искусство, нежели эксперимент, который может быть повторен!