ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.11.2023

Просмотров: 782

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
1.5. Развитие технологий программирования
В соответствии с обычным значением слова “технология” под тех- нологией программирования (programming technology) понимается со- вокупность производственных процессов, приводящая к созданию тре- буемого программного продукта, а также описание этой совокупности процессов. Другими словами, технология программирования понимает- ся здесь в широком смысле как технология разработки программных средств, включая в нее все процессы, начиная с момента зарождения идеи (концепции) этого средства до создания необходимой программ- ной документации. Каждый процесс этой совокупности базируется на использовании каких-либо методов и средств, например, компьютера (в этом случае речь идет о компьютерной технологии программирования).
В литературе имеются и другие, несколько отличающиеся, опреде- ления технологии программирования. Используется в литературе и близкое к технологии программирования понятие программной инже- нерии, определяемой как систематический подход к разработке, экс- плуатации, сопровождению и изъятию из обращения программных средств. Главное различие между технологией программирования и программной инженерией как дисциплинами для изучения заключается в способе рассмотрения и систематизации материала [17].
В технологии программирования акцент делается на изучении про- цессов разработки программных систем (технологических процессов), порядке их прохождения и на том, как методы и инструментальные средства разработки программных систем используются в этих процес- сах, как их применение образуют технологические процессы. Тогда как в программной инженерии изучаются различные методы и инструмен- тальные средства разработки ПС с точки зрения достижения определен- ных целей – эти методы и средства могут использоваться в разных тех- нологических процессах (и в разных технологиях программирования).
Не следует также путать технологию программирования с методоло- гией программирования. В технологии программирования методы рас- сматриваются “сверху” с точки зрения организации технологических процессов, а в методологии программирования методы рассматривают- ся “снизу” с точки зрения основ их построения. Например, в работе

20
[23] методология программирования определяется как совокупность механизмов, применяемых в процессе разработки программного обес- печения и объединенных одним общим философским подходом.
В историческом аспекте в развитии технологии программирования можно выделить несколько этапов [9. 10, 17, 18, 26, 27].
1. Первый этап - “стихийное” программирование – отсутствие сфор- мулированной технологии, когда программирование было, по сути, ис- кусством. Этап охватывает период от появления первых ЭВМ до сере- дины 60-х годов 20 века. Основные вехи этапа: двоичный код, восьме- ричный код, 16-ричный код, ассемблеры, макроассемблеры, алгоритми- ческие языки, подпрограммы, пользовательские функции, процедуры, библиотеки расчетных и служебных подпрограмм.
Развитие программирования шло по пути замены машинных языков ассемблерами, а затем алгоритмическими языками (Fortran, Algol и др.) и повторного использования подпрограмм, что повысило производи- тельность труда программиста (рис. 1.3). Стихийно использовалась разработка “снизу-вверх” – подход, при котором вначале проектировали и реализовывали сравнительно простые подпрограммы, из которых по- том пытались построить сложную программу.
Рис. 1.3. Этап стихийного программирования
2. Второй этап – структурный подход к программированию. Этот подход сложился в 60 – 70 годы 20 века и представлял собой совокуп- ность рекомендуемых технологических приемов, охватывающих все этапы разработки программного обеспечения. В основе структурного подхода лежит декомпозиция сложных систем с целью последующей реализации в виде отдельных небольших подпрограмм. В отличие от используемого ранее процедурного подхода к декомпозиции, структур- ный подход требовал представления задачи в виде иерархии подзадач простейшей структуры.


21
Проектирование осуществлялось “сверху-вниз” и подразумевало реализацию общей идеи, обеспечивая проработку интерфейсов подпро- грамм [9, 11]. Вводились ограничения на конструкции алгоритмов, ре- комендовались формальные модели их описания, а также специальный метод проектирования алгоритмов – метод пошаговой детализации.
Поддержка принципов структурного программирования была заложена в основу процедурных языков программирования (PL/1, Algol-68,
Pascal, C).
Появилась и начала развиваться технология модульного программи- рования, которая предполагает выделение групп подпрограмм, исполь- зующих одни и те же глобальные данные, в отдельно компилируемые модули (рис. 1.4). Практика показала, что структурный подход в соче- тании с модульным программированием позволяет получить достаточно надежные программы, размер которых не превышает 100000 операторов
[9]. Узким местом модульного программирования стали межмодульные интерфейсы, ошибки в которых трудно обнаружить по причине раз- дельной компиляции модулей (ошибки выявляются только при выпол- нении программы).
Рис. 1.4. Этап структурного программирования
3. Третий этап – объектный подход к программированию. Сложился с середины 80-х до конца 90-х годов 20 века. Объектно- ориентированное программирование (ООП) определяется как техноло- гия создания сложного программного обеспечения, основанная на пред- ставлении программы в виде совокупности объектов, каждый из кото- рых является экземпляром определенного типа (класса), а классы обра- зуют иерархию с наследованием свойств. Взаимодействие программных объектов осуществляется путем передачи сообщений. Основное досто- инство объектно-ориентированного программирования по сравнению с

