Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Введение в ПИ / ЛК 1.1 Вводная.ppt
Скачиваний:
41
Добавлен:
26.02.2016
Размер:
782.34 Кб
Скачать

Курганский государственный университет Кафедра программного обеспечения автоматизированных

систем

К У Р С Л Е К Ц И Й

по дисциплине

ВВЕДЕНИЕ В ПРОГРАММНУЮ ИНЖЕНЕРИЮ

для студентов направления 231000.62

«Программная инженерия»

Лекция 1.1

Предмет и основные понятия программной инженерии

План лекции

Введение

1.Предпосылки и история развития промышленных технологий разработки ПО

1.1.Модульное программирование

1.2.Структурное программирование

1.3.Объектно-ориентированное проектирование и программирование

1.4.Краткие итоги

2.Предмет программной инженерии

2.1.Что такое инженерия (engineering) и чем занимаются инженеры ?

2.2.Что такое программное обеспечение (программный продукт - software)?

2.3.Что такое программная инженерия (software engineering)?

2.4.В чем отличия программной инженерии от информатики?

2.5.В чем отличие программной инженерии от других инженерий?

2.6.Краткие итоги

3.Методология программной инженерии

3.1.Модели программного обеспечения

3.2.Что такое CASE ?

3.3.Свойства хорошей компьютерной программы

4.Обзор программы изучения дисциплины

5.Контрольные вопросы и задания

2

Введение

Программное обеспечение играет важную роль практически во всех аспектах повседневной жизни и профессиональной деятельности человека. Информационные технологии помогли нам стать эффективнее и продуктивнее, они помогают в решении практических задач и предоставляют среду для работы и развлечений, во многих случаях более комфортную по сравнению со старыми "докомпьютерными" технологиями.

Однако, и сегодня серьезной проблемой является достижение адекватной стоимости,

сроков разработки и качества программных продуктов.

Первый кризис программирования был отмечен в конце 60-х годов прошлого века: стоимость программного обеспечения вплотную приблизилась к стоимости компьютерной

техники, и прогнозы показывали, что к середине 90-годов все человечество должно будет заниматься разработкой компьютерных программ. Тогда и заговорили о программной инженерии (или технологии промышленного программирования), как о некоторой

дисциплине, целью которой является сокращение стоимости программ.

Программная инженерия обычно ассоциируется с разработкой сложных программных комплексов коллективами разработчиков. Становление и развитие этой области деятельности было вызвано рядом проблем, связанных с высокой стоимостью программного обеспечения, сложностью его создания, необходимостью прогнозирования и управления процессами разработки.

Сам термин – software engineering впервые был озвучен в 1968 году на конференции подкомитета НАТО по науке и технике, рассматривавшей проблемы проектирования,

разработки, распространения и поддержки компьютерных программ. Там впервые было заявлено о необходимости создания дисциплины программная инженерия, которой следует

руководствоваться для преодоления надвигающегося кризиса ПО.

В этом же году состоялась встреча руководителей ряда крупных программных проектов, на которой была предложена концепция жизненного цикла ПО (SLC – Software Lifetime

Cycle) как последовательности стадий, которые необходимо выполнить в процессе создания и эксплуатации ПО.

3

1. Предпосылки и история развития

промышленных технологий разработки ПО

1.1. Модульное программирование

Одна из причин высокой стоимости ПО, отмеченная еще на ранних этапах развития программной

инженерии – необходимость разработки одинаковых фрагментов кода, реализующих типовые задачи в различных программах. Использование ранее написанных фрагментов при создании

новых компьютерных программ сулило существенное снижение сроков и стоимости их разработки.

Главный принцип модульного программирования состоял в выделении таких фрагментов и оформлении их в виде модулей. Каждый модуль снабжался интерфейсом модуля - описанием, в

котором устанавливались правила его использования. Интерфейс задавал связи модуля с основной программой – связи по данным и связи по управлению. При этом возможность повторного использования модулей определялась тем, насколько эти связи удалось согласовывать с организацией данных и управления головной программы.

Наиболее простыми в этом отношении оказались модули решения математических задач: решения уравнений, систем уравнений, задач оптимизации. К настоящему времени накоплены и успешно используются большие библиотеки таких модулей. Для многих других типов модулей возможность их повторного использования оказалась проблематичной в виду сложности их связей с основной программой. Например, модуль расчета зарплаты, написанный для коммерческого предприятия, может не подойти для государственного бюджетного учреждения, т.к. зарплата в этих организациях рассчитывается не во всем одинаково.

Повторное использование модулей со сложными интерфейсами является достаточно актуальной задачей и по сей день. Для ее решения разрабатываются специальные формы (структуры) представления модулей и организации их интерфейсов.

4

1.2. Структурное программирование

Следующий этап возрастания стоимости ПО - переход к разработке сложных программных комплексов

