Технологии программирования. Курс на базе Microsoft Solutions Framework Лекция 2. Элементы программной инженерии Содержание • Вспоминая предыдущую лекцию • Вместо введения • Программная инженерия, основные понятия • Процесс создания ПО • Что дальше? • Литература Содержание • Вспоминая предыдущую лекцию • Вместо введения. • Программная инженерия, основные понятия • Процесс создания ПО • Что дальше? • Литература Вспоминая предыдущую лекцию • Немного терминологии – Программирование – IT-проекты – Программы и программные продукты • Бизнес и IT-проекты. Рынок ПО в России и в мире. Немного статистики • Причины неудачи IT-проектов • Технологии программирования – путь к успеху в разработке ПО Содержание • Вспоминая предыдущую лекцию • Вместо введения • Программная инженерия, основные понятия • Процесс создания ПО • Что дальше? • Литература Вместо введения... Данная лекция основана на материалах Иана Соммервилля (Ian Sommerville). Источник (англ.): • http://www.comp.lancs.ac.uk/computing/resources/IanS/SE6 Ian Sommerville. Software Engineering. 6th Edition. • http://www.comp.lancs.ac.uk/computing/resources/IanS/SE7 Ian Sommerville. Software Engineering. 7th Edition. Источник на русском языке: Иан Соммервиль. Инженерия программного обеспечения. 6 изд, и.д. "Вильямс", 2002. — 624 с. Вместо введения О целях настоящей лекции: • Программная область. инженерия • Полный фундаментальный прочитан позже. – курс сложная будет • Наш курс – вводный. На этой лекции мы познакомимся с терминологией, немного затронем теорию, поговорим о проблемах. • На других лекциях поговорим о практических подходах к решению рассмотренных проблем. Содержание • Вспоминая предыдущую лекцию • Вместо введения • Программная инженерия, основные понятия – Инженеры и программные инженеры – Программная инженерия как инженерная дисциплина – Область действия программной инженерии – Цели программных инженеров – Программные инженеры и научная среда • Процесс создания ПО • Что дальше? • Литература Инженеры... • Программная инженерия. Кто такие инженеры? Версии зала... Инженеры... Инженер * (франц. ingénieur, от лат. ingenium способность, изобретательность), • Специалист с образованием. высшим – техническим • Первоначально – название лиц, управлявших военными машинами. * Источник: Большая Советская Энциклопедия. Инженеры... • Понятие гражданский инженер появилось в 16 в. в Голландии применительно к строителям мостов и дорог, затем в Англии и др. странах. • Первые учебные заведения для подготовки инженеров были созданы в 17 в. в Дании, в 18 в. – в Великобритании, Германии, Австрии и др. Франции, Инженеры • В России первая инженерная школа основана Петром I в 1712 в Москве. В Петербурге были открыты Горное училище, приравненное к академиям (1773), Институт инженеров путей сообщения гражданских инженеров (1832, (1809), с 1882 Училище - Институт гражданских инженеров), Инженерная академия (1855). • С 19 в. за рубежом стали различать инженеровпрактиков, существу или профессиональных специалистов, техника), и получивших высшее Engineer). имевших дипломированных техническое инженеров (по квалификацию инженеров, образование (Civil Программные инженеры • Кто такие инженеры? • Инженер – дипломированный специалист, имеющий высшее техническое образование. • Кто такие программные инженеры? • Программный инженер – инженер в области разработки программного обеспечения. • Что такое программная инженерия (инженерия программного обеспечения, software engineering)? Программная инженерия как инженерная дисциплина • Программная инженерия – инженерная дисциплина, связанная с теорией, методами и средствами профессиональной разработки ПО. • Говорили ранее: – ПО = программы + вся сопутствующая документация. – Высокая стоимость аппаратуры). разработки ПО (выше, чем у – Стоимость разработки растет. • Программная инженерия способствует решению проблемы роста стоимости разработки ПО. • Программная инженерия имеет дело со всеми аспектами создания ПО. Область действия программной инженерии... • В западной литературе часто используются термины: software engineering, system engineering и computer science. В чем разница? • Computer science имеет дело с теорией и основами разработки ПО. • System engineering связано с вопросами разработки систем с участием компьютеров (архитектура, дизайн, интеграция, ПО...). • Software engineering – часть System engineering, имеющая дело с ПО. Область действия программной инженерии • Итак, computer science предоставляет теоретический базис. На практике его недостаточно. Открытые проблемы: – Поиск финансирования. – Работа с заказчиком. – Подбор персонала. – Этические вопросы. Микроклимат в коллективе. Команда. – Обеспечение качества программного продукта. – ... • Всем этим занимается программная инженерия. Цели программных инженеров... • Цели программных инженеров: – Создать качественный продукт. – Уложиться в бюджет. – Уложиться в сроки. • Разберем эти вопросы подробнее. Цели программных инженеров. Качественный программный продукт... Качественный программный продукт: – Должен представлять требуемую функциональность. – Быть удобным в сопровождении. – Быть надежным. – Быть эффективным. – Быть удобным в использовании. Цели программных инженеров. Качественный программный продукт • ПО должно быть качественным. • Удобство в сопровождении: – ПО должно допускать развитие в связи с изменением потребностей пользователей. • Надежность: – Возможные неполадки в работе не должны нанести существенный, тем более невосполнимый ущерб. • Эффективность: – ПО должно эффективно использовать имеющиеся ресурсы. • Удобство в использовании: – ПО должно приниматься пользователями «на ура», работа должна быть удобной и естественной. Цели программных инженеров. Бюджет Создание ПО должно укладываться в бюджет. • Типовое распределение средств: – 60% – разработка. – 40% – тестирование. – Развитие – зачастую больше, чем создание. • Детали зависят от специфики предметной области, требований к ПО, используемых подходов к организации разработки. Цели программных инженеров. Сроки Создание ПО должно укладываться в сроки. • Необходимо грамотное планирование. • Анализ возможных рисков и способы реагирования. • Борьба за четкие границы проекта. • Мотивирование сотрудников. Программные инженеры и научная среда • Взаимодействие с научной средой – один из способов повышения эффективности деятельности: – – – – Новые технологии. Новые методы, алгоритмы. Анализ новых перспективных разработок. Исследовательская работа в смежных областях. • Помощь ученых: – Там где в принципе не решить задачу своими силами. – Там, где есть специалисты, но нет времени и ресурсов для исследований. • Используется современными компаниями: Intel, Microsoft, IBM… Резюме Мы узнали значение и смысл следующих понятий: • Инженер. • Программный инженер и инженерия. • Цель программной инженерии. • Качество, сроки, бюджет. • Взаимодействие с научной средой. программная Содержание • Вспоминая предыдущую лекцию • Вместо введения • Программная инженерия, основные понятия • Процесс создания ПО • Что дальше? • Литература Процесс создания ПО • Процесс создания ПО – совокупность мероприятий, целью которых является создание или модернизация ПО. • Выделяют 4 основных мероприятия (стадии): – Спецификация: формулирование спецификаций определяет основные требования к ПО (что должна делать система). – Разработка: создание ПО в соответствии со спецификациями. – Аттестация: проверка ПО на соответствие потребностям заказчика. – Модернизация: развитие ПО в соответствии с изменившимися потребностями заказчика. Стадии процесса создания ПО Спецификация Разработка Аттестация Модернизация Процесс создания ПО... • Все стадии основаны на специальных технологиях. • Например, Модульное, Структурное, Объектноориентированное, Компонентное программирование относятся к стадии Реализации. • Каждая организация может использовать свой Процесс разработки. Этот процесс может иметь разную степень формализации. Чем больше, тем лучше – не всегда работает. • Чем больше и сложнее проект, тем важнее степень формализации. Процесс создания ПО... • Каким бы ни был процесс, перечисленные 4 стадии как правило в нем присутствуют. Они могут иначе называться, дробиться, но от них никуда не уйти. • Существуют хорошо проработанные процессы: – Microsoft Solutions Framework (MSF) – Rational Unified Process (RUP) • Эти процессы (методологии) могут иметь редакции для малых компаний и проектов, средних, больших. Процесс создания ПО • Итак, некий «каркас» процесса: – – – – Спецификация Разработка Аттестация Модернизация • От «каркаса» можно пойти вглубь – существенно проработанные процессы (MSF, RUP…) • Сам «каркас» можно приводить в жизнь поразному. Существуют общие модели процесса, которые определяют, как работать по «каркасу» на практике. Модели процесса Классические модели процесса разработки ПО: – Каскадная модель (Waterfall model) фазы выполняются по порядку – Эволюционная модель (Evolutionary development) фазы выполняются по порядку, процесс повторяется Каскадная модель... Каскадная модель: Определение требований Проектирование Кодирование Тестирование модулей Интеграция тестирование Эксплуатация Сопровождение Каскадная модель • Каскадная модель: – Фиксированный набор стадий – Каждая стадия -> законченный результат – Стадия начинается, когда закончилась предыдущая. • Недостатки: негибкость – фаза д.б. закончена, прежде чем приступить к следующей – Набор фаз фиксирован – Тяжело реагировать на изменения требований • Использование: там, где требования хорошо понятны и стабильны. Эволюционная модель Эволюционная модель: – Стадии повторяются неоднократно. Сначала для плохо сформулированных требований выполняется весь цикл работ по созданию работающего прототипа. Потом повторяется... На уточняются выходе – требования продукт, потребностям пользователей. – Недостатки: • Система часто плохо структурирована • Проект «не прозрачен» • Требуются средства для быстрой разработки • Подходит для малых и средних проектов и все отвечающий Итерационный подход • Часто подходы, перечисленные ранее, используется в совокупности. • Требования всегда меняются в ходе разработки. • К каждой из предыдущих моделей можно применить итерации. • Следовательно, важна возможность выполнения итераций, результатом которых является прототип продукта с частичной функциональностью. • Это достигается в итерационных моделях. – Модель пошаговой разработки – Спиральная модель разработки Модель пошаговой разработки Модель пошаговой разработки (Миллс): • Шаги. Каждый шаг – работающий прототип. • Наиболее важные для заказчика компоненты – в начале. • Требования фиксированы во время шага. • Для шага можно применять каскадную или эволюционную модель. • Одно из ответвлений – Экстремальное программирование. План требований Шаг разработки Детализация требований Архитектура системы Шаг аттестации Система не готова Аттестация системы Шаг сборки СИСТЕМА Спиральная модель Спиральная модель (Боэм): • Вместо действий с обратной связью – спираль. • Каждый виток спирали соответствует 1 итерации. • Нет заранее фиксированных фаз. В зависимости от потребностей. • Каждый виток разбит на 4 сектора: – – – – Определение целей Оценка и разрешение рисков Разработка и тестирование Планирование • Главное отличие: акцент на анализ и преодоление рисков. • На каждом витке могут применяться разные модели процесса разработки ПО. Что дальше? Следующая тема: Визуальное моделирование при анализе и проектировании. Основы Unified Modeling Language (UML). Литература к лекции 1. И. Соммервиль. Инженерия программного обеспечения, 6 изд. – И.д. "Вильямс", 2002. 2. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++. Второе издание. – Бином, 1998. 3. N. Wirth. Program Development by Stepwise Refinement // Communications of the ACM vol.26(1).– 1971, 1983. 4. O. Dahl, E. Dijkstra, C.A.R. Hoare. Structured Programming.–London, England: Academic Press, 1972. 5. Р. Лингер, Х. Миллс, Б. Уитт. Теория и практика структурного программирования. – М.: Мир, 1982. 6. Э. Салливан. Время – деньги. – М.:Microsoft Press, Русская редакция, 2002.