22 модульным программированием – более естественная декомпозиция программного обеспечения, которая существенно облегчает его разра- ботку. Кроме того, объектный подход предлагает новые способы орга- низации программ, основанные на механизмах наследования, полимор- физма, композиции. Это позволяет существенно увеличить показатель повторного использования кодов и создавать библиотеки классов для различных применений.
Развитие объектного подхода в технологии программирования при- вело к созданию сред визуального программирования. Появились языки визуального объектно-ориентированного программирования, такие как
Delphi, C++ Builder, Visual C++, C# и т. д. Однако технология ООП име- ет и недостатки. Главный из них – зависимость модулей программного обеспечения от адресов экспортируемых полей и методов, структур и форматов данных. Эта зависимость объективна, так как модули должны взаимодействовать между собой, обращаясь, к ресурсам друг друга (рис.
1.5).
4. Четвертый этап – компонентный подход и CASE-технологии (с середины 90-х годов 20 века до нашего времени) [8, 9, 18]. Этот подход предполагает построение программного обеспечения из отдельных ком- понентов – физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандарти- зованные двоичные интерфейсы. В отличие от обычных объектов объ- екты-компоненты можно собирать в динамически вызываемые библио- теки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию. В настоящее время рынок компонентов – реальность, поддерживаемая Интернетом, массо- вой рекламой и публикациями.
Основы компонентного подхода были разработаны компанией
Microsoft, начиная с технологии OLE (Object Linking and Embedding – связывание и внедрение объектов), которая использовалась в ранних версиях Windows для создания составных документов. Ее развитием стало появление COM-технологии (Component Object Model – компо- нентная модель объектов), а затем ее распределенной версии – DCOM, на основе которых были разработаны компонентные технологии, реша- ются различные задачи разработки программного обеспечения.
Среди них следуют отметить OLE-automation – технологию создания программируемых приложений, обеспечивающую доступ к внутренним службам этих приложений. На основе OLE-automation создана техноло- гия ActiveX, предназначенная для создания программного обеспечения, как сосредоточенного на одном компьютере, так и распределенного.
Безопасность и стабильная работа распределенных приложений обеспе- чивается еще двумя технологиями, заложенными в COM. Это техноло- гия MIDAS (Multi-tier Distributed Application Services Suite – сервис для создания многоуровневых распределенных приложений), которая была предложена фирмой Borland уже довольно давно, и MTS (Microsoft
Transaction Server) – сервер управления транзакциями.


23
Рис.1.5. Этап объектного подхода к программированию
Компонентный подход лежит также в основе технологии CORBA
(Common Object Request Broker Architecture – общая архитектура с по- средником обработки запросов объектов). Эта технология, реализующая подход, аналогичный COM, разработана группой компаний OMC
(Object Management Group – группа внедрения объектной технологии программирования). Программное ядро CORBA реализовано для всех основных аппаратных и программных платформ и обеспечивает созда- ние программного обеспечения в гетерогенной вычислительной среде.
Важнейшая особенность современного этапа технологии програм- мирования – широкое использование компьютерных технологий для создания и сопровождения программных систем на всех этапах их жиз- ненного цикла. Эти технологии получили название CASE-технологий
(Computer-Aided Software/System engineering – разработка программного обеспечения/программных систем с использованием компьютерной поддержки). Сегодня существуют CASE-технологии, поддерживающие как структурный, так и объектный, в том числе, компонентный подходы к программированию [8].
Зная, какие программные технологии оказали самое сильное влияние на разработку программных систем за последние 25 лет, можно оценить их по количеству опубликованных научных статей или выяснить, на- пример, сколько времени продолжался поднятый вокруг них ажиотаж.
С другой стороны, с точки зрения пользователя, можно судить о них, оценивая, чего удалось добиться по сравнению с тем, что предваритель- но было обещано. Так в чем же уникальность последних 25 лет [31]?

