Единое окно доступа к образовательным ресурсам

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

Голосов: 0

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

Приведенный ниже текст получен путем автоматического извлечения из оригинального PDF-документа и предназначен для предварительного просмотра.
Изображения (картинки, формулы, графики) отсутствуют.
    УМП Технологические подходы к разработке ПО                                    1
Санкт-Петербургский государственный университет информационных технологий,
                             механики и оптики




                Учебно-методическое пособие
                    по дисциплине
        «Технологические подходы к разработке
              программного обеспечения»




                                   Новиков Ф.А.,
          канд. физ.-мат. наук, доцент кафедры «Технологии программирования»




                                 Санкт-Петербург
                                      2007


УМП Технологические подходы к разработке ПО                                                                                                      2


Оглавление 

Введение .........................................................................................................................................4
  Цели и задачи дисциплины.......................................................................................................4
  Связь с другими дисциплинами ...............................................................................................4
  Структура и особенности курса ...............................................................................................4
Тема 1. Технология программирования ......................................................................................6
  1.1. Назначение технологии программирования ....................................................................6
  1.2. История развития технологии программирования..........................................................7
     1.2.1. Дореволюционный период .........................................................................................7
     1.2.2. «Революция в программировании» ...........................................................................8
     1.2.3. Послереволюционный период..................................................................................10
  1.3. Типы программных проектов..........................................................................................11
  1.4. Составные части технологии программирования .........................................................11
  1.5. Проект, продукт, процесс и персонал.............................................................................12
Тема 2. Жизненный цикл программы........................................................................................13
  2.1. Циклический характер разработки .................................................................................13
  2.2. Основные понятия технологии программирования......................................................16
     2.2.1. Процессы и модели ...................................................................................................17
     2.2.2. Фазы и витки ..............................................................................................................18
     2.2.3. Вехи и артефакты ......................................................................................................19
     2.2.4. Заинтересованные лица и работники.......................................................................19
  2.3. Выявление и анализ требований .....................................................................................20
     2.3.1. Требования к программному обеспечению ............................................................20
     2.3.2. Схема разработки требований..................................................................................22
     2.3.3. Управление требованиями........................................................................................22
  2.4. Архитектурное и детальное проектирование ................................................................24
     2.4.1. Архитектурное проектирование...............................................................................25
     2.4.2. Детальное проектирование .......................................................................................26
  2.5. Реализация и кодирование...............................................................................................27
  2.6. Тестирование и верификация ..........................................................................................28
     2.6.1. Процесс контроля качества ......................................................................................28
     2.6.2. Методы «белого ящика» и «черного ящика»..........................................................29
     2.6.3. Инспектирование и обзоры ......................................................................................29
     2.6.4. Цели тестирования ....................................................................................................31
     2.6.5. Верификация, валидация и системное тестирование.............................................31
  2.7. Сопровождение и продолжающаяся разработка ...........................................................32
Тема 3. Модели процесса разработки........................................................................................34
  3.1. Водопадные и конвейерные модели ...............................................................................34
  3.2. Спиральные и инкрементные модели.............................................................................35
  3.3. Гибкие модели процесса разработки ..............................................................................37
  3.4. Конструирование модели процесса ................................................................................38
     3.4.1. Выявление требований к процессу ..........................................................................39
     3.4.2. Используемые фазы, вехи и артефакты...................................................................40
     3.4.3. Выбор архитектуры процесса...................................................................................44
     3.4.4. Порядок проведения типового проекта...................................................................54
     3.4.5. Документированные процедуры ..............................................................................71
     3.4.6. Выводы .......................................................................................................................73
Тема 4. Модели команды разработчиков ..................................................................................74
  4.1. Коллективный характер разработки ...............................................................................74


УМП Технологические подходы к разработке ПО                                                                                                  3
     4.1.1. Оптимальный размер команды ................................................................................74
     4.1.2. Подчиненность участников проекта........................................................................74
     4.1.3. Развитие команды и развитие персонала ................................................................75
     4.1.4. Специализация, кооперация и взаимодействие......................................................75
  4.2. Иерархическая модель команды .....................................................................................76
  4.3. Метод хирургической бригады .......................................................................................77
  4.4. Модель команды равных .................................................................................................79
  4.5. Конструирование модели команды ................................................................................80
     4.5.1. Особенности организации и требования к команде...............................................81
     4.5.2. Архитектура модели команды..................................................................................81
     4.5.3. Функции, роли и должности.....................................................................................82
     4.5.4. Статико-динамическая структура команды............................................................84
     4.5.5. Распределение полномочий и ответственности .....................................................87
     4.5.6. Достоинства и недостатки модели команды...........................................................88
