В наличии

Характеристики

ISBN/ISSN 978-5-7782-3455-0
Год издания 2017
Автор Романов Е.Л.
Кафедра ВТ
Типография НГТУ
Факультет АВТФ
700 руб.
В корзину В корзине

Программный код – основная «материальная ценность» любого проекта, а программисты – его непосредственные производители. Поэтому взаимопонимание между ними и остальными участниками процесса производства программного продукта, а также качество кода являются определяющими факторами успеха проекта в целом.
В предлагаемом издании основы программной инженерии, структура жизненного цикла проекта, технологические дисциплины и их артефакты рассматриваются с точки зрения взаимосвязи с создаваемым кодом. Излагается содержание методологий гибкого проектирования и унифицированного процесса, идеи разработки проекта «от кода», базис грамотного программирования: эффективность алгоритмов, ООП, шаблоны проектирования, метрика кода, тестирование.
Программная архитектура рассматривается начиная от конкретики клиент-серверных приложений и прикладных протоколов и заканчивая общими вопросами проектирования и преодоления «архитектурной пропасти» между функционалом и реализацией.
Учебник рекомендуется студентам, обучающимся по направлениям, связанным с информационными технологиями, как изложение основ программной инженерии; будущим программистам – для понимания роли и места профессии в процессе разработки и представления о смежных видах деятельности, которыми при необходимости придется заниматься по совместительству; всем остальным – для понимания специфики разработки качественного кода, особенностей процесса программирования, его организации и контроля.

Программный код – основная «материальная ценность» любого проекта, а программисты – его непосредственные производители. Поэтому взаимопонимание между ними и остальными участниками процесса производства программного продукта, а также качество кода являются определяющими факторами успеха проекта в целом.
В предлагаемом издании основы программной инженерии, структура жизненного цикла проекта, технологические дисциплины и их артефакты рассматриваются с точки зрения взаимосвязи с создаваемым кодом. Излагается содержание методологий гибкого проектирования и унифицированного процесса, идеи разработки проекта «от кода», базис грамотного программирования: эффективность алгоритмов, ООП, шаблоны проектирования, метрика кода, тестирование.
Программная архитектура рассматривается начиная от конкретики клиент-серверных приложений и прикладных протоколов и заканчивая общими вопросами проектирования и преодоления «архитектурной пропасти» между функционалом и реализацией.
Учебник рекомендуется студентам, обучающимся по направлениям, связанным с информационными технологиями, как изложение основ программной инженерии; будущим программистам – для понимания роли и места профессии в процессе разработки и представления о смежных видах деятельности, которыми при необходимости придется заниматься по совместительству; всем остальным – для понимания специфики разработки качественного кода, особенностей процесса программирования, его организации и контроля.




ОГЛАВЛЕНИЕ