24
Во-первых, программное обеспечение перестало быть прерогативой нескольких компаний и стало частью повседневной жизни практически каждого жителя нашей планеты: ПК, Internet и мобильные телефоны – свидетельства этой грандиозной эволюции. Во-вторых, теперь принято опираться на эмпирические оценки, а не на мнения. М. Шоу, описывая ситуацию в 1980-х годах прошлого века, заметила: «Программная ин- женерия пока еще не стала настоящей дисциплиной, но имеет необхо- димый потенциал для того, чтобы ею стать» [31]. В то время многие технологии только-только создавались и предлагались вниманию пуб- лики, но еще с 80-х годов инженеры анализировали и эмпирически оце- нивали новинки для того, чтобы судить об их влиянии.
На рис. 1.6 показаны программные технологии и периоды, когда они достигли важнейших этапов своего развития. Эта таблица построена исходя из структуры, предложенной С. Редвайном и В. Риддлом [31].
Для простоты показаны только три этапа развития: основы – когда про- ведены базовые исследования и созданы краеугольные концепции, ог- раниченное использование – когда эти концепции были взяты на воо- ружение некоторыми компаниями и пользователями, широкое исполь- зование – когда технология стала применяться примерно третьей частью целевого рынка.
Журналы и Internet-ресурсы за последние 25 лет кардинально изме- нились. До 1980 года для практиков основным источником сведений о программных технологиях был Datamation, сейчас существует несколь- ко таких источников, например IEEE Software, а также онлайновые ре- сурсы вроде Slashdot (англоязычный новостной сайт, специализирую- щийся на технических и интересных технической аудитории темах), которые тоже дают представление о последних шагах в эволюции тех- нологий. В статье [31] собран материал из множества отдельных источ- ников данных, которые найдены в различных обзорах и wiki в про- граммном мире. Для объективности автор статьи К. Эберт обратился к своим коллегам из советов IEEE Software и поинтересовался их пред- ставлением о технологиях, появившихся за последние 25 лет. На самом деле точно определить время перехода на новый этап просто невозмож- но. Это относится, например, к объектно-ориентированной разработке, которая активно используется с 1990-х годов, но до сих пор не нашла своего применения в некоторых отраслях.
На рис. 1.6 показаны три основные группы программных техноло- гий. Базовые технологии по мере своего развития влияют на массовые тенденции и дисциплины, и они применяются во всех областях и на- правлениях программной разработки. Большинство из известных сейчас таких технологий существуют последние 25 лет. Технологические кон- цепции и методологии объединяют базовые методики, которые исполь- зуются во многих различных отраслях и продуктах. Консолидирован- ные технологии опираются на концепции и предоставляют готовые тех- нические решения. В тех случаях, когда технологии принадлежат к двум таким группам, они отнесены к более общей группе.


25
Рис. 1.6. Основные группы программных технологий
Что имеют в виду, когда говорят, что программная технология «ока- зывает влияние»? Задавая этот вопрос разным людям, можно получить множество ответов, отражающих точку зрения конкретного собеседни-

26 ка. Профессор будет оценивать репутацию и исследовательские гранты и то, как технология поможет добиться этих целей. Ученый сформули- рует свой ответ, учитывая инновационный потенциал. Менеджеров производства в первую очередь интересуют рентабельность, воплоще- ние и инновационные продукты. Программный инженер будет иметь в виду полезность и эффективность при решении той проблемы, которой он занимается.
Типичный потребитель, скорее всего, будет судить о технологии по тому, насколько ее можно использовать в повседневной жизни и как она помогает выполнять работу, а дети – как не отстать от своих ровесни- ков. Эти две последние потребительские группы – повседневные поль- зователи программного обеспечения – не только численно превосходят другие, но они также совсем иначе судят о программных технологиях и продуктах. Они обращают внимание на то, насколько незаметным, удобным в использовании и встроенным является программное обеспе- чение. Другими словами, насколько незаметно, но эффективно оно по- могает решить значимую для них задачу.
На рис.1.6 можно заметить ряд тенденций, характерных для эволю- ции программного обеспечения за последние годы: развитие программных технологий теперь стимулируют не отдельные компании, а экосистемы исследователей, поставщиков, потребителей и пользователей; технологии должны пройти ряд апробаций с различной направленно- стью, прежде чем они будут признаны успешными; каждая конкретная технология распространяется в разных отраслях с разной задержкой; ориентированность на конкретную предметную область дает пользо- вателям возможность адаптировать технологии к своим специфиче- ским потребностям; работа с процессами заменила создание методом проб и ошибок ре- шений под конкретную ситуацию; технологии, которые раньше были фрагментированными и изолиро- ванными, сейчас интегрируются.
Каждая из этих тенденций оказывает серьезное влияние на инженер- ные продукты и на формирование программной отрасли. Microsoft с
Windows или Sun с Java – пример того, как отдельная компания опреде- ляет развитие технологии, но технологии от этих производителей доби- лись успеха благодаря тому, что они создавались и широко распростра- нялись в отраслях. Невозможно даже представить себе Windows без
Intel и всей экосистемы поставщиков и провайдеров сервисов. Точно так же банки создали банкоматы и разработали множество связанных с ни- ми программных технологий, таких как распределенная и защищенная обработка транзакций. Компании розничной торговли стимулировали разработку кассовых аппаратов и необходимого программного обеспе- чения для поддержки цепочки поставки, в том числе штрих-коды и средства радиочастотной идентификации (RFID).


