Технологии разработки программных систем

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

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 23.09.2017
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

им. А.Н. ТУПОЛЕВА

Кафедра прикладной математики и информатики им. Ю.В. Кожевникова

ТЕХНОЛОГИИ РАЗРАБОТКИ ПРОГРАММНЫХ СИСТЕМ

Комплексное учебное пособие

А.И. Рахматуллин, Д.С. Гущина

Казань 2008

Содержание

Введение

Раздел 1. Основы разработки ПО

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

1.2 Понятие «программирование»

1.3 Области разработки ПО

Раздел 2. Методология разработки ПО

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

2.2 Классификация методологий

2.3 Происхождение методологий

2.4 Методологии программирования

Раздел 3. Технология разработки ПО

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

3.2 Основные классификации

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

3.4 Классические технологические процессы

3.5 Методики анализа и проектирования

3.6 Стандартные технологические процессы

Раздел 4. Подходы разработки ПО

4.1 Каскадные технологические подходы

4.2 Каркасные технологические подходы

4.3 Эволюционные технологические подходы

4.4 Адаптивные технологические подходы

4.5 Генетические технологические подходы

4.6 Формальные технологические подходы

Раздел 5. Инженерия и инструментарий ПО

5.1 Инженерия ПО

5.2 Инструментарий ПО

Раздел 6. Методические указания

6.1 Лабораторные работы

6.2 Курсовая работа

Литература

Введение

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

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

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

Изложение материала дисциплины ведётся аналогично изложению, принятому в пособии [1] с учётом особенностей дисциплины. Для получения дополнительной информации по данной дисциплине рекомендуются пособия [2, 3], а также словарь-справочник [4] и книга [5].

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

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

Раздел 1. Основы разработки ПО

В данном разделе рассматриваются основные понятия и определения, необходимые для ясного понимания всего материала дисциплины.

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

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

Система - совокупность взаимодействующих единиц - элементов, функционирующих совместно для достижения определённых целей. Элемент - относительно самостоятельная структурная «единица» системы.

Части системы представляют собой определённые группы элементов этой системы. Компонент - часть системы, выполняющая одну / несколько её функций. Модуль - отдельный компонент / группа компонентов, обеспечивающая одну / ряд функций для работы других модулей и, в свою очередь, использующая функции, обеспечиваемые иными модулями. Подсистема - часть системы, функции которой относительно независимы от функций остальных частей системы. Подсистема - это система, являющаяся частью рассматриваемой системы, а надсистема - это система, частью которой является рассматриваемая система.

Процессный подход является составной частью системного подхода.

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

Части процесса представляют собой определённые группы операций этого процесса. Задача - часть процесса, выполняющая одну / несколько его функций. Действие - отдельная задача / группа задач, обеспечивающая одну / ряд функций для выполнения других действий и, в свою очередь, использующая функции, обеспечиваемые иными действиями. Подпроцесс - часть процесса, функции которой относительно независимы от функций остальных частей процесса. Подпроцесс - это процесс, являющийся частью рассматриваемого процесса, а надпроцесс - это процесс, частью которого является рассматриваемый процесс.

Понятия «система» и «процесс» тесно связаны: система выполняет некоторый процесс, процесс представляет собой функционирование некоторой системы.

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

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

Основными понятиями программирования являются алгоритм и программа.

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

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

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

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

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

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

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

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

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

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

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

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

Кроме продукта (результата человеческого труда) интерес представляет и услуга (участие по оказанию помощи в деятельности). Услуга (тж. сервис) - деятельность по оказанию помощи в эксплуатации продукта.

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

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

С решением тесно связаны два важнейших понятия - «проект» и «команда».

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

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

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

В проекте каждый участник играет некоторую роль (или набор ролей). Роль - характер поведения и области ответственности участника.

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

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

Если конкретный результат не указан, обычно говорят о процессе разработки.

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

Продукт можно рассматривать аналогично живому организму: он имеет жизненный цикл (ЖЦ), который начинается с «зарождения» (возможно, с зарождения замысла / идеи) и заканчивается его «смертью» (изъятием из употребления). Концепция ЖЦ оказывается чрезвычайно полезной при управлении проектом.

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

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

Рис.1.1. Взаимосвязь жизненных циклов

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

1.2 Понятие «программирование»

Программирование может рассматриваться как научная дисциплина и как инженерная деятельность.

Программирование как дисциплина

Программирование рассматривают как научную дисциплину [1].

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

Тогда программирование можно охарактеризовать следующим образом.

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

В программировании чётко выделяются разделы, перечисленные ниже.

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

Рис.1.2. Понятия и направления теории программирования

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

2. Методология программирования: изучает методы с точки зрения основ их построения. Конкретная методология (подход) - это объединённая единым философским подходом совокупность методов, применяемых в процессе разработки.

