Преподаватель: Венцов Н.Н. Предпосылки и история Термин – software engineering (программная инженерия) - впервые был озвучен в октябре 1968 года на конференции подкомитета НАТО по науке и технике (г. Гармиш, Германия). Присутствовало 50 профессиональных разработчиков ПО из 11 стран. 1.Повторное использование кода (модульное программирование) • Проблема. Высокая стоимость программ связана с разработкой одинаковых фрагментов кода за счёт решения одинаковых задач. • Модульное программирование. Главный принцип - выделение одинаковых фрагментов и оформление их в виде модулей. Каждый модуль снабжается описанием и интерфейсом. Не всегда можно применить. Модули решения математических задач 2. Рост сложности пограмм • Переход от разработки относительно простых программ к разработке сложных программных комплексов. Был вызван появлением вычислительной техники третьего поколения (интегральные схемы). • Проблема. Основная часть стоимости комплексов приходится не на создание, а на их внедрение и эксплуатацию. К числу таких сложных задач относятся: • системы управления космическими объектами • управления оборонным комплексом • автоматизации крупного финансового учреждения и т.д. Показатели оценки сложности подобных комплексов • Большой объем кода (миллионы строк) • Большое количество связей между элементами кода • Большое количество разработчиков (сотни человек) • Большое количество пользователей (сотни и тысячи) • Длительное время использования Основные принципы технологии структурного проектирования и кодирования: Нисходящее функциональное проектирование (принцип «разделяй и властвую») Применение специальных языков проектирования и средств автоматизации использования этих языков Дисциплина проектирования и разработки Структурное кодирование без goto 3. Модификация программ (ООП) • Проблема. Проблема заказчика, который не знает, что он хочет. Создание программного продукта превратилось в его перманентное перепроектирование. • Решение! Объектно-ориентированное программирование. Объектно-ориентированное программирование Суть в том, что вводится понятие класса (модуля) с определенными свойствами и поведением. Каждый класс может порождать объекты – экземпляры данного класса. При этом работают основные принципы: инкапсуляция, наследование, полиморфизм. Некоторые итоги 1. Программная инженерия (ПИ) как некоторое направление возникло и формировалось под давлением роста стоимости создаваемого программного обеспечения. 2. Главная цель – сокращение стоимости и сроков разработки программ. 3. Сформулированы фундаментальные принципы разработки программных продуктов 4. Основной принцип ПИ – программы создаются в результате выполнения этапов, составляющих ЖЦ программного продукта. • Фундаментальные методы проектирования - модульное, структурное и объектно-ориентированное Продолжение кризиса программирования Программная инженерия – что это такое? • установление и использование обоснованных инженерных принципов (методов) для экономного получения ПО, которое надежно и работает на реальных машинах. • та форма инженерии, которая применяет принципы информатики (computer science) и математики для рентабельного решения проблем ПО. • дисциплина, целью которой является создание качественного ПО, которое завершается вовремя, не превышает выделенных бюджетных средств и удовлетворяет выдвигаемым требованиям. Software - программное обеспечение или программный продукт? – это не только программы, а также вся связанная с ними документация и конфигурационные данные, необходимые для корректной работы программы В зависимости от заказчика ПО бывает: • коробочные продукты (generic products – общие продукты или shrink-wrapped software – упакованное ПО) • заказные продукты (bespoke – сделанный на заказ или customized products – настроенный продукт) Программная инженерия — это связана со , которая от начальных стадий создания спецификации до поддержки системы после сдачи в эксплуатацию. Набор инженерных методов или способов, теоретически не обоснованных, но получивших неоднократное подтверждение на практике получили название . Все аспекты производства ПО Финансы Оборудование Люди Время Техника Отличие от информатики Информатика (computer science) Программная инженерия software engineering Теория и методы вычислительных и программных систем Практические проблемы создания ПО Сравнение с другими инженериями 2 главных вопроса: • Почему доля провальных проектов в программной инженерии так велика по сравнению с другими инженериями? • Можно ли в программной инженерии применять опыт других инженерий? Из чего складывается стоимость ПО? • 15% - спецификация – формулировка требований и условий разработки • 25% - проектирование – разработка и верификация проекта • 20% - разработка – кодирование и тестирование компонент • 40% - интеграция и тестирование – объединение и сборочное тестирование продукта Методы программной инженерии Методы должны включать в себя следующие компоненты: Описание моделей например, объектные модели, конечно-автоматные модели и т.д Правила и ограничения при разработке моделей например, каждый объект должен иметь одинаковое имя) Рекомендации ни у одного объекта не должно быть больше семи подобъектов Руководство по применению метода все атрибуты должны быть задокументированы до определения операций, связанных с этим объектом Свойства хорошей программы • • • • Сопровождаемость (maintainability) Надёжность (dependability) Эффективность (efficiency) Удобство использования (usability) Профессиональные и этические требования • Конфиденциальность • Компетентность • Защита интеллектуальной собственности • Злоупотребление компьютером Восемь Принципов программного инженера 1. 2. 3. 4. 5. 6. 7. 8. ОБЩЕСТВО КЛИЕНТ И РАБОТОДАТЕЛЬ ПРОДУКТ СУЖДЕНИЕ МЕНЕДЖМЕНТ ПРОФЕССИЯ КОЛЛЕГИ ЛИЧНОСТЬ Стандарты программной инженерии • Корпоративные стандарты • Отраслевые стандарты • Государственные стандарты (ГОСТы) Разработчики стандартов программной инженерии ISO - International Organization for Standardization ACM - Association for Computing Machinery SEI - Software Engineering Institute PMI - Project Management Institute IEEE - Институт инженеров по электронике Основные стандарты программной инженерии ISO/IEC 12207 - Information Technology - Software Life Cycle Processes Процессы жизненного цикла программных средств. SEI CMM - Capability Maturity Model (for Software) - модель зрелости процессов разработки ISO/IEC 15504 - Software Process Assessment - Оценка и аттестация зрелости процессов создания и сопровождения ПО PMBOK - Project Management Body of Knowledge - Свод знаний по управлению проектами SWBOK - Software Engineering Body of Knowledge - Свод знаний по программной инженерии ACM/IEEE CC2001 - Computing Curricula 2001 – Академический образовательный стандарт