Тема 5. Дисциплина программирования ...................................................................................89
  5.1. Природа программирования............................................................................................89
     5.1.1. Наука программирования .........................................................................................90
     5.1.2. Искусство программирования..................................................................................91
     5.1.3. Ремесло программирования......................................................................................91
  5.2. Парадигмы программирования .......................................................................................92
     5.2.1. Структурное программирование..............................................................................92
     5.2.2. Логическое программирование ................................................................................95
     5.2.3. Объектно-ориентированное программирование ....................................................97
  5.3. Циклы повышения продуктивности ...............................................................................99
     5.3.1. Продуктивность программирования .......................................................................99
     5.3.2. Спецификации и модели.........................................................................................101
  5.4. Программная архитектура .............................................................................................103
     5.4.1. Событийное управление .........................................................................................104
     5.4.2. Архитектура клиент/сервер ....................................................................................106
     5.4.3. Службы .....................................................................................................................107
     5.4.4. Трехслойная архитектура .......................................................................................109
  5.5. Проектирование программ ............................................................................................109
     5.5.1. Концептуальное проектирование...........................................................................110
     5.5.2. Логическое проектирование ...................................................................................111
     5.5.3. Детальное проектирование .....................................................................................113
  5.6. Кодирование....................................................................................................................117
     5.6.1. Программирование по образцу ..............................................................................118
     5.6.2. Образцы проектирования........................................................................................119
     5.6.3. Доказательное программирование.........................................................................122
     5.6.4. Программирование вширь ......................................................................................123
     5.6.5. Форматирование кода .............................................................................................124
  5.7. Тестирование и отладка .................................................................................................129
     5.7.1. Критерии приемлемости .........................................................................................130
     5.7.2. Виды тестирования..................................................................................................131
     5.7.3. Методы отладки.......................................................................................................132
  5.8. Инструментальные средства .........................................................................................133
  5.9. Выводы ............................................................................................................................134
Предметный указатель ..............................................................................................................135
Литература .................................................................................................................................137


УМП Технологические подходы к разработке ПО                                       4

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

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

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

                        Структура и особенности курса
Курс имеет следующую структуру.


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


УМП Технологические подходы к разработке ПО                                              6

         Тема 1. Технология программирования
Процесс создания программ для компьютеров обычно называют программированием. Од-
нако этим же словом часто обозначают и другие виды человеческой деятельности. На-
пример, «математическое программирование» – раздел математики, или «политическое
программирование» – словосочетание, которое нетрудно встретить в средствах массовой
информации. Если речь идет именно о создании программ для компьютеров, то во избе-
жание неоднозначности используют оборот разработка программного обеспечения. В
этом курсе слово программирование используется только в смысле «процесс разработки
программного обеспечения», а потому для краткости и удобочитаемости везде, где это
возможно, используется термин «программирование» как синоним оборота «процесс раз-
работки программного обеспечения».
Программирование (computer programming) — это процесс создания программистом (че-
ловеком) программы (информационной структуры), предназначенной для последующего
исполнения (компьютером).
Как правило (в большинстве случаев), интерес представляет не только факт исполнения
программы компьютером, но и использование результата исполнения человеком. Однако
можно указать и несколько исключений, например, программа первоначальной загрузки
операционной системы, так что включение ссылки на использование результатов испол-
нения программы человеком ограничило бы общность приведенного определения без яв-
ной необходимости. Мы не включаем указание на использование результатов исполнения
программы человеком в явном виде в определение, но неявно подразумеваем, что в ти-
пичном случае такое использование имеет место.
Таким образом, в процессе программирования присутствуют явно субъект, объект и цель.
В типичном (и привычном) случае субъектом является человек, который ведет процесс
осознанно, объектом является текст на формальном языке, а целью является такое выпол-
нение программы, которое в свою очередь имеет явно обозначенную цель. Далее, если яв-
но не оговорено противное, подразумевается именно этот типичный случай.
Замечание
    Спектр вариантов процесса программирования отнюдь не исчерпывается рассматриваемым
    типичным случаем. Например, программирующим субъектом может быть не человек, а дру-
    гая программа (автоматический синтез программы по формальным спецификациям или по
    примерам), процесс программирования может быть не осознан (запись макроса с помощью
    макрорекордера). Программа может быть выражена на нелинейном языке (нейрокомпьютер)
    или же не иметь материального носителя (план действий в голове пользователя графическо-
    го интерфейса). Целью программирования может быть публикация текста программы (а не
    получение результата ее выполнения) или получение невыполнимой программы (защита от
    несанкционированного копирования).