3. Технология программирования: изучает процессы разработки ПО как технологические процессы, а также порядок их прохождения (с использованием знаний, методов и средств). Конкретная технология (подход) содержит в себе определённый набор процессов, а также используемых в них знаний, методов и средств.

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

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

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

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

Понятие «технология». Часто используются сочетания «CASE-технология», «Интернет-технология», «Java-технология» и т.п. В них слово «технология» обычно применяется в рекламных и маркетинговых акциях. Оно подчёркивает специфику средства, поддерживающего ведение технологических процессов, например набора инструментов, совокупности стандартов или языка / среды программирования, и связанных механизмов.

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

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

Рис.1.3. Группы направлений программирования

Основная задача программирования на профессиональном уровне решается с помощью приведённых основных направлений.

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

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

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

3. Методология и технология определяют языки и системы программирования, необходимые для каждого процесса избранного технологического подхода.

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

Программирование как деятельность

Программирование также рассматривают как инженерную деятельность [4].

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

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

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

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

1.3 Области разработки ПО

В рамках дисциплины «Технологии разработки программных систем» рассматриваются следующие области разработки ПО:

1. Методология разработки ПО (виды методологий и т.п.).

2. Технология разработки ПО (жизненный цикл ПО и т.п., технологические подходы разработки ПО).

3. Ряд направлений инженерии ПО (практические вопросы проектирования и программирования и т.п.).

4. Ряд направлений инструментария ПО (среды, системы и средства разработки ПО и т.п.).

В рамках смежных дисциплин подробно рассматриваются следующие области разработки ПО:

1. Все направления (математические, алгоритмические и формально-языковые и другие аспекты) теории программирования.

2. Ряд направлений инженерии ПО (качество ПО и т.п.).

3. Ряд направлений инструментария ПО (конкретные языки и среды программирования и т.п.).

4. Управление разработкой ПО (управление проектами и т.п.).

5. Ряд специфических областей разработки ПО (бизнес-моделирование, анализ требований, тестирование и отладка и т.д.).

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

Контрольные вопросы

Вопросы к §1.1

1. Дайте определение понятиям, связанным с системой.

2. Дайте определение понятиям, связанным с процессом.

3. Как связаны между собой понятия «система» и «процесс»?

4. Дайте определение понятиям «алгоритм» и «программа».

5. Дайте определение понятиям «программный модуль» и «программный компонент» как частям программы.

6. Дайте определение понятиям «пакет программ», «программный комплекс» и «программная система» как совокупностям программ.

7. Дайте определение понятиям «ПО» и «программное средство».

8. Дайте определение понятиям «документация на ПО» и «программная документация». Что понимается под компьютером и вычислительной системой?

9. Дайте определение понятиям «программный продукт» и «услуга».

10. Дайте определение понятиям «решение» и «прототип».

11. Дайте определение понятиям «проект» и «команда».

12. Дайте определение понятию «заинтересованное лицо».

13. Дайте определение понятиям «участник проекта» и «исполнитель».

14. Дайте определение понятию «роль». Перечислите основные роли участников.

15. В чём заключается концепция жизненного цикла (ЖЦ)? Дайте определение понятиям, связанным с жизненным циклом проекта.

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

Вопросы к §1.2

17. Дайте определение понятиям, связанным с информатикой.

18. Дайте определение понятию «программирование» как научной дисциплине.

19. Перечислите и поясните разделы программирования.

20. Что представляет собой теория программирования?

21. Что представляет собой методология программирования?

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

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

24. Что представляет собой инструментарий программирования?

25. В чём заключается особенность использования понятия «технология».

26. Что представляет собой метод? Что включает в себя метод?

27. Как рассматривается метод в различных разделах программирования?

28. Перечислите основные направления программирования и их группы.

29. Сформулируйте рекомендации по применению основных направлений программирования при разработке ПО.

30. Дайте определение понятию «программирование» как инженерной деятельности. В чём разница между разработкой ПО и программированием?

31. Что подразумевает разработка в рамках системной инженерии?

Вопросы к §1.3

32. Какие области разработки ПО изучаются в рамках данной дисциплины?

33. Какие области разработки ПО изучаются в рамках смежных дисциплин?

Раздел 2. Методология разработки ПО

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

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

В узком смысле методология представляет собой определённый методологический подход. На сегодняшний день существует не так много методологий, особенно полных, т.е. учитывающих весь ЖЦ. Именно методология определяет, какие языки и системы программирования будут применяться для разработки ПО и какой технологический подход будет при этом использован.

Методология разработки ПО (методологический подход) - это объединённая единым философским подходом определённая совокупность методов, применяемых в процессе разработки ПО.

