Программное обеспечение

Автор работы: Пользователь скрыл имя, 15 Июня 2012 в 13:00, реферат

Краткое описание

В конце 60-х – начале 70-х годов прошлого века произошло событие, которое вошло в историю как первый кризис программирования. Событие состояло в том, что стоимость программного обеспечения стала приближаться к стоимости аппаратуры («железа»), а динамика роста этих стоимостей позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ для компьютеров. Тогда и заговорили о программной инженерии (или технологии программирования, как это называлось в России) как о некоторой дисциплине, целью которой является сокращение стоимости программ.

Содержимое работы - 1 файл

Реферат.doc

— 221.50 Кб (Скачать файл)

Негосударственное образовательное учреждение

высшего профессионального образования

Московский  психолого-социальный институт 
 

Факультет государственного и муниципального управления

Кафедра государственного и муниципального управления 
 
 

Реферат на тему:

«Программное обеспечение» 
 
 
 

     Выполнила:

                                                             Алешина Екатерина Анатольевна

     студент 2 курса, гр. ГМУЗ210 
 

     Оценка:________________

     _______________/_____________/

                 (Подпись)                  (ФИО) 
 
 
 
 
 
 
 
 
 
 

Москва 2012 г.

 

Содержание 

 

 
Предпосылки и история

     В конце 60-х – начале 70-х годов  прошлого века произошло событие, которое вошло в историю как первый кризис программирования. Событие состояло в том, что стоимость программного обеспечения стала приближаться к стоимости аппаратуры («железа»), а динамика роста этих стоимостей позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ для компьютеров. Тогда и заговорили о программной инженерии (или технологии программирования, как это называлось в России) как о некоторой дисциплине, целью которой является сокращение стоимости программ.

     С тех пор программная инженерия  прошла достаточно бурное развитие. Этапы  развития программной инженерии  можно выделять по-разному. Каждый этап связан с появлением (или осознанием) очередной проблемы и нахождением  путей и способов решения этой проблемы.

Повторное использование кода (модульное  программирование)

     Проблема. На первых этапах становления программной  инженерии (даже когда она так  еще не называлась) было отмечено, что  высокая стоимость программ связана  с разработкой одинаковых (или похожих) фрагментов кода в различных программах. Вызвано это было тем, что в различных программах как части этих программ решались одинаковые (или похожие) задачи: решение нелинейных уравнений, расчет заработной платы. Использование при создании новых программ ранее написанных фрагментов сулило существенное снижение сроков и стоимости разработки.

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

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

Рост  сложности программ (структурное  программирование)

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

    • Большой объем кода (миллионы строк)
    • Большое количество связей между элементами кода
    • Большое количество разработчиков (сотни человек)
    • Большое количество пользователей (сотни и тысячи)
    • Длительное время использования

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

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

     Нужна технология, которая обеспечит «правильное» проектирование и кодирование. Основные принципы технологии структурного проектирования и кодирования:

    • Нисходящее функциональное проектирование, при котором в системе выделяются
    • основные функциональные подсистемы, которые потом разбиваются на подсистемы и т.д. (принцип «разделяй и властвую»)
    • Применение специальных языков проектирования и средств автоматизации использования этих языков
    • Дисциплина проектирования и разработки: планирование и документирование проекта, поддержка соответствие кода проектной документации
    • Структурное кодирование без goto

Модификация программ (ООП)

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

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

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

    • Инкапсуляция – объединение в классе данных (свойств) и методов (процедур обработки).
    • Наследование – возможность вывода нового класса из старого с частичным изменением свойств и методов
    • Полиморфизм – определение свойств и методов объекта по контексту

     Проиллюстрировать возможности принципов ООП можно  на следующем примере.

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

     В отделе 3 частично изменились правила  начисления зарплаты. В этой ситуации при объектно-ориентированном подходе  из класса «Зарплата» выводится класс  «Зарплата 1», который наследует неизменившиеся правила начисления зарплаты и переопределяет изменившиеся. Здесь при расчете зарплаты объектам «Отдел 1» и «Отдел 2» будет передаваться объект «Зарплата», а объекту «Отдел 3» - объект «Зарплата 1». При таких изменениях:

    • Срабатывает принцип наследования: код «Зарплата», «Отдел 1» и «Отдел 2» остаются без изменения, а код «Зарплата 1» изменяется ровно настолько, насколько это необходимо.
    • Срабатывает принцип полиморфизма: код «Отдел 3» также не изменяется – он продолжает считать, что работает с объектом «Зарплата»

Некоторые итоги

     Программная инженерия (или технология программирования) как некоторое направление возникло и формировалось под давлением  роста стоимости создаваемого программного обеспечения. Главная цель этой области  знаний - сокращение стоимости и сроков разработки программ.

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

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

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

     Цена  успеха – кризис программирования принимает хронические формы:

    • США тратит ежегодно более $200 млрд. на более чем 170 тыс. проектов разработки ПО в сфере IT;
    • 31,1% из них закрываются, так и не завершившись; 52,7% проектов завершаются с превышением первоначальных оценок бюджета/сроков и ограниченной функциональностью;
    • потери от недополученного эффекта внедрения ПО измеряются триллионами;
    • статистика по 30,000 проектам по разработке ПО в американских компаниях показывает следующее распределение между:
    • успешными – вовремя и в рамках бюджета был выполнен весь намеченный фронт работ;
    • проблемными – нарушение сроков, перерасход бюджета и/или сделали не все, что требовалось;
    • проваленными – не были доведены до конца из-за перерасхода средств, бюджета, качества.

 

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

     На  сегодняшний день нет единого  определения понятия «программная инженерия».

     Сам термин – software engineering (программная инженерия) - впервые был озвучен в октябре 1968 года на конференции подкомитета НАТО по науке и технике (г.Гармиш, Германия). Присутствовало 50 профессиональных разработчиков ПО из 11 стран. Рассматривались проблемы проектирования, разработки, распространения и поддержки программ. Там впервые и прозвучал термин «программная инженерия» как некоторая дисциплина, которую надо создавать и которой надо руководствоваться в решении перечисленных проблем.

     Вскоре  после этого в Лондоне состоялась встреча 22-х руководителей проектов по разработке ПО. На встрече анализировались проблемы и перспективы развития ПО. Отмечалось возрастающее воздействие ПО на жизнь людей. Впервые серьезно заговорили о надвигающемся кризисе ПО. Применяющиеся принципы и методы разработки ПО требовали постоянного усовершенствования. Именно на этой встрече была предложена концепция жизненного цикла ПО (SLC – Software Lifetime Cycle) как последовательности шагов-стадий, которые необходимо выполнить в процессе создания и эксплуатации ПО. Вокруг этой концепции было много споров. В 1970 г. У.У. Ройс (W.W. Royce) произвел идентификацию нескольких стадий в типичном цикле и было высказано предположение, что контроль выполнения стадий приведет к повышению качества ПО и сокращению стоимости разработки.

Что такое программное  обеспечение (software)

Информация о работе Программное обеспечение