В настоящее время эффективность и результативность программирования в целом остав-
ляет желать лучшего. Несмотря повсеместное распространение компьютеров и очевидное
улучшение их программного обеспечения, остается весьма значительной доля проектов по
разработке программного обеспечения, которые нельзя считать вполне успешными. Наря-
ду с эффектными достижениями имеются и сравнительно многочисленные досадные не-
удачи. К сожалению, до сих пор слишком часто приходится делать вывод, что программи-
рование рискованно, программы ненадежны, а программисты неуправляемы.

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


УМП Технологические подходы к разработке ПО                                          7
лины. Дисциплина, которая направлена, прежде всего, на решение внутренних проблем
программирования, получила название технологии программирования, или инженерии
программных систем. Последний термин является точным переводом английского терми-
на software engineering.
Технология программирование (software engineering) – это совокупность методов и
средств, позволяющая наладить производственный процесс создания программного обес-
печения.
В этом определении особо следует подчеркнуть слово «производственный», которое от-
ражает важнейшую особенность технологии программирования. Например, в официаль-
ном определении родственной дисциплины – информатики (computer science) указание на
производственный характер дисциплины отсутствует.
Информатика (computer science) – это дисциплина, изучающая общие свойства инфор-
мации, а также вопросы, связанные с ее сбором, хранением и обработкой.
Поскольку сбор, хранение и обработка информации в настоящее время выполняются,
главным образом, с помощью компьютеров, а компьютеры не могут работать без про-
граммного обеспечения, информатика оказывается неразрывно связанной с программиро-
ванием.
Соотношение технологии программирования (software engineering) и информатики (com-
puter science) трудно описать в двух словах. Информатика – более общее понятие, но счи-
тать технологию программирования просто частью информатики было бы не совсем вер-
но. В современной практике применения этих отраслей знания те вопросы, которые имеют
преимущественно теоретический характер, принято относить к информатике, а сугубо
практические приемы принято считать элементами технологии программирования. На-
пример, методы математического доказательства правильности программ обычно относят
к теоретической информатике, а методы тестирования – к технологии программирования,
хотя это различные методы решения одной и той же задачи. Конечно, это отделение тех-
нологии программирования от информатики несколько условно и строгой границы здесь
нет, но тенденция очевидна.

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

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


УМП Технологические подходы к разработке ПО                                                                  8
Компьютеры были дороги, их количество было невелико, и применялись они, в основном,
для специальных целей (оборона, космос и т.п.). Следует подчеркнуть, что в это время
программирование не являлось массовой профессий, и было, в основном уделом талант-
ливых и высокообразованных одиночек, специалистов в той предметной области, где
применялись компьютеры. Можно сказать, что хотя программирование и было высоко
профессиональным, оно не было промышленным.
Из основных технологических идей, появившихся в этом период, следует отметить появ-
ление языков программирования и компиляторов и явное осознание важности модульного
программирования, как основы для накопления библиотек программ и их повторного ис-
пользования.

                         1.2.2. «Революция в программировании»
