Липаев В.В. Программная инженерия
.pdfПредисловие
чения процессов жизненного цикла сложных программных продуктов — программная инженерия для различных областей применения.
Программная инженерия — это область компьютерной науки и тех нологии, которая занимается построением программных систем, настоль ко больших и сложных, что для этого требуется участие слаженных ко манд разработчиков различных специальностей и квалификаций. Обычно такие системы существуют и применяются долгие годы, развиваясь от версии к версии, претерпевая на своем жизненном пути множество измене ний, улучшение существующих функций, добавление новых или удаление устаревших возможностей, адаптацию для работы в новой среде, устране ние дефектов и ошибок. Суть методологии программной инженерии
состоит в применении систематизированного, научного и предсказуемого процесса проектирования, разработки и сопровождения программных средств.
Массовое создание сложных программных средств промышленными методами и большими коллективами специалистов вызвало необходимость их четкой организации, планирования работ по требуемым ресурсам, эта пам и срокам реализации. Совокупные затраты в мире на такие разработки составляют миллиарды, а для отдельных проектов — миллионы долларов в год, поэтому требуется тщательный анализ экономической эффективно сти создания и использования конкретных ПС. Для решения этих задач в программной инженерии формируется новая область знания и научная дисциплина — экономика жизненного цикла программных средств, как часть экономики промышленности и вычислительной техники в общей экономике государств и предприятий. Объективно положение осложнено трудностью измерения экономических характеристик таких объектов. Ши рокий спектр количественных и качественных показателей, которые с раз личных сторон характеризуют содержание этих объектов, и невысокая достоверность оценки их значений определяют значительную дисперсию при попытках описать и измерить экономические свойства создаваемых или используемых крупных ПС.
Вследствие роста сфер применения и ответственности функций, вы полняемых программами, резко возросла необходимость гарантирования высокого качества программных продуктов, регламентирования и кор ректного формирования требований к характеристикам реальных комп-
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