Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Maciashek_978-5-94774-488-0_Glava1_cB488-0

.pdf
Скачиваний:
9
Добавлен:
09.06.2015
Размер:
599.6 Кб
Скачать

1.3. Модели жизненного цикла

63

При первом обращении процесс, представленный как комбинация двух RUP-измерений, недостаточно понятен. Каково различие между конструированием и реализацией, между началом и бизнес-моделированием или между переходом и внедрением? На эти вопросы трудно ответить. Чтобы устранить эти проблемы (так кажется), была предложена упрощенная визуализация RUP®. Рис. 1.10 — это упрощенное представление [91].

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

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

Model Driven Architecture (MDA)

Model Driven Architecture® — архитектура, управляемая моделями (MDA®) [51, 67] — структура жизненного цикла от Object Management Group — группы управления объектами (OMG). MDA использует UML на следующей характерной стадии — выполнимых спецификаций. Идея выполнимых спецификаций, то есть превращения моделей спецификаций в выполнимый код, не нова, но MDA пользуется преимуществом существующих стандартов и современной технологии, чтобы реализовать эту идею.

MDA — современный представитель модели преобразования [34], которая в свою очередь ведет свое происхождение от formal systems development — формальной разработки систем [96]. Модель преобразования рассматривает разработку систем как последовательность преобразований от формальных спецификаций задачи через более детальные (менее абстрактные) стадии проектирования к выполняемой программе. Каждый шаг преобразования тщательно проверяется, чтобы гарантировать, что каждый результат — правильное представление исходных данных.

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

Жизненный цикл MDA изображен на рис. 1.11. MDA использует две спецификации: неформальную Requirements (требования) и более формальную Analysis (анализ). Это разделение позволяет нам исключать Requirements из

64

 

 

 

Глава 1. Жизненный цикл разработки программного обеспечения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ðèñ. 1.11. Жизненный цикл MDA

преобразований MDA-процесса. Остающиеся элементы (модели) процесса позволяют выполнять преобразования в машинно-считываемой форме.

Результатом использования Analysis является платформо-независимая модель (Platform Independent Model — PIM) — высоко абстрактная и не зависимая от каких-либо программных/аппаратных ограничений. Результатом использования Design является платформо-зависимая модель (Platform Specific Model — PSM) — менее абстрактная и ограниченная платформой программной/аппаратной реализации. Для каждой платформы формируется своя PSM. Если система в процессе разработки охватывает несколько платформ, то формируются дополнительные PSM, объединенные связующими MDA-мостами. Разные PSM формируют разные коды, которые также связываются мостами.

MDA обещают расширить в технологию компонентов и целую область конструирования систем из многократно используемых блоков — моделей и

1.3. Модели жизненного цикла

65

программ (такой подход иногда называется жизненным циклом на основе компонентов [81]). Структура находится вне выполнимых UML-моделей и охватывает диапазон OMG-определяемых сервисов типа складских сервисов, перманентных объектов, транзакций, обработчиков событий и сервисов, обеспечивающих безопасность. Цель состоит в том, чтобы создать многократно используемые и поддающиеся преобразованию модели для ряда основных отраслей типа телесвязи или больниц. Время скажет, окажется ли MDA практической. Для этого MDA должна быть способна применяться к большим и сложным системам.

Быстрая разработка ПО с короткими итерациями

Процесс быстрой разработки ПО, предложенный в 2001 г. некоммерческой организаций энтузиастов Agile Alliance, является смелым новым подходом к производству ПО. В Manifesto of Agile Alliance [1] дух быстрой разработки представлен четырьмя рекомендациями:

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

2.Рабочее ПО с полной документацией.

3.Сотрудничество с клиентами после заключения контракта.

4.Определение, что нужно изменить после планирования.

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

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

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

66

 

 

 

 

Глава 1. Жизненный цикл разработки программного обеспечения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ðèñ. 1.12. Быстрая разработка ПО

«Обычные» виды проектирования систем и их реализация заменены в быстрой разработке комбинацией приемочных испытаний, рефакторинга и управляемой тестированием разработки. Приемочные испытания — это специальные программы, через которые разрабатываемая прикладная программа должна пройти, чтобы быть принятой клиентами. Этот процесс называется «управляемой тестированием разработкой» (Test-Driven Development — TDD) èëè программированием намерений (Intentional Programming — IP) — разработчик программирует свои намерения по приемочным испытаниям до того, как использует их. Этому подходу сопутствует частое использование рефакторинга (refactorings) — усовершенствования в структуре системы без изменения ее поведения.

Быстрая разработка поддерживает и другие концепции типа парного программирования è коллективной собственности. Все программирование выполняется парами программистов — двумя программистами, работающими вместе на одной рабочей станции. Один программист пишет код, а другой наблюдает за процессом и задает вопросы. Роли меняются всякий раз, когда один из программистов хочет «поставить точку с помощью клавиатуры». Пары программистов также меняются местами, по крайней мере, один раз в день. Результатом является коллективная собственность. Никто индивидуально не владеет кодом. Считается, что высокий дух коллективизма и желание выдать продукт перевесят любые требования индивидуальной ответственности.