К середине шестидесятых годов ситуация изменилась. Компьютеры стали дешевле, ком-
пактнее и производительнее. Сфера применения существенно расширилась, они стали в
массовом порядке применяться в промышленности, науке, образовании. Наряду со слож-
ными и ответственными программами (о самом существовании которых не везде можно
было говорить вслух) появились, и в гораздо большем количестве, обычные программы
для автоматизации производственной и иной повседневной деятельности.1 Эти обычные
программы изготавливались практически в каждой организации, имевшей компьютеры,
независимо от основного профиля ее деятельности. Эксплуатация программного обеспе-
чения перестала быть таинством, доступным только посвященным, программирование
стало массовой профессией.
Заметим, что общество в целом не сразу осознало социальные последствия происходяще-
го. В это время уже хорошо были известны положительные и отрицательные последствия
других видов инженерно-технической деятельности. К проектированию таких изделий,
как мосты и самолеты, любители уже не допускались (все понимали, что плохо спроекти-
рованный мост может обрушиться, а самолет упасть, и это недопустимо). Проектирование
в традиционных инженерных областях велось в соответствии с многочисленными стан-
дартами, правилами, регламентами и инструкциями, в которых число требований к каче-
ству исчисляется сотнями и тысячами. Иное дело программирование: программисты в то
время в большинстве своем и не слыхивали о каких-то стандартах качества своей работы.
Да и действительно: подумаешь, программа расчета зарплаты «зависла» — это же не са-
молет упал!
Но низкая надежность — это только одна сторона проблемы. Хорошая технология не
только улучшает качество, она еще и увеличивает производительность. А плохая техноло-
гия — уменьшает. Отсутствие явно выписанной технологии — это самая плохая техноло-
гия. В начале шестидесятых технология программирования, в современном понимании и
как массовое явление, отсутствовала. Реальная средняя производительность труда была
низкой, что хорошо видно из отраслевых нормативов производительности программиро-
вания тех лет. Еще хуже дело обстояло с результативностью. Именно тогда были проведе-
ны первые методически обоснованные исследования и появились отчеты, из которых сле-
довало, что менее половины проектов по разработке программ являются успешными.2 В
средствах массовой информации появились мрачные прогнозы (полученные простой экс-
траполяцией наблюдаемых значений показателей), что к концу двадцатого века все трудо-
способное население будет программировать, и программ будет не хватать. Кризис про-
граммирования был налицо.
Очень быстро было предложено множество идей и подходов для выхода из кризиса.


1
 Сейчас такие программы называются бизнес-приложениями.
2
 Проект считается успешным, если в плановые сроки в рамках выделенного бюджета удается получить запланирован-
ный результат. В противном случае (то есть сроки не выдержаны и/или бюджет перерасходован и/или сделано не все)
проект не считается успешным.


УМП Технологические подходы к разработке ПО                                                                      9
Традиционно принято считать, что «первой ласточкой», положившей начало лавинооб-
разному процессу сотворения технологии программирования, было письмо Э. Дейкстры в
журнал Communications of the ACM в 1968 году.3 Очевидно, что письмо Дейкстры подей-
ствовало как катализатор, как манифест – за несколько лет были опубликованы, обсужде-
ны и практически внедрены следующие фундаментальные идеи технологии программиро-
вания.
    • Конструирование программ методом пошагового уточнения.
    • Проектирование сверху вниз и снизу вверх.
    • Структурное программирование.
    • Метод хирургической бригады.
    • Водопадная модель процесса разработки.
    • Жизненный цикл программного продукта.
По каждому направлению традиция называет основоположников (авторов наиболее заме-
ченных из ранних публикаций), но фактически эти технологические идеи явились плода-
ми совместных усилий, сотни людей внесли весомый вклад в это стремительное развитие.
Перечислять все фамилии в учебнике нет возможности, но, по крайней мере три фамилии
«отцов-основателей» технологии программирования необходимо упомянуть.
Э́дсгер Ви́бе Де́йкстра (нидерл. Edsger Wybe
Dijkstra; 11 мая 1930, Роттердам (Нидерлан-
ды) — 6 августа 2002) — выдающийся ни-
дерландский учёный, идеи которого оказали
огромное влияние на развитие компьютер-
ной индустрии.
Известность Дейкстре принесли его работы в
области применения математической логики
при разработке компьютерных программ. Он
активно участвовал в разработке языка про-
граммирования Алгол. Будучи одним из ав-
торов концепции структурного программи-
рования, он проповедовал отказ от использо-
вания оператора GOTO. Также ему принад-
лежит идея применения семафоров для син- Дейкстра Э. Дисциплина программирования.
хронизации процессов в многозадачных сис- М.: Мир, 1978, 275 с.
темах и алгоритм нахождения кратчайшего Дал У., Дейкстра Э., Хоор К. Структурное
пути на ориентированном графе с неотрица- программирование. М.: Мир, 1975. 247 с.
тельными весами рёбер. В 1972 году Дейкст-
ра стал лауреатом премии Тьюринга.
                                              Никлаус Вирт (нем. Niklaus Wirth, род. 15
                                              февраля 1934) — швейцарский учёный, спе-
                                              циалист в области информатики. Ведущий
                                              разработчик языков программирования Пас-
                                              каль, Модула-2, Оберон. Обладатель премии
                                              Тьюринга 1984 года.


