Жизненный цикл и этапы разработки программного обеспечения
Жизненным циклом программного обеспечения называют период от момента появления идеи
создания некоторого программного обеспечения до момента завершения его поддержки фирмой-
разработчиком или фирмой, выполнявшей сопровождение.
Состав процессов жизненного цикла регламентируется международным стандартом ISO/1EC
12207: 1995 «Information Technologe - Software Life Cycle Processes» («Информационные
технологии - Процессы жизненного цикла программного обеспечения»). ISO - International
Organization for Standardization - Международная организация по стандартизации. ГЕС -
International Electrotechnical Commission - Международная комиссия по электротехнике.
Этот стандарт описывает структуру жизненного цикла программного обеспечения и его
процессы. Процесс жизненного цикла определяется как совокупность взаимосвязанных действий,
преобразующих некоторые входные данные в выходные. На рис. 1.9 представлены процессы
жизненного цикла по указанному стандарту. Каждый процесс характеризуется определенными
задачами и методами их решения, а также исходными данными и результатами.
Процесс разработки (development process) в соответствии со стандартом предусматривает
действия и задачи, выполняемые разработчиком, и охватывает работы по созданию программного
обеспечения и его компонентов в соответствии с заданными требованиями, включая оформление
проектной и эксплуатационной документации, а также подготовку материалов, необходимых для
проверки работоспособности и соответствия качества программных продуктов, материалов,
необходимых для обучения персонала, и т. д.
По стандарту процесс разработки включает следующие действия:
• подготовительную работу - выбор модели жизненного цикла (см. далее), стандартов,
методов и средств разработки, а также составление плана работ;
• анализ требовании к системе - определение ее функциональных возможностей,
пользовательских требований, требований к надежности и безопасности, требований к внешним
интерфейсам и т. д.;
• проектирование архитектуры системы - определение состава необходимого оборудования,
программного обеспечения и операций, выполняемых обслуживающим персоналом;
• анализ требований к программному обеспечению - определение функциональных
возможностей, включая характеристики производительности, среды функционирования
компонентов, внешних интерфейсов, спецификаций надежности и безопасности, эргономических
требований, требований к используемым данным, установке, приемке, пользовательской
документации, эксплуатации и сопровождению;
• проектирование архитектуры программного обеспечения - определение структуры
программного обеспечения, документирование интерфейсов его компонентов, разработку
предварительной версии пользовательской документации, а также требований к тестам и плана
интеграции;
• детальное проектирование программного обеспечения – подробное описание компонентов
программного обеспечения и интерфейсов между ними, обновление пользовательской
документации, разработка и документирование требований к тестам и плана тестирования
компонентов программного обеспечения, обновление плана интеграции компонентов;
• кодирование и тестирование программного обеспечения – разработку и документирование
каждого компонента, а также совокупности тестовых процедур и данных для их тестирования,
тестирование компонентов, обновление пользовательской документации, обновление плана
интеграции программного обеспечения;
• интеграцию программного обеспечения - сборку программных компонентов в соответствии с
планом интеграции и тестирование программного обеспечения на соответствие
квалификационным требованиям, представляющих собой набор критериев или условий, которые
необходимо выполнить, чтобы квалифицировать программный продукт, как соответствующий
своим спецификациям и готовый к использованию в заданных условиях эксплуатации;
• квалификационное тестирование программного обеспечения - тестирование программного
обеспечения в присутствии заказчика для демонстрации его соответствия требованиям и
готовности к эксплуатации; при этом проверяется также готовность и полнота технической и
пользовательской документации
• интеграцию системы - сборку всех компонентов системы, включая программное
обеспечение и оборудование;
• квалификационное тестирование системы - тестирование системы на соответствие
требованиям к ней и проверка оформления и полноты документации;
• установку программного обеспечения - установку программного обеспечения на
оборудовании заказчика и проверку его работоспособности;
• приемку программного обеспечения - оценку результатов квалификационного тестирования
программного обеспечения и системы в целом и документирование результатов оценки совместно
с заказчиком, окончательную передачу программного обеспечения заказчику.
Указанные действия можно сгруппировать, условно выделив следующие основные этапы
разработки программного обеспечения [10] (в скобках указаны соответствующие стадии
разработки по ГОСТ 19.102-77 «Стадии разработки»):
• постановка задачи (стадия «Техническое задание»);
• анализ требований и разработка спецификаций (стадия «Эскизный проект»);
• проектирование (стадия «Технический проект»);
• реализация (стадия «Рабочий проект»).
Традиционно разработка также включала этап сопровождения (началу этого этапа
соответствует стадия «Внедрение» по ГОСТ). Однако по международному стандарту в
соответствии с изменениями, произошедшими в индустрии разработки программного
обеспечения, этот процесс теперь рассматривается отдельно.
Условность выделения этапов связана с тем, что на любом этапе возможно принятие решений,
которые потребуют пересмотра решений, принятых ранее (см. § 1.5).
Постановка задачи.В процессе постановки задачи четко формулируют назначение
программного обеспечения и определяют основные требования к нему. Каждое требование
представляет собой описание необходимого или желаемого свойства программного обеспечения.
Различают функциональные требования, определяющие функции, которые должно выполнять
разрабатываемое программное обеспечение, и эксплуатационные требования, определяющие
особенности его функционирования.
Требования к программному обеспечению, имеющему прототипы, обычно определяют по
аналогии, учитывая структуру и характеристики уже существующего программного обеспечения.
Для формулирования требований к программному обеспечению, не имеющему аналогов, иногда
необходимо провести специальные исследования, называемые предпроектными. В процессе таких
исследований определяют разрешимость задачи, возможно, разрабатывают методы ее решения
(если они новые) и устанавливают наиболее существенные характеристики разрабатываемого
программного обеспечения. Для выполнения предпроектных исследований, как правило,
заключают договор на выполнение научно-исследовательских работ. В любом случае этап
постановки задачи заканчивается разработкой технического задания, фиксирующего
принципиальные требования, и принятием основных проектных решений (см. гл. 3).
Анализ требований и определение спецификаций.Спецификациями называют точное
формализованное описание функций и ограничений разрабатываемого программного
обеспечения. Соответственно различают функциональные и эксплуатационные спецификации.
Совокупность спецификаций представляет собой общую логическую модель проектируемого про-
граммного обеспечения.
Для получения спецификаций выполняют анализ требований технического задания,
формулируют содержательную постановку задачи, выбирают математический аппарат
формализации, строят модель предметной области, определяют подзадачи и выбирают или
разрабатывают методы их решения. Часть спецификаций может быть определена в процессе
предпроектных исследований и, соответственно, зафиксирована в техническом задании.
На этом этапе также целесообразно сформировать тесты для поиска ошибок в проектируемом
программном обеспечении, обязательно указав ожидаемые результаты.
Проектирование.Основной задачей этого этапа является определение подробных
спецификаций разрабатываемого программного обеспечения. Процесс проектирования сложного
программного обеспечения обычно включает:
• проектирование общей структуры - определение основных компонентов и их взаимосвязей;
• декомпозицию компонентов и построение структурных иерархий в соответствии с
рекомендациями блочно-иерархического подхода;
• проектирование компонентов.
Результатом проектирования является детальная модель разрабатываемого программного
обеспечения вместе со спецификациями его компонентов всех уровней. Тип модели зависит от
выбранного подхода (структурный, объектный или компонентный) и конкретной технологии
проектирования. Однако в любом случае процесс проектирования охватывает как проектирование
программ (подпрограмм) и определение взаимосвязей между ними, так и проектирование данных,
с которыми взаимодействуют эти программы или подпрограммы.
Принято различать также два аспекта проектирования:
• логическое проектирование, которое включает те проектные операции, которые
непосредственно не зависят от имеющихся технических и программных средств, составляющих
среду функционирования будущего программного продукта;
• физическое проектирование - привязка к конкретным техническим и программным
средствам среды функционирования, т. е. учет ограничений, определенных в спецификациях.
Реализация.Реализация представляет собой процесс поэтапного написания кодов программы
на выбранном языке программирования (кодирование), их тестирование и отладку.
Сопровождение.Сопровождение - это процесс создания и внедрения новых версий
программного продукта. Причинами выпуска новых версий могут служить:
• необходимость исправления ошибок, выявленных в процессе эксплуатации предыдущих
версий;
• необходимость совершенствования предыдущих версий, например, улучшения интерфейса,
расширения состава выполняемых функций или повышения его производительности;
• изменение среды функционирования, например, появление новых технических средств и/или
программных продуктов, с которыми взаимодействует сопровождаемое программное
обеспечение.
На этом этапе в программный продукт вносят необходимые изменения, которые так же, как в
остальных случаях, могут потребовать пересмотра проектных решений, принятых на любом
предыдущем этапе. С изменением модели жизненного цикла программного обеспечения (см.
далее) роль этого этапа существенно возросла, так как продукты теперь создаются итерационно:
сначала выпускается сравнительно простая версия, затем следующая с большими возможностями,
затем следующая и т. д. Именно это и послужило причиной выделения этапа сопровождения в
отдельный процесс жизненного цикла в соответствии с стандартом 1SO/IEC 12207.
Рассматриваемый стандарт только называет и определяет процессы жизненного цикла
программного обеспечения, не конкретизируя в деталях, как реализовывать или выполнять
действия и задачи, включенные в эти процессы. Эти вопросы регламентируются
соответствующими методами, методиками и т. п. Прежде, чем перейти к подробному
рассмотрению последних, проанализируем эволюцию схем разработки программного обеспечения
от момента их появления до настоящего времени.