Введение 11
Программная инженерия. Кому и почему важен «взгляд от кода»? 11
Программист: творец или рабочая лошадка? 12
Последовательность освоения 14
Приемы изложения 15
Программная инженерия и проблемы образования: действительные и мнимые 16
Глава 1. ГОМЕОПАТИЧЕСКАЯ ДОЗА ПРОГРАММНОЙ ИНЖЕНЕРИИ 19
1.1. О самоценности программного кода 19
Проектирование «от кода» 20
Жизненный цикл разработки «от кода» 21
О необходимости использования общих решений и абстракций 23
Документирование: производственная необходимость и чувство меры 25
Проектная документация: чертеж или эскиз? 26
Качество кода и его развитие 27
1.2. Программная инженерия – эссе на заданную тему 28
Технология и ремесло 28
Программная инженерия и информатика 29
Программная инженерия как проектная деятельность 31
Жизненный цикл программной системы и его модели 32
Методологии программной инженерии 35
Исторический экскурс: структурные модели проектирования ПО 38
Под сводом знаний SWEBOK 42
Глава 2. ИНСТРУМЕНТЫ И ДОКУМЕНТЫ. UML 43
2.1. UML – как же он моделирует? 43
Что понимать под моделированием? 44
Фанатизм от UML и чувство меры 46
2.2. UML – прожиточный минимум для программиста 46
Компоненты UML 47
Диаграммы 55
Глава 3. ГРАМОТНОЕ КОНСТРУИРОВАНИЕ И КОДИРОВАНИЕ 71
3.1. Алгоритмы и структуры данных. О пользе общего образования 71
Трудоемкость алгоритмов 71
Алгоритм и данные – время и пространство программного кода 74
Жадность против тупости 75
Иерархия, группировка, выбор системы координат 76
3.2. В ООП-среде как рыба в воде 76
Рефлексия 77
Полиморфизм внешний и внутренний. Абстрактные классы и интерфейсы 78
Вложенные и анонимные классы 80
Лямбда-выражения. Анонимные функции 82
Внутренний параллелизм. Потоки 82
Синхронизация 85
Символьные, двоичные и сериализуемые потоки ввода / вывода 88
Исключения и их обработка 97
3.3. Шаблоны проектирования и конструирования 99
Базовые шаблоны 100
Порождающие шаблоны 105
Структурные шаблоны 107
Поведенческие шаблоны 113
Шаблоны параллелизма 117
Системные шаблоны 122
3.4. Метрика и качество кода 123
Стилистические метрики 125
Количественные метрики 127
Сложность потоков управления и данных 129
Метрики связей модульного кода 130
Объектно-ориентированные метрики 132
Запутывающие преобразования 135
Средства контроля качества кода 137
Глава 4. ПОПУЛЯРНО ОБ АРХИТЕКТУРЕ. КЛИЕНТ-СЕРВЕРНЫЕ ПРИЛОЖЕНИЯ И ПРИКЛАДНЫЕ ПРОТОКОЛЫ 143
4.1. «Слоеный пирог» клиент-серверной архитектуры 143
Многослойная структура приложения 143
Бизнес-логика, бизнес-объекты, бизнес-слой 145
Многослойная организация приложения как основа клиент-серверной
архитектуры 147
Пример клиент-серверной архитектуры. Система учета рейтинга успеваемости 150
4.2. Любовный треугольник MVC 153
Классический архитектурный паттерн и паттерн проектирования 153
Архитектурный MVC: контроллер – управление долгосрочным поведением представления 155
4.3. Распределенные системы. Компоненты и взаимодействия 157
Распределенные системы 158
Клиент–сервер: роли и программы, взаимодействия 159
Интерфейсы и протоколы 161
Постоянные соединения и транзакции 162
Стратегии взаимодействия «клиент–сервер» 163
4.4. Что такое протокол? Распространенные решения. Терминология 165
Протокол и интерфейс. Сходства и различия 165
Иерархия протоколов в сетях 167
Житейский пример. Разговор по телефону 170
Составные части описания протокола 171
Протокол и надежность распределенной системы 172
Терминология. Синхронный и асинхронный 172
Терминология. Формат 173
Терминология. Текстовые, двоичные и сериализуемые потоки данных 173
Распространенные решения из протоколов низших уровней 174
Автоматные модели протоколов. Диаграмма состояний / переходов 181
Глава 5. СУРОВАЯ ПРОГРАММНАЯ ИНЖЕНЕРИЯ. МЕТОДОЛОГИИ, МОДЕЛИ, ФРЕЙМВОРКИ, СТАНДАРТЫ 183
5.1. Унифицированный процесс: рабочий инструмент или недостижимый идеал 183
Структура UP 184
Фаза исследования проекта 186
Фаза развития 187
Фаза построения 188
Фаза развертывания 189
Технологический процесс моделирования производства 189
Технологический процесс управления требованиями 190
Технологический процесс анализа и проектирования 191
Технологический процесс конструирования 191
Технологический процесс тестирования 192
Технологический процесс развертывания 194
Технологический процесс управления конфигурациями 194
Технологический процесс управления проектом 195
5.2. Гибкое и экстремальное программирование. Scrum 196
Гибкие методологии разработки 196
Экстремальное программирование 197
Scrum 198
Глава 6. ПРОЦЕССЫ, ДЕЯТЕЛЬНОСТИ И АРТЕФАКТЫ ЖИЗНЕННОГО ЦИКЛА 205
6.1. Системная инженерия 205
Общность программной и системной инженерии 208
6.2. Бизнес-архитектура и бизнес-аналитика 215
Бизнес-архитектура проекта 216
Артефакты фазы исследования 219
Видение проекта 221
Диаграмма классов в модели предметной области 224
Бизнес-анализ процессов предметной области 226
Формальные модели описания бизнес-процессов 230
6.3. Системная аналитика: прецеденты, сценарии, модели 232
Диаграмма прецедентов 232
Модель анализа. Диаграмма классов анализа 235
Сценарии 236
Архитектура или функционал? 238
6.4. Управление требованиями 240
Бизнес-правила 243
Атрибуты качества 243
Классификация и оценка требований 244
Разработка и управление требованиями 246
Управление жизненным циклом требований 247
Документирование требований 248
Несколько замечаний по системной аналитике 253
6.5. За рамками интуитивно понятного интерфейса 253
Производительность 254
Человеческие ошибки 256
Обучение и самообучение 257
Запоминание, распределение пространства экрана, поиск, визуализация,
навигация 261
Субъективное восприятие 265
Влияние GUI на процесс разработки. Проектирование от GUI 268
Заключение. «Приятные мелочи» интерфейса пользователя 273
6.6. Управление конфигурациями и сопровождение 275
Управление конфигурациями 275
Сопровождение 277
6.7. Управление программным проектом 278
Своды знаний и стандарты 278
Специфика управления программным проектом 280
Методология и организационная структура компании 281
Фаза исследования. Скорость принятия решения 283
Риск – не благородное дело, а фактор разработки 284
Планирование проекта 287
Стоимость и сроки 290
Формирование команды 296
Глава 7. АРХИТЕКТУРА И ПРОЕКТИРОВАНИЕ 299
7.1. Параллельные прямые функционала и реализации 299
Что говорят классики 300
Принципы: разумная достаточность, существенность, множественность
представления 300
Требования к архитекторам ПО 302
Архитектурные аспекты проектирования 304
7.2. Проектирование, плавно переходящее в конструирование 305
Уровень доступа к данным. Классы DAO 306
Классы бизнес-объектов 308
Источники данных для бизнес-модели 310
Реализация толстого клиента 311
Протокол и коммуникации в тонком клиенте с WebAPI 312
Архитектурный MVC 317
Параллелизм. Синхронизация 323
Структура кода и объемные показатели 324
7.3. Архитектурное проектирование и прикладные протоколы 324
Преамбула. Существуют ли нерешенные проблемы? 324
Аспекты описания протокола и его реализации 325
Прикладной протокол как элемент взаимодействия слоев клиент-серверной архитектуры 326
Параллелизм, синхронизация 326
Буферизация, очереди 327
Диспетчеризация, планирование 328
Диаграмма состояний протокола 328
Установление, восстановление и закрытие соединения, сессия,
авторизация 329
Канальная и прикладная компоненты протокольного процесса 330
Процедурная и объектно-ориентированная реализация протокола 330
Итоговый вопросник 331
Глава 8. ТЕСТИРОВАНИЕ 333
8.1. Тестирование, валидация, верификация 333
Тестирование как соответствие требованиям 333
Тестирование на различных этапах жизненного цикла программы 334
Тестирование, валидация, верификация 335
8.2. Программные ошибки 340
Что такое программная ошибка? 340
Философия ошибок 342
Защита от ошибок и устойчивость программы 344
Тестирование и отладка 345
Специфика процесса отладки 345
Особенности анализа программ, содержащих ошибки 347
Характеристики ошибок 347
Условия проявления ошибки 348
Момент проявления 348
Характер последствий, уровень ущерба 349
Воздействие на программу 349
Виды ошибок по отношению к структуре алгоритма 350
Затраты на исправление 351
Классификация дефектов кода 352
Глава 9. МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ ПО ДИСЦИПЛИНАМ 363
9.1. Инжиниринг ПО. Индивидуальные задания 363
9.2. Управление программными проектами. Коллективный проект 367
Пример проекта 369
9.3. Программная инженерия 372
Глоссарий 379
Библиографический список 388

Данные подготавливаются.

Вернуться к списку