20.01.2013 Views

Лекция 1. Введение. Модели жизненного цикла ПО.

Лекция 1. Введение. Модели жизненного цикла ПО.

Лекция 1. Введение. Модели жизненного цикла ПО.

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ПРОГРАММНАЯ ИНЖЕНЕРИЯ<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ


� 17 лекций<br />

� Аттестация: экзамен в виде теста<br />

ПРОГРАММА КУРСА<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 2


� Жизненный цикл <strong>ПО</strong><br />

ОСНОВНЫЕ ТЕМЫ КУРСА<br />

� Составление требований к <strong>ПО</strong> и варианты<br />

использования<br />

� Объектно-ориентированный анализ <strong>ПО</strong><br />

� Объектно-ориентированное проектирование <strong>ПО</strong><br />

� Кодирование и тестирование<br />

� Архитектура программных систем<br />

� Метрики и оценка качества <strong>ПО</strong><br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 3


� Ian Sommerville. Software Engineering (8th<br />

Edition). 2006. 864 p.<br />

ЛИТЕРАТУРА<br />

� Арлоу Д., Нейштад А. UML 2 и<br />

Унифицированный процесс. Практический<br />

объектно-ориентированный анализ и<br />

проектирование, 2-е издание. 2007. 624 с.<br />

� Брукс Ф. Мифический человеко-месяц, или Как<br />

создаются программные системы. 2007. 304 с.<br />

� Marsic I. Software Engineering. 2009. 430 p.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 4


ПРОГРАММНАЯ ИНЖЕНЕРИЯ<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 5


ИНЖЕНЕРИЯ<br />

� Инженерия обеспечивает решение поставленных<br />

задач посредством существующих теорий и<br />

методов.<br />

� Инженер начинает с постановки задачи и поиска<br />

инструментов для наилучшего решения задачи в<br />

рамках существующих организационных,<br />

финансовых и временных ограничений.<br />

� Программная инженерия делает значительный<br />

упор на методы и подходы а не на инструменты.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 6


Инжен’ерия<br />

Engin’eering<br />

ОРФОГРАФИЯ<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 7


ПРОГРАММНАЯ ИНЖЕНЕРИЯ<br />

� Термин был предложен в 1968 г. на конференции<br />

посвященной «Кризису <strong>ПО</strong>», возникшего в<br />

результате появления интегральных схем и<br />

катастрофического усложнения <strong>ПО</strong>:<br />

� Реализация проектов задерживалась на годы<br />

� Стоимость проектов в десятки раз превышала<br />

прогнозируемую<br />

� Необходимы были методы разработки и<br />

контроля таких сложных программных систем<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 8


ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ<br />

� Программное обеспечение (программный<br />

продукт) – это компьютерная программа и<br />

соответствующая документация.<br />

Программные продукты могут быть<br />

разработаны как для конкретного заказчика,<br />

так и для всего рынка в целом.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 9


ПРОГРАММА И ПРОГРАММНЫЙ ПРОДУКТ<br />

Программа<br />

x 3<br />

Программный продукт<br />

x 3<br />

(обобщение, тестирование,<br />

документирование,<br />

сопровождение)<br />

Программный комплекс<br />

(интерфейсы, системная<br />

интеграция)<br />

Системный<br />

программный<br />

продукт<br />

Ф. БРУКС. МИФИЧЕСКИЙ ЧЕЛОВЕКО-МЕСЯЦ 10


ПРОГРАММНАЯ ИНЖЕНЕРИЯ<br />

� Программная инженерия – это<br />

инженерная дисциплина,<br />

отражающая все грани разработки<br />

программного обеспечения.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 11


Программная инженерия<br />

Практика и подходы к<br />

разработке полезных<br />

для конечного<br />

пользователя<br />

программных<br />

продуктов<br />

ПРОГРАММНАЯ ИНЖЕНЕРИЯ<br />

VS КОМПЬЮТЕРНЫЕ НАУКИ<br />

Компьютерные науки<br />

Теория и<br />

фундаментальные<br />

основы по созданию<br />

алгоритмов и<br />

