Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Л. С. Зеленко



1. Энциклопедический словарь. М.; Сов. экцикл., 1952.

2. Кушнер В. С., Распутин Ю. П. Теория эксперимента. Новосибирск; Омск, 1976.

3. Политехнический словарь. М.: Сов. энцикл., 1977.

4. Гнеденко Б. В., Беляев Ю. К., Соловьев А. Д. Математические методы в теории надежности. М.: Наука, 1965.

5. Шор Я. Б., Кузьмин Ф. В. Таблицы для анализа и контроля надеж­ности. М.: Сов. радио, 1968.

6. Наумов В. А., Ефремов В. В., Чурсин А. А. Теория и практические вопросы работоспособности элементов машин приборов и аппаратуры. Иркутск: Изд. ИрГУ, 1984.

7. Кандаков Н. И. Логический словарь-справочник. М.: Наука, 1976.

8. Еремин А. Н. Физическая сущность процессов при резании метал­лов. M.: Машгиз, 1951.

9. Зайденберг А. П. Павлович И. П. Законы распределения случайных величин/ ОМИИТ. Омск, I975.

10.Щиголев Б. М. Математическая обработка результатов наблюдений. М.: Физматгиз, 1960.

11.Бахвалов Н. С. Численные методы. М.: Наука, 1975.

12.Демидович Б. П., Марон И. А. Основы вычислительной математики. М.:-Наука, 1970.

13.Вентцель Е. С. Теория вероятностей. М.:Наука, 1969.

Л. С. Зеленко

З 484 Технологии программирования и программная инженерия (часть 1): учебное пособие/ Л. С. Зеленко. – Самара: Изд-во
Самар. гос. аэрокосм. ун-та, 2006. - 96 с.: ил.

ISBN

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

Рекомендуется для использования в учебном процессе специальностей 010501 – «Прикладная математика и информатика», 010600 – «Прикладная математика и физика», а также студентам, обучающимся по специальностям, связанным с информатикой, информационными технологиями и разработкой прикладных программных систем.

УДК 004.4 (075)

ББК

ISBN © Зеленко Л.С., 2006
© Самарский государственный
аэрокосмический университет, 2006


Оглавление

Предисловие. 4

Введение. 5

1 Технологии программирования. Основные понятия и определения. 8

1.1 Основные понятия и определения. 8

1.2 Технологии программирования: этапы развития и базовые методологии программирования 15

1.3 Иерархия понятий в технологии программирования. 28

2 Общие принципы разработки сложных программных систем.. 37

2.1 Особенности современных программных систем как объектов разработки. 37

2.2 Показатели качества программных систем.. 39

2.3 Проблемы разработки сложных программных систем.. 43

2.4 Структура сложных систем.. 46

2.5 Основные подходы к созданию сложных программных систем.. 48

2.5.1 Структурный подход к разработке программных систем.. 50

2.5.2 Объектный подход к разработке программных систем.. 54

3 Жизненный цикл программных систем.. 59

3.1 Стандарты и проблемы жизненного цикла ПО.. 59

3.2 Жизненный цикл и этапы разработки программного обеспечения. 63

3.2.1 Инженерные процессы.. 67

3.3 Модель жизненного цикла ПО.. 69

3.3.1 Каскадная модель разработки ПО.. 70

3.3.2 Спиральная модель разработки ПО.. 74

3.3.3 Другие типы моделей жизненного типа. 79

3.3.4 Технология быстрой разработки приложений RAD.. 82

Список литературы.. 87

Список терминов. 89


предисловие

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

Появление в новом государственном образовательном стандарте (направления 510200 «Прикладная информатика и математика», 511900 «Информационные технологии», 552800 «Информатика и вычислительная техника») дисциплины «Технологии программирования» позволило в полном объеме рассмотреть все вопросы, связанные с разработкой сложных программных систем, до этого элементы технологий рассматривались лишь в курсе «Алгоритмические языки и программирование».

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

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


введение

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

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

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

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

§ эффективностью – результаты должны отвечать заданным требованиям и стандартам в условиях ограниченных ресурсов;

§ практичностью – результаты должны иметь конкретных заказчиков;

