Войти
Идеи для бизнеса. Займы. Дополнительный заработок
  • Зачем нужно штатное расписание и как его составить
  • Растаможка перевозимых грузов — правила и условия
  • Боремся с пухопероедами у курочек Как обработать кур керосином и нашатырным спиртом
  • История создания старуха изергиль максима горького презентация
  • Конвенции Международной организации труда (МОТ) в регулировании трудовых отношений Конвенция мот трудовые отношения
  • Как керосин стал лекарством и стоит ли его применять
  • Жизненный цикл по оканчивается. Стратегии конструирования ПО. Жизненный цикл ПО

    Жизненный цикл по оканчивается. Стратегии конструирования ПО. Жизненный цикл ПО

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

    • ГОСТ 34.601-90
    • ISO/IEC 12207:1995 (российский аналог - ГОСТ Р ИСО/МЭК 12207-99)

    Методологии разработки ПО

    • Rational Unified Process (RUP).
    • Microsoft Solutions Framework (MSF). Включает 4 фазы: анализ, проектирование, разработка, стабилизация, предполагает использование объектно-ориентированного моделирования.
    • Экстремальное программирование (Extreme Programming , XP). В основе методологии командная работа, эффективная коммуникация между заказчиком и исполнителем в течение всего проекта по разработке ИС. Разработка ведется с использованием последовательно дорабатываемых прототипов.

    Стандарт ГОСТ 34.601-90

    Стандарт ГОСТ 34.601-90 предусматривает следующие стадии и этапы создания автоматизированной системы:

    1. Формирование требований к АС
      1. Обследование объекта и обоснование необходимости создания АС
      2. Формирование требований пользователя к АС
      3. Оформление отчета о выполнении работ и заявки на разработку АС
    2. Разработка концепции АС
      1. Изучение объекта
      2. Проведение необходимых научно-исследовательских работ
      3. Разработка вариантов концепции АС и выбор варианта концепции АС, удовлетворяющего требованиям пользователей
      4. Оформление отчета о проделанной работе
    3. Техническое задание
      1. Разработка и утверждение технического задания на создание АС
    4. Эскизный проект
      1. Разработка предварительных проектных решений по системе и ее частям
    5. Технический проект
      1. Разработка проектных решений по системе и ее частям
      2. Разработка документации на АС и ее части
      3. Разработка и оформление документации на поставку комплектующих изделий
      4. Разработка заданий на проектирование в смежных частях проекта
    6. Рабочая документация
      1. Разработка рабочей документации на АС и ее части
      2. Разработка и адаптация программ
    7. Ввод в действие
      1. Подготовка объекта автоматизации
      2. Подготовка персонала
      3. Комплектация АС поставляемыми изделиями (программными и техническими средствами, программно-техническими комплексами, информационными изделиями)
      4. Строительно-монтажные работы
      5. Пусконаладочные работы
      6. Проведение предварительных испытаний
      7. Проведение опытной эксплуатации
      8. Проведение приемочных испытаний
    8. Сопровождение АС.
      1. Выполнение работ в соответствии с гарантийными обязательствами
      2. Послегарантийное обслуживание

    Эскизный, технический проекты и рабочая документация - это последовательное построение все более точных проектных решений. Допускается исключать стадию «Эскизный проект» и отдельные этапы работ на всех стадиях, объединять стадии «Технический проект» и «Рабочая документация» в «Технорабочий проект», параллельно выполнять различные этапы и работы, включать дополнительные.

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

    Стандарт ISO/IEC 12207/ и его применение

    Стандарт ISO/IEC 12207:1995 «Information Technology - Software Life Cycle Processes» является основным нормативным документом, регламентирующим состав процессов жизненного цикла ПО. Он определяет структуру жизненного цикла, содержащую процессы , действия и задачи, которые должны быть выполнены во время создания ПО.

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

    Процессы жизненного цикла ПО

    • Основные:
      • Приобретение (действия и задачи заказчика, приобретающего ПО)
      • Поставка (действия и задачи поставщика, который снабжает заказчика программным продуктом или услугой)
      • Разработка (действия и задачи, выполняемые разработчиком: создание ПО, оформление проектной и эксплуатационной документации, подготовка тестовых и учебных материалов и т. д.)
      • Эксплуатация (действия и задачи оператора - организации, эксплуатирующей систему)
      • Сопровождение (действия и задачи, выполняемые сопровождающей организацией, то есть службой сопровождения). Сопровождение - внесений изменений в ПО в целях исправления ошибок, повышения производительности или адаптации к изменившимся условиям работы или требованиям.
    • Вспомогательные
      • Документирование (формализованное описание информации, созданной в течение ЖЦ ПО)
      • Управление конфигурацией (применение административных и технических процедур на всем протяжении ЖЦ ПО для определения состояния компонентов ПО, управления его модификациями).
      • Обеспечение качества (обеспечение гарантий того, что ИС и процессы ее ЖЦ соответствуют заданным требованиям и утвержденным планам)
      • Верификация (определение того, что программные продукты, являющиеся результатами некоторого действия, полностью удовлетворяют требованиям или условиям, обусловленным предшествующими действиями)
      • Аттестация (определение полноты соответствия заданных требований и созданной системы их конкретному функциональному назначению)
      • Совместная оценка (оценка состояния работ по проекту: контроль планирования и управления ресурсами, персоналом, аппаратурой, инструментальными средствами)
      • Аудит (определение соответствия требованиям, планам и условиям договора)
      • Разрешение проблем (анализ и решение проблем, независимо от их происхождения или источника, которые обнаружены в ходе разработки, эксплуатации, сопровождения или других процессов)
    • Организационные
      • Управление (действия и задачи, которые могут выполняться любой стороной, управляющей своими процессами)
      • Создание инфраструктуры (выбор и сопровождение технологии, стандартов и инструментальных средств, выбор и установка аппаратных и программных средств, используемых для разработки, эксплуатации или сопровождения ПО)
      • Усовершенствование (оценка, измерение, контроль и усовершенствование процессов ЖЦ)
      • Обучение (первоначальное обучение и последующее постоянное повышение квалификации персонала)

    Каждый процесс включает ряд действий. Например, процесс приобретения охватывает следующие действия:

    1. Инициирование приобретения
    2. Подготовка заявочных предложений
    3. Подготовка и корректировка договора
    4. Надзор за деятельностью поставщика
    5. Приемка и завершение работ

    Каждое действие включает ряд задач. Например, подготовка заявочных предложений должна предусматривать:

    1. Формирование требований к системе
    2. Формирование списка программных продуктов
    3. Установление условий и соглашений
    4. Описание технических ограничений (среда функционирования системы и т. д.)

    Стадии жизненного цикла ПО, взаимосвязь между процессами и стадиями

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

    Стандарт ГОСТ Р ИСО/МЭК 12207-99 не предлагает конкретную модель жизненного цикла. Его положения являются общими для любых моделей жизненного цикла, методов и технологий создания ИС. Он описывает структуру процессов жизненного цикла, не конкретизируя, как реализовать или выполнить действия и задачи, включенные в эти процессы.

    Модель ЖЦ ПО включает в себя:

    1. Стадии;
    2. Результаты выполнения работ на каждой стадии;
    3. Ключевые события - точки завершения работ и принятия решений.

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

    На каждой стадии могут выполняться несколько процессов, определенных в стандарте ГОСТ Р ИСО/МЭК 12207-99, и наоборот, один и тот же процесс может выполняться на различных стадиях. Соотношение между процессами и стадиями также определяется используемой моделью жизненного цикла ПО.

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

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

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

    • Задачная модель;
    • каскадная модель (или системная) (70-85 г.г.);
    • спиральная модель (настоящее время).

    Задачная модель

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

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

    Общий вывод: достаточно большую эффективную информационной системы таким способом создать невозможно.

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

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

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

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

    Этапы проекта в соответствии с каскадной моделью:

    1. Формирование требований;
    2. Проектирование;
    3. Реализация;
    4. Тестирование;
    5. Внедрение;
    6. Эксплуатация и сопровождение.

    Рис. 1. Каскадная схема разработки

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

    Рис. 2. Реальный процесс разработки ПО по каскадной схеме

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

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

    Для преодоления перечисленных проблем была предложена спиральная модель жизненного цикла (рис. 3), которая была разработана в середине 1980-х годов Барри Боэмом. Она основывается на начальных этапах жизненного цикла: анализ и проектирование. На этих этапах реализуемость технических решений проверяется путем создания прототипов.

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

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

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

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

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

    Рис 3. Спиральная модель ЖЦ ИС

    Одним из возможных подходов к разработке программного обеспечения в рамках спиральной модели жизненного цикла является получившая в последнее время широкое распространение методология быстрой разработки приложений RAD (Rapid Application Development). Под этим термином обычно понимается процесс разработки программного обеспечения, содержащий 3 элемента:

    • небольшую команду программистов (от 2 до 10 человек);
    • короткий, но тщательно проработанный производственный график (от 2 до 6 мес.);
    • повторяющийся цикл, при котором разработчики, по мере того, как приложение начинает обретать форму, запрашивают и реализуют в продукте требования, полученные через взаимодействие с заказчиком.

    Жизненный цикл программного обеспечения по методологии RAD состоит из четырех фаз:

    • фаза определения требований и анализа;
    • фаза проектирования;
    • фаза реализации;
    • фаза внедрения.

    На каждой итерации оцениваются:

    • риск превышения сроков и стоимости проекта;
    • необходимость выполнения еще одной итерации;
    • степень полноты и точности понимания требований к системе;
    • целесообразность прекращения проекта.

    Преимущества итерационного подхода:

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

    Здравствуйте, уважаемые хабровчане! Думаю будет кому-то интересно вспомнить какие модели разработки, внедрения и использования программного обеспечения существовали ранее, какие модели в основном используются сейчас, зачем и что это собственно такое. В этом и будет заключаться моя небольшая тема.

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

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

    1. Инженерный подход
    2. С учетом специфики задачи
    3. Современные технологии быстрой разработки
    Теперь рассмотрим непосредственно существующие модели (подклассы) и оценим их преимущества и недостатки.

    Модель кодирования и устранения ошибок

    Совершенно простая модель, характерная для студентов ВУЗов. Именно по этой модели большинство студентов разрабатывают, ну скажем лабораторные работы.
    Данная модель имеет следующий алгоритм:
    1. Постановка задачи
    2. Выполнение
    3. Проверка результата
    4. При необходимости переход к первому пункту
    Модель также ужасно устаревшая. Характерна для 1960-1970 гг., по-этому преимуществ перед следующими моделями в нашем обзоре практически не имеет, а недостатки на лицо. Относится к первой группе моделей.

    Каскадная модель жизненного цикла программного обеспечения (водопад)

    Алгоритм данного метода, который я привожу на схеме, имеет ряд преимуществ перед алгоритмом предыдущей модели, но также имеет и ряд весомых недостатков.

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

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

    Каскадная модель с промежуточным контролем (водоворот)

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

    V модель (разработка через тестирование)

    Данная модель имеет более приближенный к современным методам алгоритм, однако все еще имеет ряд недостатков. Является одной из основных практик экстремального программирования.

    Модель на основе разработки прототипа

    Данная модель основывается на разработки прототипов и прототипирования продукта.
    Прототипирование используется на ранних стадиях жизненного цикла программного обеспечения:
    1. Прояснить не ясные требования (прототип UI)
    2. Выбрать одно из ряда концептуальных решений (реализация сцинариев)
    3. Проанализировать осуществимость проекта
    Классификация протопипов:
    1. Горизонтальные и вертикальные
    2. Одноразовые и эволюционные
    3. бумажные и раскадровки
    Горизонтальные прототипы - моделирует исключительно UI не затрагивая логику обработки и базу данных.
    Вертикальные прототипы - проверка архитектурных решений.
    Одноразовые прототипы - для быстрой разработки.
    Эволюционные прототипы - первое приближение эволюционной системы.

    Модель принадлежит второй группе.

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

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

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

    • Быстрое получение результата
    • Повышение конкурентоспособности
    • Изменяющиеся требования - не проблема
    Недостатки:
    • Отсутствие регламентации стадий
    Третьей группе принадлежат такие модели как экстремальное программирование (XP), SCRUM , инкриментальная модель (RUP), но о них я бы хотел рассказать в отдельном топике.

    Большое спасибо за внимание!

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

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

    В соответствии со стандартом ISO/IEC 12207 все процессы ЖЦ разделены на три группы (рис. 2.1).

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

    1. Формирование требований к ПО.

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

    3. Реализация.

    4.Тестирование.

    5. Ввод в действие.

    6. Эксплуатация и сопровождение.

    7. Снятие с эксплуатации.

    В настоящее время наибольшее распространение получили следующие основные модели ЖЦ ПО:

    a) каскадная и

    b) спиральная (эволюционная).

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

    Преимущества применения каскадной модели заключаются в следующем:

    На каждой стадии формируется законченный набор проектной документации;

    Выполняемые стадии работ позволяют планировать срок их завершения и соответствующие затраты.

    Такая модель применяется для систем, к которым уже в начале разработки можно точно сформулировать все требования. К ним относятся, например, системы, в которых решаются, в основном, задачи вычислительного типа. Реальные процессы обычно имеют итерационный характер: результаты очередной стадии часто вызывают изменения в проектных решениях, выработанных на более ранних стадиях. Таким образом, более распространенной является модель с промежуточным контролем, которая приведена на рис. 2.3.

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

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

    Каскадную (эволюционную) модель можно представить в виде диаграммы, которая приведена на рисунке 2.5.

    Одним из результатов применения спиральной модели ЖЦ является получивший широкое распространение способ так называемой быстрой разработки приложений , или RAD (Rapid Application Development). Жизненный цикл ПО в соответствии с этим способом включает в себя четыре стадии:

    1) анализ и планирование требований;

    2) проектирование;

    3) реализация;

    4) внедрение.

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

    1) Стратегия;

    2) Анализ;

    3) Проектирование;

    4) Реализация;

    5) Тестирование;

    6) Внедрение;

    7) Эксплуатация и техническая поддержка.

    Стратегия

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

    Итогом этапа определения стратегии становится документ, в котором четко сформулировано следующее:

    Что именно причитается заказчику, если он согласится финансировать проект;

    Когда он сможет получить готовый продукт (график выполнения работ);

    Во сколько это ему обойдется (график финансирования этапов работ для крупных проектов).

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

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

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

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

    Аналитики собирают и фиксируют информацию в двух взаимосвязанных формах:

    a) функции - информация о событиях и процессах, которые происходят в бизнесе;

    b) сущности - информация о предметах, которые имеют значение для организации и о которых что-либо известно.

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

    Проектирование

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

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

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

    Задачами проектирования являются:

    Рассмотрение результатов анализа и проверка их полноты;

    Семинары с заказчиком;

    Определение критических участков проекта и оценка его ограничений;

    Определение архитектуры системы;

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

    Проектирование хранилища данных: модель базы данных;

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

    Определение требований к процессу тестирования;

    Определение требований к безопасности системы.

    Реализация

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

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

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

    Этап разработки сопряжен с этапом тестирования, и оба процесса идут параллельно. Синхронизирует действия тестеров и разработчиков система bug tracking.

    Ошибки должны быть классифицированы согласно приоритетам. Для каждого класса ошибок должна быть определена четкая структура действий: «что делать», «как срочно», «кто ответственен за результат». Каждая проблема должна отслеживаться проектировщиком/разработчиком/тестировщиком, отвечающим за ее устранение. То же самое касается ситуаций, когда нарушаются запланированные сроки разработки и передачи модулей на тестирование.

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

    Тестирование

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

    Чем сложнее проект, тем больше будет потребность в автоматизации системы хранения ошибок - bug tracking, которая обеспечивает следующие функции:

    Хранение сообщения об ошибке (к какому компоненту системы относится ошибка, кто ее нашел, как ее воспроизвести, кто отвечает за ее исправление, когда она должна быть исправлена);

    Система уведомления о появлении новых ошибок, об изменении статуса известных в системе ошибок (уведомления по электронной почте);

    Отчеты об актуальных ошибках по компонентам системы;

    Информация об ошибке и ее история;

    Правила доступа к ошибкам тех или иных категорий;

    Интерфейс ограниченного доступа к системе bug tracking для конечного пользователя.

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

    Собственно тесты систем принято подразделять на несколько категорий:

    a) автономные тесты модулей; они используются уже на этапе разработки компонентов системы и позволяют отслеживать ошибки отдельных компонентов;

    b) тесты связей компонентов системы; эти тесты также используются и на этапе разработки, они позволяют отслеживать правильность взаимодействия и обмена информацией компонентов системы;

    c) системный тест ; он является основным критерием приемки системы; как правило, это группа тестов, включающая и автономные тесты, и тесты связей и модели; такой тест должен воспроизводить работу всех компонентов и функций системы; его основная цель - внутренняя приемка системы и оценка ее качества;

    d) приемосдаточный тест ; основное его назначение - сдать систему заказчику;

    e) тесты производительности и нагрузки ; эта группа тестов входит в системный, именно она является основной для оценки надежности системы.

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

    Отдельного компонента информационной системы;

    Группы компонентов системы;

    Основных модулей системы;

    Операционной системы;

    Жесткий сбой (отказ питания, жестких дисков).

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

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

    Внедрение

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

    Ввод в эксплуатацию проходит как минимум три стадии:

    2) накопление информации;

    3) выход на проектную мощность (то есть собственно переход к этапу эксплуатации).

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

    В период накопления информации в информационной системе выявляется наибольшее количество ошибок, связанных с многопользовательским доступом. Вторая категория исправлений связана с тем, что пользователя не устраивает интерфейс. При этом циклические модели и модели с обратной связью этапов позволяют снизить затраты. Рассматриваемый этап является также наиболее серьезным тестом - тестом одобрения пользователем (customer acceptance tests).

    Выход системы на проектную мощность в хорошем варианте - это доводка мелких ошибок и редкие серьезные ошибки.

    Эксплуатация и техническая поддержка

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

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

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

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

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

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

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

    Программные изделия с малой длительностью эксплуатации

    Сопровождение и модификация таких программ не обязатель­ны, и их жизненный цикл завершается после получения резуль­татов вычислений. Основные затраты в жизненном цикле таких программ приходятся на этапы системного анализа и проектирования, которые продолжаются от месяца до 1…2 лет, в результате

    чего жизненный цикл программного изделия редко превышает 3 года.

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

    Программные изделия с большой длительностью эксплуатации

    Их проектированием и эксплуатацией занимаются большие коллективы специалистов, для чего необходима формализация программной системы, а также формализованные испытания и определение достигнутых показателей качества конечного про­дукта. Их жизненный цикл составляет 10...20 лет. До 70...90 % этого времени приходится на эксплуатацию и сопровождение. Вследствие массового тиражирования и длительного сопровождения совокупные затраты в процессе эксплуатации и сопровождения таких программных изделий значительно превышают затраты на системный анализ и проектирование.

    Все последующее изложение акцентирует внимание на теме разработки крупных (сложных) программных средств управления и обработки информации.

    Обобщенная модель жизненного цикла программного изделия может выглядеть так:

    I . Системный анализ:

    а) исследования;

    б) анализ осуществимости:

    Эксплуатационной;

    Экономической;

    Коммерческой.

    II . Проектирование программного обеспечения:

    а) конструирование:

    Функциональная декомпозиция системы, ее архитектура;

    Внешнее проектирование программного обеспечения;

    Проектирование базы данных;

    Архитектура программного обеспечения;

    б) программирование:

    Внутреннее проектирование программного обеспечения;

    Внешнее проектирование программных модулей;

    Внутреннее проектирование программных модулей;

    Кодирование;

    Отладка программ;

    Компоновка программ;

    в) отладка программного обеспечения.

    III . Оценка (испытания) программного обеспечения.

    IV . Использование программного обеспечения:

    а) эксплуатация;

    б) сопровождение.

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

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

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

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

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

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

    Работа заключается в исследовании предполагаемого прог­раммного изделия с целью получения практической оценки возможности реализации проекта, в частности определяются:

    - осуществимость эксплуатационная , будет ли изделие доста­точно удобно для практического использования?

    - осуществимость экономическая , приемлема ли стоимость разрабатываемого изделия? Какова эта стоимость? Будет ли изделие экономически эффективным инструментом в руках пользователя?

    - осуществимость коммерческая, будет ли изделие привлека­тельным, пользоваться спросом, легко устанавливаемым, прис­пособленным к обслуживанию, простым в освоении?

    Эти и другие вопросы необходимо решать главным образом при рассмотрении указанных выше требований.

    Анализ осуществимости заканчивается, когда все требования собраны и одобрены.

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

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

    Часто в период системного анализа принимается решение о прекращении дальнейшей разработки программного обеспе­чения.

    II . Проектирование программного обеспечения. Проектиро­вание является основной и решающей фазой жизненного цикла программного обеспечения, во время которого создается и на 90% приобретает свою окончательную форму программное из­делие.

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

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

    К моменту утверждения требований работа в фазе конст­руирования будет в самом разгаре.

    На этом отрезке жизни программного обеспечения осу­ществляют:

    Функциональную декомпозицию решаемой задачи, на основе которой определяется архитектура системы этой задачи;

    Внешнее проектирование программного обеспечения, вы­ражающееся в форме внешнего взаимодействия его с поль­зователем;

    Проектирование базы данных, если это необходимо;

    Проектирование архитектуры программного обеспечения - определение объектов, модулей и их сопряжения.

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

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

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

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

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

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

    Фаза оценки начинается, как только все компоненты (мо­дули) собраны вместе и испытаны, т.е. после полной отладки готового программного продукта. Она заканчивается после полу­чения подтверждения, что программное изделие прошло все испытания и готово к эксплуатации.

    Она продолжается так же долго, как и программирование.

    IV . Использование программного обеспечения. Если системный анализ - сигнал к бою, проектирование - атака и возвращение с победой, то использование программного изделия -это ежедневная оборона, жизненно необходимая, но обычно не почетная для разработчиков.

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

    Фаза использования программного изделия начинается тогда, когда изделие передается в систему распределения.

    Это то время, в течение которого изделие находится в действии и используется эффективно.

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

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

    Использование программного продукта определяется его эксплуатацией и сопровождением.

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

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

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

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

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

    Перекрытие между фазами жизненного цикла программного изделия

    Возможны и обычно желательны перекрытия между разными фазами жизненного цикла программного изделия. Однако не должно быть никакого перекрытия между несмежными про­цессами.

    Возможна обратная связь между фазами. Например, во время одного из шагов внешнего проектирования могут быть обна­ружены погрешности в формулировке целей, тогда нужно не­медленно вернуться и исправить их.

    Рассмотренная модель жизненного цикла программного изде­лия с некоторыми изменениями, может служить моделью и для малых проектов.

    Например, когда проектируется единственная программа, то часто обходятся без проектирования архитектуры системы и

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

    Жизненным циклом программного обеспечения называют период от момента появления идеи создания некоторого программного обеспечения до момента завершения его поддержки фирмой-разработчиком или фирмой, выполнявшей сопровождение.

    Состав процессов жизненного цикла регламентируется международным стандартом ISO/IEC 12207: 1995 «Information Technologe - Software Life Cycle Processes» («Информационные технологии - Процессы жизненного цикла программного обеспечения»). ISO - International Organization for Standardization - Международная организация по стандартизации. IEC -International Electrotechnical Commission - Международная комиссия по электротехнике.

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

    Процесс разработки (development process) в соответствии со стандартом предусматривает действия и задачи, выполняемые разработчиком, и охватывает работы по созданию программного обеспечения и его компонентов в соответствии с заданными требованиями, включая оформление проектной и эксплуатационной документации, а также подготовку материалов, необходи-

    Рис. 1.9. Структура процессов жизненного цикла программного

    обеспечения

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

      подготовительную работу - выбор модели жизненного цикла (см. да лее), стандартов, методов и средств разработки, а также составление плана работ;

      анализ требований к системе - определение ее функциональных воз можностей, пользовательских требований, требований к надежности и безо пасности, требований к внешним интерфейсам и т. д.;

      проектирование архитектуры системы - определение состава необ ходимого оборудования, программного обеспечения и операций, выполняе мых обслуживающим персоналом;

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

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

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

      детальное проектирование программного обеспечения - подробное описание компонентов программного обеспечения и интерфейсов между ни ми, обновление пользовательской документации, разработка и документиро вание требований к тестам и плана тестирования компонентов программно го обеспечения, обновление плана интеграции компонентов;

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

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

      квалификационное тестирование программного обеспечения - тести рование программного обеспечения в присутствии заказчика для демон страции его соответствия требованиям и готовности к эксплуатации; при этом проверяется также готовность и полнота технической и пользователь ской документации

      интеграцию системы - сборку всех компонентов системы, включая программное обеспечение и оборудование;

      квалификационное тестирование системы - тестирование системы на соответствие требованиям к ней и проверка оформления и полноты докумен тации;

      установку программного обеспечения - установку программного обес печения на оборудовании заказчика и проверку его работоспособности;

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

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

    указаны соответствующие стадии разработки по ГОСТ 19.102-77 «Стадии разработки»):

      постановка задачи (стадия «Техническое задание»);

      анализ требований и разработка спецификаций (стадия «Эскизный проект»);

      проектирование (стадия «Технический проект»);

      реализация (стадия «Рабочий проект»).

    Традиционно разработка также включала этап сопровождения (началу этого этапа соответствует стадия «Внедрение» по ГОСТ). Однако по международному стандарту в соответствии с изменениями, произошедшими в индустрии разработки программного обеспечения, этот процесс теперь рассматривается отдельно.

    Условность выделения этапов связана с тем, что на любом этапе возможно принятие решений, которые потребуют пересмотра решений, принятых ранее (см. § 1.5).

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

    Требования к программному обеспечению, имеющему прототипы, обычно определяют по аналогии, учитывая структуру и характеристики уже существующего программного обеспечения. Для формулирования требований к программному обеспечению, не имеющему аналогов, иногда необходимо провести специальные исследования, называемые предпроект-ными. В процессе таких исследований определяют разрешимость задачи, возможно, разрабатывают методы ее решения (если они новые) и устанавливают наиболее существенные характеристики разрабатываемого программного обеспечения. Для выполнения предпроектных исследований, как правило, заключают договор на выполнение научно-исследовательских работ. В любом случае этап постановки задачи заканчивается разработкой технического задания, фиксирующего принципиальные требования, и принятием основных проектных решений (см. гл. 3).

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

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

    математический аппарат формализации, строят модель предметной области, определяют подзадачи и выбирают или разрабатывают методы их решения. Часть спецификаций может быть определена в процессе предпроектных исследований и, соответственно, зафиксирована в техническом задании.

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

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

      проектирование общей структуры - определение основных компонен тов и их взаимосвязей;

      декомпозицию компонентов и построение структурных иерархий в со ответствии с рекомендациями блочно-иерархического подхода;

      проектирование компонентов.

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

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

      логическое проектирование, которое включает те проектные операции, которые непосредственно не зависят от имеющихся технических и про граммных средств, составляющих среду функционирования будущего про граммного продукта;

      физическое проектирование - привязка к конкретным техническим и программным средствам среды функционирования, т. е. учет ограничений, определенных в спецификациях.

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

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

    Необходимость исправления ошибок, выявленных в процессе эксплуа тации предыдущих версий;

    Необходимость совершенствования предыдущих версий, например, улучшения интерфейса, расширения состава выполняемых функций или по вышения его производительности;

    Изменение среды функционирования, например, появление новых тех нических средств и/или программных продуктов, с которыми взаимодейст вует сопровождаемое программное обеспечение.

    На этом этапе в программный продукт вносят необходимые изменения, которые так же, как в остальных случаях, могут потребовать пересмотра проектных решений, принятых на любом предыдущем этапе. С изменением модели жизненного цикла программного обеспечения (см. далее) роль этого этапа существенно возросла, так как продукты теперь создаются итерационно: сначала выпускается сравнительно простая версия, затем следующая с большими возможностями, затем следующая и т. д. Именно это и послужило причиной выделения этапа сопровождения в отдельный процесс жизненного цикла в соответствии с стандартом ISO/IEC 12207.

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