Обеспечения. €

Лаврищева Е.М. , Петрухин В.А.

МЕТОДЫ И СРЕДСТВА ИНЖЕНЕРИИ

ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Учебное пособие

Москва 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 гг.), а также на международных конференциях и семинарах.

Авторы

Наши рекомендации