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

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

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

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

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

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

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

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. А.Н. ТУПОЛЕВА

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

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

Конспект лекций

А.И. Рахматуллин

Казань 2008

Лекция 1

Тема лекции: Основы разработки ПО

Основное содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Дайте определение понятиям «система» и «процесс».

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

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

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

5. Дайте определение понятиям «программная система», «программное обеспечение» (ПО) и «программное средство».

6. Дайте определение понятиям «документация на ПО» и «программная документация».

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

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

9. Дайте определение понятиям «заинтересованное лицо», «участник проекта» и «исполнитель».

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

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

Лекция 2

Тема лекции: Основы разработки ПО (продолжение)

Основное содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. Технология разработки ПО (ЖЦ ПО и т.п., подходы разработки ПО).

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

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

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

1. Все направления теории программирования.

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

3. Ряд направлений инструментария ПО.

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

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

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

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

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

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

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

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

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

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

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

8. Дайте рекомендации по применению направлений программирования.

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

Лекция 3

Тема лекции: Методология разработки ПО

Основное содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лекция 4

Тема лекции: Методология разработки ПО (продолжение)

Основное содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лекция 5

Тема лекции: Технология разработки ПО

Основное содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

...

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

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