Предисловие
Круг читателей
Структура книги
Как пользоваться книгой
Веб-сайт этой книги
Упражнения
Благодарности
От издательства
Введение
0.1. Контекст разработки программного продукта
0.2. Этапы разработки программного обеспечения
0.3. Процесс
0.4. Проект
0.5. Персонал
0.6. Продукт
0.7. Качество
0.8. Проект для студенческой команды
0.8.1. Общение в группе
0.9. Обзор учебного проекта
0.9.1. Компьютерная игра Встреча: введение
0.9.2. Требования к игре Встреча
0.9.3. Проектирование игры Встреча
0.9.4. Тестирование игры Встреча
0.9.5. Документация по проекту видеоигры Встреча
Упражнения
Упражнения в команде
Ответы
Подсказки
Глава 1. Процесс
Основы
1.1. Введение в процесс разработки программного обеспечения
1.1.1. Типичная схема разработки программного обеспечения
1.2. Исторический и современный взгляд на разработку программного обеспечения
1.2.1. Становление инженерии программного обеспечения
1.2.2. Влияние структурного и объектно-ориентированного
программирования
1.2.3. Повторное использование компонентов
1.2.4. Формальные методы
1.2.5. Удобство и простота использования
1.3. Требования к процессу, проекту, продукту и персоналу
1.3.1. Артефакты и роли
1.4. Разновидности процесса разработки
1.4.1. Водопадная модель процесса
1.4.2. Спиральная модель процесса
1.4.3. Инкрементальная модель процесса
1.4.4. Унифицированный процесс разработки программного обеспечения (USDP)
1.4.5. Сравнение процессов разработки
1.5. Документация
1.5.1. Введение в документирование
1.5.2. Стандарты документации
Детали
1.6. Качество
1.6.1. Метрики
1.6.2. Процесс контроля качества
1.6.3. Методы «белого ящика» и «черного ящика»
1.6.4. Введение в инспектирование
1.6.5. План контроля качества (SQAP): стандарт IEEE
1.6.6. Верификация и валидация
1.7. Управление документацией
1.7.1. Введение
1.7.2. Согласованность и целостность документации
1.7.3. Управление конфигурациями
1.8. Введение в методы оценки возможностей
1.8.1. Индивидуальный процесс разработки программного обеспечения (PSP)
1.8.2. Командный процесс разработки программного обеспечения (TSP)
1.8.3. Модель зрелости возможностей (CMM)
1.8.4. Связь между PSP, TSP и CMM
1.9. Подведение итогов
Упражнения
Вопросы для проверки
Упражнения в команде
Подсказки
Ответы
Пример 1. План управления конфигурациями (SCMP)
Пример 2. План контроля качества (SQAP), часть 1
Глава 2. Управление проектом
Основы
2.1. Введение в управление проектом
2.1.1. Что такое управление проектом?
2.1.2. Составляющие управления проектом
2.1.3. Основные параметры: стоимость, функциональность, качество и расписание
2.1.4. Типичная схема процесса управления проектом
2.2. Управление персоналом проекта
2.2.1. Профессионализм
2.2.2. Важность управления персоналом
2.2.3. Корпоративные аспекты
2.2.4. Управленческие аспекты
2.2.5. Человеческий фактор
2.3. Варианты организации персонала
2.3.1. Управление взаимодействием
2.3.2. Варианты структуры ответственности
2.3.3. Подбор участников проекта
2.4. Выявление и уменьшение рисков
2.4.1. Что такое риски
2.4.2. Обзор управления рисками
2.4.3. Выявление рисков
2.4.4. Предупреждение рисков
2.5. Инструментальные средства разработки и поддержки
2.5.1. Модели процесса
2.5.2. Инструментальные средства
2.5.3. Разрабатывать новые или покупать готовые решения?
2.5.4. Выбор языка программирования
2.5.5. Документация
2.5.6. Службы поддержки
2.6. Подготовка плана-графика: планирование верхнего уровня
Детали
2.7. Интеграция унаследованных приложений
2.8. Оценка стоимости: предварительные расчеты
2.8.1. Введение
2.8.2. Оценка количества строк кода без учета функционального размера
2.8.3. Функциональный размер и количество строк кода
2.8.4. Преобразование функционального размера в количество строк кода
2.8.5. Пример
2.8.6. Библиография
2.9. Оценка трудозатрат и длительности проекта по количеству строк кода
2.10. Командный процесс разработки программного обеспечения (TSP)
2.11. План управления программным проектом (SPMP)
2.12. Управление проектом и качество
2.12.1. Метрики процесса
2.12.2. IEEE 739-1989 SQAP: часть 2
2.13. Улучшение процесса и модель зрелости возможностей
2.13.1. Улучшение процесса, используемого в организации
2.13.2. Улучшение процесса для текущего проекта
2.14. Вспомогательные средства и методы управления проектом
2.14.1. Распределенные и международные команды
2.14.2. Экстремальное программирование
2.14.3. Принятие решений с помощью отбраковки
2.15. Подведение итогов
Руководство по учебному проекту. План управления программным проектом (SPMP) \r\r для видеоигры Встреча
Этап 1. Подготовка к совещанию по планированию проекта
Этап 2. Начальное совещание по планированию проекта
Этап 3. Завершение составления SPMP
Упражнения
Вопросы для проверки
Упражнения в команде
Подсказки
Ответы
Пример 1. План управления программным проектом (SPMP) для видеоигры Встреча
Пример 2. План контроля качества (SQAP), часть 2
Глава 3. Анализ требований
3.1. Введение в анализ требований
3.1.1. Значение анализа требований
3.1.2. С-требования и D-требования
3.1.3. Почему требования следует написать
3.1.4. Типичная схема процесса анализа требований
3.1.5. Преимущества анализа требований и проблемы, связанные с ним
3.2. Взаимодействие с заказчиком
3.2.1. Источники возникновения требований
3.2.2. Определение заинтересованных лиц
3.2.3. Примеры пожеланий заказчиков
3.2.4. Проведение опроса и документирование
3.3. Описание С-требований (требований заказчика)
3.3.1. Концепция работы
3.3.2. Варианты использования
3.3.3. Диаграммы потоков данных для общения с заказчиком
3.3.4. Диаграммы переходов состояний
3.3.5. Черновик пользовательского интерфейса и других интерфейсов
3.3.6. Подведение итогов и руководство для формулирования С-требований
3.4. Методологии и инструментальные средства для С-требований
3.5. Быстрое прототипирование, исследование осуществимости и проверка концепции
3.5.1. Быстрое прототипирование
3.5.2. Исследование осуществимости
3.6. Корректировка проекта для отображения анализа С-требований
3.6.1. С-требования и размеры проекта
3.6.2. Влияние анализа С-требований на план проекта
3.7. Будущие направления и подведение итогов по С-требованиям
3.7.1. Будущие направления
3.7.2. Подведение итогов по С-требованиям
Руководство по учебному проекту. С-требования для видеоигры Встреча
Этап 1. Подготовка
Этап 2. Интервью с заказчиком
Этап 3. Написание Спецификации требований к программному обеспечению (SRS)
Этап 4. Завершение
Этап 5. Метрики и итоги
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Подсказки
Ответы
Пример. Спецификация требований к программному обеспечению (SRS) \r\r для видеоигры Встреча, часть 1
Глава 4. Анализ требований. Завершение SRS:
добавление детальных требований
Основы
4.1. Введение в детальные требования (D-требования)
4.1.1. Значение детальных требований
4.1.2. Типичная схема процесса анализа D-требований
4.2. Типы D-требований
4.2.1. Функциональные требования
4.2.2. Нефункциональные требования: требования к производительности
4.2.3. Нефункциональные требования: надежность и доступность
4.2.4. Нефункциональные требования: обработка ошибок
4.2.5. Нефункциональные требования: интерфейсные требования
4.2.6. Нефункциональные требования: ограничения
4.2.7. Обратные требования
4.2.8. Отображение типов требований на стандарт IEEE 830-1993
4.3. Желательные свойства D-требований
4.3.1. Прослеживание
4.3.2. Пригодность к тестированию и однозначность
4.3.3. Приоритет
4.3.4. Полнота
4.3.5. Состояние ошибки
4.3.6. Согласованность
4.3.7. Подведение итогов процесса написания детальных требований
4.4. Диаграммы последовательности
4.5. Организация D-требований
4.5.1. Почему так важно организовать детальные требования
4.5.2. Способы организации детальных требований
4.5.3. Организация детальных требований по вариантам использования
4.5.4. Организация требований по классам
4.5.5. Определение классов
4.5.6. Правильный выбор класса для данного требования
4.5.7. Классификация объектов
4.5.8. Связь с документацией тестов
Детали
4.6. Качество детальных требований
4.6.1. Роль контроля качества в анализе D-требований
4.6.2. Метрики для анализа D-требований
4.6.3. Инспектирование анализа D-требований
4.7. Использование инструментов для анализа требований
4.8. Формальные методы для спецификации требований
4.8.1. Введение в формальные спецификации
4.8.2. Примеры формальных спецификаций
4.8.3. Когда следует использовать формальную спецификацию
4.8.4. Предусловия и постусловия
4.9. Влияние процесса составления D-требований на проект
4.9.1. Влияние на SPMP
4.9.2. Влияние размера на D-требования
4.10. Подведение итогов процесса определения D-требований
Руководство по учебному проекту. D-требования для примера игры Встреча
Этап 1. Подготовка
Этап 2. Классификация D-требований
Этап 3. Написание D-требований
Этап 4. Завершение: метрики и итоги
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Подсказки
Ответы
Пример. Спецификация требований к программному обеспечению (SRS) \r\r для видеоигры Встреча, часть 2
Глава 5. Архитектура программного обеспечения
Основы
5.1. Введение в архитектуру программ
5.1.1. Обзор технологии разработки
5.1.2. Что такое архитектура программы
5.1.3. Цели выбора архитектуры
5.1.4. Декомпозиция
Детали
5.2. Модели, каркасы и образцы проектирования
5.2.1. Использование моделей
5.2.2. Унифицированный язык моделирования (UML)
5.2.3. Каркасы
5.2.4. Классификация архитектур
5.2.5. Образцы проектирования I: введение
5.2.6. Компоненты
5.3. Типы архитектур и их модели
5.3.1. Архитектуры, основанные на потоках данных
5.3.2. Независимые компоненты
5.3.3. Виртуальные машины
5.3.4. Репозиторные архитектуры
5.3.5. Уровневые архитектуры
5.3.6. Приложения со смешанной архитектурой
5.3.7. Подведение итогов: процедура выбора архитектуры
5.4. Архитектура: нотация, стандарты и инструментальные средства
5.4.1. Нотация
5.4.2. Инструментальные средства
5.4.3. Стандарт IEEE/ANSI для описания проекта
5.5. Контроль качества при выборе архитектуры
5.5.1. Качество и выбор архитектуры
5.5.2. Выбор из альтернативных архитектур
5.5.3. Проверка архитектуры с помощью вариантов использования
5.5.4. Инспектирование выбора архитектуры
5.5.5. Влияние выбора архитектуры на SPMP
5.6. Подведение итогов
Руководство по учебному проекту. Архитектура проекта Встреча
Этап 1. Подготовка
Этап 2. Выбор архитектуры
Этап 3. Собрание команды (предварительное обсуждение проектирования)
Этап 4. Усовершенствование архитектуры
Этап 5. Документирование архитектуры
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Ответы
Подсказки
Пример 1. Каркас архитектуры ролевой игры
Пример 2. Архитектура ролевой игры Встреча. SDD, часть 1
Глава 6. Детальное проектирование
Основы
6.1. Введение в детальное проектирование
6.1.1. Что такое детальное проектирование
6.1.2. Соотношение вариантов использования, архитектуры и детального \r\r проектирования
6.1.3. Типичная схема процесса детального проектирования
6.1.4. Проектирование по схеме USDP
6.1.5. Проектирование и интерфейсы
6.1.6. Повторно используемые компоненты
6.2. Диаграммы последовательности и диаграммы потоков данных в детальном \r\r проектировании
6.2.1. Детальные диаграммы последовательности
6.2.2. Детальные диаграммы потоков данных
6.3. Спецификация классов и функций
6.3.1. Инварианты класса
6.3.2. Инварианты, предусловия и постусловия функций
6.4. Спецификация алгоритмов
6.4.1. Блок-схемы
6.4.2. Псевдокод
6.4.3. Когда следует использовать блок-схемы и псевдокод
Детали
6.5. Образцы проектирования: приемы детального проектирования
6.5.1. Креационные образцы проектирования
6.5.2. Структурные образцы проектирования
6.5.3. Образцы проектирования, основанные на поведении приложения
6.6. Библиотека стандартных шаблонов (STL) C++
6.7. Стандарты, нотация и инструментальные средства детального проектирования
6.7.1. Стандарт IEEE 890
6.7.2. Язык UML
6.7.3. Инструменты, использующие исходный код: Javadoc
6.8. Влияние детального проектирования на проект
6.8.1. Оценка объема работ с помощью детального проектирования
6.9. Детальное проектирование и качество
6.9.1. Качество и метрики в детальном проектировании
6.9.2. Инспектирование детального проектирования
6.10. Подведение итогов
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Пример 1. Каркас ролевой видеоигры. Детальное проектирование (оставшиеся части SDD)
Пример 2. Ролевая видеоигра Встреча. Детальное проектирование (оставшиеся части SDD)
Глава 7. Реализация модулей
7.1. Введение в реализацию
7.1.1. Определение «реализации модулей»
7.1.2. Цели реализации
7.1.3. Типичная схема процесса реализации модулей
7.1.4. Реализация в USDP
7.1.5. Языки программирования
7.2. Программирование и стиль
7.2.1. Общие принципы надежной реализации
7.2.2. Указатели и ссылки
7.2.3. Функции
7.2.4. Исключения
7.2.5. Обработка ошибок
7.2.6. Другие практические вопросы
7.3. Стандарты программирования
7.3.1. Соглашения об именах: примеры на языке Java
7.3.2. Документирование атрибутов
7.3.3. Константы
7.3.4. Инициализация атрибутов
7.4. Доказуемо корректные программы
7.5. Инструменты и среды программирования
7.6. Качество в реализации
7.6.1. Стандартные метрики для исходного кода
7.6.2. Индивидуальные метрики для исходного кода
7.6.3. Инспектирование кода
7.6.4. Индивидуальная программная документация (PSD)
7.7. Итоги процесса реализации
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Ответы
Пример 1. Обновление Плана контроля качества (SQAP)
Пример 2. Обновление Плана контроля качества (SQAP). Приложение: Модель реализации
Пример 3. Индивидуальная программная документация (PSD), часть 1
Пример 4. Исходный код (без тестового кода): класс EncounterCharacter \r\r (ПерсонажВстречи)
Глава 8. Модульное тестирование
8.1. Введение в модульное тестирование
8.1.1. Цели тестирования
8.1.2. Значение модульного тестирования
8.1.3. Типичный план модульного тестирования
8.2. Типы тестов
8.2.1. Тестирование «черного ящика», «белого ящика» и «серого ящика»
8.2.2. Разбиение равнозначности для тестирования «черного ящика»
8.2.3. Анализ граничных значений для тестирования «черного ящика»
8.2.4. Рассмотрение утверждений для тестирования «белого ящика»
8.2.5. Рассмотрение решений для тестирования «белого ящика»
8.2.6. Тестирование на основе инвариантов
8.2.7. Использование случайных величин в тестировании
8.3. Планирование модульных тестов
8.4. Контрольные таблицы и примеры тестирования методов
8.4.1. Модульное тестирование методов
8.4.2. Пример теста метода
8.5. Контрольные таблицы и примеры тестирования классов
8.5.1. Пример теста комбинации методов
8.5.2. Тесты атрибутов
8.5.3. Тестирование инвариантов класса
8.5.4. Тесты на основе состояний
8.6. Подведение итогов
Упражнения
Вопросы для проверки
Упражнения в команде
Общие упражнения
Ответы
Пример. Индивидуальная программная документация (PSD) на Java \r\r для класса EncounterCharacter (ПерсонажВстречи), часть 2
Глава 9. Интеграция, верификация и валидация системы
9.1. Введение
9.1.1. Значение фазы интеграции
9.1.2. Верификация, валидация и системное тестирование
9.2. Процесс интеграции
9.2.1. Описание интеграции
9.2.2. Типичная схема процессов интегрального и системного тестирования
9.3. Процесс тестирования
9.3.1. Интегральное тестирование
9.3.2. Сотрудники, участвующие в тестировании, и артефакты
9.3.3. Тестирование интерфейсов
9.3.4. Системное тестирование
9.3.5. Тестирование удобства и простоты использования
9.3.6. Регрессионное тестирование
9.3.7. Приемосдаточное тестирование
9.3.8. Тестирование инсталляции
9.4. Документирование интеграции и тестирования
9.4.1. Стандарты документации по тестированию
9.4.2. Организация документации по интеграции и тестированию
9.5. Итерации перехода
9.5.1. Альфа- и бета-версии
9.5.2. План итераций перехода
9.6. Качество в интеграции, верификации и валидации
9.6.1. Качество, к которому следует стремиться
9.6.2. Метрики интегрального и системного тестирования
9.6.3. Инспектирование системного и интегрального тестирования
9.6.4. Привлечение группы контроля качества к интегральному и системному тестированию
9.6.5. Системная интеграция и модель CMM
9.7. Инструментальные средства интегрального и системного тестирования
9.8. Подведение итогов
Упражнения
Вопросы для проверки
Упражнения в команде
Общие упражнения
Ответы
Пример 1. План управления конфигурациями программного обеспечения (SCMP). \r\r Приложение А: План создания базиса интеграции
Пример 2. Документация по тестированию программного обеспечения (STD) \r\r для видеоигры Встреча
Глава 10. Сопровождение
10.1. Введение
10.1.1. Сопровождение программ
10.1.2. Вопросы сопровождения программ
10.1.3. Организация процесса сопровождения
10.2. Виды работ по сопровождению
10.3. Методы сопровождения
10.3.1. Анализ влияния факторов
10.3.2. Обратное проектирование
10.3.3. Реинжиниринг
10.3.4. Унаследованные приложения
10.3.5. Обновление документации
10.4. Стандарт IEEE 1219-1992
10.4.1. Определение задачи сопровождения
10.4.2. Анализ задачи
10.4.3. Проектирование запроса на сопровождение
10.4.4. Реализация запроса на сопровождение
10.5. Управление сопровождением
10.6. Качество сопровождения
10.6.1. Метрики сопровождения
10.6.2. Применение метрик сопровождения
10.6.3. Удобство сопровождения
10.7. Подведение итогов
Упражнения
Вопросы для проверки
Общие упражнения
Упражнения в команде
Ответы
Пример. Сопровождение игры Встреча
Сокращения
Словарь терминов
Литература
Алфавитный указатель