компьютерных<br />

программ<br />

В идеале, каждый программный инженер должен знать<br />

компьютерные науки (как каждый электрик должен знать<br />

физику)<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 12


Заказчик<br />

Задача,<br />

требования,<br />

ограничения<br />

ПРОГРАММНАЯ<br />

ИНЖЕНЕРИЯ<br />

Программист<br />

© IVAN MARSIC. SOFTWARE ENGINEERENG. RUTGERS THE STATE UNIVERSITY OF NEW JERSEY 13


ХОРОШЕЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ<br />

Можно выделить следующие важные признаки<br />

хорошего <strong>ПО</strong>:<br />

� Удобство сопровождения<br />

� Функциональная надежность<br />

� Эффективность<br />

� Применимость<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 14


СОВРЕМЕННЫЕ ПРОБЛЕМЫ<br />

ПРОГРАММНОЙ ИНЖЕНЕРИИ<br />

� Проблема гетерогенности<br />

� Проблема своевременного<br />

представления результатов<br />

� Проблема доверия<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 15


ПРОЦЕСС РАЗРАБОТКИ <strong>ПО</strong><br />

(ЖИЗНЕННЫЙ ЦИКЛ <strong>ПО</strong>)<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 16


«КАЧЕЛИ» - КАК ПРОЕКТИРУЮТСЯ ПРОГРАММЫ<br />

( 1975 ! )<br />

ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 17


ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 18


ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 19


ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 20


ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 21


ПАВЛОВСКАЯ Т.А. (СПБГУИТМО) 22


ПРОЦЕСС РАЗРАБОТКИ <strong>ПО</strong><br />

� Процесс разработки <strong>ПО</strong> (жизненный цикл <strong>ПО</strong>)<br />

– это набор действий и связанных с ними<br />

результатов, направленных на разработку и/или<br />

развитие программного продукта:<br />

<strong>1.</strong> Спецификация требований<br />

2. Разработка<br />

3. Валидация<br />

4. Развитие<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 23


ПРОЦЕСС РАЗРАБОТКИ <strong>ПО</strong><br />

� Не существует «идеального процесса разработки <strong>ПО</strong>»<br />

НЕ СУЩЕСТВУЕТ!!!!<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 24


МОДЕЛЬ ПРОЦЕССА РАЗРАБОТКИ <strong>ПО</strong><br />

� Модель процесса разработки <strong>ПО</strong> – это<br />

абстрактная репрезентация процесса<br />

разработки <strong>ПО</strong>, представляющая данный<br />

процесс в определенной перспективе.<br />

� Модель – это не всеобъемлющее описание<br />

процесса разработки <strong>ПО</strong>. Это скорее абстракция,<br />

которая позволяет описать различные подходы к<br />

процессу разработки.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 25


Как<br />

получится<br />

Низкоформализованный<br />

Каркасный<br />

подход<br />

Унифицированный<br />

процесс разработки<br />

(RUP, UP)<br />

«Гибкая» (Agile)<br />

XP<br />

методология<br />

SCRUM<br />

CMM SEI<br />

Итерационный<br />

подход<br />

Водопадная<br />

ГОСТ<br />

модель<br />

12207<br />

ГОСТ 19<br />

ГОСТ 34<br />

Высокоформализованный<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 26


МОДЕЛИ РАЗРАБОТКИ <strong>ПО</strong><br />

Можно выделить 3 основных модели разработки <strong>ПО</strong>:<br />

Водопадная модель<br />

Поэтапная (эволюционная) разработка<br />

Компонентно-ориентированная разработка<br />

Часто эти модели объединяются в рамках одного<br />

проекта (подсистемы могут создаваться<br />

посредством различных подходов)<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 27


Определение требований<br />

Проектирование системы<br />

Реализация и тестирование<br />

ВОДОПАДНАЯ МОДЕЛЬ<br />

Интеграция и комплексное<br />

тестирование<br />

Функционирование и<br />

поддержка<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 28


ФАЗЫ ВОДОПАДНОЙ МОДЕЛИ<br />

� Результатом каждой фазы в водопадной модели<br />

