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

Проектирование и разработка информационных систем. Учебное пособие для СПО

.pdf
Скачиваний:
4
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
141
– пользователи активно принимают участие при планиро­вании, анализе рисков, разработке, а также при выполнении оце­ночных действий;
– потенциально большой объем работы по разработке про­дукта разбивается на небольшие части, в которых сначала реали­зуются решающие функции с высокой степенью риска. Это поз­воляет устранить необходимость продолжения работы над про­ектом (таким образом, в случае необходимости становится воз­можным прекратить работу над проектом и уменьшаются расхо­ды);
– сочетаются преимущества каскадной и эволюционной моделей;
– здесь не ставится цель выполнить невозможное — дове­сти конструкцию до совершенства;
– обратная связь по направлению от пользователей к раз­работчикам выполняется с высокой частотой и на ранних этапах модели, что обеспечивает создание нужного продукта высокого качества;
– повышается продуктивность благодаря использованию пригодных для повторного использования свойств;
– повышается вероятность предсказуемого поведения си­стемы с помощью уточнения поставленных целей;
– можно выполнять частую оценку совокупных затрат, а уменьшение рисков связано с затратами.
4.6.2. Недостатки спиральной модели
Спиральная модель применяется на практике довольно редко, поскольку имеет недостатки:
– если проект имеет низкую степень риска или небольшие размеры, модель может оказаться дорогостоящей. Оценка рис­ков после прохождения каждой спирали связана с большими за­тратами, так как она требует высокопрофессиональных знаний;
– модель имеет усложненную структуру, поэтому может быть затруднено ее применение разработчиками, менеджерами и заказчиками;
142
– спираль может продолжаться до бесконечности, по­скольку каждая ответная реакция заказчика на созданную вер­сию может порождать новый цикл, что затягивает работу;
– большое количество промежуточных стадий может при­вести к необходимости в обработке внутренней дополнительной и внешней документации;
– время, затраченное на планирование, повторное опреде­ление целей, выполнение анализа рисков и прототипироние, мо­жет быть чрезмерным, а сама разработка слишком дорогой;
– при выполнении действий на этапе вне процесса разра­ботки возникает необходимость в переназначении разработчи­ков;
– отсутствие хорошего средства или метода прототипиро­вания может сделать использование модели неудобным.
4.6.3. Область применения спиральной модели
Спиральную модели целесообразно применять, если суще­ствует хотя бы одна из следующих причин:
– в случае больших проектов;
– при разработке новой функции или новой серии продук­тов;
– для проектов, выполнение которых сопряжено со сред­ней и высокой степенью риска;
– при разработке систем, требующих большого объема вычислений, таких, как систем, обеспечивающих принятие ре­шений;
– при выполнении бизнес проектов, а также проектов в об­ласти аэрокосмической промышленности, обороны и инжини­ринга, где использование спиральной модели уже получило по­пулярность, когда ожидаются существенные изменения, напри­мер, при изучении или исследовательской работе;
– когда речь идет о применении новой технологии (напри­мер, впервые применяемые объектно-ориентированные принци­пы) и когда необходимо протестировать базовые концепции;
– когда преимущества разработки невозможно точно определить, а достижение успеха не гарантировано;
143
– когда организация обладает навыками, требуемыми для адаптации модели;
– для организаций, которые не могут себе позволить выде­лить заранее все необходимые для выполнения проекта денеж­ные средства, или в процессе разработки отсутствует финансо­вая поддержка;
– когда нет смысла браться за выполнение долгосрочного проекта из-за потенциальных изменений, которые могут про­изойти в экономических приоритетах;
– когда важно сконцентрировать внимание на неизменяе­мых или известных частях, причем сбор информации об изме­няющихся частях еще не закончен;
– когда пользователи не уверены в своих потребностях или когда требования слишком сложные.
4.7. Экстремальное программирование
Около 60 % всех программных проектов не используют традиционные модели разработки. Для небольших по объему проектов они с успехом подменяются интуицией опытного раз­работчика, руководящего проектом. Другая крайность — это проекты, в которых каждый аспект строго контролируется. Раз­работчики проектов не вольны даже в мелочах, они контроли­руются внешними организациями. То есть работа программи­стов потеряла прелесть творчества, ограниченные возможности самовыражения.
Суммируя это, Кент Бек, Уорд Каннингем, Рон Джеффрис создали методику ХР (2001 г.). Экстремальное программирова­ние (Extreme Programming — ХР) — на сегодня наиболее про­грессивная форма работы над проектом. Основная цель ХР — создание высококачественных программ с минимальными затра­тами и в кратчайшие сроки. Одно из главных особенностей — отказ от всего, что не поддерживает непосредственно эту цель.
В экстремальном программировании ценится каждый че­ловек: в нем не признается общепринятая философия менедж­мента, основанная на том, что люди являются легко заменяемы­ми компонентами в механизме разработки программного обес­печения. Ключевые понятия ХР — команда, игра. Поддержание
144
непринужденного стиля общения, интереса к разрабатываемому проекту, командного духа — это тоже основа ХР. При этом до­стигается ощутимый экономический эффект. Поскольку разра­ботчик, заинтересованный процессом работы и климатом в кол­лективе, работает более продуктивно.
4.7.1. Основные принципы XP
1. Работайте с заказчиком.
В работе над проектом должен непосредственно участво­вать реальный заказчик, один из конечных пользователей систе­мы. Надо представлять потребности и др. пользователей.
Заказчик должен отвечать на вопросы и принимать реше­ния относительно приоритета характеристик системы, рисков и т.д. Он непосредственно участвует в планировании – пишет ро­левые сценарии и расставляет их приоритеты, принимая реше­ния о содержимом очередной версии. Поскольку заказчик рабо­тает с командой разработчиков, осуществляется постоянная об­ратная связь; заказчик отвечает на все вопросы команды, каса­ющиеся разъяснения отдельных историй и уточнения требова­ний. Заказчик должен быть доступен, у него должно быть выде­лено время на консультации с разработчиками.
Заказчик также отвечает за написание приемочных тестов.
2. Используйте метафоры для описания сложных кон-
цепций.
Метафора — это мощный способ описать сложное поня- тие из незнакомой области. Метафора может быть упрощенным представлением какой-то концепции или характерной черты. Метафоры не задуманы как точные определения. Они, скорее, предоставляют контекст для обсуждения проблем и их решения. Метафоры особенно полезны, когда разработчиков из одной об­ласти привлекают к проекту из другой области.
3. Планируйте.
Планирование обеспечивает взаимное понимание всеми участниками приблизительных сроков проекта, соотношение размеров проекта и возможностей организации (т. е. не является ли проект большим, чем возможности команды). Необходимо,
145
чтобы у всех участников проекта было общее понимание и направление работы.
Конечно, планирование не означает, что надо в течение полугода проводить детальный анализ и разрабатывать поне­дельный план на следующие пять лет. Тем не менее, необходимо производить минимальное планирование, чтобы знать задания, приблизительный срок окончания работы и риски, с которыми можете столкнуться при выполнении проекта.
Следует понимать, что план неточен, и он будет меняться с возникновением новых условий, требований и появлением но­вых рисков. Это объясняется тем, что планировать на дальний срок очень сложно. К тому времени ваш план может быть уже кардинальным образом перестроен.
Планирование выполняют люди, компетентные в данном вопросе. Это означает, что решения, касающиеся бизнеса, при­нимает заказчик, а команда разработчиков принимает решения в технических вопросах.
4. Проводите короткие совещания.
Собрания. Зачастую их ненавидят, потому что они длин­ные, затянутые и скучные. Тем не менее, собрания бесценны в форме живых обсуждений, коротких и содержательных. С этой целью в экстремальном программировании проводятся собрания «стоя», основанные на одной простой концепции: никаких сту­льев. Если все должны во время собрания стоять, то оно, без со­мнения, будет коротким и содержательным.
Каждый участник команды подводит краткий итог на се­годняшний день: какие задачи были выполнены вчера, какими они будут сегодня, о каких важных вопросах или новостях должна узнать команда.
Пусть смысл беседы будет емким. Не позволяйте начинать какие-либо дискуссии. Если людям необходимо поговорить, они могут встретиться позже в течение дня.
5. Сначала пишите тесты.
Тестирование — это еще один важный элемент философии экстремального программирования. Тестирование происходит на нескольких уровнях. Первый уровень — это тесты модуле. Тесты модулей пишутся до того, как будет создана тестируемая программа. Т.е. порядок действий: тест, затем программа, тест,
146
программа и т.д. Задание нельзя считать завершенным, если для него не пройден полный набор тестов модулей. Нельзя интегри­ровать модуль в общую систему, пока не пройдены все его те­сты. При интеграции тесты нового модуля добавляются в тесто­вый набор системы.
Когда и как часто необходимо тестировать? Тестировать надо как можно чаще, следовательно, тестирования должны быть быстрыми и легкими. В идеале, надо запускать тесты после каждой удачной компиляции. В крайнем случае, тесты нужно выполнять (лучше весь набор тестов). До и после того, как вы вносите какие-либо изменения.
6. Упрощайте.
Делaйтe все просто — это слова, с которыми мы живем, это также принцип, на котором основываются при проектирова­нии. Экстремальное программирование стремится проектиро­вать систему как можно проще:
– проектировать на сегодняшний день;
– достигать желаемого как можно более простыми спосо­бами;
– постоянно упрощайте дизайн.
Если дизайн простой и в нем нет излишеств, он остается гибким и адаптируемым. Пренебрегая дизайном, пока он не тре­буется в системе, можно вместо этого заняться какой-то полез­ной работой. Это противоречит общепринятому мнению, что дизайн должен соответствовать не только назревшим, но и бу­дущим требованиям. Ведь есть вероятность, что будущие требо­вания так и не понадобятся.
7. Программируйте в паре.
В ХР код пишется в парах. Каждая строка кода пишется парой разработчиков. Один работает за клавиатурой, а другой наблюдает и помогает ему, он помнит о стратегических целях; вылавливает ошибки; выдвигает свои идеи, замыслы, предложе­ния. Ему проще видеть тот лес, который за деревьями не видит его товарищ. Далее они меняются местами.
8. Программируйте согласно стандартам.
Все члены команды добровольно придерживаться стан­дартов. Не имеет значения, каковы они, если они применяются
147
постоянно. Как правило, лучше всего использовать общеприня­тые стандарты.
9. Коллективное владение кодом.
В традиционной разработке у кода определенного класса есть «хозяин». При этом все, кому нужно сделать изменения в «чужом» классе, должны запросить разрешение на изменение у владельца, то есть приходится ждать, пока у владельца не по­явится время, чтобы заняться этим вопросом. К тому же это предполагает узкую специализацию в команде разработчиков. А это оборачивается крупными неприятностями, если кто-то из разработчиков увольняется.
Этих неприятностей можно избежать при коллективном владении кодом. Чтобы система коллективного владения рабо­тала, необходима хорошая система контроля проекта, изменяет­ся и механизм управления конфигурацией, нужно постоянно ин­тегрировать систему. Тогда, если возникают конфликты, они будут небольшими и обнаружатся очень скоро (помните, что интеграцию необходимо выполнять, как минимум, ежедневно).
10. Постоянно интегрируйте систему.
Постоянно интегрируйте вашу работу в общую программ­ную базу. Интеграция проводится ежедневно, а в идеале — и чаще. Рекомендуется интегрировать программу после заверше­ния каждого задания. Тесты позволяют с уверенностью принять решение (в случае, если вся система успешно прошла тестирова­ние) о выпуске новой версии программы. Часто, интегрируя си­стему, сводятся к минимуму шансы на конфликт ваших измене­ний с чьими-то другими. Если противоречие все же возникнет, оно будет минимальным. Эти короткие периоды интегрирования также обеспечивают общую сходимость. У системы нет времени на отклонения между интеграциями.
11. Проводите переработку.
Что такое переработка (рефакторинг)? Мартин Фаулер [Fowler 1999] описывает ее так: надо все время изменять систему:
– при написании тестов для упрощения тестирования ка­кого-то компонента;
– при кодировании некоторых функций для добавления в систему этой возможности или для исключения дублирования;
– для преобразования существующего кода в шаблон.
148
12. Чаще выпускайте версии.
Новая версия — это ощутимый и работающий результат работы — вот идея выпуска небольших версий. Работа над не­большой версией длится от одного до нескольких месяцев. Как правило, полгода уже слишком большой срок. Небольшими вер­сиями пользователям передаются новые функции настолько ра­но, насколько это возможно, тем самым передавая важную ин­формацию от заказчика, к тому же небольшие частые версии способствуют наиболее раннему выявлению возможных недо­статков. Считается, что новая версия должна выпускаться каж­дые 2 месяца.
Частые версии программы также помогают в процессе бо­лее точного планирования. Чем дальше находится момент пла­нирования, тем меньше будет точность. Планирование на 2– 3 месяца вперед имеет гораздо больший смысл, чем планирова­ние на полгода или на год вперед.
Однако одно из главных правил ХР гласит: если компо­нент системы полностью не готов, он не подлежит выпуску.
13. Не перерабатывайте (40-часовая рабочая неделя).
Ни один работник не будет выполнять поставленную зада­чу хорошо под давлением, в условиях стресса или чрезмерной усталости. Предотвратить это достаточно просто. Рабочий день должен быть не более 8 часов — 40-часовая неделя и 8-часовой день — это схема. Идея состоит в том, чтобы не работать боль­ше, чем работается.
14. Приветствуйте изменения требований.
Изменения требований — это обычное условие быстро развивающейся среды, в которой мы работаем. Если адаптиро­ваться, то изменения приносят выгоду и наносят удар по конку­рентам. Если изменения приветствуются, то это работает на наше преимущество. Ключевая концепция успешного ХР­проекта — помочь заказчику и команде разработчиков понять, что изменения являются нормой.
149
4.7.2. Две команды
Одно из многих отличий между экстремальным програм­мированием и традиционным — это понятие команд.
В ХР изменились условия. Традиционно участники проек­та имеют узкую специализацию: менеджеры, аналитики, архи­текторы, разработчики, группы контроля качества, тестировщи­ки, и т. д. Идея в том, что каждый вносит в проект некоторый набор навыков. Вместо этого ХР предполагает, что каждый раз­работчик — важный участник проекта и его постоянное внима­ние необходимо, а обращение к его навыкам становится правилом.
В экстремальном программировании игроки делятся на две честно работающие команды: заказчики и разработчики. За­казчики принимают решения относительно:
– области действия. Что должна делать система?
– приоритетов. Какие задания более важны? Когда об­ласть действия оказывается слишком большой, какие задачи нужно убрать или отложить?
– содержимого версий. Что должна вмещать каждая версия?
– даты выпуска версий. Когда выпускаются версии? Этот вопрос может зависеть от маркетинговой политики.
Разработчики должны решать вопросы:
– оценки сроков. Сколько времени понадобится на выпол­нение задач?
– результаты. Каковы последствия принятия того или иного решения? Это технические результаты определенных ре­шений, например, выбранных инструментов, аппаратного обес­печения, компонентов системы и т. д.;
– процесс. Каким образом будет создана система? Сюда входит организация команды, культура, возможности и т. д.;
– подробный график. Когда будет выполнено задание? Этот вопрос поможет в составлении графика задач внутри каж­дой версии. Нередко первыми решаются самые рискованные проблемы, что минимизирует общий риск при осуществлении проекта.
150
4.8. Выбор модели жизненного цикла проекта
Итак, существует множество различных моделей или представлений жизненного цикла разработки ПО. Все они есть логически построенная последовательность действий, начиная с определения потребности и заканчивая производством ПО. Каждая модель состоит из этапов или фаз. Каждая фаза снижает степень риска при выполнении проекта, поскольку для нее есть критерии входа и выхода для определения дальнейшего хода действий. По завершении каждой фазы получают внутренние или результативные внешние действия.
Каждая модель имеет присущие ей преимущества и недо­статки, определяющие ее применение для определенных типов проектов.
Выбор модели жизненного цикла и ее последующей под­гонки можно определить следующим образом:
1. Провести анализ проекта, с помощью ответов на вопро-
сы, содержащихся в специальных таблицах. Характеристики проекта разделены на четыре категории, а именно:
1) требования;
2) команда разработчиков;
3) коллектив пользователей;
4) тип проекта и риски.
В табл. 4.1 приведен пример категории требований к про­екту. Для других категорий составляются аналогичные таблицы.
2. Ответить на вопросы, приведенные для каждой катего-
рии, обведя кружочком слова «да» или «нет».
3. Расположить по степени важности категории и вопросы
внутри категорий, относительно проекта, для которого выбира­ется приемлемая модель.
4. Сравнить ответы с данными в таблицах для разных мо-
делей жизненного цикла и сделать выбор в пользу модели с мак­симальным количеством совпадений, учитывая приоритетность характеристик для конкретного проекта.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]