§ фундаментальностью – результаты должны базироваться на знаниях фундаментальных наук;

§ наследуемостью – результаты должны обобщать накопленный опыт, исключая деятельность «c нуля»;

§ сопровождаемостью – результаты, находясь в эксплуатации, обязательно должны обслуживаться.

Начало работ в данной области относится к концу 60-х – началу 70-х годов, когда рост сложности программных систем (ПС) стал приводить к снижению качества их функционирования и появлению большого количества ошибок. Сложность ПС постоянно увеличивалась из-за:

§ увеличения объемов кода (миллионы строк);

§ увеличения количества связей между элементами систем;

§ увеличения количества разработчиков (сотни человек);

§ увеличения количества пользователей (сотни и тысячи).

Первые существенные результаты при решении данной проблемы были получены А. П. Ершовым, В. М. Глушковым, Е. А. Жоголевым, В. В. Липаевым, в работах которых описаны базовые методологии и технологии программирования того времени: структурное программирование и методология процедурной (алгоритмической) декомпозиции. К 90-м годам появилась новая парадигма в программировании, построенная на объектной декомпозиции предметной области, которая привела к методологии объектно-ориентированного анализа и проектирования. Появляется понятие программной инженерии как практического приложения научных знаний в проектировании и конструировании ПС, а также для создания документации, необходимой для их разработки, эксплуатации и сопровождения.

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

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


1 технологии программирования. Основные понятия и определения

Новым видом современных изделий является программный продукт (ПП) – комплексы программ управления и обработки информации. Для эффективного производства программного продукта необходимо создание и внедрение современных технологий, позволяющих создавать сложные комплексы программ в сжатые сроки и при минимальных затратах труда [21].

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

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

1.1 Основные понятия и определения

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

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

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

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

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

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

Примечание: Принято считать, что сам термин алгоритм происходит от имени персидского математика Абу-Ждафара Мохаммеда Ибн-Мусы Аль-Хорезми, который в 825 г. описал правила выполнения арифметических действий в десятичной системе счисления. Понятие алгоритма стало предметом соответствующей теории – теории алгоритмов, которая занимается изучением общих свойств алгоритмов, какой-то период времени языки программирования назывались алгоритмическими.

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

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

Программирование (programming) (в широком смысле) – все технические операции, необходимые для создания программы, включая анализ требований и все стадии разработки и реализации.

Программирование (в узком смысле) – процесс кодирования и отладки программы в рамках реального проекта.

Целью программирования является описание процессов обработки данных (в дальнейшем - просто процессов). Согласно IFIP (Международная федерация по обработке информации) и ICC (Международный вычислительный центр) данные (data) - это представление фактов и идей в формализованном виде, пригодном для передачи и переработки в некоем процессе, а информация (information) - это смысл, который придается данным при их представлении.

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

Основоположник кибернетики Н. Винер считал, что «Информация – это информация, а не энергия и не материя», и поставил информацию в один ряд с другими наиболее общими философскими категориями.

В словаре русского языка С.И. Ожегов [20] определил информацию как: 1) сведения об окружающем мире и протекающих в нем процессах; 2) сообщения, осведомляющие о положении дел, о состоянии чего-либо.

В законе «Об информации, информационных технологиях и защите информации» [11] дается следующее определение информации: «Информация – сведения о лицах, предметах, фактах, событиях, явлениях и процессах независимо от формы их представления».

Итак, данные участвуют в некотором информационном процессе (information process) или в обработке данных. Обработка данных (data processing) это выполнение систематической последовательности действий с данными. Данные представляются и хранятся на так называемых носителях данных. Совокупность носителей данных, используемых при какой-либо обработке данных, называется информационной средой (data medium). Набор данных, содержащихся в какой-либо момент в информационной среде, называется состоянием этой информационной среды. Поэтому процесс можно определить как последовательность сменяющих друг друга состояний некоторой информационной среды [10].

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

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

Примечание: Хотя программирование – весьма специфический вид деятельности, вместе с тем технология программирования не может не иметь хотя бы несколько общих черт с технологиями другого рода, например, в машиностроении, легкой промышленности и т.д. Поэтому дадим сначала определение технологии вообще.

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