является один или несколько утвержденных<br />

документов.<br />

� Последующая фаза не может начаться пока<br />

предыдущая не завершена.<br />

� Но только в идеальном мире процесс разработки<br />

линеен и не обладает обратными связями<br />

� => в реальном мире в водопадной модели<br />

подразумевается несколько итераций, после<br />

которых результат «замораживается» и происходит<br />

переход ко следующей фазе.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 29


Достоинства:<br />

ДОСТОИНСТВА И НЕДОСТАТКИ<br />

� Очень формализованная, в результате каждой фазы<br />

формируется утвержденный документ<br />

� Соответствует стандартным моделям инженерной<br />

разработки.<br />

Недостатки:<br />

� Отсутствие гибкости<br />

� Все договоренности – на ранней стадии,<br />

соответственно нет возможности подстроиться под<br />

изменяющиеся требования пользователя.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 30


Описание<br />

плана<br />

<strong>ПО</strong>ЭТАПНАЯ РАЗРАБОТКА<br />

Спецификация<br />

Разработка<br />

Валидация<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ<br />

Начальная<br />

версия<br />

Промежуточные<br />

версии<br />

версии<br />

Финальная<br />

версия<br />

Действия Результат<br />

31


<strong>ПО</strong>ЭТАПНАЯ РАЗРАБОТКА<br />

� Постепенная (эволюционная) разработка:<br />

тесная работа с клиентом, для выяснения<br />

требований и постепенное создание финальной<br />

версии.<br />

� В начале – те части, которые понятно как<br />

делать. Развитие системы: добавление новых<br />

возможностей, предлагаемых клиентом.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 32


<strong>ПО</strong>ЭТАПНАЯ РАЗРАБОТКА<br />

� Разработка на основе прототипов:<br />

постепенно создаются прототипы<br />

разрабатываемой системы, для того чтобы<br />

понять конкретные требования заказчика.<br />

� Как только прототип выполнил свою задачу<br />

(требования заказчика стали понятны), он<br />

выбрасывается. Его код не используется в<br />

конечном продукте.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 33


Определение<br />

требований<br />

ИНКРЕМЕНТАЛЬНАЯ РАЗРАБОТКА<br />

Итерация<br />

разработки<br />

Распределение<br />

требований по итерациям<br />

Валидация<br />

итерации<br />

Система не готова<br />

Интеграция<br />

итерации<br />

Проектирование<br />

архитектуры<br />

Валидация<br />

системы<br />

Финальная<br />

система<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 34


ИНКРЕМЕНТАЛЬНАЯ РАЗРАБОТКА<br />

� В начале описываются и ранжируются по<br />

значимости базовые сервисы, которые должна<br />

предоставлять система.<br />

� Определяется количество итераций, за которое<br />

должны создать готовую систему.<br />

� В начале каждой итерации формируются<br />

детальные требования к набору сервисов,<br />

которые будут созданы в ее рамках (дальнейшее<br />

их изменение невозможно).<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 35


ДОСТОИНСТВА<br />

� Не надо ожидать, пока вся система будет<br />

полностью готова. Результат первой итерации<br />

может быть использован сразу.<br />

� Ранние итерации могут служить прототипами и<br />

давать основу для построения требований ко<br />

следующим итерациям.<br />

� Наиболее важные сервисы создаются в первую<br />

очередь, соответственно обеспечивается их<br />

всестороннее тестирование на более поздних<br />

этапах.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 36


НЕДОСТАТКИ<br />

� Необходимо обеспечить малый объем работ в<br />

рамках итерации (не более 20 000 строк кода).<br />

При этом, должна обеспечиваться определенная<br />

функциональность.<br />

� Но множество систем обладают большим<br />

набором базовых сервисов, необходимых всем<br />

дальнейшим надстройкам и разделить их на<br />

итерации не всегда легко.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 37


СПИРАЛЬНАЯ РАЗРАБОТКА<br />

� Каждый шаг спирали – фаза процесса<br />

разработки <strong>ПО</strong> (постановка задачи, определение<br />

требований, дизайн архитектуры и т.д.)<br />