(управление космическими объектами и компонентами оборонного комплекса, автоматизация крупных промышленных предприятий и финансовых учреждений и т.д.). Этот переход был вызван появлением вычислительной техники третьего поколения (интегральные схемы), обеспечившей существенное повышение производительности вычислений.

Сложность таких программных комплексов оценивалась следующими показателями:

большой объем программного кода (миллионы строк);

большое количество связей между элементами кода;

большое количество разработчиков (сотни человек);

большое количество пользователей (сотни и тысячи);

длительное время эксплуатации разработанного ПО.

Основная часть стоимости таких программ приходится на стадию их сопровождения – то есть на исправление ошибок и внесение изменений в программный код. Основная причина высокой стоимости стадии сопровождения состояла в том, что программы были плохо структурированы – программный код был очень сложен и запутан, а документация была не понятна, трудно читаема и часто не соответствовала конечному варианту программного кода.

В результате была предложена технология структурного программирования, которая базировалась на следующих основных принципах проектирования и кодирования:

Нисходящее проектирование, при котором в системе вначале выделяются основные функциональные подсистемы, которые затем иерархически делятся на подсистемы.

Согласованность процессов проектирования и программирования: планирование и поддержка соответствия программного кода проектной документации.

Применение специальных языков проектирования и средств автоматизации использования этих языков (CASE-системы).

Дисциплина структурного программирования: операторы циклов и условные операторы, запрет использования меток и оператора goto.

5

1.3. Объектно-ориентированное проектирование

и программирование

Следующая проблема роста стоимости программ была вызвана тем, что изменения требований к программе стали вноситься не только на стадии сопровождения, но и на стадии проектирования и программирования – проблема заказчика, который не знает, что он хочет. В этих условиях создание программного продукта превратилось в его перманентное перепроектирование, и потребовалась методология, обеспечивающая возможность внесения изменений в программу, не меняя ранее написанного кода.

Решением этой проблемы стало использование подхода (метода), который стали называть объектно-ориентированным проектированием (OOD) и программированием (OOP). Суть этого подхода состоит в том, что

вводится понятие класса как развитие понятия модуля с определенными свойствами и поведением, характеризующими обязанностями класса. Каждый класс может порождать объекты – экземпляры данного класса. При этом работают основные принципы (парадигмы) ООП:

Инкапсуляция – объединение в классе данных (свойств) и методов (процедур обработки).

Наследование – возможность вывода нового класса из старого с частичным изменением свойств и методов.

Полиморфизм – определение свойств и методов объекта по контексту.

6

1.4.Краткие исторические итоги

1.Программная инженерия (или технология промышленного программирования) возникла и формировалась под давлением роста стоимости создаваемого ПО. Главная цель программной инженерии – сокращение стоимости и сроков разработки компьютерных программ.

2.Программная инженерия прошла несколько этапов развития, в процессе которых были сформулированы фундаментальные принципы и методы разработки программных продуктов.

3.Основной принцип программной инженерии: программы создаются в результате выполнения нескольких взаимосвязанных этапов (анализ требований, проектирование, разработка, внедрение, сопровождение), составляющих жизненный цикл программного продукта.

4.Фундаментальными методами проектирования и разработки являются модульное, структурное и объектно-ориентированное проектирование и программирование.

5.Кризис программирования продолжается.

7

Кризис программирования продолжается

Несмотря на то, что программная инженерия достигла определенных успехов, перманентный кризис программирования продолжается.

Связано это с тем, рубеж 80–90-х годов отмечается как начало информационно-технологической революции, вызванной взрывным ростом использования информационных средств: персональный компьютер, вычислительные сети, мобильная связь, электронная почта, Internet и т.д.

Цена успеха – возрастают потребности в разработке ПО и, как следствие, кризис программирования принимает хронические формы:

США тратит ежегодно более $200 млрд. на более чем 170 тыс. проектов разработки ПО в сфере IT;

31,1% из них закрываются, так и не завершившись;

52,7% проектов завершаются с превышением первоначальных оценок бюджета/сроков и ограниченной функциональностью;

потери от недополученного эффекта внедрения ПО измеряются триллионами.

8

Кризис программирования продолжается

Статистика по 30 000 программным проектам, выполненным американскими софтверными компаниями

успешные проекты – завершены вовремя в полном объеме и в рамках бюджета;

проблемные проекты – завершены не в полном объеме и/или с нарушением сроков, и/или перерасходом бюджета;

проваленные проекты – не доведены до конца (перерасход средств, низкое качество)

Год

Проваленные

Проблемные

Успешные

2004

15%

51%

34%

2000

23%

49%

28%

1998

40%

33%

27%

1995

28%

46%

26%

1994

31%

53%

16%

9

Кризис программирования продолжается

Основными причинами неудачи IT-проектов признаются:

Нереалистичные временные рамки проекта.

Недостаток количества исполнителей.

Размытые границы проекта.

Недостаток финансирования.

Нехватка квалифицированных кадров.

10

Соседние файлы в папке Лекции Введение в ПИ