УДК 681.3.07

ЭТАПЫ РАЗВИТИЕ ПРОГРАММНОЙ ИНЖЕНЕРИИ

Е.А.Черткова, К.К.Дауренбеков, А.Ж.Рахметова

Московский государственный машиностроительный университет

Кызылординский государственный университет имени Коркыт Ата

 

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

В конце 1960-х годов в результате объективной необходимости перехода от кустарных способов к индустриальным способам создания программного обеспечения появилась новая научная дисциплина — программная инженерия (software engineering).

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

Термин software engineering был впервые предложен в 1968 году на конференции, проводившейся под эгидой NATO и посвященной так называемому кризису программного обеспечения («software crisis»). Этот кризис был вызван появлением мощной вычислительной техники третьего поколения, позволявшей воплотить в жизнь более сложные, не реализуемые ранее, программные приложения.

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

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

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

В 1975 г. в Вашингтоне была проведена первая международная конференция, посвященная программной инженерии. Тогда же появилось первое издание, посвященное программной инженерии, — IEEE Transactions on Software Engineering.

Становление и развитие программной инженерии характеризуется двумя этапами: 1970-е и 1980-е гг. — систематизация и стандартизация создания программного обеспечения (на основе структурного подхода) и с начала 1990-х гг. — переход к сборочному, индустриальному способу создания программного обеспечения (на основе объектно-ориентированного подхода).

1990-е годы ознаменовали первую реальную попытку превратить разработку программного обеспечения в инженерную дисциплину с помощью концепций CBSE (component-based software engineering — компонентная разработка программного обеспечения) и COTS (commercial off-the-shelf — готовые коммерчески доступные компоненты).

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

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

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

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

Эксперт компании IBM Rational Кони Бюрер, анализируя причины укоренения идеологии проб и ошибок при разработке, приходит к следующим выводам. По своей сути разработка программного обеспечения является проектированием и не имеет признаков строительства или производства и соответственно конечный результат проектирования — код на языке высокого уровня — является чертежом программного обеспечения.

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

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

Это не умаляет достоинства успешных методов и правил, часто называемых оптимальными методиками, которые создавались на протяжении последних двух десятилетий такими ведущими мастерами программной отрасли с мировыми именами, как Гради Буч, Джеймс Рамбо, Айвар Якобсон и др.

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

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

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

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

Наряду с архитектурой программного обеспечения в соответствии с концепциями программной инженерии существенным фактором успешности является внедрение технологического процесса разработки. По данным SEI (Software Engineering Institute — Институт программной инженерии) в последние годы до 80% всего эксплуатируемого программного обеспечения разрабатывалось без использования дисциплины проектирования, методом «code and fix» (кодирования и исправления ошибок). Одна из причин этого — стремление сэкономить время и средства на внедрение технологического процесса разработки программного обеспечения.

В рамках программной инженерии в 1990-х годах было предложено еще одно решение проблемы качества программного обеспечения под названием «совершенствование процесса разработки программ». Был сформулирован основной принцип этой концепции: создание программного обеспечения — это задача управления, к которой можно применять соответствующие процедуры управления данными, процессами и практическими методами с целью создания оптимального решения.

Реализовать эту концепцию предлагалось в соответствии со ставшей теперь популярной и часто критикуемой моделью CMM (Capability Maturity Model), разработанной Институтом программной инженерии (SEI) при Питтсбургском университете Карнеги-Меллона (Carnegie Mellon University) в США.

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

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

Большинство экспертов считает, что залогом успешности будущих проектов является использование согласованных процессов программной инженерии. По мнению Иана Грэхема, всемирно известного специалиста в области объектных технологий, это будет отличительным признаком индустрии первого десятилетия XXI столетия, что позволит отметить этот период как «золотой век архитектуры и совершенствования процесса».

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

 

          Литература

1.Леффингуэлл Д., Уидриг Д. Принципы работы с требованиями к программному обеспечению. Унифицированный подход. Пер. с англ. – М.: Издательский дом «Вильямс». 2002. – 448 с.

2.Софиев А.Э., Черткова Е.А. Компьютерные обучающие системы. Монография: – М.: Изд. ДеЛи, 2006. – 296 с.

3.Черткова Е.А. Концепция спецификации требований для проектирования компьютерных обучающих систем. // Вестник Саратовского государственного технического университета. – 2005. № 4 (9). С. 90-97.