С каждой методологией можно связать характерные для неё атрибуты:

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

2. Согласованное, связное множество методов, через которые реализуется данная методология.

3. Концепции (понятия, идеи), поддерживающие методы и позволяющие более точно их определить.

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

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

Когда методология применяется во время кодирования (программирования), очень часто её называют парадигмой программирования - способом мышления и программирования, не связанным с конкретным языком программирования.

Термин «парадигма» был впервые предложен Томасом Куном; он определял парадигму как свод норм научного мышления. Парадигма - это правило развития научного знания. Она в течение определённого времени даёт научному сообществу модель постановки проблем и их решений.

2.2 Классификация методологий

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

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

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

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

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

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

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

Смешанные методологии основываются на объединении ряда методов нескольких (обычно родственных) методологий.

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

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

Проводятся исследования в области объединения других методологий, в частности объектно-ориентированного и логического программирования. Ряд исследований посвящён вопросам унификации методологий программирования.

В эту классификацию не вошли многие существующие методологии.

К известным, но редко выделяемым явно, относят следующие методологии:

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

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

К мало известным (в настоящее время) относят следующие методологии:

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

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

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

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

2.3 Происхождение методологий

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

Практическое происхождение

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

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

Алгоритмическое происхождение

Это объяснение происходит из следующего утверждения:

Теория алгоритмов и логика - родители программирования.

Выделяют следующие 4 главные модели алгоритма:

1. Абстрактные вычислительные машины Тьюринга и Поста. Они определяют методологии императивного, автоматного и событийного программирования.

2. Рекурсивные функции Гильберта и Аккермана. От них унаследовала свои идеи и конструкции методология структурного программирования.

3. Комбинаторная логика Шейнфинкеля и Карри и её современное представление - лямбда-исчисление Чёрча. Эти идеи активно развиваются в методологии функционального программирования.

4. Нормальные алгорифмы Маркова. Модель послужила основой методологий логического программирования и сентенциального программирования.

Рассмотренные главные модели алгоритма, математически эквивалентны, но на практике они породили разные направления в разработке ПО, в том числе некоторые методологии.

Структурно-языковое происхождение

Ещё одно объяснение берёт за основу понятие отображения структур языка. Согласно этой точке зрения сущность языка определяют три его составные части:

1. Структура данных (Д) - представление данных (и результатов).

2. Структура управления (У) - преобразование исходных данных в результат.

3. Логическая структура (Л) - определение преобразования задачи в алгоритм.

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

В итоге получаются следующие 9 отображений:

1. Д Д: представляет процесс укрупнения данных и операций над ними и приводит к методам модульности и абстрактных типов данных.

2. У У: связано с понижением уровня структуры управления языка моделирования, ведёт к идее методологии структурного программирования.

3. Л Л: лежит в основе методологии логического программирования.

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

5. Д Л: даёт возможность по совокупности операций построить логическую структуру и определяет методологию ограничительного программирования.

6. У Д: лежит в основе методов интерпретации; определяет методологию доступ-ориентированного программирования.

7. У Л: лежит в основе методов расшифровки смысла задачи.

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

9. Л У: может быть использовано в системах структурного синтеза.

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

Каждая из трёх структур языка состоит из разнородных подструктур. Это позволяет построить более точную классификацию, взяв за основу уже отображения этих подструктур.

2.4 Методологии программирования

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

Методология императивного программирования

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

Происхождение. Это исторически первая поддерживаемая аппаратно методология. Она ориентирована на классическую фон-неймановскую модель, остававшуюся долгое время единственной аппаратной архитектурой, получившей широкое практическое применение.

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

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

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

Методология объектно-ориентированного программирования

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

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

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

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

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

Методология функционального программирования

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

Происхождение. Методология является одной из старейших. По происхождению она тесно связана с лямбда-исчислением, изобретенным ещё в начале 30_х гг. XX в. логиком А. Чёрчем. Для многих эта методология стала ассоциироваться с языком Lisp, созданным Дж. Маккарти в конце 50_х гг. XX в.

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

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

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

Методология логического программирования

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

Происхождение. Методология начинает свой отсчёт времени с конца 60_х гг. XX в., когда К. Грин предложил использовать резолюцию как основу логического программирования. А. Колмероэ создал язык логического программирования Prolog в 1971 г. В основе логических языков обычно лежит какое-либо логическое исчисление с крупноблочными правилами вывода.

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

Вычислительная модель. Логическое программирование - это программирование в терминах фактов и правил вывода.

Класс задач. Класс задач логического программирования практически совпадает с классом задач методологии функционального программирования.

Методология сентенциального программирования

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