Технология программирования (programming technology) – это совокупность методов и средств, используемых в процессе разработки программных продуктов, представляет собой набор технологических инструкций, включающих в себя:

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

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

§ описание самих операций, где для каждой операции выделены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки и т.п. (рисунок 1) [6].

 
 


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

Непрерывное увеличение объемов и сложности программных комплексов, а также рост требований к их качеству привели к тому, что простейшие технологии программирования небольших программ в настоящее время развились в сложные технологии проектирования, разработки и сопровождения интегрированных комплексов программ (рисунок 2).


Любая технология имеет две стороны:

§ принципиальную (внутреннюю);

§ организационно-производственную (внешнюю).

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

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

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

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

Методология программирования – совокупность механизмов, применяемых в процессе разработки программного обеспечения и объединенных одним общим философским подходом [4][1].

В литературе широко используется близкое к технологии программирования понятие программной инженерии (software engineering), определяемой как систематический подход к разработке, эксплуатации, сопровождению и изъятию из обращения программных средств [9][2]. Главное различие между технологией программирования и программной инженерией как дисциплинами для изучения заключается в способе рассмотрения и систематизации материала. В технологии программирования акцент делается на изучении процессов разработки ПП (технологических процессов) и порядке их прохождения - методы и инструментальные средства разработки ПП используются в этих процессах (их применение и образует технологические процессы). Тогда как в программной инженерии изучаются различные методы и инструментальные средства разработки ПС с точки зрения достижения определенных целей – эти методы и средства могут использоваться в разных технологических процессах (и в разных технологиях программирования) [36].

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

§ рассматривать все процессы разработки ПС, начиная с момента возникновения замысла ее создания до написания необходимой документации (программной, системной, для пользователя);

§ рассматривать не только вопросы построения программных конструкций и выбора структур данных, но и вопросы описания функций и принимаемых решений с точки зрения их человеческого (неформального) восприятия;

§ использовать ряд базовых принципов (о них будет идти речь позже) для достижения поставленной цели – выпуска надежной ПС.

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

1.2 Технологии программирования: этапы развития и базовые методологии программирования

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

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

В 50-е годы мощность компьютеров (первого поколения) была невелика, а программирование для них велось в основном в машинном коде. Программирование было искусством: программисту необходимо было отслеживать не только последовательность выполняемых операций, но и местоположение данных при программировании (рисунок 3).

 
 


Примечание: В соответствии с принципами фон Неймана программы и данные хранились в одной и той же памяти (концепция хранимой программы) и выполнялись последовательно на одном процессоре.

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

В 60-е годы можно было наблюдать бурное развитие и широкое использование языков программирования высокого уровня (Fortran, Algol-60, PL/1), значение которых в технологии программирования явно преувеличивалось. Появление в этих языках средств реализации механизма подпрограмм стало революционным. Это позволило создать большие библиотеки расчетных и служебных подпрограмм, которые можно было сохранять и затем использовать в разных программах.

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

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

 
 


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

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

 
 


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

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

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

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

Примечание: Появление и интенсивное использование условных операторов и оператора безусловного перехода goto стало предметом острых дискуссий среди специалистов по программированию. Дело в том, что бесконтрольное применение в программе оператора безусловного перехода goto способно серьезно осложнить понимание кода. Ситуация казалась настолько драматичной, что в литературе зазвучали призывы исключить оператор goto из языков программирования. Именно с этого времени принято считать хорошим стилем программирования — программирование без goto [15].

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

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

Появились языки программирования 3-го поколения (Clu, Pascal, Modula-2), отличительной особенностью которых явилось наличие развитых средств абстрагирования типов для структурирования данных. Появление пользовательских типов позволило уменьшить количество ошибок при работе с глобальными данными. Стала развиваться технология модульного программирования (modular programming), которая предполагает объединение нескольких подпрограмм, использующих одни и те же данные, в отдельно компилируемые модули, связи между которыми устанавливались через специальный интерфейс, а доступ к реализации регулировался механизмами импорта-экспорта путем соответствующих деклараций (рисунок 6).

 
 


