Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Методы и средства инженерии программного обеспечения

Покупка
Артикул: 830146.01.99
Доступ онлайн
1 000 ₽
В корзину
В курсе представлено изложение ключевых понятий, методов и средств программной инженерии как деятельности, нацеленной на создание программных систем, отвечающих потребностям заказчиков, с соблюдением плановых сроков и бюджета. Рассмотрены темы, актуальные для специалистов на пути от формулировки заказчиком требований до создания работоспособного и качественного программного продукта. Рассмотрены вопросы программной инженерии как инженерной дисциплины (применение инженерами не только теоретических методов и средств разработки ПО, но и стандартов, правил и методик управления разработкой ПО), а также вопросы проведения инженерных оценок качества, затраченных ресурсов, трудозатрат, стоимости и др.), основные процессы при создании программного обеспечения, среди которых такие ключевые разделы планирование (это анализ целей и задач, принципов реализации и управления планами и ресурсами), сопровождение (устранение найденных недостатков в ПО и внесение изменений как эволюционное развитие ПО ). Слушатели курса овладеют умением создавать системы с большими функциональными возможностями, управлять целями, сроками, ресурсами и ценой проекта, минимизировать затраты и стоимость.
Петрухин, В. А. Методы и средства инженерии программного обеспечения : краткий курс / В. А. Петрухин, Е. М. Лаврищева. - Москва : ИНТУИТ, 2016. - 337 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2146205 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов

                                    
Методы и средства инженерии программного
обеспечения

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

Доступ онлайн
1 000 ₽
В корзину