- •Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Ивановский государственный энергетический университет имени в.И. Ленина».
- •Иваново 2014
- •Оглавление
- •Предисловие
- •Введение
- •1.Предмет программной инженерии
- •1.1.Определение и свойства программного обеспечения
- •1.2.Проблемы разработки программного обеспечения
- •1.3.Процессы производства программного обеспечения
- •1.4.Понятие программного проекта
- •1.5. Стандартизация в области производства по
- •1.6.Определение программной инженерии и ее место в системе информационных технологий
- •2.Жизненный цикл программных продуктов
- •2.1.Понятие жизненного цикла
- •2.2.Процессы жизненного цикла программного обеспечения
- •2.3.Модели жизненного цикла
- •3.Виды деятельности в программной инженерии
- •3.1.Управление требованиями
- •3.1.1.Проблема
- •3.1.2.Цикл работы с требованиями
- •3.1.3.Виды и свойства требований
- •3.1.4.Варианты формализации требований
- •3.2.Проектирование программного обеспечения
- •3.2.1.Понятие
- •3.2.2.Принципы
- •3.2.3.Шаблоны
- •3.2.4.Моделирование по
- •3.2.5.Методологии
- •3.2.6.Оценка качества
- •3.3.Конструирование программного обеспечения
- •3.3.1.Определение
- •3.3.2.Связь с другими процессами
- •3.3.3.Принципы
- •3.3.4.Модели и методы
- •3.3.5.Языки конструирования
- •3.4.Конфигурационное управление
- •3.4.1.Проблемы управления активами программного проекта
- •3.4.2.Единицы конфигурационного управления
- •3.4.3.Управление версиями
- •3.4.4.Управление сборками
- •3.4.5.Понятие baseline
- •3.5.Тестирование программного обеспечения
- •3.5.1.Основные определения
- •3.5.2.Уровни тестирования (Test Levels)
- •3.5.3.Виды тестирования
- •3.5.4.Метрики
- •3.6.Сопровождение программного обеспечения
- •Эволюция программного обеспечения (Evolution of Software)
- •4.Методология объектно-ориентированного анализа и проектирования
- •4.1.Основные понятия
- •4.1.1.Объекты и классы
- •4.1.2.Принципы ооп
- •4.1.3.Разработка объектно-ориентированных программ
- •4.2.Язык uml
- •4.2.1.Что дает uml
- •4.2.2.Структура языка uml
- •4.2.3.Uml диаграммы
- •4.2.4.Программы поддержки языка uml
- •4.3.Вопросы для самоконтроля
- •5.Технологии разработки программного обеспечения
- •5.1.Тяжеловесные и облегченные технологии
- •5.2.Технология rup
- •5.3.Гибкие технологии
- •5.4.Технология msf
- •5.4.1. Управление рисками в msf for Agile Software Development1
- •5.4.2.Основные сведения о рисках
- •5.4.3.Планирование управления рисками
- •5.4.4.Процесс управления рисками
- •5.4.5.Управление рисками как составная часть жизненного цикла проекта
- •5.4.6.Учебный пример. Выделение рисков
- •5.5.Модель процессов msf for Agile Software Development2
- •5.5.1.Принципы модели процессов
- •5.5.2.Управление компромиссами
- •5.5.3.Схема процесса разработки
- •5.6.1. Подготовка проекта
- •5.6.2. Планирование проекта
- •5.6.3. Планирование спринта
- •5.6.4. Выполнение спринта
- •5.6.5. Отслеживание проекта
- •5.7.1. Каково назначение модели cmmi?
- •5.7.2. Как лучше использовать модель cmmi?
- •5.7.3. Элементы модели cmmi
- •Заключение Литература
- •153003, Г. Иваново, ул. Рабфаковская, 34.
1.2.Проблемы разработки программного обеспечения
Тенденции развития современных информационных технологий определяют постоянное возрастание сложности ПО, создаваемого в различных областях экономики. Современные крупные проекты ИС характеризуют, как правило, следующие особенности:
• сложность описания (достаточно большое количество функций, процессов, элементов данных и сложные взаимосвязи между ними), требующая тщательного моделирования и анализа данных и процессов;
• наличие совокупности тесно взаимодействующих компонентов (подсистем), имеющих локальные задачи и цели функционирования (например, традиционных приложений, связанных с обработкой транзакций и решением регламентных задач, и приложений аналитической обработки (поддержки принятия решений), использующих нерегламентированные запросы к данным);
• отсутствие полных аналогов, ограничивающее возможность использования каких-либо типовых проектных решений и прикладных систем;
• необходимость интеграции существующих и вновь разрабатываемых приложений;
• функционирование в неоднородной среде на нескольких аппаратных платформах;
• разобщенность и разнородность отдельных групп разработчиков по уровню квалификации и сложившимся традициям использования тех или иных инструментальных средств;
• значительная временная протяженность проекта, обусловленная, с одной стороны, ограниченными возможностями коллектива разработчиков и, с другой стороны, масштабами организации-заказчика и различной степенью готовности отдельных ее подразделений к внедрению ИС.
Как отмечает Фредерик Брукс, руководитель проекта разработки операционной системы OS/360, самым существенным и неотъемлемым свойством программных систем является их сложность. Благодаря уникальности и несхожести своих составных частей программные системы принципиально отличаются от технических систем (например, компьютеров), в которых преобладают повторяющиеся элементы.
Сами компьютеры сложнее, чем большинство продуктов человеческой деятельности. Количество их возможных состояний очень велико, поэтому их так трудно понимать, описывать и тестировать. У программных систем количество возможных состояний на порядок величин превышает количество состояний компьютеров.
Аналогично масштабирование программного объекта - это не просто увеличение в размере тех же самых элементов, это обязательно увеличение числа различных элементов. В большинстве случаев эти элементы взаимодействуют между собой нелинейным образом, и сложность целого также возрастает нелинейно.
Сложность ПО является существенным, а не второстепенным свойством. Поэтому попытки описать программные объекты, абстрагируясь от их сложности, приводят к абстрагированию и от их сущности. Математика и физика за три столетия достигли больших успехов, создавая упрощенные модели сложных физических явлений, получая из этих моделей свойства и проверяя их опытным путем. Это удавалось благодаря тому, что сложность, игнорировавшаяся в моделях, не была существенным свойством явлений. Такой подход не работает, когда сложность является сущностью.
Многие проблемы разработки ПО следуют из этой сложности и ее нелинейного роста при увеличении размера. Сложность является причиной затруднений, возникающих в процессе общения между разработчиками, что ведет к ошибкам в продукте, превышению стоимости разработки, затягиванию выполнения графиков работ. Сложность вызывает трудности понимания всех возможных состояний программ, что приводит к снижению их надежности. Сложность структуры сдерживает развитие ПО и возможности добавления новых функций.
