Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Липаев В.В. Программная инженерия

.pdf
Скачиваний:
722
Добавлен:
02.05.2014
Размер:
10.14 Mб
Скачать

Предисловие

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

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

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

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

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

10

Предисловие

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

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

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

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

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

11

предисловие

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

В экизненном цикле комплексов программ сложно сочетаются со­ держание, этапы и распределение работ, возможен ряд возвратов на более ранние технологические этапы в процессе создания компонентов ПС, они имеют не совсем определенные границы начала и завершения. Специалисты в коллективе могут на некотором интервале времени решать несколько производственных задач и заменять друг друга. Положение усугубляется трудностью поэтапного определения качества компонентов и его прогно­ зирования в процессе разработки, что непосредственно отражается на про­ екте в целом. Методология программной ин^кенерии и стандарты p^a/ia- ментируют современные процессы управления проектами сложных си­ стем и программных средств. Они обеспечивают организацию, освоение и применение апробированных, высококачественных процессов проектиро­ вания, программирования, верификации, тестирования и сопровождения программных средств и их компонентов. Тем самым эти проекты и про­ цессы позволяют получать стабильные, предсказуемые результаты и про­ граммные продукты требуемого качества.

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

доказательства соответствия создаваемых и поставляемых программ-

12

предисловие

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

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

Значительное внимание в курсе методологии программной инжене­ рии уделено фрагментам и компонентам профилей стандартов ISO, целесо­ образным для обеспечения высокого качества и безопасности применения программных продуктов в их жизненном цикле. Менеджмент рассматри­ ваемых проектов ориентирован преимущественно на базовые стандарты серии ISO 9000:2000. Стандарты де-факто менеджмента СММ / CMMI

13

Предисловие

изложены как возможная альтернатива стандартам ISO при управлении проектированием ПС, однако они не покрывают все процессы жизненного цикла сложных комплексов программ. Наиболее распространенная серти­ фикация предприятий, производящих программные продукты, на соответ­ ствие стандартам СММ / CMMI существенно проще, чем сертификация на соответствие полному профилю стандартов всего жизненного цикла ISO. При применении моделей СММ / CMMI учитывается преимуще­ ственно качество менеджмента проектов, однако не стандартизируются и не контролируются некоторые важные компоненты процессов ЖЦ: регла­ ментированные характеристики качества ПС; интерфейсы Открытых сис­ тем; функциональная и информационная безопасность; комплекс техноло­ гической и эксплуатационной документации. Это может быть оправдано для предприятий, создающих программные продукты средней или относи­ тельно невысокой сложности, и вряд ли допустимо для разработчиков крупных, особо сложных, критических ПС. Акцент методологии программ­ ной инженерии на крупные проекты предполагает сохранение и возмож­ ность применения ее базовых методов, процессов и стандартов при обес­ печении жизненного цикла относительно небольших проектов. Для этого должна быть предусмотрена и использоваться адаптация стандартов, тех­ нологий и инструментария для различных по сложности и размеру про­ ектов.

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

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

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

14

Предисловие

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

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

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

Л Е К Ц И Я 1

ПРОГРАММНАЯ ИНЖЕНЕРИЯ В ЖИЗНЕННОМ ЦИКЛЕ ПРОГРАММНЫХ

СРЕДСТВ

1.1. Основы жизненного цикла программных средств

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

Типовая модель процессов жизненного цикла сложной системы

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

16

1.1. Основы жизненного цикла программных средств

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

определение потребностей;

исследование и описание основных концепций;

проектирование и разработка;

испытания системы;

создание и производство;

распространение и продажа;

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

сопровождение и мониторинг;

снятие с эксплуатации (утилизация).

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

Первый класс составляют относительно небольшие программы, со­ здаваемые одиночками или небольшими коллективами (3—5) специалис­ тов, которые:

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

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

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

не ограничиваются заказчиком допустимой стоимостью, трудоем­ костью и сроками их создания, требованиями заданного качества и доку­ ментирования;

не подлежат независимому тестированию, гарантированию каче­ ства и/или сертификации.

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

17

Лекция 1. Программная инженерия в жизненном цикле программных средств

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

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

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

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

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

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

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

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

18

1.1. Основы жизненного цикла программных средств

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

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

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

19