27
Некоторые технологии прошли очень долгий период развития либо никогда не были полностью разработаны. График их перехода к широ- кому использованию напоминает синусоиду, что свойственно иннова- циям, которые переходят от этапа начальных исследований и опытных эксплуатаций к широкому отраслевому применению, а затем все повто- ряется снова [31]. Это объясняет, почему успешные компании практи- чески в одночасье могут потерпеть крах просто потому, что они свое- временно не предложили определенную технологию. Программные ме- неджеры также часто склонны к стабилизации, а не к росту, - их инте- ресует эффективность, и они недооценивают экспериментирование и инновации.
Программные технологии полезны, если они широко используются.
Однако любая конкретная технология в одних отраслях начинает завое- вывать популярность быстрее, чем в других. Хороший тому пример – долгая и трудная дорога к пользователям, которую прошли полезные пакеты инструментов для генерации кода и инженерии программного обеспечения. Когда эти пакеты появились вместе с технологией, они еще не были готовы для повсеместного применения, а позже не был готов рынок. Такой же оказалась и судьба экспертных систем и систем искусственного интеллекта. Сейчас они применяются почти везде, по- скольку в отрасли осознали, что экспертная система не является авто- номной технологией, а должна быть интегрирована в другие продукты.
На рис. 1.7 показан этот эффект на примере обеспечения безопасности информации.
Рис. 1.7. Эффект внедрения программных технологий
Безопасность впервые была признана ключевой технологией в ИТ- инфраструктурах в конце 1980-х годов, когда вирус Jerusalem и червь
Morris, по-существу, парализовали Internet-трафик [25]. Инциденты продолжались в 1990-х годах, поскольку технология применялась толь- ко как особая мера и без тщательного архитектурного анализа. Сейчас, по прошествии более двадцати лет, вместе с новыми ИТ-продуктами наконец стали реализовывать базовые принципы обеспечения безопас- ности. То же самое повторяется в отрасли телекоммуникаций – как по- казывают атаки в сфере IP-телефонии, здесь опять пока лишь создаются заплатки на особый случай, но без реального контроля. Промышленная автоматизация и другие предметные области еще больше отстают с вне-

28 дрением инженерии обеспечения безопасности, как это продемонстри- ровал червь Slammer.
Ориентированность на конкретную предметную область заменила универсальность 1990-х годов. Первые CASE- и распределенные ком- понентные модели увязли в попытках решить сразу слишком много проблем. Когда в отрасли осознали, что различные предметные области имеют свои специфические потребности и скорости внедрения, то ока- залось, что достаточно лишь оптимизировать технологию, предложив ее конкретному рынку. Инструменты моделирования сразу же стали поль- зоваться популярностью после того, как были адаптированы к потреб- ностям конкретных предметных областей, таких как встроенные кон- троллеры или телекоммуникационные протоколы.
Программные процессы, как для инженерии, так и для управления стимулировали эволюцию технологий с 1980-х годов. Сложность про- граммных систем растет быстрее, чем люди в состоянии ею управлять.
Эти трудности были уже в 1960-х годах, но тогда ситуация начала те- рять свою остроту после того, как ведущие отрасли перенесли свое внимание на процесс инженерии программного обеспечения. Как след- ствие, разработка программного обеспечения за последние 25 лет кар- динально изменилась, превратившись из индивидуального творчества в дисциплину программной инженерии.
Сейчас трудно поверить, что 25 лет назад большая часть программ- ного обеспечения и его разработчики и пользователи действовали изо- лированно. Программная интеграция лучше всего стала видна с появле- нием Internet и ее огромными темпами роста, благодаря развитию средств взаимодействия. Компонентные платформы и открытые стан- дарты еще больше усиливают эту тенденцию. Успешное внедрение и интеграция отнюдь не тривиальны – чтобы предложить что-то полезное инженерам, новые технологии, процессы и средства инженерии нужда- ются в аппарате глубокого управления изменениями.
1   2   3   4   5   6   7   8   9   ...   37