Примечание: Модульное программирование стало удачной основой для реализации инкапсуляции и механизма импорта-экспорта. Инкапсуляция позволила рассматривать модуль как программный эквивалент определенного класса объектов, содержащий в себе всю информацию об объектах этого класса[14][3].

Таким образом, технология программирования в это время интенсивно развивается в следующих направлениях:

§ широкое внедрение нисходящей функциональной разработки ПС и структурного программирования;

§ развитие абстрактных типов данных и модульного программирования (в частности, возникновение идеи разделения спецификации и реализации);

§ исследование проблем обеспечения надежности и мобильности ПС;

§ создание методики управления коллективной разработкой ПС;

§ появление инструментальных программных средств (программных инструментов) поддержки технологии программирования.

80-е годы характеризуются широким внедрением персональных компьютеров во все сферы человеческой деятельности и тем самым созданием обширного и разнообразного контингента пользователей ПС, что, в свою очередь, сместило акценты на решаемые задачи (на первый план стали выходить задачи обработки и манипулирования данными). Стало очевидным, что традиционные методы процедурного программирования не способны справиться ни с растущей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Такой методологией стало объектно-ориентированное программирование (ООП) [4].

В объектно-ориентированном подходе к разработке программ центральным является понятие класса объектов. Класс (class) определяется как множество объектов, обладающих внутренними (имманентными) свойствами, которые играют роль классообразующих признаков и присущи любому объекту класса. Классы образуют иерархию с наследованием свойств, основанных на таксономических моделях обобщения [14].

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

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

Основными принципами (парадигмами) ООП являются:

§ инкапсуляция (encapsulation) – объединение в классе данных (свойств) и методов (процедур обработки), сокрытие отдельных деталей внутреннего устройства классов от внешних по отношению к нему объектов или пользователей;

§ наследование (inheritance) – возможность вывода нового класса из старого с частичным изменением свойств и методов;

§ полиморфизм ( polymorphism ) – определение свойств и методов объекта по контексту (полиморфизм подразумевает отделение идеи «что делать» от ее воплощения внутри иерархии класса объектов «как делать»).

Широкое распространение методологии ООП оказало влияние на процесс разработки программ:

§ появляются языки программирования (например, Ада, Object Pascal, C++), учитывающие требования технологии программирования;

 
 


§ процедурно-ориентированная декомпозиция программ уступила место объектно-ориентированной декомпозиции, при которой отдельными структурными единицами программы стали являться не процедуры и функции, а классы и объекты с соответствующими свойствами и методами;

§ программа перестала быть последовательностью предопределенных на этапе кодирования действий, а стала событийно-управляемой (это обстоятельство стало доминирующим при разработке широкого круга современных приложений);

§ развиваются методы и языки спецификации ПС, начинается бурный процесс стандартизации технологических процессов и, прежде всего, документации, создаваемой в этих процессах [18];

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

Середина 80-х годов считается «переломной точкой» в технологии программирования (проектирования) ПС – появилась концепция автоматизированной разработки программного обеспечения (Computer Aided Software/System Engineering, CASE). Предпосылками появления и развития CASE-технологий явилось изменение масштабов создаваемых ПС: рост сложности их функционирования и разработки, а также изменение масштабов показателей качества ПС. Появление первых CASE-средств было встречено с определенной настороженностью. Ранние CASE-средства были простой надстройкой над некоторой системой управления базами данных (СУБД), графическая нотация, реализованная в том или ином CASE-средстве, не имела строгого синтаксиса (в отличие от языков программирования), и попытки предложить подходящий синтаксис для визуального представления концептуальных схем БД были восприняты далеко неоднозначно.

В 90-х годах продолжается бурное развитие технологий программирования, основанных на объектном подходе. Были созданы среды визуального программирования (Borland Delphi, Visual C++, C++ Builder и т.д.), с помощью которых можно спроектировать интерфейс ПС. Но наиболее существенным обстоятельством в развитии методологии ООП явилось осознание того факта, что процесс написания программного кода может быть отделен от процесса проектирования структуры программы, связанного с общим анализом требований к будущей системе, а также с анализом конкретной предметной области, для которой она разрабатывается. Появилась специальная методология, получившая название методологии объектно-ориентированного анализа и проектирования (ООАП).

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

