Главная страница
Навигация по странице:

  • 1. ТЕХНОЛОГИИ РАЗРАБОТКИ ПРОГРАММНОГО

  • Технологии разработки программного обеспечения. Учеб.

  • теория. Л-1-2-Мдк-02-02. Основные этапы развития технологии разработки


    Скачать 0.49 Mb.
    НазваниеОсновные этапы развития технологии разработки
    Анкортеория
    Дата16.01.2021
    Размер0.49 Mb.
    Формат файлаdocx
    Имя файлаЛ-1-2-Мдк-02-02.docx
    ТипДокументы
    #168737

      1. Основные этапы развития технологии разработки


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

    указание последовательности выполнения технологических операций; перечисление условий, при которых выполняется та или иная операция;

    описания самих операций, где для каждой операции определены ис-

    ходные данные, результаты, а также инструкции, нормативы, стандарты, критерии, методы оценки и т. п. (см. рис. 1.1).


    Исходные данные в стандартном пред- ставлении (доку- менты, рабочие ма- териалы, результа- ты предыдущей операции)

    Методические материалы, инструкции, нормативы и стандарты, критерии оценки результатов



    Технологиче- ская операция

    Исполнители, про- граммные и техниче- ские средства

    Результаты в стандартном представле- нии

    Рис. 1.1. Структура описания технологической операции

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

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

    Чтобы разобраться в существующих технологиях программирования и определить основные тенденции их развития, целесообразно рассматривать эти технологии в историческом контексте, выделяя основные этапы развития программирования как науки.
        1. Этап 1. «Стихийное» программирование


    Этот этап охватывает период от момента появления первых вычисли- тельных машин до середины 60-х гг. XX в. В это время практически отсутст- вовали технологии разработки программного обеспечения и программирова- ние фактически было искусством. Первые программы имели простейшую структуру. Они состояли из собственно программы на машинном языке и об- рабатываемых ею данных (рис. 1.2). Сложность программ в машинных кодах ограничивалась способностью программиста одновременно мысленно от- слеживать последовательность выполняемых операций и местонахождение данных при программировании.




    Рис. 1.2. Структура первых программ
    Появление ассемблеров позволило вместо двоичных или шестнадцате- ричных кодов использовать символические имена данных и мнемоники ко- дов операций. В результате программы стали более «читаемыми».

    Создание языков программирования высокого уровня, таких как FOR- TRAN и ALGOL, существенно упростило программирование вычислений, снизив уровень детализации операций. Это, в свою очередь, позволило уве- личить сложность программ.

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

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



    Подпрограммы

    Рис. 1.3. Принцип работы программ с глобальной областью данных




    Подпрограммы с локальными данными

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

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

    В начале 60-х гг. XX в. разразился «кризис программирования». Он выражался в том, что фирмы, взявшиеся за разработку сложного программ- ного обеспечения такого, как операционные системы, срывали все сроки за-

    вершения проектов. Проект устаревал раньше, чем был готов к внедрению, увеличивалась его стоимость, и в результате многие проекты так никогда и не были завершены.

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

    Анализ причин возникновения большинства ошибок позволил сформу- лировать новый подход к программированию, который был назван «струк- турным».

        1. Этап 2. Структурный подход к программированию

    (60–70-е гг. ХХ в.)


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

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

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

    Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования. Как пра- вило, они включали основные «структурные» операторы передачи управле- ния, поддерживали вложение подпрограмм, локализацию и ограничение об- ласти «видимости» данных. Среди наиболее известных языков этой группы стоит назвать PL/1, ALGOL-68, Pascal, С.

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

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

    Модульное программирование предполагает выделение групп подпро- грамм, использующих одни и те же глобальные данные в отдельно компили- руемые модули (библиотеки подпрограмм), например, модуль графических ресурсов, модуль подпрограмм вывода на принтер (рис. 1.5). Связи между модулями при использовании данной технологии осуществляются через спе- циальный интерфейс, в то время как доступ к реализации модуля (телам под- программ и некоторым «внутренним» переменным) запрещен. Эту техноло- гию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.

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



    Рис. 1.5. Модульная структура программ
    Практика показала, что структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 операторов. Узким местом модульно- го программирования является то, что ошибка в интерфейсе при вызове под- программы выявляется только при выполнении программы (из-за раздельной компиляции модулей обнаружить эти ошибки раньше невозможно). При уве- личении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдель- ных частей программы становится практически невозможно. Для разработки программного обеспечения большого объема было предложено использовать объектный подход.
        1. Этап 3. Объектный подход к программированию

    (с середины 1980-х гг. до нашего времени)


    Объектно-ориентированное программирование определяется как тех- нология создания сложного программного обеспечения, основанная на пред- ставлении программы в виде совокупности объектов, каждый из которых яв- ляется экземпляром определенного класса (рис. 1.6), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений (рис.1.7).

    Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х гг. XX в. Естественный для языков моделирования способ представле-

    1. ТЕХНОЛОГИИ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

      1. Основные этапы развития технологии разработки



    ния программы получил развитие в другом специализированном языке моде- лирования – языке Smalltalk (70-е гг. XX в.), а затем был использован в новых версиях универсальных языков программирования, таких как Pascal, C++, Modula, Java.




    Рис. 1.6. Структура объектно-ориентированной программы в виде связанных классов



    Рис. 1.7. Взаимодействие объектов в объектно-ориентированных программах
    Основным достоинством объектно-ориентированного программирова- ния по сравнению с модульным программированием является «более естест- венная» декомпозиция программного обеспечения, которая существенно об- легчает его разработку. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) програм- мы. Кроме этого, объектный подход предлагает новые способы организации программ, основанные на механизмах наследования, полиморфизма, компо- зиции, наполнения. Эти механизмы позволяют конструировать сложные объ- екты из сравнительно простых. В результате существенно увеличивается по- казатель повторного использования кодов и появляется возможность созда- ния библиотек классов для различных применений.

    Бурное развитие технологий программирования, основанных на объ- ектном подходе, позволило решить многие проблемы. Так, были созданы

    среды, поддерживающие визуальное программирование, например, Delphi, C++ Builder, Visual C++ и т. д. При использовании визуальной среды у про- граммиста появляется возможность проектировать некоторую часть, напри- мер, интерфейсы будущего продукта, с применением визуальных средств до- бавления и настройки специальных библиотечных компонентов. Результатом визуального проектирования является заготовка будущей программы, в кото- рую уже внесены соответствующие коды.

    Использование объектного подхода имеет много преимуществ, однако его конкретная реализация в объектно-ориентированных языках программи- рования, таких как Pascal и C++, имеет существенные недостатки: фактически отсутствуют стандарты компоновки двоичных результатов ком- пиляции объектов в единое целое даже в пределах одного языка программи- рования: компоновка объектов, полученных разными компиляторами C++ в лучшем случае проблематична, что приводит к необходимости разработки программного обеспечения с использованием средств и возможностей одного языка программирования высокого уровня и одного компилятора, а значит, требует наличия исходных кодов используемых библиотек классов; изменение реализации одного из программных объектов, как минимум, свя- зано с перекомпиляцией соответствующего модуля и перекомпоновкой всего программного обеспечения, использующего данный объект.

    Таким образом, при использовании этих языков программирования со- храняется зависимость модулей программного обеспечения от адресов экс- портируемых полей и методов, а также структур и форматов данных. Эта за- висимость объективна, так как модули должны взаимодействовать между со- бой, обращаясь к ресурсам друг друга. Связи модулей нельзя разорвать, но можно попробовать стандартизировать их взаимодействие, на чем и основан компонентный подход к программированию.
        1. Этап 4. Компонентный подход и CASE-технологии (с середины 1990-х гг. до нашего времени)


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

    Компонентный подход лежит в основе технологий, разработанных на базе COM (Component Object Model – компонентная модель объектов), и тех-

    нологии создания распределенных приложений CORBA (Common Object Re- quest Broker Architecture – общая архитектура с посредником обработки запросов объектов). Эти технологии используют сходные принципы и разли- чаются лишь особенностями их реализации.

    Технология СОМ фирмы Microsoft является развитием технологии OLE (Object Linking and Embedding – связывание и внедрение объектов), которая использовалась в ранних версиях Windows для создания составных докумен- тов. Технология СОМ определяет общую парадигму взаимодействия про- грамм любых типов: библиотек, приложений, операционной системы, т. е. позволяет одной части программного обеспечения использовать функции (службы), предоставляемые другой, независимо от того, функционируют ли эти части в пределах одного процесса, в разных процессах на одном компью- тере или на разных компьютерах (рис. 1.8). Модификация СОМ, обеспечи- вающая передачу вызовов между компьютерами, называется DCOM (Distri- buted COM – распределенная СОМ).

    По технологии СОМ приложение предоставляет свои службы, исполь- зуя специальные объекты – объекты СОМ, которые являются экземплярами классов СОМ. Объект СОМ, так же как обычный объект, включает поля и методы, но в отличие от обычных объектов каждый объект СОМ может реа- лизовывать несколько интерфейсов, обеспечивающих доступ к его полям и функциям. Это достигается за счет организации отдельной таблицы адресов методов для каждого интерфейса (по типу таблиц виртуальных методов). При этом интерфейс обычно объединяет несколько однотипных функций. Кроме того, классы СОМ поддерживают наследование интерфейсов, но не поддерживают наследования реализации, т. е. не наследуют код методов, хо- тя при необходимости объект класса-потомка может вызвать метод родителя. Каждый интерфейс имеет имя, начинающееся с символа I и глобальный уникальный идентификатор IID (Interface IDentifier). Любой объект СОМ обязательно реализует интерфейс (Unknown (на схемах этот интерфейс все- гда располагают сверху). Использование этого интерфейса позволяет полу-

    чить доступ к остальным интерфейсам объекта.




    Рис. 1.8. Взаимодействие программных компонентов различных типов

    Объект всегда функционирует в составе сервера – динамической биб- лиотеки или исполняемого файла, которые обеспечивают функционирование объекта. Различают три типа серверов:

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

    локальный сервер: создается отдельным процессом (ехе), который ра- ботает на одном компьютере с клиентом;

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

    Например, Microsoft Word является локальным сервером. Он включает множество объектов, которые могут использоваться другими приложениями. Взаимодействие клиента и сервера обеспечивается базовыми механиз-

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


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

    В ноябре 1997 г. после продолжительного процесса объединения раз- личных методик группа OMG (Object Management Group) приняла получив- шийся в результате унифицированный язык моделирования (Unified Model Language – UML) в качестве стандарта. В 2001 г. члены OMG начали работу над новой версией UML, добавляя в нее недостающие элементы и устраняя недостатки, выявленные в UML1. Версия UML2 была принята в 2004 г. С официальной спецификацией UML можно ознакомится на веб-сайте OMG по адресу www.omg.org.

    Идея создания языка UML включала в себя не только реализацию стан- дарта для документирования и общения разработчиков, но и реализацию

    возможности использования UML как языка программирования. Этот момент вызывал массу проблем при осуществлении, так как язык визуального моде- лирования по определению не мог содержать в себе всей выразительности объектно-ориентированных языков в плане проектирования (программиро- вания) динамики и реализации алгоритмов. Нужен был язык, который на бо- лее высоком (абстрактном) уровне смог бы обеспечить разработку на UML. Такой язык был создан – это объектный язык ограничений OCL (Object Con- straint Language).

    Тенденции развития средств разработки программных систем заклю- чаются в создании таких средств, которые обеспечили бы не только автома- тизацию всех этапов и процессов разработки программных систем, но и связь между результатами этапов. Одним из ключевых соединительных узлов яв- ляется связь между проектными моделями и программным кодом. Когда раз- работка программных систем начинается от проектирования ее структуры до последующего кодирования и все изменения в функциях разрабатываемой системы реализуются начиная с перепроектирования архитектуры, то такая технология называется ориентированной на архитектуру (Model Driven Ar- chitecture – MDA).

    Компания Borland начиная с седьмой версии своей среды разработки (Delphi) уже использует набор компонент, реализующий подход, ориентиро- ванный на архитектуру, но в этой версии присутствует еще масса недостат- ков и недоработок. В последней своей версии (Delphi 2006) компания Borland модернизировала технологию, ориентированную на архитектуру, что позво- лило использовать ее для разработки промышленных приложений, в том числе и для платформы Microsoft Framework .Net.


    Технологии разработки программного обеспечения. Учеб. пособие

    --




    написать администратору сайта