- •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Перечень объектов, подлежащих сертификации и их характеристики
- •Заключение Библиография
4 Качество и эффективность в программной инженерии 193
4.1 Обеспечение качества программного обеспечения 193
4.1.1 Качество программного продукта 193
4.1.2 Культура и этика программной инженерии 193
4.1.3 Значение и стоимость качества 194
4.1.4 Повышение качества ПС с использованием процессного подхода 195
4.1.5 Показатели качества программных средств 196
4.1.6 Количественная оценка качества программного обеспечения 199
4.2 Модели качества процессов конструирования 200
4.2.1 Качество процессов 201
4.2.2 CMM/CMMI 201
4.2.3 TickIT 206
4.2.4 Прочие подходы 208
4.3 Процессы управления качеством программного обеспечения 210
4.3.1 Подтверждение качества программного обеспечения 211
4.3.2 Проверка (верификация) и аттестация 212
4.3.3 Оценка и аудит 212
4.3.4 Характеристика дефектов 215
4.3.5 Методы управления качеством программного обеспечения 216
4.4 Стандартизация качества программного обеспечения 218
4.4.1 Стандарты в сфере программной инженерии 218
4.4.2 Стандартизация программных продуктов в ЕСПД 220
4.4.3 Виды стандартных программных документов 222
4.4.4 Действующие международные стандарты в сфере разработки программных средств и информационных технологий 226
4.5 Документирование программных средств 230
4.6 Сертификация программных средств 230
4.6.1 Правовые акты по сертификации программных продуктов 230
4.6.2 Сертификация ПС 233
4.6.3 Перечень объектов, подлежащих сертификации и их характеристики 235
Заключение 237
Библиография 238
Введение
1Основы программной инженерии
1.1Кризисы программирования и возникновение программной инженерии
На рубеже 60-х – 70-х годов прошлого века стоимость программного обеспечения стала приближаться к стоимости аппаратного обеспечения (компьютеров), а динамика её роста позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ Это событие явилось первым кризисом программирования. Благодаря ему появилась идея для сокращения стоимости программ использовать инженерные методы в производстве программ, которая постепенно оформилась в программную инженерию (или технологию программирования в нашей стране).
С тех пор программная инженерия бурно развивается. Причём этапы её развития связаны с решением очередной системной проблемы:
Появление модульного подхода к программированию
На начальных этапах становления программной инженерии большие затраты на создание программ часто были связаны с разработкой однотипных фрагментов кода, поскольку в разных программах зачастую решались одинаковые задачи. Очевидной идеей явилось использование при создании новых программ ранее написанных фрагментов. В результате возник модульный подход к программированию.
Суть модульного подхода к программированию состоит в выделении типовых фрагментов и оформлении их в виде модулей. Каждый модуль снабжается описанием, содержащим правила его использования в разделе интерфейса модуля, который устанавливал связи модуля с основной программой.
Наиболее простыми в этом отношении оказались модули решения математических задач: решения уравнений, систем уравнений, задач оптимизации. К настоящему времени накоплены и успешно используются большие библиотеки таких модулей.
Для многих других типов модулей возможность их повторного использования оказалась проблематичной в виду сложности их связей с основной программой. Повторное использование модулей со сложными интерфейсами является проблемой, достаточно актуальной и по сей день. Для ее решения разрабатываются специальные формы (структуры) представления модулей и организации их интерфейсов.
Формирование структурного подхода к программированию
В дальнейшем, с возникновением задач по созданию сложных программных комплексов, таких как: автоматизированные системы управления производствами, системы управления сложными техническими объектами (например, самолётом) и т.д. резко выросла сложность программного обеспечения. В результате объёмы программного кода, коллективы разработчиков и количество модулей стали стремительно увеличиваться, что стало приводить к крупным провалам и общему снижению эффективности разработки таких систем. Оказалось, что львиная доля стоимости больших систем приходится не на их создание, а на их внедрение и эксплуатацию. Появилась идея управления жизненным циклом программного продукта, как последовательностью конкретных стадий: проектирования, разработки, тестирования, внедрения и сопровождения.
Стадия сопровождения программного комплекса традиционно связан с исправлением ошибок и внесением изменений в программу в соответствии с изменившимися требованиями пользователей. Низкое качество программного кода и, особенно, программной документации явились причина высокой стоимости (а порой и невозможности выполнения) сопровождения программного комплекса. В результате сформировались основные принципы технологии структурного проектирования, призванные обеспечить заданное качество и кода, и документации:
использование нисходящего функционального проектирования, основанном на методе пошаговой структурной декомпозиции;
применение специальных языков проектирования, которые сейчас принято называть CASE-средствами и средств автоматизации использования этих языков;
стандартизация всех этапов жизненного цикла программного комплекса;
стандартизация оформления и содержания программных документов;
отказ в программировании от свободного использования операторов безусловного перехода.
Становление объектно-ориентированного подхода
Дальнейшее развитие программной инженерии высветило проблему определения требований и управления ими, поскольку в отличие от других инженерий, где заказчик – это обычно следующее звено в цепочке создания продукта, в программной инженерии заказчик, как правило, – совершенно не представляет конечную модель программного продукта и, соответственно, не может сформулировать корректные требования к нему. В результате создание программного продукта превратилось в его постоянную модернизацию и даже перепроектирование. Возникла необходимость обеспечения возможности внесений изменений в программу, не меняя ранее написанного кода.
Решением указанной проблемы стало использование объектно-ориентированного подхода к проектированию, основанного на понятии класса, являющегося развитием понятия модуля с определенными свойствами и поведением, характеризующими его. Каждый класс может порождать объекты – экземпляры данного класса, которые поддерживают следующие механизмы:
Инкапсуляция – объединение в классе свойств и методов.
Наследование – возможность порождения нового класса из существующего с частичным изменением свойств и методов.
Полиморфизм – определение свойств и методов объекта по контексту.
Объектно-ориентированный подход позволил успешно перейти к спиральной модели разработки программных продуктов, значительно снизив потери от необходимости учёта всё новых требований заказчика.
Таким образом, развитие программной инженерии, направленной на снижение себестоимости создания программ, стимулируется всё новыми проблемами и очевидно ещё далеко от завершения.