Под предметной областью (application domain) принято понимать ту часть реального мира, которая имеет существенное значение или непосредственное отношение к процессу функционирования программы. Другими словами, предметная область включает в себя только те объекты и взаимосвязи между ними, которые необходимы для описания требований и условий решения некоторой задачи [36]. Для выделения или идентификации компонентов предметной области было предложено несколько способов и правил, а сам процесс получил название концептуализации предметной области. При этом под компонентом понимают некоторую абстрактную единицу, которая обладает функциональностью, т. е. может выполнять определенные действия, связанные с решением поставленных задач.

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

Разделение процесса разработки сложных программных приложений на отдельные этапы способствовало становлению концепции жизненного цикла (ЖЦ) программы (SLC – Software Lifetime Cycle), при этом каждый из них имеет свои методы и средства автоматизации [17][4]:

1. Системный анализ предметной области, планирование, организация и управление разработкой различных версий ПС;

2. Разработка и накопление программных и информационных компонент для их многократного применения в определенной проблемно-ориентированной области создания ПС;

3. Сборка, отладка и испытания базовых версий ПС из подготовленных программных и информационных компонент;

4. Модификация и развитие версий ПС, а также состава их компонент для изменения и расширения характеристик базовых версий ПС.

С середины 90-х годов (и до сегодняшнего времени) CASE-средства становятся основным инструментом, поддерживающим автоматизацию на всех этапах: они обеспечивают унификацию процессов моделирования, автоматизированный анализ системных требований и выработку первичных требований к ПС, обеспечивают конфигурационное управление проектами, модификацией и развитием версий. Постепенно методология ООАП перерастает в методологию системного анализа и системного моделирования.

Методология системного анализа служит концептуальной основой системно-ориентированной декомпозиции предметной области. В этом случае исходными компонентами концептуализации являются системы и взаимосвязи между ними. При этом понятие системы является более общим, чем понятия классов и объектов в ООАП [36]. Результатом системного анализа является построение некоторой модели (model) системы или предметной области.

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

Процесс разработки моделей и их последующего конструктивного применения требовал от разработчиков не только знания общей методологии системного анализа, но и наличия у них соответствующих изобразительных средств или языков для фиксации результатов моделирования и их документирования. Естественный язык не вполне подходил для этой цели, поскольку обладает неоднозначностью и неопределенностью. Для построения моделей были разработаны достаточно серьезные теоретические методы, основанные на развитии математических и логических средств моделирования, а также предложены различные формальные и графические нотации, отражающие специфику решаемых задач. Появление унифицированного языка моделирования (Unified Modeling Language, UML), который первоначально был ориентирован на решение задач первых двух этапов ЖЦ – программ, а затем стал использоваться на всех этапах разработки ПС, было воспринято с большим оптимизмом всеми программистами.

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

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

§ возникает необходимость в защите организации от попыток взлома серверов и проникновения через Интернет вирусов и небезопасных компонентов;

§ возрастает асинхронное использование распределенных ресурсов;

§ появилась необходимость в разработке пользовательских интерфейсов, не требующих специальной установки (обозреватели);

§ появилась необходимость в отделении логики приложений от пользовательского интерфейса;

§ появилась необходимость создания многоуровневых приложений и переноса их на мощные Интернет-серверы;

§ появилась необходимость доступа к функциям приложения с различных клиентских платформ и возможность создания интерактивных приложений, использующих функции WEB-серверов;

§ появилась необходимость и возможность создания ПС, работающих на разных платформах (с некоторыми ограничениями в совместимости и надежности);

§ появилась возможность публиковать огромный объем информации, благодаря снижению стоимости сопровождения увеличивается доступность продукции и объем продаж;

§ появилась возможность создания новых типов приложений как чисто информационных (простой HTML), так и активных (Active X, Java).

