
- •1 Основы программной инженерии 6
- •2 Процессы жизненного цикла программного средства 33
- •3 Инструменты и методы программной инженерии 184
- •4 Качество и эффективность в программной инженерии 193
- •Введение
- •1Основы программной инженерии
- •1.1Кризисы программирования и возникновение программной инженерии
- •1.2Программная инженерия и сущность инженерного подхода к созданию программного обеспечения
- •1.3Системная инженерия программного обеспечения
- •1.4Управление жизненным циклом программных средств
- •1.4.1Понятие жизненного цикла
- •1.4.2Масштабы программных средств
- •1.4.3Классификация процессов жизненного цикла по исо/мэк 12207
- •1.4.4Стадии разработки программных средств по еспд
- •1.4.5Типичная схема управления процессом создания программного обеспечения
- •1.5Модели жизненного цикла
- •1.5.1Каскадная (водопадная) модель
- •1.5.2Итеративная и инкрементальная модель – эволюционный подход
- •1.5.3Спиральная модель
- •2Процессы жизненного цикла программного средства
- •2.1Управление требованиями к программному обеспечению
- •2.1.1Программные требования
- •2.1.1.1Пирамида требований
- •2.1.1.2Характеристики программных требований
- •2.1.2Процесс управления требованиями
- •2.1.3Извлечение требований
- •2.1.4Анализ программных требований
- •2.1.5Документирование требований
- •2.1.6Проверка требований (верификация и аттестация)
- •2.1.7Измерение программных требований
- •2.2Проектирование программных средств
- •2.2.1Принципы проектирования
- •2.2.2Структура и архитектура программного обеспечения
- •2.2.2.1Архитектурные структуры и точки зрения
- •2.2.2.2Архитектурные стили
- •2.2.2.3Шаблоны проектирования
- •2.2.2.4Семейства программ и фреймворков
- •2.2.3Анализ качества и оценка программного дизайна
- •2.2.3.1Атрибуты качества
- •2.2.3.2Анализ качества и техники оценки
- •2.2.3.3Измерения
- •2.2.4Нотации проектирования
- •2.2.4.1Структурные описания
- •2.2.4.2Поведенческие (динамические) описания
- •2.2.5Подходы и методы проектирования программного обеспечения
- •2.2.5.1Общие подходы
- •2.3Использование uml в программной инженерии
- •2.3.1Основные компоненты uml
- •2.3.2Диаграмма вариантов использования
- •2.3.3Диаграмма классов
- •2.3.4Диаграмма состояний
- •2.3.5Диаграмма деятельности
- •2.3.6Диаграмма последовательности
- •2.3.7Диаграмма кооперации
- •2.3.8Диаграмма компонентов
- •2.3.9Диаграмма развертывания
- •2.4Тестирование программного обеспечения
- •2.4.1Основы тестирования
- •2.4.2Уровни тестирования
- •2.4.2.1Над чем производятся тесты
- •2.4.2.2Цели тестирования
- •2.4.3Техники тестирования
- •3.1 Техники, базирующиеся на интуиции и опыте инженера (Based on the software engineer’s intuition and experience)
- •3.2 Техники, базирующиеся на спецификации (Specification-based techniques)
- •3.3 Техники, ориентированные на код (Code-based techniques)
- •3.4 Тестирование, ориентированное на дефекты (Fault-based techniques)
- •3.5 Техники, базирующиеся на условиях использования (Usage-based techniques)
- •3.6 Техники, базирующиеся на природе приложения (Techniques based on the nature of the application)
- •3.7 Выбор и комбинация различных техник (Selecting and combining techniques)
- •4.1 Оценка программ в процессе тестирования (Evaluation of the program under test, ieee 982.1-98)
- •2.4.4.2Оценка выполненных тестов
- •2.4.5Процесс тестирования
- •2.4.5.1Практические соображения
- •2.4.5.2Тестовые работы
- •2.5Сопровождение программного обеспечения
- •2.5.1Основы сопровождения программного обеспечения
- •2.5.1.1Определения и терминология
- •2.5.1.2Природа сопровождения
- •2.5.1.3Потребность в сопровождении
- •2.5.1.4Приоритет стоимости сопровождения
- •2.5.1.5Эволюция программного обеспечения
- •2.5.1.6Категории сопровождения
- •2.5.2Ключевые вопросы сопровождения программного обеспечения
- •2.5.2.1Технические вопросы
- •2.5.2.2Оценка стоимости сопровождения
- •2.5.2.3Измерения в сопровождении программного обеспечения
- •2.5.3Процесс сопровождения
- •2.5.3.1Процессы сопровождения
- •2.5.3.2Работы по сопровождению
- •2.5.4Техники сопровождения
- •2.5.4.1Понимание программных систем
- •2.5.4.2Реинжиниринг
- •2.5.4.3Обратный инжиниринг
- •2.6Конфигурационное управление
- •2.6.1Управление конфигурационным процессом
- •2.6.1.1Организационный контекст управления конфигурацией по
- •2.6.1.2Ограничения и правила управления конфигурацией по
- •2.6.1.3Планирование при управлении конфигурацией по
- •2.6.1.4План конфигурационного управления
- •2.6.1.5Контроль выполнения процесса управления конфигурацией по
- •2.6.2Идентификация программных конфигураций
- •2.6.2.1Идентификация элементов, требующих контроля
- •2.6.2.2Программная библиотека
- •2.6.3Контроль программных конфигураций
- •2.6.3.1Предложение, оценка и утверждение изменений
- •2.6.3.2Реализация изменений
- •2.6.3.3Отклонения и отказ от изменений
- •2.6.4Учет статусов конфигураций
- •2.6.4.1Информация о статусе конфигураций
- •2.6.4.2Отчетность по статусу конфигураций
- •2.6.5Аудит конфигураций
- •2.6.5.1Функциональный аудит программных конфигураций
- •2.6.5.2Физический аудит программных конфигураций
- •2.6.5.3Внутренние аудиты базовых линий
- •2.6.6Управление выпуском и поставкой
- •2.6.6.1Сборка программного обеспечения
- •2.6.6.2Управление выпуском программного обеспечения
- •3Инструменты и методы программной инженерии
- •3.1Инструменты
- •3.1.1Инструменты работы с требованиями
- •3.1.2Инструменты проектирования и конструирования
- •3.1.3Инструменты тестирования
- •3.1.4Инструменты сопровождения
- •3.1.5Инструменты конфигурационного управления
- •3.1.6Инструменты управления инженерной деятельностью
- •3.1.7Инструменты поддержки процессов
- •3.1.8Инструменты обеспечения качества
- •3.2Методы
- •3.2.1Эвристические методы
- •3.2.2Формальные методы
- •3.2.3Методы прототипирования
- •4Качество и эффективность в программной инженерии
- •4.1Обеспечение качества программного обеспечения
- •4.1.1Качество программного продукта
- •4.1.2Культура и этика программной инженерии
- •4.1.3Значение и стоимость качества
- •4.1.4Повышение качества пс с использованием процессного подхода
- •4.1.5Показатели качества программных средств
- •4.1.6Количественная оценка качества программного обеспечения
- •4.2Модели качества процессов конструирования
- •4.2.1Качество процессов
- •4.2.4Прочие подходы
- •4.3Процессы управления качеством программного обеспечения
- •4.3.1Подтверждение качества программного обеспечения
- •4.3.2Проверка (верификация) и аттестация
- •4.3.3Оценка и аудит
- •4.3.4Характеристика дефектов
- •4.3.5Методы управления качеством программного обеспечения
- •4.4Стандартизация качества программного обеспечения
- •4.4.1Стандарты в сфере программной инженерии
- •4.4.2Стандартизация программных продуктов в еспд
- •4.4.3Виды стандартных программных документов
- •4.4.4Действующие международные стандарты в сфере разработки программных средств и информационных технологий
- •4.5Документирование программных средств
- •4.6Сертификация программных средств
- •4.6.1Правовые акты по сертификации программных продуктов
- •4.6.2Сертификация пс
- •4.6.3Перечень объектов, подлежащих сертификации и их характеристики
- •Заключение Библиография
1.3Системная инженерия программного обеспечения
Системная инженерия – это практическое применение научных, инженерных и управленческих навыков, необходимых для преобразования операционных требований в описание конфигурации системы, которая наилучшим образом удовлетворяет этим требованиям. Это общий процесс решения проблем, который применяется ко всему техническому управлению в проекте, посвященном разработке системы, предоставляя механизм формулирования и совершенствования определений изделий и процессов системы.
Стандарт IEEE Std. 1220-1998 описывает процесс системной инженерии и ее применение на протяжении всего цикла жизни изделия [Std. 1220-1998]. Системная инженерия порождает документы, а не оборудование. Документы связывают процессы разработки с циклом жизни проекта. Они определяют предполагаемые окружения процессов, интерфейсы и инструменты управления рисками в рамках всего проекта.
Системная инженерия включает в себя пять функций.
Определение проблемы – указание потребностей и ограничений путем анализа требований и взаимодействия с заказчиком.
Анализ решений – выделение набора возможных способов удовлетворения потребностей и ограничений, их анализ и выбор оптимального.
Планирование процессов – определение задач, которые должны быть выполнены, объема ресурсов и затрат, необходимых для создания изделия, очередности задач и потенциальных рисков.
Контроль процессов – определение методов мониторинга проекта и процессов, измерение прогресса, оценка промежуточных изделий и принятие по мере необходимости корректирующих действий.
Оценка изделий – определение качества и количества создаваемых изделий путем оценочного планирования, тестирования, демонстрации, анализа, верификации и контроля.
Системная инженерия формирует основу всего хода проекта разработки, а также механизм определения пространства решений в терминах систем и интерфейсов с внешними системами. Пространство решений описывает изделие на самом высоком уровне, прежде чем требования к нему будут разделены на аппаратную и программную составляющую.
Этот подход аналогичен присущей программной инженерии практике – накладывать ограничения как можно позже в процессе разработки. Чем позже на проект будут наложены ограничения, тем более гибким будет реализованное решение.
Термин «системная инженерия программного обеспечения» (СИПО) появился в начале 80-х годов, и его приписывают Уинстону Ройсу [Уинстону Ройсу]. СИПО отвечает за общее техническое управление системой и подтверждение корректности окончательных системных продуктов. Как и системная инженерия, СИПО порождает документы, а не компоненты. В этом она отличается от программной инженерии (ПрИ), порождающей компьютерные программы и руководства пользователей.
СИПО начинается, когда системные требования разделены на аппаратные и программные подсистемы. СИПО формирует основу для всей разработки программного обеспечения в проекте и, как и ПрИ, представляет собой одновременно и технический и управленческий процесс. Технический процесс СИПО – аналитическая работа, необходимая для преобразования операционных требований в:
описание программной системы;
дизайн программного обеспечения заданного размера, конфигурации и качества;
документацию программной системы в виде требований и спецификаций для проектирования;
процедуры, необходимые для верификации, тестирования и принятия окончательного программного продукта;
документацию, необходимую для его использования и сопровождения.
СИПО не является описанием работ. Это процесс, который выполняют многие люди и организации: системные инженеры, менеджеры, программные инженеры, программисты и, не стоит забывать пользователи.
По мере того как крупные системы все больше зависят от программ, применение методов системной инженерии к разработке программного обеспечения в состоянии помочь избежать существенных проблем.
Впрочем, разработчики программного обеспечения часто игнорируют эти методы. Они считают, что чисто программные системы или системы, работающие на массовых компьютерах, — всего лишь программные, а не системные проекты. Игнорирование системных аспектов разработки программного обеспечения и ведет к кризису.
SwSE и программная инженерия
И SwSE, и SwE — это технические и управленческие процессы, однако SwE порождает программные компоненты и описывающую их документацию. Более строго, программная инженерия включает в себя следующее.
Практическое применение компьютерных дисциплин, менеджмента и других наук к анализу, проектированию, конструированию и обслуживанию программного обеспечения и связанной с ним документации.
Наука инженерии, применяющая методы анализа, проектирования, кодирования, тестирования, документирования и управления с целью создания крупных, удовлетворяющих специфическим требованиям программ в определенное время и с определенными затратами.
Систематическое применение методов, инструментов и методик, которые позволяют выполнить оговоренные требования и добиться цели, создав эффективную и полезную программную систему.
Рис. 1 иллюстрирует связи между системной инженерией, SwSE и SwE. Традиционная системная инженерия выполняет первоначальный анализ и проектирование, а также интеграцию и тестирование окончательной системы.
Во время первой стадии разработки SwSE отвечает за анализ требований к программному обеспечению и архитектурный дизайн. SwSE также управляет окончательным тестированием программных систем. Наконец, SwE управляет тем, что системные инженеры называют инженерией компонентов.
SwSE и управление проектом
Процесс управления проектом включает в себя оценку рисков и затрат на создание программной системы, определение графика выполнения, объединение различных специалистов и инженерных групп, конфигурационное управление и постоянный аудит, позволяющий гарантировать, что проект укладывается в сроки и смету и соответствует техническим требованиям [6].
Рис. 2. Управленческие связи между системной инженерией программного обеспечения, программной инженерией и проектным менеджментом
Рис. 2 иллюстрирует управленческие связи между проектным менеджментом, SwSE и SwE. Руководство проектом включает в себя общее управление распределением работ в проекте и полномочия предоставления ресурсов. SwSE определяет технический подход, принимает технические решения, взаимодействует с техническими представителями заказчика, а также одобряет и принимает конечный программный продукт. SwE отвечает за разработку программного дизайна, кодирование и разработку программных компонентов.