Методы и средства инженерии программного обеспечения
Покупка
Издательство:
ИНТУИТ
Год издания: 2016
Кол-во страниц: 337
Дополнительно
В курсе представлено изложение ключевых понятий, методов и средств программной инженерии как деятельности, нацеленной на создание программных систем, отвечающих потребностям заказчиков, с соблюдением плановых сроков и бюджета.
Рассмотрены темы, актуальные для специалистов на пути от формулировки заказчиком требований до создания работоспособного и качественного программного продукта. Рассмотрены вопросы программной инженерии как инженерной дисциплины (применение инженерами не только теоретических методов и средств разработки ПО, но и стандартов, правил и методик управления разработкой ПО), а также вопросы проведения инженерных оценок качества, затраченных ресурсов, трудозатрат, стоимости и др.), основные процессы при создании программного обеспечения, среди которых такие ключевые разделы планирование (это анализ целей и задач, принципов реализации и
управления планами и ресурсами), сопровождение (устранение найденных недостатков в ПО и внесение изменений как эволюционное развитие ПО ). Слушатели курса овладеют умением создавать системы с большими функциональными возможностями, управлять целями, сроками, ресурсами и ценой проекта, минимизировать затраты и стоимость.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Методы и средства инженерии программного обеспечения 2-е издание, исправленное Петрухин В.А. Лаврищева Е.М. Национальный Открытый Университет “ИНТУИТ” 2016 2
Методы и средства инженерии программного обеспечения/ В.А. Петрухин , Е.М. Лаврищева - М.: Национальный Открытый Университет “ИНТУИТ”, 2016 В курсе представлено изложение ключевых понятий, методов и средств программной инженерии как деятельности, нацеленной на создание программных систем, отвечающих потребностям заказчиков, с соблюдением плановых сроков и бюджета. Рассмотрены темы, актуальные для специалистов на пути от формулировки заказчиком требований до создания работоспособного и качественного программного продукта. Рассмотрены вопросы программной инженерии как инженерной дисциплины (применение инженерами не только теоретических методов и средств разработки ПО, но и стандартов, правил и методик управления разработкой ПО), а также вопросы проведения инженерных оценок качества, затраченных ресурсов, трудозатрат, стоимости и др.), основные процессы при создании программного обеспечения, среди которых такие ключевые разделы планирование (это анализ целей и задач, принципов реализации и управления планами и ресурсами), сопровождение (устранение найденных недостатков в ПО и внесение изменений как эволюционное развитие ПО ). Слушатели курса овладеют умением создавать системы с большими функциональными возможностями, управлять целями, сроками, ресурсами и ценой проекта, минимизировать затраты и стоимость. (c) ООО “ИНТУИТ.РУ”, 2008-2016 (c) Петрухин В.А., Лаврищева Е.М., 2008-2016 3
Введение Разработка и использование компьютерных программ в настоящее время стали массовой деятельностью. Более семи миллионов человек занимаются их разработкой, а сотни миллионов активно их используют [1.1]. Практически нет ни одной сферы деятельности человека (экономика, медицина, бизнес, коммерция, промышленность и т. д.), где бы ПО не использовалось, как средство автоматизации и улучшения работ. Спрос на него постоянно увеличивается, сложность растет, а количество ошибок не уменьшается. Знания разработчиков ПО отличаются разнообразием и, как правило, они являются неполными, несогласованными и разнородными, ориентированными на реализацию разных предметных областей, начиная от ОС и заканчивая прикладными бизнессистемами. И самое главное, знания в процессе инженерной деятельности постепенно уточняются, видоизменяются и пополняются, и их необходимо учитывать разработчикам нового ПО. Примерно каждые 10 лет происходит смена языков программирования и операционных сред для описания и функционирования программ, что предполагает перевод ранее изготовленных и функционирующих программ на новые языки и операционные среды. На это тратятся огромные людские и финансовые ресурсы. Так, в 2000 году в изменении формата даты в программах и микросхемах на десятках млн. компьютеров участвовало более 2 миллионов программистов, а затраты составили сотни миллионов долларов. Перевод ранее созданных прикладных Фортран-программ на новые языки (С, Java и др.), и развертывание их в новых операционных средах требует больших капиталовложений и привлечения огромной армии программистов. В связи с постоянным обновлением персональных компьютеров, соответственно, операционных сред и систем программирования, возникают сложности, связанные с адаптацией действующих программ и прикладных систем к новым условиям. В практике программирования не раз делались попытки облегчить труд по написанию программ, перейдя к “программированию без программистов”. В связи с этим появлялись программные проекты, которые ставили своей целью заменить постановки задач математическим описанием и заставить машины их обрабатывать. К ним относятся компьютеризация математических знаний (машины серии “Мир”, японский проект “ЭВМ 5-го поколения” [1.2]), фабрики программ по изготовлению программной продукции по типу сборочного конвейера из готовых “деталей”-программ (завод для сборки АСУ, система АПРОП, ПРИЗ) и многие другие проектные решения, направленные на изменение стилей программирования. Например, формальные спецификации и математическое доказательство правильности программ (1980 г.), систематизация знаний в области инженерии программного обеспечения и создание общего ядра знаний SWEBOK (2001, 2003гг.), теория построения и верификации программ (проект 2005 г.) и др. Переворот в программировании по высвобождению армии пользователей компьютеров от разработки и написания программ так и не произошел, наоборот, методы и средства программирования постоянно развиваются. Особенно это связано с новыми возможностями платформ и распределенных сред, в которых компоненты 4
располагаются по разным узлам сети и взаимодействуют между собой через сетевые протоколы. Кроме того, появились новые методы и подходы к разработке ПО: структурный, объектно-ориентированный, компонентный, аспектный, визуальный, агентно-ориентированный, сервисный и др. [1.3-1.12]. Для поддержки новых методов разработано огромное количество разнообразных инструментальных средств и методов оценки качества, производительности, стоимости и т.п. Процесс разработки ПО и методы оценивания продуктов стандартизованы (ISO/IEC 12207, 15504, 9126 и др.) [1.14, 1.16]. Все это способствует повышению эффективности проектирования, тестирования, прогнозирования надежности и оценки качества ПО. Новый программный проект разрабатывается 1-2 года, а эволюционирует 6-7 лет. На сопровождение проекта тратится 61% против 39% средств на его разработку. Эффективность разработчиков в зависимости от квалификации колеблется в отношении 1:10, а значит, требуется повышать уровень знаний разработчиков ПО. На сегодня ядро стабильных знаний по программной инженерии составляет 75% от тех знаний, которыми пользуются в практической деятельности. В связи с этим проведена систематизация накопленных знаний в программировании и ряде других областей информатики. Международным комитетом при американском объединении компьютерных специалистов ACM (Association for Computing Machinery) и институте инженеров по электронике и электротехнике IEEE Computer Society было создано ядро знаний SWEBOK. В этом ядре были систематизированы разнородные знания в области программирования, планирования и управления, сформулировано понятие программной инженерии и десяти областей, которые соответствуют процессам проектирования ПО и методам их поддержки. Программная инженерия (Software Engineering) является отраслью информатики, которая изучает вопросы построения компьютерных программ, отражает закономерности развития программирования, обобщает опыт программирования в виде комплекса знаний и правил регламентации инженерной деятельности разработчиков ПО. В этом определении выделим два основных аспекта. 1. Программную инженерию можно рассматривать как инженерную дисциплину, в которой инженеры применяют теоретические идеи, методы и средства при разработке ПО, создают продукты в соответствии со стандартами, регламентирующими процессы их проектирования и разработки. 2. Программная инженерия описывает методы управления программным проектом, качеством и рисками. Применение таких методов позволяет достичь высокого качества программных продуктов. Эта инженерная дисциплина предоставляет всю необходимую информацию и стандарты для выбора наиболее подходящего метода и процессов жизненного цикла ПО для реализации конкретного проекта. Как инженерная дисциплина, она охватывает все аспекты создания ПО, начиная от формирования требований до создания сопровождения и снятия с эксплуатации ПО, а также включает инженерные методы оценки трудозатрат, стоимости, 5
производительности и качества. Т.е. речь идет именно об инженерной деятельности в программировании, поскольку ее сущность близка к определению инженерной деятельности в толковом словаре: инженерия - это способ применения научных результатов, что позволяет получать пользу от свойств материалов и источников энергии; инженерия - деятельность по созданию машин для предоставления полезных для потребителя услуг и изделий. Инженеры в программной инженерии - это специалисты, выполняющие практические работы по реализации программ с применением теории, методов и средств компьютерной науки. Компьютерная наука охватывает теорию и методы построения вычислительных и программных систем, тогда как программная инженерия рассматривает вопросы практического построения ПО. Знание компьютерной науки необходимо специалистам в области программного обеспечения так же, как знание физики - инженерам-электронщикам. Если для решения конкретных задач программирования не существует подходящих методов или теории, инженеры применяют свои знания, накопленные ими в процессе разработок конкретных ПО, а также используют опыт применения соответствующих инструментальных программных средств. Инженеры, как правило, работают в условиях заключенных контрактов и выполняют задачи проекта с учетом этих условий и ограничений на сроки, время, стоимость и др. В отличие от науки, цель которой - получение знаний, для инженерии знание - это способ получения некоторой пользы. Кроме программистов, занимающихся непосредственно разработкой ПО, в программной инженерии используются: 1. менеджеры, которые планируют и руководят проектом, отслеживают сроки и затраты; 2. инженеры службы ведения библиотек и репозитариев компонентов; 3. технологи, которые определяют инженерные методы и стандарты, создают для проекта модель ЖЦ, удовлетворяющую его целям и задачам; 4. тестировщики (контролеры), которые проверяют правильность выполнения процесса проектирования путем тестирования и на основе собранных данных проводят измерения разных характеристик качества, включая оценку надежности ПО; 5. верификаторы, которые проверяют правильность реализации функций в проекте; 6. валидаторы, проверяющие ПО на соответствие заданным требованиям. Разработку программных систем можно считать инженерной деятельностью, но она имеет некоторые отличия от традиционной инженерии: ветви инженерии имеют высокую степень специализации, а в программной инженерии специализация коснулась только отдельных областей (например, операционные системы, трансляторы, редакторы и т.п.); программирование объектов основывается на стандартах, с помощью которых отражаются типовые требования заказчиков, т.е. типизация объектов и артефактов 6
в сфере программирования; технические решения классифицированы и каталогизированы, а в программной инженерии каждая новая разработка - это новая проблема, для реализации которой устанавливают аналогию с ранее разработанными системами. Одним из инженерных решений каталогизации в программировании является паттерн проектирования. Для превращения программной инженерии в специальность мировая компьютерная общественность создала профессиональные комитеты, регламентирующие аспекты процесса программирования: ядро знаний SWEBOK, этический кодекс программиста [1.13], учебные курсы (Curricula -2001, 2004) по подготовке специалистов в области программной инженерии, обучение специальности и сертификация специалистов. Таким образом, возникновение программной инженерии как дисциплины разработки ПО определено следующими важными факторами: значительным объемом накопленных знаний в области создания ПО; появлением новых методов анализа, моделирования и проектирования ПО; совершенствованием методов обнаружения ошибок в ПО; эффективной организацией коллективов разработчиков ПО и оценки их трудовой деятельности; использованием готовых программных компонентов, высокотехнологических средств и инструментов разработки ПО; необходимостью эволюционного развития компонентов и систем, а также их адаптацией к новым изменяющимся условиям операционных сред и компьютерных сетей. Программная инженерия делает акцент на повышении качества и производительности ПО за счет применения: новых и усовершенствованных методов проектирования ПО; готовых компонентов и методов их генерации; методов эволюции, верификации и тестирования ПО; инструментальных средств; методов управления проектами, оценки качества и стоимости. 7
Области знаний программной инженерии и стандарты ЖЦ программного обеспечения Дано определение программной инженерии, ее место в инженерной деятельности специалистов при создании компьютерных систем и общее описание десяти областей знаний профессионального ядра знаний SWEBOK. Изложен ЖЦ стандарта ISO/IEC 12207 и связь его процессов с областями знаний SWEBOK В данной лекции систематически изложены следующие взаимосвязанные аспекты инженерии ПО: теоретический и интеллектуальный базис (методы, принципы, средства и методологии и др.) проектирования, представленный в ядре SWEBOK, способствующий созданию высококачественных программных продуктов, удовлетворяющих заданным заказчиком функциональным и нефункциональным требованиям; стандартный подход к разработке программных проектов, состоящий в использовании моделей ЖЦ, в процессы которых встроены методы проектирования, верификации, тестирования и оценивания промежуточных рабочих продуктов, а также проверки планов и времени выполнения работ на этих процессах для того, чтобы регулировать сроки и затраты, а также возможные риски и недостатки. 1.1 Анализ и характеристика областей знаний SWEBOK Ядро знаний SWEBOK является основополагающим научно-техническим документом, который отображает мнение многих зарубежных и отечественных специалистов в области программной инженерии [1.3-1.12] и согласуется с современными регламентированными процессами ЖЦ ПО стандарта ISO/IEC 12207. В этом ядре знаний содержится описание 10 областей, каждая из которых представлена согласно принятой всеми участниками создания этого ядра общей схемы описания, включающей определение понятийного аппарата, методов и средств, а также инструментов поддержки инженерной деятельности. В каждой области описывается определенный запас знаний, который должен практически использоваться в соответствующих процессах ЖЦ. Для наглядного представления понятийного аппарата областей знаний SWEBOK проведем условное разбиение областей на основные (пять для проектирования ПС, рис. 1.1) и дополнительные организационные методы и подходы, которые отображают инженерию управления проектированием ПС (конфигурацией, проектами, качеством рис. 1.2). 8
Рис. 1.1. Основные области знаний SWEBOK Рис. 1.2. Организационные области знаний SWEBOK В каждой области приведены ключевые понятия, подходы и методы проектирования разных типов ПС. Данное разбиение областей на основные и вспомогательные соответствует структуре разбиения процессов стандарта ISO/IEC 12207 (см. раздел 1.2), выполнение которых определяется знаниями, содержащимися в ядре SWEBOK. Далее приводится обзор каждой области ядра знаний SWEBOK, определяется ее роль в проектировании и реализации программных продуктов. В некоторых подразделах показана связь с положениями соответствующих стандартов, которые регламентируют и регулируют выполнение процессов проектирования программных систем. 1.1.1. Требования к ПО (Software Requirements) Требования - это свойства, которыми должно обладать ПО для адекватного 9
определения функций, условий и ограничений выполнения ПО, а также объемов данных, технического обеспечения и среды функционирования. Требования отражают потребности людей (заказчиков, пользователей, разработчиков), заинтересованных в создании ПО. Заказчик и разработчик совместно проводят сбор требований, их анализ, пересмотр, определение необходимых ограничений и документирование. Различают требования к продукту и к процессу, а также функциональные, нефункциональные и системные требования. Требования к продукту и к процессу определяют условия функционирования и режимы работы ПО в операционной среде, ограничения на структуру и память компьютеров, на принципы взаимодействия программ и компьютеров и т.п. Функциональные требования определяют назначение и функции системы, а нефункциональные - условия выполнения ПО и доступа к данным. Системные требования описывают требования к программной системе, состоящей из взаимосвязанных программных и аппаратных подсистем и разных приложений. Требования могут быть количественные (например, количество запросов в сек., средний показатель ошибок и т.п.). Значительная часть требований относится к атрибутам качества: безотказность, надежность и др., а также к защите и безопасности как ПО, так и данных. Область знаний “Требования к ПО (Software Requirements)” состоит из следующих разделов: инженерия требований (Requirement Engineering), выявление требований (Requirement Elicitation), анализ требований (Requirement Analysis), спецификация требований (Requirement Specification). валидация требований (Requirement validation), управление требованиями (Requirement Management). Инженерия требований к ПО - это дисциплина анализа и документирования требований к ПО, которая заключается в преобразовании предложенных заказчиком требований к системе в описании требований к ПО и их валидация. Она базируется на модели процесса определения требований и действующих лицах, обеспечивающих управление и формирование требований, а также на методах достижения показателей качества. Модель процесса определения требований - это схема процессов ЖЦ, которые выполняются от начала проекта и до тех пор, пока не будут определены и согласованы требования. При этом процессом может быть маркетинг и проверка осуществимости требований в данном проекте. Управление требованиями к ПО заключается в контроле за выполнением требований и планировании использования ресурсов (человеческих, программных, технических, временных, стоимостных) в процессе разработки промежуточных рабочих продуктов на этапах ЖЦ. Качество и процесс улучшения требований - это процесс формулировки характеристик и атрибутов качества (надежность, реактивность и др.), которыми должно обладать 10