Обеспечения.
Лаврищева Е.М. , Петрухин В.А.
МЕТОДЫ И СРЕДСТВА ИНЖЕНЕРИИ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Учебное пособие
Москва 2006
УДК 681.03
Рецензенты:
Лаврищева Е.М. , Петрухин В.А. Методы и средства инженерии программного
обеспечения. – Учебник
В учебнике систематически изложены методы программирования , их теория и практика с учетом ядра знаний SWEBOK ( SoftWare Engineering of Body Knowledge ) и положений стандартов программной инженерии. Представлены методы прикладного и теоретического проектирования, методы доказательства, верификация и тестирование, а также методы интеграции и преобразования программ и данных. Определены основы инженерной дисциплины разработки – управление проектом, риском и качеством. Описана инженерия приложений и предметной области на основе повторного использования компонентов, определены подходы и методы их аннотации для накопления, выбора и оценки применимости в новых программных проектах.
Для студентов факультетов информатики, разработчиков и аспирантов в области программирования, желающих ознакомиться с систематизированными знаниями по современным методам анализа, проектирования, интеграции и тестирования, а также по методам инженерии программирования – управление проектом, рисками и качеством проектируемых систем.
ПРЕДИСЛОВИЕ.. 7
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ.. 9
ВСТУПЛЕНИЕ.. 10
Тема 1. 13
ВВЕДЕНИЕ В ПРОГРАММНУЮ ИНЖЕНЕРИЮ И ЖИЗНЕННЫЙ ЦИКЛ ПО.. 13
1. Анализ и характеристика областей знаний SWEBOK.. 17
1.1. Основы программных требований (Software Requirements) 17
1. 2. Проектирование ПО (Software design) 19
1.3. Конструирование ПО (Software Construction) 21
1.4. Тестирование ПО (Software Testing) 23
1.5. Сопровождение ПО (Software maintenance) 25
1. 6. Управление конфигурацией ПО (Software Configuration Management–SCM) 27
1.7. Управление инженерией ПО (Software Engineering Management) 28
1. 8. Процесс инженерии ПО (Software Engineering Process) 31
1. 9. Методы и средства инженерии ПО (Software Engineering Tools and Methods) 32
1. 10. Качество ПО (Software Quality) 33
2. Введение в жизненный цикл ПО стандарта ISO\IEC 12207 и связь его с ядром знаний программной инженерией SWEBOK.. 35
3. Обучение специальности – программная инженерия. 40
3.1. Анализ системы знаний у ИТ–специалистов. 42
3.2. Подходы к обучению программной инженерии.. 44
3.3. Анализ результатов дистанционного обучения. 46
Контрольные вопросы и задания. 47
Литература к теме 1: 47
Тема 2. 49
МОДЕЛИ ЖИЗНЕННОГО ЦИКЛА ДЛЯ РАЗРАБОТКИ ПРОГРАММНЫХ СИСТЕМ... 49
2.1. Каскадная модель ЖЦ.. 50
2.2. Инкрементная модель ЖЦ.. 51
2.3. Спиральная модель. 53
2.4.Эволюционная модель ЖЦ.. 54
2.5. Стандартизованная модель системы.. 55
2.6. Сопоставление модели ЖЦ стандарта ISO/IEC 12207 и областей –процессов SWEBOK.. 56
2.6.1. Характеристика процессов стандарта. 57
2.6.2. Характеристика модели процессов в ядре SWEBOK.. 58
Контрольные вопросы и задания. 60
Литература к теме 2. 61
Тема 3. 62
МЕТОДЫ ОПРЕДЕЛЕНИЯ ТРЕБОВАНИЙ В ПРОГРАММНОЙ ИНЖЕНЕРИИ.. 62
3.1 Определение понятий и видов требований.. 62
Виды требований. 62
3.1.2. Анализ и сбор требований.. 63
3.1.3. Инженерия требований ПО.. 66
3.1.4. Верификация и формализация требований.. 67
3.2. Объектно-ориентированная инженерия требований.. 69
3.2.1. Метод инженерии требований А. Джекобсона. 71
3.2.2. Модель анализа требований. Определение объектов. 76
3.3. Классификация требований.. 78
3.4. Трассирование требований.. 80
Контрольные вопросы и задания. 82
Литература к теме 3. 82
Тема 4. 83
МЕТОДЫ АНАЛИЗА И ПОСТРОЕНИЯ МОДЕЛЕЙ ПрО.. 83
4.1. Объектно–ориентированные методы анализа и построения моделей ПрО.. 83
4.1.1. Основные понятия анализа ПрО.. 84
4.1.2. Метод анализа и построения моделей С.Шлаер и С.Меллора. 86
4.1.2.1. Информационная модель. 86
4.1.2.2. Модель состояний. 89
4.1.3. Модель процессов. 91
4.2. Методы проектирования архитектуры ПО.. 94
4.2.1. Стандартный подход к проектированию системы.. 94
4.2.2. Общесистемный подход к проектированию архитектуры системы.. 97
4.2.3. Техническое проектирование. 101
Контрольные вопросы и задания. 102
Литература к теме 4. 102
Тема 5. 104
МЕТОДЫ ПРОЕКТИРОВАНИЯ ПРОГРАММНЫХ СИСТЕМ... 104
5.1. Методы систематического программирования. 104
5.1.1. Структурный подход. 104
5.1.2. Объектно–ориентированный метод проектирования. 107
5.1.3. Метод моделирования UML.. 109
5.1.4. Компонентный подход к проектированию.. 112
5.1.4.1. Типы компонентных структур. 115
5.1.4.2. Методология компонентной разработки систем.. 117
5.1.5. Аспектно–ориентированное программирование. 118
5.1.6. Генерирующее (порождающее) программирование. 122
5.1.7 Агентное программирование. 125
5.2. Методы теоретического программирования. 127
5.2.1. Алгебраическое программирование (АП) 128
5. 2.2. Экспликативное программирование (ЭП) 130
5.2.3. Алгоритмика программ.. 131
5.2.4. Формальные методы.. 134
Контрольные вопросы и задания. 138
Литература к теме 5. 138
Тема 6. 141
ИНЖЕНЕРИЯ ПРИЛОЖЕНИЙ И ИНЖЕНЕРИЯ ПРЕДМЕТНОЙ ОБЛАСТИ.. 141
Введение. 141
6. 1. Инженерия ПИК.. 142
6.2. Спецификация ПИК.. 146
6.3. Репозитарий компонентов. 149
6.4. Описание интерфейса объектов-компонентов в распределенной среде. 151
6.5. Инженерия приложений и предметной области.. 153
6.6. Инженерия оценивания стоимости реализации ПрО из компонентов. 155
Литература к теме 6. 156
Тема 7. 158
МЕТОДЫ ВЕРИФИКАЦИИ И ТЕСТИРОВАНИЯ ПРОГРАММ И СИСТЕМ... 158
7. 1. Методы доказательства программ.. 158
7.1.1. Методы доказательства правильности программ.. 159
7.1.1.1. Общая характеристика формальных методов доказательства. 159
7.1.1.2 Модель формального доказательства конкретности программы.. 161
7.1.2. Техника символьного выполнения. 164
7.1.3. Методы просмотра структуры программы.. 165
7.1.2. Верификация и аттестация программ.. 168
7.1. 3. Методы верификации объектно–ориентированных программ.. 169
7.2. Методы тестирования программ.. 170
7. 2. 1. Статические методы тестирования. 170
7.2.2. Динамические методы тестирования. 171
7.2.3. Функциональное тестирование. 173
7. 3. Организационные аспекты процесса тестирования. 174
7.3.1. Организация подготовки тестов. 181
7.3.2. Команда тестировщиков. 183
7.3.3. Организация процесса тестирования. 185
Контрольные вопросы и задания. 186
Литература к теме 7. 187
Тема 8. 189
МЕТОДЫ ИНТЕГРАЦИИ, ПРЕОБРАЗОВАНИЯ И ИЗМЕНЕНИЯ.. 189
КОМПОНЕНТОВ И ДАННЫХ.. 189
8.1. Методы интеграции (композиции) компонентов. 189
8.2. Методы преобразования программ и данных. 191
8.2.1. Парадигма преобразования данных. 192
8.2.2. Формальное описание данных в ЯП и их преобразование. 193
8.2.3. Средства стандарта ISO/IEC 11404–1996 для преобразования данных. 194
8.3. Преобразование данных БД и замена БД.. 196
8.3.1. Основные этапы преобразования данных в БД.. 197
8.3.2. Унифицированные файлы для передачи данных между разными БД.. 198
8. 4. Методы внесения изменений в компоненты и в ПС.. 200
8.4.1. Реинженерия программных систем.. 202
8.4.2. Рефакторинг компонентов. 203
8.4.3. Реверсная инжеиерия. 204
Контрольные вопросы и задания. 206
Литература к теме 8. 206
Тема 9. 208
МОДЕЛИ КАЧЕСТВА И НАДЕЖНОСТИ В ПРОГРАММНОЙ ИНЖЕНЕРИИ.. 208
9.1. Модель качества ПО.. 208
9.1.1. Метрики качества программного обеспечения. 213
9.1.2. Стандартный метод оценки значений показателей качества. 216
9.1.3. Управление качеством ПС.. 218
9.2. Модели оценки надежности.. 221
9.1.1. Основные понятия в проблематике надежности ПС.. 222
9.2.2. Классификация моделей надежности.. 223
9.2.3. Модели надежности Марковского и Пуассоновского типов. 226
Контрольные вопросы и задания. 230
Литература к теме 9. 230
Тема 10. 232
МЕТОДЫ УПРАВЛЕНИЯ ПРОЕКТОМ, РИСКОМ И КОНФИГУРАЦИЕЙ.. 232
10.1. Методы управления проектами.. 232
10.1.1. Методы управления программным проектом.. 233
10.1.1.1. Метод критического пути СРМ... 233
10.1.1.2. Метод анализа и оценки PERT.. 234
10.1.2. Планирование проекта. 236
10.1.3. Организационные аспекты управления в проекте. 239
10.1.4. Оценивание проекта. 243
10.2. Методы управление рисками.. 245
10.3. Управление конфигурацией программной системы.. 248
10.3.1. Управление конфигурацией.. 249
10.3.2. Планирование УК.. 251
10.3.3. Идентификация элементов конфигурации.. 252
10.3.4. Управление версиями.. 252
10.3.5. Конфигурационный контроль. 253
10.3.6. Учет статуса конфигурации.. 254
10.3.7. Конфигурационный аудит. 255
Контрольные вопросы и задания. 255
Литература к теме 10. 256
Тема 11. 257
СРЕДСТВА И ИНСТРУМЕНТЫ В ПРОГРАММНОЙ ИНЖЕНЕРИИ.. 257
11.1. Языковые средства описания компонентов и методов интеграции.. 257
11.1.1. Средства ЯП JAVA для описания и интеграции компонентов. 258
11.1.2. Типы компонентов и средства их интеграции в JAVA.. 260
11.1.2. Система CORBA и средства описания объектов и компонентов. 263
11.1.2.1. Язык описания интерфейсов в системе CORBA.. 265
11.1.2.2. Язык описания интерфейсов объектов. 266
11.1.2.3. Интегратор объектов – брокер объектных запросов. 268
11.1.3. Средства унифицированного процесса RUP.. 269
11.2. Энциклопедия инструментов создания ПС из объектов и компонентов. 273
11.3. Средства и методы разработки архитектуры MSF.. 276
Контрольные вопросы и задания. 281
Литература к теме 11. 281
ПРИЛОЖЕНИЕ 1. 282
Словарь терминов программной инженерии.. 282
ПРИЛОЖЕНИЕ 2. 288
Характеристика стандартов разработки автоматизированных систем (АС) 288
2.1 Характеристика стандарта ГОСТ 34.601–90 для разработки АС.. 288
2.2. Стандарт разработки документации на АС – ГОСТ 34.201–89. 290
ПРИЛОЖЕНИЕ 3. 293
Жизненный цикл компонентной разработки ПС.. 293
3.1. Этап разработки требований.. 293
3.2. Этап анализа поведения ПС.. 294
3.3. Этап спецификации интерфейсов и взаимодействия компонентов. 295
3.4. Этап интеграции.. 295
3.5. Этап развертывания компонентов системы.. 298
3.6. Этап сопровождения. 299
ПРИЛОЖЕНИЕ 4. 303
Кодекс этики программной инженерии. 303
Литература. 303
ПРИЛОЖЕНИЕ 5. 304
Стандарты программной инженерии. 304
ПРЕДИСЛОВИЕ
Цель данного учебника – представить методы и средства программной инженерии (Software engineering) в систематизированном виде для их применения на процессах проектирования, тестирования и оценки качества программных систем.
Современные университетские курсы по информатике предусматривают обучение основам программирования, объектно-ориентированному подходу, UML–моделированию, параллельному программирования и др. Больше уделяется внимание современным языкам программирования (С++, JAVA) для современных компьютеров. В результате студенты получают подготовку по этим методам и средствам и недостаточные знания по инженерии проектирования и управления проектами, качеству, конфигурации и соответствующим стандартам.
В некоторых университетах проводятся лекционные курсы по теория алгоритмов, автоматов, математической логике, дискретной математике и другим формальным дисциплинам. Эти курсы основываются на математических дисциплинах (логика, алгебра, комбинаторика) и способствуют развитию математического мышления при проведении анализе предметной области, осмыслении постановок задач и разработке программ для получения на компьютере математического результата.
Производство и использование компьютерных программ в настоящее время является массовой деятельностью, разработкой программ занимаются почти семь миллионов человек, а их используют в своей профессиональной деятельности по специальности десятки миллионов. В связи с постоянно возрастающими объемами программных разработок требуется готовить кадровый потенциал, способный решать проблемы создания новых программных продуктов на инженерной основе, используя накопленный запас знаний в области программирования и управления системами.
Сложившуюся структуру и содержание подготовки специалистов надо расширить методами управления, планирования и регулирования работ, адаптируя их к условиям коллективной разработки программных систем с гарантированным качеством. Предпосылками этого является становление новой специальности, получившей название программной инженерии или инженерии программного обеспечения (Software Engineering), впитавшей в себя накопленный запас знаний в практике и теории программирования за последние десятилетия, а также обогатившейся инженерной дисциплиной выполнения процессов ЖЦ программного обеспечения.
В связи с этим предметом обучения современных студентов, будущих разработчиков программного обеспечения, менеджеров программных проектов, тестировщиков, верификаторов, контролеров качества и др. должны стать не только теоретические и прикладные методы проектирования, а и инженерные методы управления коллективом, планирования и оценивания качества выполняемых работ и укладывания в заданные сроки и стоимость проекта.
Данный учебник посвящен систематическому описанию накопленных знаний в области программирования, отражает аспекты теории и практики программирования. Для применения в лекционных курсах окажется полезным представленное в учебнике изложение современных методов программирования и обеспечения правильности программ, а также инженерии программирования (планирование, управление и оценка продуктов и процессов), сформировавшейся под влиянием развития программной инженерии – SE (Software Engineering) и стандартизации процессов программирования. В нем также представлены современные средства и инструменты поддержки процессов создания проектов (Project Management, Rational Rose, MSF, RUP, CORBA, DCOM и др.).
Авторы надеются, что учебник поднимет уровень знаний разработчиков ПО, поможет им овладеть не только представленными знаниями в области теории и практики программирования, но инженерным программированием, включая методы планирования, управления и оценивания результатов своей деятельности.
Материал учебника апробирован при чтении лекций в Киевском национальном университете имени Тараса Шевченко (1985-1997 гг.) и в МФТИ (2000-2006 гг.), а также на международных конференциях и семинарах.
Авторы