Решить эти проблемы во многом удалось за счет применения компонентного подхода к разработке ПС, который предполагает построение программного обеспечения (ПО) из отдельных компонентов – физически отдельно существующих частей ПО, взаимодействующих между собой через стандартизованные двоичные интерфейсы. Объекты-компоненты можно собирать в динамические библиотеки или исполняемые файлы, распространять в двоичном коде и использовать в любом языке программирования, поддерживающем соответствующую технологию (рисунок 8) [12].


Компонентный подход лежит в основе технологий, разработанных на базе COM (C omponent O bject M odelкомпонентная модель объектов) и технологии создания распределенных приложений CORBA (C ommon O bject R equest B roker A rchitectureобщая архитектура с посредником обработки запросов объектов). Эти технологии используют сходные принципы и различаются только особенностями реализации. О них более подробно расскажем в следующих главах.

1.3 Иерархия понятий в технологии программирования

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

 
 


Аппаратура – вот тот «кит», который определяет все новое в программировании. К конечном счете все новые идеи в программировании идут от новых технологий в разработке аппаратного обеспечения ЭВМ. Развитие вычислительной техники происходит скачкообразно, это приводит к пересмотру общих концепций и возникновению новых парадигм программирования. Так, появление прерываний в ЭВМ 2-го поколения привело к мультипрограммированию; создание микропроцессоров к появлению ПЭВМ и к развитию мощных графических средств, и как следствие, к появлению CASE-инструментов; создание многопроцессорных систем привело к появлению параллелизма вычислений; появление мощных ПЭВМ и развитие телекоммуникационных технологий – к появлению сети Интернет и т.д.

Каждое поколение ЭВМ программировалось по-своему. Первое – машинными командами, для второго были созданы первые языки программирования высокого уровня – Fortran, Algol, PL/1 и др., а затем и Pascal, которые оказались подходящими и для программирования ЭВМ третьего поколения. Однако языки программирования постоянно менялись и совершенствовались, чтобы служить адекватными моделями средств программирования. ЭВМ четвертого и пятого поколений были рассчитаны на «интеллектуальные пакеты программ», для которых традиционное программирование не подходит.

Примечание: Синтаксический груз и сейчас отягощает понимание процесса программирования, т. к. при разработке языков программирования первоначально делали упор не на семантику, а на синтаксис (см. п. 1.2).

По одной из классификаций языки программирования делятся на императивные (операторные или процедурные) и декларативные (логические или функциональные) (рисунок 10) [22][5].

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


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

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

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

Было бы неправильным отрывать программы от обрабатываемых ими данных. Хорошо известна формула Н. Вирта «Алгоритмы + структуры данных = программы», отражающая точку зрения, что данные и программы диалектически переплетаются сложным образом [7].

Примечание: Нельзя однозначно утверждать, что приоритетно: программа или данные, так как программы могут использовать в качестве данных другие программы (синтаксические анализаторы, трансляторы, интерпретаторы); данные могут использоваться как программы (в системах программирования, основанных на базах знаний).

 
 


В программировании данные и знания могут выражаться как в виде пассивных декларативных структур данных, так и в виде процедурных знаний по их интерпретации и обработке [23][6]. В традиционных вычислительных машинах фон неймановского типа представление данных и команд на машинном уровне одинаково. В языках высокого уровня, напротив, данные и программа обычно четко отделены друг от друга, поэтому воздействие на программу возможно только с помощью параметров. В логическом программировании в представлении данных и программы наблюдается другая крайность: там нет необходимости отделять данные от программы, программу можно трактовать как совокупность логических правил. В функциональном программировании между программой и данными достигнут некоторый компромисс: форма представления программы и данных едина, и программу можно свободно трактовать как данные, также как данные можно интерпретировать и применять как программу (это решает программист). В объектной модели данные объединяются в единую структуру (класс) вместе с процедурами, их обрабатывающими (см. п.1.2).

Методы программирования включают все варианты структурирования данных. Программы представляют собой в конечном счете конкретные формулировки абстрактных алгоритмов, основанные на конкретных представлениях и структурах данных. Решение о структурировании данных программист обязан принимать с учетом алгоритмов, применяемых к этим данным, и наоборот, структура и выбор алгоритмов существенным образом зависят от структуры данных [8].

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

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

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

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

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

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

