| Введение | 9
|
| 1. Особенности создания программных средств (ПС) | 12
|
| 1.1. Специфические особенности ПС. ПС - новый вид товарной продукции | 12
|
| 1.1.1. Понятие ПС | 12
|
| 1.1.2. Специфика разработки ПС | 13
|
| 1.1.3. Программное обеспечение - новый вид товарной продукции | 14
|
| 1.2. Жизненный цикл ПС и его основные этапы | 15
|
| 1.2.1. Основные процессы жизненного цикла ПС | 17
|
| 1.2.2. Вспомогательные процессы жизненного цикла | 23
|
| 1.2.3. Организационные процессы жизненного цикла | 26
|
| 1.2.4. Стандартизация жизненного цикла ПС | 28
|
| 1.2.5. Адаптация процессов и работ в стандартах жизненного цикла ПС к характеристикам конкретных проектов | 34
|
| 1.2.6. Модели жизненного цикла ПС | 36
|
| 1.3. Анализ и разработка требований к ПС | 48
|
| 1.3.1. Определение и категории требований | 48
|
| 1.3.2. Разработка требований | 53
|
| 1.3.3. Анализ требований | 55
|
| 1.3.4. Документирование требований | 57
|
| 1.4. Определение целей создания ПС | 65
|
| 1.4.1. Разновидности целей | 65
|
| 1.4.2. Общие правила постановки целей | 69
|
| 1.5. Разработка внешних спецификаций на ПС | 70
|
| 1.6. Цели и порядок проектирования ПС | 74
|
| 1.6.1. Методическая, технологическая, инструментальная и организационная поддержка процесса проектирования | 75
|
| 1.6.2. Этапы проектирования сложных ПС | 77
|
| 1.7. Модульная структура ПС | 81
|
| 1.7.1. Основные характеристики программного модуля | 81
|
| 1.7.2. Методы разработки структуры программы | 85
|
| 1.8. Внешнее проектирование модулей | 88
|
| 1.9. Стиль программирования | 91
|
| 2. Тестирование ПС | 96
|
| 2.1. Принципы тестирования ПС. Проектирование теста | 96
|
| 2.1.1. Принципы тестирования ПС | 101
|
| 2.1.2. Виды тестирования ПС | 105
|
| 2.1.3. Проектирование теста | 107
|
| 2.2. Общая характеристика методов тестирования | 109
|
| 2.2.1. Статические методы тестирования | 109
|
| 2.2.2. Динамические методы тестирования | 110
|
| 2.2.3. Функциональное тестирование | 116
|
| 2.2.4. Тестирование базового пути | 116
|
| 2.3. Тестирование модулей | 119
|
| 2.3.1. Пошаговое и монолитное тестирование | 120
|
| 2.3.2. Восходящее тестирование | 121
|
| 2.3.3. Нисходящее тестирование | 122
|
| 2.3.4. Метод сандвича | 124
|
| 2.3.5. Тестирование сопряжения и автономное тестирование | 125
|
| 2.4. Тестирование комплексов программ | 127
|
| 2.5. Отладка программ | 134
|
| 3. Надежность ПС | 137
|
| 3.1. Определение надежности ПС | 141
|
| 3.1.1. Оценка надежности ПС | 146
|
| 3.1.2. Основные понятия в проблематике надежности ПС | 148
|
| 3.1.3. Факторы, определяющие надежность ПС | 149
|
| 3.2. Показатели надежности программного средства | 151
|
| 3.3. Факторы надежности ПС | 159
|
| 3.4. Общая характеристика моделей надежности ПС | 164
|
| 3.4.1. Модель надежности ПС | 166
|
| 3.4.2. Классификация моделей надежности | 167
|
| 3.4.3. Классификация Гоэла | 168
|
| 3.5. Ошибки ПС и их причины | 169
|
| 3.5.1. Неправильный перевод как причина ошибок | 170
|
| 3.5.2. Ошибки вычислений | 171
|
| 3.5.3. Ошибки обработки и интерпретации данных | 172
|
| 3.5.4. Ошибки пользовательского интерфейса | 173
|
| 3.6. Классификация программных ошибок | 174
|
| 3.6.1. Ошибки пользовательского интерфейса | 175
|
| 3.6.2. Ошибки обработки граничных условий | 177
|
| 3.6.3. Ошибки управления потоком | 178
|
| 3.6.4. Ошибки передачи и интерпретации данных | 179
|
| 3.6.5. Ситуация гонок | 180
|
| 3.6.6. Контроль версий и идентификаторов | 181
|
| 3.6.7. Ошибки тестирования | 182
|
| 3.6.8. Классификация ошибок с точки зрения тестировщика | 183
|
| 3.6.9. Классификация ошибок по степени их критичности | 184
|
| 3.6.10. Классификация ошибок в зависимости от их места в жизненном цикле программного изделия | 185
|
| 3.6.11. Немного юмора | 186
|
| 3.7. О моделях надежности программного обеспечения | 187
|
| 3.8. Эмпирические модели надежности | 190
|
| 3.8.1. Модель сложности | 190
|
| 3.8.2. Модель, определяющая время доводки программ | 193
|
| 3.9. Динамические модели надежности | 195
|
| 3.9.1. Модель Шумана | 195
|
| 3.9.2. Модель La Padula | 198
|
| 3.9.3. Модель Джелинского-Моранды | 199
|
| 3.9.4. Модель Шика-Волвертона | 201
|
| 3.9.5. Модель Муса | 202
|
| 3.9.6. Модель переходных вероятностей | 204
|
| 3.9.7. Модель Гоэл-Окимото | 206
|
| Заключение | 207
|
| 3.10. Статические модели надежности | 208
|
| 3.10.1. Модель Миллса | 208
|
| 3.10.2. Модель Липова | 211
|
| 3.10.3. Простая интуитивная модель | 212
|
| 3.10.4. Модель Коркорэна | 214
|
| 3.10.5. Модель Нельсона | 215
|
| Заключение | 216
|
| 4. Экономические вопросы программной инженерии | 217
|
| 4.1. Особенности определения экономической эффективности ПС | 219
|
| 4.2. Расчет экономического эффекта при производстве ПС | 222
|
| 4.2.1. Технико-экономическое обоснование проектов ПС | 222
|
| 4.2.2. Эффективность технологий проектирования ПС | 225
|
| 4.3. Расчет экономического эффекта при применении ПС | 229
|
| 4.4. Расчет коэффициента экономической эффективности и срока окупаемости капитальных вложений ПС | 232
|
| 4.5. Цели технико-экономического анализа разработки ПС | 235
|
| 4.6. Факторы, определяющие затраты на создание ПС | 240
|
| 4.6.1. Факторы, определяющие затраты на разработку ПС | 241
|
| 4.6.2. Методики оценивания технико-экономических показателей | 243
|
| 4.7. Составляющие затрат на разработку ПС | 246
|
| 4.8. Методы сбора и обработки данных о разработках ПС | 255
|
| 4.9. Трудоемкость, длительность, стоимость разработки ПС | 257
|
| 4.9.1. Трудоемкость разработки | 258
|
| 4.9.2. Оценка функционального размера информационной системы | 259
|
| 4.9.3. Оценка длительности разработки информационной системы | 271
|
| 4.9.4. Оценка стоимости разработки информационных систем | 274
|
| 4.9.5. Оценка трудоемкости и стоимости процесса сопровождения информационной системы | 278
|
| 4.10. Методы обеспечения технологической безопасности ПС и данных | 280
|
| 4.10.1. Контрольно-испытательные методы анализа безопасности ПС | 280
|
| 4.10.2. Логико-аналитические методы контроля безопасности ПС | 283
|
| 5. Сертификация и стандартизация ПС | 286
|
| 5.1. Задачи и проблемы сертификации ПС | 286
|
| 5.1.1. Определение сертификации | 287
|
| 5.1.2. Проблемы сертификации ПС | 290
|
| 5.2. Цели и виды сертификации | 292
|
| 5.3. Виды сертификационных испытаний программ | 294
|
| 5.4. Методы, технология, средства обеспечения сертификации ПС | 298
|
| 5.4.1. Методы сертификации программных средств | 299
|
| 5.4.2. Технология сертификации | 300
|
| 5.4.3. Средства обеспечения сертификации ПС | 302
|
| 5.5. Стандарты сертификации ПС | 305
|
| 5.6. Задача количественной оценки качества ПС. Виды метрикЗОЗ 5.6.1. Основные направления применения метрик | 311
|
| 5.6.2. Метрические шкалы | 312
|
| 5.7. Показатели качества ПС. Стандарты, регламентирующие показатели качества ПС | 314
|
| 5.7.1. Показатели качества ПС | 315
|
| 5.7.2. Стандарты, регламентирующие показатели качества ПС | 318
|
| 5.7.3. Выбор показателей качества | 320
|
| 5.7.4. Оценка качества | 322
|
| 5.8. Понятие сложности, основные компоненты сложности | 325
|
| 5.9. Оценка сложности программного средства | 332
|
| 5.9.1. Предварительная оценка сложности программы на этапе разработки спецификации требований к программе | 333
|
| 5.9.2. Предварительная оценка сложности на этапе определения архитектуры | 334
|
| 5.9.3. Критерии оценки компьютерных программ и баз данных | 337
|
| 5.9.4. Метрики размера программ | 338
|
| 5.9.5. Метрики сложности потока управления программ | 340
|
| 5.9.6. Метрики сложности потока данных | 343
|
| 5.10. Основные понятия и виды корректности программ | 344
|
| 5.10.1. Определение корректности | 344
|
| 5.10.2. Виды корректности | 346
|
| 5.10.3. Аналитическая проверка корректности | 347
|
| 5.10.4. Типы этапонов, методы измерений и проверки корректности программ | 348
|
Данное учебное пособие является дополнением к книге "Документирование программного обеспечения". В нем собрана информация по некоторым разделам программной инженерии, которые влияют на процесс документирования и являются для него фундаментом.
Как и книга "Документирование программного обеспечения", данное пособие является подробной реферативной подборкой материалов, так или иначе связанных с процессом проектирования и документирования программного средства.
В настоящее время существует большое количество книг по программной инженерии, проектированию программных средств различного уровня сложности. Следует, правда, заметить, что основной объем информации, посвященной данным вопросам, издан в качестве учебных пособий в издательствах университетов, следовательно, материал, изложенный в этих книгах, доступен очень узкому кругу читателей. На просторах интернета можно также встретить немало информации, касающейся данных аспектов. Однако эта информация представлена "на языке интернета", в фамильярной манере, с использованием большого числа жаргонизмов. Такие публикации, с одной стороны, понятны читателю. С другой стороны, стиль изложения оставляет желать лучшего и ссылаться на подобные публикации при написании официальных документов не солидно. Что касается книг, предлагаемых центральными издательствами, то большинство из них являются переводными учебниками и, следовательно, освещают в основном зарубежный опыт. Более того, большинство книг посвящено достаточно узким аспектам: только стандартизации, только экономике, только проектированию. В данном пособии последовательно представлен весь процесс проектирования программного средства с исчерпываю-
щими ссылками на упомянутые только что узконаправленные источники, где можно более подробно изучить тот или иной вопрос. Что касается процесса документирования, в данном пособии он рассмотрен лишь вскользь. Более подробно его аспекты представлены в книге данного автора "Документирование программного обеспечения".
Экономические вопросы программной инженерии, в частности особенности определения экономической эффективности создания программного средства, технико-экономическое обоснование проектов программного средства, расчет коэффициента экономической эффективности капитальных вложений и пр., рассматриваются в четвертой главе.
Очевидно, что рассматриваемые в данном пособии принципы проектирования и документирования программного средства никогда не будут реализованы именно в таком виде. Если руководствоваться абсолютно всем приведенным здесь при создании достаточно простой программы, можно оказаться попросту погребенным под кипой никому не нужных руководств и документации, можно окружить себя толпой сотрудников, которые будут работать от силы пару дней в месяц в ожидании дальнейших заказов либо распоряжений. Следование абсолютно всем рекомендациям учебного пособия приемлемо для создания крупномасштабных проектов. Но в любом случае, рекоменду-
ется в первую очередь руководствоваться правилами здравого смысла и ориентироваться на особенности разрабатываемого проекта!
Данное пособие разрабатывалось в качестве дополнительного для изучения курса "Документирование программного обеспечения". В то же время рассмотренные в пособии математические модели могут быть исследованы и в других курсах, преподаваемых на направлениях, связанных с прикладной математикой и информационными технологиями. На основе некоторой информации учебного пособия возможно написание дипломных и научно-исследовательских работ.