Резюме

67

«Обычные» интеграция и внедрение заменены в быстрой разработке непрерывной интеграцией è короткими циклами. Пары программистов могут экспортировать свой код и по своему желанию объединять его с остальной ча- стью. Более того, одну и ту же часть кода может импортировать и работать над ней более одной пары программистов. Это может привести к конфликту, когда коллектив, который хочет экспортировать и сдать свой код, обнаруживает, что другой коллектив сделал ранее несовместимый код. Такие конфликты между участвующими в разработке коллективами должны быть урегулированы.

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

Быстрая разработка отличается больше в методах, чем в подходе к итеративной разработке. Ее главный представитель — eXtreme Programming (XP) [6]. Как и с MDA-подходом, будущее покажет, сможет ли быстрая разработка применяться к большим и сложным системам. Главная опасность, стоящая перед сторонниками быстрого жизненного цикла — риск окончания работы с неудачно созданной и принятой моделью [92], в которой ПО слеплено без учета заданных требований к проекту.

Резюме

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

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

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

4.Система ПО — просто часть намного большей информационной системы предприятия.

5.Процесс создания и эксплуатации ПО — часть бизнес-процесса. Результат процесса создания и эксплуатации ПО — ПО. Результат бизнес-процес- са — бизнес.

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

7.Нематериальный и изменчивый характер ПО — всего лишь два фактора, которые отличают программную инженерию от традиционной инженерии.

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

68

Глава 1. Жизненный цикл разработки программного обеспечения

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

10.Системы ПО сложны. Сложность современного ПО заключается в «проводах» — в связях и коммуникационных путях между компонентами.

11.Анализ требований — действия по определению и составлению списка требований пользователя. Соответственно, анализ требований делится на

определение требований è техническое задание. Разработка требований

включает все наиболее строгие и формальные задачи поддержки анализа требований.

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

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

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

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

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

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

18.Имеются четыре главных представителя итеративных моделей: спиральная, Rational Unified Process (RUP), Model Driven Architecture (MDA) и модель быстрой разработки.

Ключевые термины

69

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

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

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

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

Ключевые термины

CASE

Ñì. computer assisted software engi-

бизнес-процесс . . . . . . . . . . . . . . 39

neering

 

быстрая разработка ПО . . . . . . . . . . 65

computer assisted software engineering . . . 49

версия . . . . . . . . . . . . . . . . . . . 43

eXtreme Programming . . . . . . . . . . . 67

внедрение . . . . . . . . . . . . . . . . . 52

formal systems development . . . . . . . . 63

возможность сопровождения . . . . . . . 42

IDE Ñì. integrated development environment

выполнимые спецификации . . . . . . .

63

integrated development environment . . . . 51

гарантия качества ПО. . . . . . . . . . . 49

MDA

Ñì. Model Driven Architecture

жизненный цикл . . . . . . . . . . . . .

36

Model Driven Architecture . . . . . . . . . 63

жизненный цикл ПО . . . . . . . . . . .

48

OLAP

Ñì. online analytical processing

инженерия систем. . . . . . . . . . . . . 41

OLTP

Ñì. online transaction processing

интеграция . . . . . . . . . . . . . . . .

52

online analytical processing . . . . . . . . 40

интегрированные средства разработки . .

51

online transaction processing . . . . . . . . 40

информационная система . . . . . . . . . 38

Rational Unified Process® . . . . . . . . . 62

информационная система предприятия. .

38

RUP®

Ñì. Rational Unified Process®

испытательная заглушка . . . . . . . . . 53

software quality assurance . . . . . . . . . 49

итеративный жизненный цикл . . . . . . 59

SQA

Ñì. software quality assurance

итерация . . . . . . . . . . . . . . . . .

59

UML

Ñì. Unified Modeling Language

компонент ПО . . . . . . . . . . . . . .

43

Unified Modeling Language . . . . . . . . 43

конструкция. . . . . . . . . . . . . . . . 59

XP

Ñì. eXtreme Programming

конфигурация . . . . . . . . . . . . . . . 43

абстракция . . . .

. . . . . . . . . . 44, 47

модель. . . . . . . . . . . . . . . . . . . 44

автоматизированная

программная инжене-

модель водопада . . . . . . . . . . . . .

56

ðèÿ

. . . . . . .

. . . . . . . . . . . . 49

модель детального проекта . . . . . . . . 44

анализ требований

. . . . . . . . . . . . 48

модель жизненного цикла . . . . . . . .

55

аналитическая обработка в реальном време-

модель программного продукта . . . . .

44

íè . . . . . . . . . . . . . . . . . . . . 40

