Основная цель курса лекций — представить студентам, аспирантам и менеджерам проектов современный комплекс задач, методов и стандартов программной инженерии — создания и развития сложных, многоверсионных, тиражируемых программных средств (ПС) и баз данных (БД) требуемого высокого качества. Изложение ориентировано на коллективную, групповую работу специалистов над крупными программными проектами. Внимание акцентировано на комплексе методов и процессов, которые способны непосредственно обеспечить эффективный жизненный цикл сложных высококачественных программных продуктов и баз данных. При этом предполагается, что процессы и технология создания комплексов программ и документов опираются на совокупность современных, автоматизированных методов и инструментальных средств поддержки длительного жизненного цикла программных продуктов. Однако не всегда это может быть рентабельно вследствие высокой стоимости таких средств. В результате может снижаться качество программных продуктов и повышаться их стоимость.
Быстрый рост областей применения, сложности функций и масштабов комплексов программ привел к принципиальному изменению методов в этой сфере и к переходу от технологии индивидуального программирования отдельных небольших программок к коллективному созданию крупных комплексов программ инженерными методами проектирования и разработки. Накопление в мире знаний, опыта разработки и применения огромного количества различных сложных программ для ЭВМ способствовало систематизации и обобщению методов и технологий их разработки, сокращению дефектов и неопределенностей в характеристиках и качестве поставляемых и применяемых программных продуктов. В результате сформировалась современная методология и инженерная дисциплина обеспечения процессов жизненного цикла сложных программных продуктов — программная инженерия для различных областей применения.
Программная инженерия — это область компьютерной науки и технологии, которая занимается построением программных систем, настолько больших и сложных, что для этого требуется участие слаженных команд разработчиков различных специальностей и квалификаций. Обычно такие системы существуют и применяются долгие годы, развиваясь от версии к версии, претерпевая на своем жизненном пути множество изменений, улучшение существующих функций, добавление новых или удаление устаревших возможностей, адаптацию для работы в новой среде, устранение дефектов и ошибок. Суть методологии программной инженерии состоит в применении систематизированного, научного и предсказуемого процесса проектирования, разработки и сопровождения программных средств.
Массовое создание сложных программных средств промышленными методами и большими коллективами специалистов вызвало необходимость их четкой организации, планирования работ по требуемым ресурсам, этапам и срокам реализации. Совокупные затраты в мире на такие разработки составляют миллиарды, а для отдельных проектов — миллионы долларов в год, поэтому требуется тщательный анализ экономической эффективности создания и использования конкретных ПС. Для решения этих задач в программной инженерии формируется новая область знания и научная дисциплина — экономика жизненного цикла программных средств, как часть экономики промышленности и вычислительной техники в общей экономике государств и предприятий. Объективно положение осложнено трудностью измерения экономических характеристик таких объектов. Широкий спектр количественных и качественных показателей, которые с различных сторон характеризуют содержание этих объектов, и невысокая достоверность оценки их значений определяют значительную дисперсию при попытках описать и измерить экономические свойства создаваемых или используемых крупных ПС.
Вследствие роста сфер применения и ответственности функций, выполняемых программами, резко возросла необходимость гарантирования высокого качества программных продуктов, регламентирования и корректного формирования требований к характеристикам реальных комплексов программ и их достоверного определения. В результате специалисты в области теории и методов, определяющих качество продукции, вынуждены осваивать область развития и применения нового, специфического продукта — программных средств и систем в целом и их качество при использовании. Сложность анализируемых объектов — комплексов программ и психологическая самоуверенность ряда программистов в собственной «непогрешимости» часто приводят к тому, что реальные характеристики качества функционирования программных продуктов остаются неизвестными не только для заказчиков и пользователей, но также для самих разработчиков. Отсутствие четкого декларирования в документах понятий и требуемых значений характеристик качества ПС вызывает конфликты между заказчиками-пользователями и разработчиками-поставщиками из-за разной трактовки одних и тех же характеристик.
Методы программной инженерии поддерживают и конкретизируют технологический процесс, а также отслеживание значений качества компонентов на этапах жизненного цикла ПС. Для каждого проекта, выполняющего ответственные функции, должны разрабатываться и применяться система качества, специальные планы и Программа, методология и инструментальные средства разработки и испытаний, обеспечивающие требуемые качество, надежность и безопасность функционирования программных продуктов. Эти методы и процессы позволяют разработчикам и заказчикам программных продуктов более корректно взаимодействовать при определении и реализации требований контрактов и технических заданий.
Основные концепции программной инженерии сконцентрировались и формализовались в целостном комплексе систематизированных международных стандартов, охватывающих и регламентирующих практически все процессы жизненного цикла сложных программных средств. Несколько десятков стандартов этого комплекса допускают целеустремленный отбор необходимых процессов, в зависимости от характеристик и особенностей конкретного проекта, а также формирование на их базе проблемно-ориентированных профилей стандартов для определенных типов проектов и/или предприятий.
Практическое применение профилей стандартов, сосредоточивших мировой опыт создания различных типов крупных комплексов программ, способствует значительному повышению производительности труда специалистов и качества создаваемых программных продуктов. Эти стандарты определяют модификацию, мобильность и возможность повторного применения программных компонентов и комплексов, их расширяемость и переносимость на различные аппаратные и операционные платформы, что непосредственно отражается на росте экономической эффективности технологий и процессов создания различных программных средств и систем. Для регламентирования процессов жизненного цикла такие профили стандартов должны адаптироваться и конкретизироваться применительно к определенным классам и функциям проектов, процессов и компонентов программных средств. При этом должны сохраняться концептуальная целостность применяемой совокупности стандартов и их эффективное, положительное влияние на процессы и результаты, на качество, надежность и безопасность программных продуктов при реальных ограничениях на использование доступных ресурсов проектов.
В жизненном цикле комплексов программ сложно сочетаются содержание, этапы и распределение работ, возможен ряд возвратов на более ранние технологические этапы в процессе создания компонентов ПС, они имеют не совсем определенные границы начала и завершения. Специалисты в коллективе могут на некотором интервале времени решать несколько производственных задач и заменять друг друга. Положение усугубляется трудностью поэтапного определения качества компонентов и его прогнозирования в процессе разработки, что непосредственно отражается на проекте в целом. Методология программной инженерии и стандарты регламентируют современные процессы управления проектами сложных систем и программных средств. Они обеспечивают организацию, освоение и применение апробированных, высококачественных процессов проектирования, программирования, верификации, тестирования и сопровождения программных средств и их компонентов. Тем самым эти проекты и процессы позволяют получать стабильные, предсказуемые результаты и программные продукты требуемого качества.
Многообразие классов и видов сложных комплексов программ, обусловленное различными функциями и сферами применения систем, определяет формальные трудности, связанные с методами и процедурами доказательства соответствия создаваемых и поставляемых программных продуктов условиям контрактов, требованиям заказчиков и потребителей. По мере расширения применения и увеличения сложности систем выделились области, в которых дефекты, недостаточное качество комплексов программ или данных могут наносить катастрофический ущерб, значительно превышающий положительный эффект от их использования. В таких критических системах (например, управления атомными электростанциями, крупными банками или системами вооружения) недопустимы проявления катастрофических рисков функционирования программных продуктов при любых искажениях исходных данных, сбоях, частичных отказах аппаратуры, ошибках пользователей и других нештатных ситуациях. Подобные риски комплексов программ могут определять безопасность функционирования объектов, предприятий и даже страны. Вследствие этого резко повысилась ответственность специалистов за качество результатов их труда и создаваемых программных продуктов. Это требует непрерывного совершенствования, обучения и повышения квалификации заказчиков, разработчиков и пользователей в области программной инженерии, освоения ими современных методов, процессов и международных стандартов, а также высокой корпоративной культуры коллективов специалистов, обеспечивающих жизненный цикл критических программных продуктов.
В курсе лекций предполагается, что проектирование, разработка, сопровождение и документирование программных продуктов ведется преимущественно с использованием регламентированных процессов на основе профилей стандартов ISO в соответствии с формализованными требованиями, определенными заказчиком. Тем самым не отражено создание и применение открытого кода в программных продуктах, при котором невозможна их сертификация на соответствие международным стандартам, вследствие неоднозначности версий ПС, изменяемых несинхронно различными пользователями и различными предприятиями.
Значительное внимание в курсе методологии программной инженерии уделено фрагментам и компонентам профилей стандартов ISO, целесообразным для обеспечения высокого качества и безопасности применения программных продуктов в их жизненном цикле. Менеджмент рассматриваемых проектов ориентирован преимущественно на базовые стандарты серии ISO 9000:2000. Стандарты де-факто менеджмента СММ / CMMI изложены как возможная альтернатива стандартам ISO при управлении проектированием ПС, однако они не покрывают все процессы жизненного цикла сложных комплексов программ. Наиболее распространенная сертификация предприятий, производящих программные продукты, на соответствие стандартам СММ / CMMI существенно проще, чем сертификация на соответствие полному профилю стандартов всего жизненного цикла ISO. При применении моделей СММ / CMMI учитывается преимущественно качество менеджмента проектов, однако не стандартизируются и не контролируются некоторые важные компоненты процессов ЖЦ: регламентированные характеристики качества ПС; интерфейсы Открытых систем; функциональная и информационная безопасность; комплекс технологической и эксплуатационной документации. Это может быть оправдано для предприятий, создающих программные продукты средней или относительно невысокой сложности, и вряд ли допустимо для разработчиков крупных, особо сложных, критических ПС. Акцент методологии программной инженерии на крупные проекты предполагает сохранение и возможность применения ее базовых методов, процессов и стандартов при обеспечении жизненного цикла относительно небольших проектов. Для этого должна быть предусмотрена и использоваться адаптация стандартов, технологий и инструментария для различных по сложности и размеру проектов.
В публикациях в области программной инженерии широко распространено изобретение многочисленных аббревиатур на основе английских, иногда полужаргонных, слов, которые выдаются за принципиальные достижения авторами публикаций. В тексте лекций для облегчения восприятия учащимися избегается применение аббревиатур, за исключением небольшого их числа, на основе часто используемых словосочетаний русских слов. В официальных документах в имени стандартов ISO часто присутствуют через слеш имя IEC (Международная электротехническая комиссия). Для сокращения и упрощения текста лекций имя IEC всюду опускается, однако его следует учитывать при использовании и формировании официальных документов.
Предлагаемый курс основ методологии программной инженерии предназначен для заказчиков, менеджеров крупных проектов, для аналитиков и ведущих специалистов, обеспечивающих все этапы жизненного
цикла крупных программных средств и систем. Лекции рекомендуется использовать при обучении по специальности «бизнес-информатика», студентов старших курсов, аспирантов и менеджеров проектов, созданию сложных комплексов программ на всем их жизненном цикле. Курс полезен исполнителям научных проектов и опытно-конструкторских работ, к которым предъявляются высокие требования к качеству функционирования и ограничены доступные ресурсы разработки программных продуктов. Материалы лекций могут служить базой при подготовке и внедрении систем качества предприятий, создающих сложные конкурентоспособные программные продукты, для их сертификации на соответствие международным стандартам.
Считаю необходимым выразить особую благодарность профессору, заведующему кафедрой Программной инженерии ГУ ВШЭ Сергею Михайловичу Авдошину за весьма полезные замечания к рукописи книги, а также за активную поддержку и организацию издания учебного пособия.
ЛЕКЦИЯ 1
ПРОГРАММНАЯ ИНЖЕНЕРИЯ
В ЖИЗНЕННОМ ЦИКЛЕ ПРОГРАММНЫХ
СРЕДСТВ
Основы жизненного цикла программных средств
Термином жизненный цикл (ЖЦ) принято отражать совокупность процессов и этапов развития организмов живой природы, технических систем, продуктов производства от моментов зарождения или появления потребности их создания и использования до прекращения функционирования или применения. Это соответствует всеобщему закону развития любых изделий, событий или процессов между их началом и концом, которые определяют цикл их создания, существования и применения. Программы для вычислительных машин обычно являются компонентами жизненного цикла технических систем, но по своей природе значительно отличаются от аппаратурных, технических изделий, поэтому их жизненный цикл имеет характерные особенности по сравнению с другими техническими объектами. Программы и данные в системах и вычислительных машинах являются наиболее гибкими компонентами программной инженерии и подвержены изменениям в течение всего их ЖЦ.
Do'stlaringiz bilan baham: |