Новости


Инженерия ПО

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

* наличием заказчика или рыночной ниши;
* значительными размерами и затратами;
* жесткими требованиями к процессам реализации и к продукту;
* милитаризацией. Контекст, в котором разрабатывалось и использовалось программное обеспечение обусловил понятие кризиса в программном обеспечении и необходимость поиска путей выхода из него, так называемой «серебряной пули». Возникновению кризиса способствовало особое положение в области программного обеспечения, которое характеризовалось следующим:
o разрабатывалось очень большое программное обеспечение, характерным представителем которого была операционная система OS360 для ЭВМ серии IBM - ( программное обеспечение включало более 500000 операторов и разрабатывалось значительным для того времени коллективом разработчиков около 1000;
o программное обеспечение разрабатывалось все чаще не на заказ, поэтому возникла проблема его сопровождения, сущность которого сводилась не только к исправлению ошибок, допущенных при разработке, но в большей степени к модификации программного обеспечения в связи с изменением среды, в которой эксплуатировалось программное обеспечение или желанием разработчика продлить эксплуатацию путем выпуска усовершенствованных версий;
o частые срыва сроков разработки и превышение бюджета требовали не только нового подхода к организации процесса разработки, но и новых методов и средств, обеспечивающих обоснованный расчет параметров проекта, которые касались финансирования, сроков, объемов программного обеспечения, количественного и качественного состава коллектива разработчиков, (широко используемый показатель «человеко-месяц» абсолютно не работал на таких масштабных проектах);
o опыт разработки программного обеспечения, который был накоплен к этому периоду времени, показывал, что все реже приходилось разрабатывать принципиально новые проекты(только 15% из всех проектов требовали подхода к разработке «с нуля» оставшиеся 85% можно было отнести к повторяющимся проектам) поэтому актуальным становилось использование опыта накопленного в программном обеспечении. При этом было понятно, что должен использоваться опыт не только программирования частей программ, но и опыт результатов выполнения других процессов, которые приобретали все большую значимость. Для решения этой проблемы в 1984 г. были развернуты широкие работы по исследованию программного обеспечения в аспекте повторного использования, результаты которых сейчас используются повсеместно);
o техники программирования и процессы, которые были эффективны, в основном, в программировании в 1950-х и ранних 1960-х годах, так называемое «программирование в малом”, для разработки небольших программ малыми коллективами абсолютно были не эффективны при разработке больших, сложных программных систем, состоящих из миллионов строк кода, требующих нескольких лет работы сотен специалистов разных специальностей. Требовались новые техники, которые стали относить к «программированию в большом», появились новые процессы, которые требовали определенной организации. Выход из сложившейся ситуации стал обсуждаться на конференции NATO, в 1968 г. в рамках новой дисциплины, которую назвали инженерия программного обеспечения(software engineering). Впервые акценты в методах, средствах и процессах разработки программного обеспечения были смещены, во-первых, с кодирования на другие процессы, а во-вторых, с качественных аспектов в сторону количественных инженерных. Кроме этого дополнительный стимул получили работы экономического направления и менеджмента проектов программного обеспечения.

К 90-м годам существовало две точки зрения на программное обеспечение как домен: компьютерных наук и инженерии программного обеспечения. С точки зрения компьютерных наук конструирование компьютерных программ – это математические действия подобные решению дифференциальных уравнений. С другой точки зрения программное обеспечение все больше приобретает черты конкретного домена. На самом деле, видимо, в период становления инженерии программного обеспечения имеет место гибридный взгляд на домен программного обеспечения, для которого характерен переход от первой точки зрения («в малом»), например, в создании программ для компьютеров ко второй точке зрения («в большом»), например, в создании программного обеспечения из компонентов. Основополагающей для инженерии программного обеспечения следует считать работу, в которой было введено понятие жизненного цикла программного обеспечения (W.Roys). Благодаря этой работе появилась возможность исследовать процессы, разрабатывать ресурсы и строить программные продукты как составляющие и результаты фаз жизненного цикла. В этой работе, начиная с рассмотрения двух этапов – анализ и кодирование вводятся «сверхнормативные» этапы; указывается, что только на этапе тестирования выясняется реальное время работы системы, объем памяти, скорость ввода/вывода и другие количественные параметры. Обращается внимание на первичность проектных решений и важность документирования проекта. Предложенная W-Roys модель была названа водопадной (каскадной). Другим исследователем, который внес принципиальный вклад в инженерию программного обеспечения, является B.Boehm, Его работы связаны с развитием концепции жизненного цикла. Но главный его вклад связан с применением экономических методов в инженерии программного обеспечения.Результатом длительных исследований по этому направлению явилась разработка моделей оценки стоимости программного обеспечения – Constructive Cost Model (COCOMO) и COCOMO II. Эти модели сейчас широко используются в разработке проектов программного обеспечения не только для определения стоимости разработки, но и для определения параметров необходимых ресурсов, времени разработки и других количественных показателей как жизненного цикла в целом, так и отдельных его фаз. Кроме этого следует напомнить о работах Б.Уильямса, Р.Осборна, Ф.Брукса, Х.Милза, Д.Парнаса, Э.Хоровитца, Д.Маккейба. С точки зрения событий – первое, самое важное уже упоминалось – конференция NATO 1968г. Другие конференции – это конференция по инженерии программного обеспечения, которые проходили ежегодно и конференции по обучению инженерии программного обеспечения, которые также проходят ежегодно. Кроме указанных, следует упомянуть конференции по сопровождению, реверсивной инженерии и повторному использованию программного обеспечения. Наиболее авторитетной организацией по инженерии программного обеспечения считается Software Engineering Institute (SEI) (www.sei.cmu.edu). Руководством для обучения инженерии программного обеспечения является Computing Curriculum Software Engineering (IEEE Computing Society). Эта программа основывается на документе Guide to the Software Engineering Body of Knowledge (SWEBOK). В бывшем Советском Союзе первые работы по инженерии программного обеспечения инициированы Ершовым А.П. Эту отрасль назвали технология программирования. Значительный вклад в исследование технологии программирования внес В.М.Глушков, Е.Л. Ющенко. Первые практические результаты были получены И.В.Вельбицким.Кроме этого следует упомянуть В.В.Липаева. Особенность работ отечественных ученых состоит в том, что они были направлены, в основном на создание средств автоматизирующих процессы жизненного цикла и чаще всего кодирования. Отдельно стоят работы Г.Е. Цейтелина, которые предпринимают попытку автоматического перехода от требований к коду.

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

<<< Назад