модель программы . . . . . . . . . . . . 45

архитектура, управляемая моделями . . . 63

модель процесса создания ПО . . . . . .

44

70

Глава 1. Жизненный цикл разработки программного обеспечения

модель с опытными образцами . . . . . .

57

спиральная модель . . . . . . . . . . . .

60

модель спецификаций . . . . . . . . . .

44

средства тестирования . . . . . . . . . .

54

модель требований . . . . . . . . . . . .

44

стадии жизненного цикла . . . . . . . . .

36

объектно-ориентированный подход . . .

45

структурная

модель . . . . . . . . . . .

44

оперативная обработка транзакций . . . .

40

тестирование . . . . . . . . . . . . . . .

52

определение требований . . . . . . . . .

48

тестирование интеграции . . . . . . . .

53

опытный образец ПО . . . . . . . . . . . 57

тестирование на основе кода . . . . . . .

52

отладка . . . . .

. . . . . . . . . . . . . 52

тестирование на основе технических требова-

парное программирование . . . . . . . . 66

íèé . . .

. . . . . . . . . . . . . . . . 52

приемочные испытания . . . . . . . . .

54

тестовый драйвер. . . . . . . . . . . . . 54

программирование . . . . . . . . . . . . 43

технические

требования . . . . . . . . . 48

программная инженерия . . . . . . . . . 37

техническое

задание . . . . . . . . . . . 49

проектирование

детальное . . . . . . . . 50

технология

компонентов . . . . . . . . . 64

проектирование

ÏÎ . . . . . . . . . . . 50

традиционная инженерия . . . . . . . .

41

проектирование

систем . . . . . . . . .

50

требования

пользователя . . . . . . . . . 48

проектирование

структурное. . . . . . . 50

унаследованная система. . . . . . . . 36, 55

проектирование циклическое . . . . . 43, 51

унифицированный язык моделирования . 43

процесс создания и эксплуатации ПО . .

39

управление

проектом. . . . . . . . . . . 43

процесс функционирования . . . . . . . 54

управление

трассировкой . . . . . . . .

51

рациональный унифицированный процесс 62

управляемая тестированием разработка .

66

реализация . . . . . . . . . . . . . . . .

51

результативность . . . . . . . . . . . . .

39

уровень управления . . . . . . . . . . .

40

рефакторинг. . . . . . . . . . . . . . . .

66

формальная разработка системы . . . . .

63

система . . . . . . . . . . . . . . . . . .

38

функциональный подход . . . . . . . . .

45

сопровождение . . . . . . . . . . . . . .

54

øàã . . . . . . . . . . . . . . . . . . . .

59

спецификация требований . . . . . . . .

49

эффективность . . . . . . . . . . . . . .

39

Обзорные вопросы

1.Объясните, как программная инженерия и инженерия систем соотносятся друг с другом. Является ли это отношением включения или пересечения? Может быть, эти две концепции вообще не имеют друг к другу никакого отношения?

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

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

4.Что мы подразумеваем, когда говорим, что информационные системы являются социальными системами? Может ли быть система социальной? Рассмотрите следующее объяснение термина «социальный» — «касающийся действий, когда вы встречаетесь и проводите время с другими людьми, и которые происходят в то время, когда вы не работаете» [18].

5.В науке управления существует строгое различие между эффективностью

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

Обзорные вопросы

71

время и энергию без каких-либо пустых затрат» [18]. Термин «результативность» означает «насколько успешно это ... в достижении результатов, которые вы хотите получить» [18]. Как эти два термина применимы к программной инженерии? Является ли программная инженерия эффективной или результативной или и тем, и другим? Объясните. Приведите примеры.

6.Каковы основные различия между БД и хранилищем данных? Как эти две концепции связаны с уровнями управления в организации?

7.Что такое приемлемая система? Может ли быть унаследованная система приемлемой? Объясните.

8.Что мы подразумеваем под прямым и обратным проектированием? Как это касается программирования?

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

10.Как вы понимаете различие между функциональным и объектно-ориенти- рованным подходами к разработке системы?

11.Какой фактор наиболее важен в определении сложности современной объектно-ориентированной системы? Какова основная технология управления сложностью и ее уменьшением? Объясните.

12.Объясните отношение между анализом требований и техническими требованиями.

13.Каково различие между определением требований и техническим заданием? Объясните.

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

15.Как детальное проектирование и структурное проектирование относятся друг к другу?

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

17.Объясните использование заглушек и драйверов в тестировании интеграции.

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

19.Что такое управление рисками? Какая из моделей жизненного цикла наиболее явно использует управление рисками? Объясните.

20.Что такое выполнимые спецификации? Какая модель жизненного цикла использует выполнимые спецификации как свой основной момент? Объясните.

21.Каковы наиболее необычные аспекты быстрой разработки (необычные по сравнению с другими итеративными подходами)? Объясните.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]