Вирт Н. Систематическое программирова-
ние. Введение. М., Мир, 1977. 184 с.
Вирт Н. Алгоритмы + структуры данных =
программы. М., Мир, 1978. 410 с.

3
  Оригинальное название письма звучало так «A Case Against the Go To Statement». Редактор журнала, а им был Н. Вирт
(!) предложил бессмертное название «Go To Statement Considered Harmful», под которым письмо и было опубликовано.


УМП Технологические подходы к разработке ПО                                                                  10
Фредерик Филипс Брукс мл., род. 19 апреля
1931 – американский менеджер, инженер и
ученый, наиболее известен как руководитель
разработки операционной системы OS/360. В
1975 году, обобщая опыт этой работы, напи-
сал книгу «Мифический человеко-месяц».
Повторно книга вышла в виде юбилейного
издания в 1995-ом, вместе с комментариями
автора и новым эссе «Серебряной пули нет».
Брукс насмешливо называл свою книгу
«библией программной инженерии»: «все её
читали, но никто ей не следует!»
Фредерик Брукс является лауреатом премии
Тьюринга 1999 года.

                                                          Брукс-мл. Ф. П. Как проектируются и созда-
                                                          ются программные комплексы. М.: Наука,
                                                          1975; новое издание перевода: Мифический
                                                          человеко-месяц. СПб.: СИМВОЛ+, 1999.


                             1.2.3. Послереволюционный период
Революция была успешной — в исторически кратчайшие сроки технология программиро-
вания оформилась как инженерная дисциплина, и некоторые ее положения повсеместно
были внедрены в практику. Результаты проявились незамедлительно — средняя произво-
дительность труда в программировании увеличилась в несколько раз. Повысилась и на-
дежность, за счет развития практики систематического тестирования. Кризис разрешился.
Развитее технологии программирования продолжалось, но уже не революционным, а эво-
люционным путем. Взятые за основу, идеи 60-х годов развивались и совершенствовались.
Структурное программирование переросло в объектно-ориентированное, на смену водо-
падным моделям процесса пришли итерационные, метод хирургической бригады дал на-
чало целому спектру моделей команды разработчиков. Но эти подходы не были револю-
ционно новыми, они улучшали и совершенствовали уже известное.4
Однако время не стоит на месте. Аппаратное обеспечение стремительно прогрессирует.
Сфера применения компьютеров расширяется все больше. Уже сейчас без них нигде нель-
зя обойтись, компьютеры применяются повсеместно. Пока еще слово «компьютер» ассо-
циируется у среднего жителя нашей планеты с образом персонального компьютера, с эк-
раном и клавиатурой, а программирование ассоциируется с программированием на персо-
нальном компьютере и для персонального компьютера. Но это только пока. В самое бли-
жайшее время компьютеры из устройств, которые используются очень часто и во многих
местах, превратятся в устройства, которые используются везде и всегда. Речь идет о том,
что сейчас называется встроенными системами. Персональные компьютеры выпускаются
миллионами штук в год. Встроенные системы выпускаются миллиардами штук в год, а
будут выпускаться многими миллиардами! И все эти устройства требуют для своей рабо-
ты программного обеспечения. Не следует думать, что программировать эти устройства
легко. Напротив. Уже сегодня возможности компьютера, скрытого в вашем мобильном
телефоне, превосходят возможности того компьютера, которым пользовался Дейкстра,
когда писал свое знаменитое письмо. Вполне вероятно, что консервативного усовершен-
ствования старых идей, которого пока хватало для организации программирования персо-

4
   Из всего спектра технологий программирования, появившихся за последнее время, только для аспекто-
ориентированного программирования трудно указать предтечу в пионерских работах конца 60-х начала 70-х годов. Все
остальные «новинки» последних лет – прямые аналоги либо хорошо забытых, либо малоизвестных работ прошлых лет.



    
Яндекс цитирования Яндекс.Метрика