Происхождение. Идея и основа подхода - нормальные алгорифмы Маркова. На основе подхода построены две модели, основанные на разных вариантах отождествления - конкретизации и унификации. Метод конкретизации считается основой методологии сентенциального программирования и языка Рефал, созданного В.Ф. Турчиным в 1986 г. Метод унификации совместно с формализмом математической логики стал основой методологии логического программирования и языка Prolog. Содержательно этот язык следует относить к сентенциальному программированию, так как целью его разработки послужили задачи математической лингвистики. Использование рекурсии вместо отождествления приводит уже к методологии функционального программирования.

Методы и концепции. Основной метод - метод отождествления. Метод поддерживается концепцией подстановки.

Вычислительная модель. Сентенциальное программирование - это программирование в форме обработки метавыражений.

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

Методология ограничительного программирования

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

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

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

Вычислительная модель. Ограничительное программирование - это программирование в терминах постановок задач.

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

Методология структурного императивного программирования

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

Происхождение. Методология является важнейшим развитием императивной методологии. Создателем структурного подхода считается Э.В. Дейкстра. Ему также принадлежит попытка соединить структурное программирование с методами доказательства программ.

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

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

Методология императивного параллельного программирования

Методология [императивного] параллельного программирования - подход, в котором предлагается использование явных конструкций для параллельного исполнения выбранных фрагментов программ.

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

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

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

Методология логического параллельного программирования

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

Происхождение. Язык Concurrent Prolog, предложенный Э. Шапиро развивает логический подход к абстрактным спецификациям и включает несколько идей Дейкстры (в том числе, идею охраняемого предложения). При этом подходе ПрО описывается как формальная теория в некотором логико-математическом языке.

Контрольные вопросы

Вопросы к §2.1

1. Дайте определение понятию «методология» («методологический подход»).

2. Какие атрибуты связаны с каждой методологией?

3. Дайте определение понятию «парадигма программирования».

Вопросы к §2.2

4. Поясните рассмотренный в разделе принцип классификации методологий.

5. Перечислите основные ядра методологий.

6. Перечислите специфики методологий и методологии с этими спецификами.

7. Приведите примеры смешанных методологий.

8. Приведите примеры известных методологий, не вошедших в классификацию.

9. Приведите примеры мало известных методологий, не вошедших в классификацию.

10. Как определяется поддержка методологиями классов решаемых задач?

Вопросы к §2.3

11. Охарактеризуйте практическую точку зрения на происхождение методологий?

12. Охарактеризуйте алгоритмическую точку зрения на происхождение методологий? Приведите модели алгоритмов и соответствующие методологии.

13. Охарактеризуйте структурно-языковую точку зрения на происхождение методологий? Приведите отображения структур и соответствующие методологии.

Вопросы к §2.4

14. В чём суть методологии императивного программирования?


Подобные документы

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

    презентация [866,8 K], добавлен 02.04.2013

  • Понятие CASE-средств как программных средств, которые поддерживают процессы создания и сопровождения информационных систем (ИС). Особенности IDEF-технологии разработки ИС. Описание нотации IDEF0. Разработка функциональных моделей бизнес-процесса.

    презентация [399,8 K], добавлен 07.04.2013

  • Особенности документирования программных средств, стадии разработки продуктов. Классификация обеспечивающего пакета документов. Сущность и основные недостатки Единой системы программной документации. Классификация стандартов, Гост 19.102-77 ЕСПД.

    презентация [64,8 K], добавлен 22.03.2014

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

    презентация [1,9 M], добавлен 01.05.2011

  • Анализ и сравнение существующих систем тьюторской поддержки. Методологии разработки программного обеспечения. Разработка web-ориентированной системы тьюторской поддержки самостоятельной работы студента. Выбор архитектуры программных средств разработки.

    курсовая работа [1,1 M], добавлен 05.01.2013

  • Эволюция систем автоматизированного проектирования от простых средств двухмерного рисования и разработки чертежей до программных продуктов, включающих поддержку цикла разработки и производства изделия. Требования к пользовательскому интерфейсу САПР.

    курсовая работа [274,5 K], добавлен 19.12.2014

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

    дипломная работа [2,3 M], добавлен 26.01.2013

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

    презентация [57,0 K], добавлен 27.12.2013

  • Характеристика этапов разработки программных средств. Спецификация, алгоритм, кодирование, отладка и тестирование. Создание справочной системы и установочного диска. Назначение программы, язык программирования. Технические требования к программе.

    курсовая работа [1006,4 K], добавлен 19.12.2013

  • Анализ деятельности подразделения разработки программных продуктов, использующих Web-технологии, в компании ИООО "ЭПАМ Системз". Разработка систем с использованием Web-технологий с помощью программного продукта Oracle Database и технологий Spring, Struts.

    отчет по практике [1,0 M], добавлен 14.04.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.