Среда программирования образуется из набора различных вспомогательных средств программирования и управления данными, которые часто объединяются интегрированную рабочую среду, в которой различные вспомогательные средства можно вызывать друг из друга, не обращаясь к операционной системе. Основная цель создания среды программирования – поддержание процессов программирования (кодирования), отладки и тестирования ПС. Наиболее известными средами программирования являются среды визуального программирования Borland Delphi (язык программирования Object Pascal), MS Visual C++, Power Builder, MS Visual Basic, MS Visual Studio и т.д.

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

Контрольные вопросы к главе 1:

1. Дайте определения понятий алгоритм, программирование, информация.

2. Что включает в себя понятие «технология программирования»?

3. Чем отличается технология программирования от методологии программирования и программной инженерии?

4. Перечислите основные этапы развития технологии программирования и соответствующие им методологии программирования.

5. Расскажите про эволюцию в архитектуре программ.

6. В чем отличие методологии структурного проектирования программных систем от методологии объектно-ориентированного проектирования?

7. В чем особенности методологии объектно-ориентированного анализа и проектирования?

8. Что такое парадигма программирования? Перечислите их основные особенности.

9. Какие парадигмы программирования лежат в основе объектно-ориентированного программирования?

10. Что такое предметная область? В чем заключается принцип концептуализации предметной области?

11. Приведите классификацию языков программирования. В чем их особенности?


2 ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ сложных ПРОГРАММНЫХ систем

Как уже говорилось ранее (см. п. 1.1), программирование – специфический вид интеллектуальной деятельности человека, разработка программного обеспечения имеет ряд специфических особенностей [10]:

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

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

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

§ Программная система при своей эксплуатации не расходуется и не расходует используемых ресурсов.

2.1 Особенности современных программных систем как объектов разработки

Разработка программного обеспечения за последние 20 лет сильно изменилась (см. п. 1.2). Обновились традиционные методы управления, которые теперь учитывают накопленный за долгое время опыт. Раньше считалось, что нужно разработать как можно больше функций за наименьшее время, и именно по этой причине современные программные продукты так сложны. Однако давление конкуренции, растущее влияние пользователей, постоянное изменение ситуации на технологическом рынке и непрестанно развивающиеся технологии привели к тому, что организации стремятся упростить процесс разработки. Главное же, что побудило их к этому – провал огромного количества проектов. Сегодня цель разработчиков – создать как можно лучшую программу при минимуме затрат, а их девиз – «выпустить нужный продукт в нужное время» [30].

В объектах программной инженерии (ПС) за последние годы произошли следующие коренные изменения:

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

§ увеличилась трудоемкость создания таких комплексов ПС и БД и наполнения их информацией (сотни человеко-лет), длительность жизненного цикла– несколько лет или десятилетий, ПС часто функционируют в нескольких версиях, существенно различающихся функциональными характеристиками и качеством;

§ комплексы взаимодействующих ПС и информационных массивов БД могут размещаться на различных по архитектуре удаленных аппаратных и операционных платформах и переноситься между ними;

§ для обеспечения мобильности начинает применяться стандартизация структуры и интерфейсов их компонентов с операционной и внешней средой;

§ формализуется спектр показателей качества, резко возросли требования к надежности и безопасности функционирования ПС.

Перечисленные выше изменения объектов и проблемы обеспечения их ЖЦ вызвали ряд принципиальных изменений в методологии их создания и развития:

Ø на смену индивидуальному программированию приходит методология коллективной, индустриальной разработки с профессиональным разделением труда;

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

Ø высокая стоимость и большие ресурсы привели к необходимостидетальноготехнико-экономического анализа и обоснования проектов до начала их осуществления;

Ø создание ПС не завершается после сертификации первой версии, а, как правило, они длительное время развиваются и модифицируются, превращаясь в серию версий;

Ø для согласования взаимодействия многих программных компонентов и информационных массивов с операционной средой и обеспечения их мобильности, начала применя





Дата публикования: 2014-11-03; Прочитано: 705 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.052 с)...