� В каждом шаге выделяют 4 сектора:<br />

� Определение требований<br />

� Оценка и уменьшение рисков<br />

� Разработка и валидация<br />

� Планирование<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 38


Определение<br />

требований,<br />

альтернатив и<br />

ограничений<br />

Планирование<br />

следующей фазы<br />

СПИРАЛЬНАЯ РАЗРАБОТКА<br />

Обзор<br />

План требований<br />

План <strong>жизненного</strong><br />

<strong>цикла</strong><br />

Планирование<br />

разработки<br />

Анализ<br />

рисков<br />

Анализ<br />

рисков<br />

Прототип1<br />

Описание<br />

Use Case<br />

Верификация и<br />

валидация<br />

Прототип2<br />

Оценка альтернатив,<br />

определение и<br />

разрешение рисков<br />

<strong>Модели</strong>рование и оценка<br />

Описание<br />

требований<br />

Разработка и<br />

верификация продукта<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 39


© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 40


� Основное отличие спиральной разработки от<br />

других методов разработки <strong>ПО</strong> – это явная<br />

оценка рисков.<br />

РИСКИ<br />

� Риск – это вероятность того, что что-то может<br />

пойти не так как хотелось бы (например, при<br />

использовании нового языка программирования<br />

есть риск, что существующие компиляторы не<br />

будут создавать высокоэффективный код).<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 41


ПРИМЕНЕНИЕ <strong>ПО</strong>ЭТАПНОЙ РАЗРАБОТКИ<br />

� Поэтапная разработка более гибкая, чем<br />

водопадная модель, позволяет легче<br />

подстраиваться под изменяющиеся требования<br />

заказчика<br />

� Хорошо подходит для небольших и средних по<br />

размерам проектов (порядка 500 000 строк кода)<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 42


ИТЕРАЦИИ <strong>ПО</strong>ЗВОЛЯЮТ<br />

� контролировать и корректировать ход<br />

выполнения проекта<br />

� эффективнее работать с изменяющимися<br />

требованиями;<br />

� эффективнее работать с рисками<br />

� на ранних этапах оценивать потенциальные<br />

характеристики системы<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 43


ПРОБЛЕМЫ <strong>ПО</strong>ЭТАПНОЙ РАЗРАБОТКИ<br />

� Процесс разработки не виден<br />

� Ради скорости разработки в жертву<br />

приносится формальность: практически<br />

отсутствует документация, производимая на<br />

каждом этапе водопадной модели<br />

� Системы часто слабоструктурированы<br />

� Постоянные изменения приводят к<br />

повреждению структуры <strong>ПО</strong>. Поддержка и<br />

дальнейшее изменение становится дорогой и<br />

сложной процедурой.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 44


КОМ<strong>ПО</strong>НЕНТНО-ОРИЕНТИРОВАННАЯ<br />

РАЗРАБОТКА<br />

� Компонентно-ориентированная разработка<br />

основывается на формальном закреплении<br />

повторного использования кода.<br />

� Программный компонент – это автономный<br />

элемент программного обеспечения,<br />

предназначенный для многократного<br />

использования, который может<br />

распространяться для использования в других<br />

программах в виде скомпилированного кода.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 45


КОМ<strong>ПО</strong>НЕНТНО-ОРИЕНТИРОВАННАЯ<br />

РАЗРАБОТКА<br />

� Компонентно-ориентированный подход – развитие<br />

объектно-ориентированного. Создан для<br />

проектирования и реализации крупных и<br />

распределенных программных систем<br />

(корпоративных приложений)<br />

� С точки зрения КОП программная система – это<br />

набор компонентов с четко определенным<br />

интерфейсом.<br />

� Изменения в систему вносятся путем создания<br />

новых компонентов или изменения старых.<br />

� Наследование реализации запрещено.<br />

Наследуется только интерфейс.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 46


КОМ<strong>ПО</strong>НЕНТНО-ОРИЕНТИРОВАННАЯ<br />

Определение<br />

требований<br />

Проектирование системы<br />

с учетом повторного<br />

использования<br />

Анализ доступных<br />

компонентов<br />

Разработка и<br />

интеграция<br />

РАЗРАБОТКА<br />

Модификация<br />

требований<br />

Валидация<br />

системы<br />

Финальная<br />

система<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 47


ДОСТОИНСТВА И НЕДОСТАТКИ КОМ<strong>ПО</strong>НЕНТНО-<br />

ОРИЕНТИРОВАННОЙ РАЗРАБОТКИ<br />

� Достоинства<br />

� Уменьшается объем <strong>ПО</strong>, которое необходимо<br />

разработать => уменьшается цена и риски.<br />

� Уменьшается время разработки<br />

� Недостатки<br />

� Компромиссы при выработке требований могут<br />

привести к тому, что реальные требования<br />

пользователей не будут учтены.<br />

� Контроль над системой может быть потерян при<br />

появлении новых версий используемых компонентов<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 48


СКОЛЬКО ФОРМАЛИЗМА НЕОБХОДИМО?<br />

� С 1970 по 1995 считалось, что чем тщательней<br />

оформлена документация, тем лучше<br />

� Далее перешли на «компактность»<br />

документации: диаграммы и схемы<br />

� Но может быть лучше пусть будет специальный<br />

человек, который знает всю документацию и<br />

может объяснить?<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 49


ФАКТОРЫ, ВЛИЯЮЩИЕ НА<br />

ОПТИМАЛЬНЫЙ УРОВЕНЬ ФОРМАЛИЗМА<br />

� Масштаб проекта<br />

� Критичность проекта<br />

� Распределение участников<br />

� Новизна проекта<br />

� Требования заказчика<br />

� Ожидаемая долговечность проекта<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 50


ВОПРОСЫ<br />

� Программная инженерия - это дисциплина,<br />

отражающая все грани разработки<br />

программного продукта рамках существующих …<br />

� Качественный программный продукт требует в<br />

… раз больше трудозатрат чем программа с тем<br />

же функционалом<br />

� Процесс разработки <strong>ПО</strong> – это…<br />

� Идеальный процесс разработки <strong>ПО</strong> – это …<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 51


ВОПРОСЫ<br />

� Мы с вами разобрали 3 модели разработки <strong>ПО</strong>.<br />

Опишите эти модели:<br />

� Название<br />

� Достоинства<br />

� Недостатки<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 52


� Какую модель разработки вы выберете для<br />

каждой предложенной системы и почему:<br />

� Игрушка для iPhone;<br />

� Корпоративное приложение для работы с<br />

кадрами предприятия;<br />

� <strong>ПО</strong> для управления рентгеновским<br />

аппаратом;<br />

� Драйвер для Microsoft Kinect<br />

ВОПРОСЫ<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 53


ВОПРОСЫ<br />

� Опишите основные критерии, определяющие<br />

уровень формализма, необходимый для<br />

разработки <strong>ПО</strong><br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 54


РЕЗЮМЕ<br />

� Программная инженерия – это дисциплина,<br />

отражающая все грани разработки<br />

программного продукта рамках существующих<br />

организационных, финансовых и временных<br />

ограничений.<br />

� Качественный программный продукт требует в<br />

10 раз больше трудозатрат чем программа с тем<br />

же функционалом<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 55


РЕЗЮМЕ<br />

� Процесс разработки <strong>ПО</strong> (жизненный цикл <strong>ПО</strong>)<br />

– это набор действий и связанных с ними<br />

результатов, направленных на разработку и/или<br />

развитие программного продукта.<br />

� Идеального процесса разработки не существует!<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 56


РЕЗЮМЕ<br />

� Можно выделить 3 класса моделей разработки <strong>ПО</strong>:<br />

� Водопадная модель:<br />

� самая первая;<br />

� самая формальная;<br />

� Модель поэтапной разработки:<br />

� самая гибкая;<br />

� результат – после первой итерации;<br />

� Компонентно-ориентированная модель:<br />

� повторное использование кода;<br />

� ускоренная разработка.<br />

© РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 57

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!