Разработка программного обеспечения
Модели жизненного цикла как основа знания методологий программирования и поддерживающего их инструментария, анализ видов: инкрементная, классическая, спиральная. Знакомство с упрощенным процессом системного проектирования, рассмотрение особенностей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 24.08.2013 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1.Модели жизненного цикла программного обеспечения
жизненный цикл проектирование программирование
Если взглянуть на разработку программного обеспечения с точки зрения роли и места различных факторов, которые необходимо учитывать при создании программной системы, то центральное место в таком представлении будет занимать конкретная модель жизненного цикла и практики, используемые для ее реализации и применения (см. рис. 5.1). Исторически развитие концепции жизненного цикла связано с поиском адекватных моделей для него.
Рис. 5.1. Разработка программного обеспечения в контексте связанных дисциплин, практик, методов и специфики работы проектной команды.
Как и всякая другая, модель жизненного цикла является абстракцией реального процесса, в которой опущены детали, несущественные с точки зрения назначения модели. Различие назначений применения моделей определяет их разнообразие.
Существует несколько причин, побуждающих изучать вопросы моделирования жизненного цикла программного обеспечения, среди которых можно выделить следующие.
· Знание моделей жизненного цикла помогает понять даже непрофессиональному программисту, на что можно рассчитывать при заказе или приобретении программного обеспечения и что нереально требовать от него. В частности, неудобные моменты работы с программой, ее ошибки и недоработки обычно устраняются в ходе продолжающейся разработки, и есть основания ожидать, что последующие версии будут лучше. Однако кардинальные изменения концепции программы -- задача другого проекта, который совсем необязательно будет во всех отношениях лучше данной системы.
· Модели жизненного цикла -- основа знания методологий программирования и поддерживающего их инструментария. Программист всегда использует в своей работе инструменты, но квалифицированный программист знает, где, когда и как их применять. В этом ему помогают понятия моделирования жизненного цикла: любая методология базируется на определенных представлениях о жизненном цикле, выстраивает свои методы и инструменты вокруг фаз и этапов жизненного цикла.
· Общие знания о том, как развивается программный проект, дают наиболее надежные ориентиры для его планирования, позволяют экономнее расходовать ресурсы, добиваться более высокого качества управления. Все это относится к сфере профессиональных обязанностей руководителя программного проекта. Эти знания помогают менеджеру проекта выстраивать надежную аргументацию при отстаивании своей точки зрения перед заказчиком, перед руководством фирмы, перед другими заинтересованными лицами.
· Наконец, знание технологических функций, которые на разных этапах должны выполнять разработчики, занимающие те или иные роли, способствует правильному распределению обязанностей сотрудников.
Модель жизненного цикла ПО схематически объясняет, каким образом будут выполняться действия по разработке программного продукта, посредством описания последовательности этих действий.
Стандарт ISO/IEC 12207 не предлагает конкретную модель ЖЦ и методы разработки программного обеспечения. Его положения являются общими для любых проектов по созданию ПО. Стандарт описывает структуру процессов жизненного цикла, но не конкретизирует в деталях, как выполнить действия и задачи, включенные в эти процессы. Для каждого конкретного программного проекта необходимо разработать (а чаще - отобрать и адаптировать) свою модель жизненного цикла.
Таким образом, модель жизненного цикла любого программного обеспечения определяет характер процесса его создания. Фактически она представляет собой совокупность упорядоченных во времени, взаимосвязанных и объединенных в стадии работ, выполнение которых необходимо и достаточно для создания ПО, соответствующего заданным требованиям.
Под стадией создания ПО понимается часть процесса, ограниченная временными рамками и заканчивающаяся выпуском конкретного продукта (программных компонентов, документации), соответствующего заданным для данной стадии требованиям.
Модель жизненного цикла зависит от специфики, масштаба и сложности проекта, а также от условий, в которых система создается и функционирует. Организация может иметь множество моделей жизненного цикла разработки ПО, однако для каждого конкретного проекта должна быть отобрана только одна модель. Смешение моделей в пределах одного проекта приводит к беспорядку и получению недетерминированного набора методов измерений проекта.
Каждая модель ЖЦ увязывается с конкретными методиками разработки систем и соответствующими стандартами в области программной инженерии. Иными словами каждый процесс ЖЦ подкрепляется выбранными для реализации задач средствами и методами.
Важную роль при формировании модели ЖЦ также имеют организационные аспекты, такие как:
· планирование последовательности работ и сроков их исполнения,
· подбор и подготовка ресурсов (людских, программных и технических) для выполнения работ,
· оценка возможностей реализации проекта в заданные сроки, в пределах указанной стоимости и др.
Существует множество моделей жизненного цикла программных средств, но три из них в международных стандартах обычно квалифицируются как фундаментальные: каскадная, эволюционная и инкрементная. Каждая из указанных моделей может быть использована самостоятельно или скомбинирована с другими для создания гибридной модели жизненного цикла конкретного проекта. При этом конкретную модель жизненного цикла системы или ПС следует выбирать так, чтобы процессы и задачи были связаны между собой, и определены их взаимосвязи с предшествующими процессами, видами деятельности и задачами.
2. Каскадная модель жизненного цикла
Каскадная (водопадная, последовательная) модель жизненного цикла наиболее известна и применяется достаточно широко. Данная модель предполагает строго последовательное (во времени) и однократное выполнение всех фаз проекта с жестким и детальным предварительным планированием в условиях предопределенных (т.е. однажды и целиком определенных и зафиксированных) требований к программной системе. В ее основе лежит имеющееся на первый взгляд сходство процесса разработки ПО со строительными или инженерными проектами. И В определенном порядке, который кажется естественным, необходимо выполнить ряд операций В строительном проекте задача заключается в том, чтобы, имея хорошо понятный проект, определить все задачи, выделить соответствующие средства, определить действия и взаимозаменяемые компоненты, а затем выполнять задания так, чтобы бюджет и/или критический путь были минимальными..
Коротко описать каскадный (водопадный) процесс можно следующим образом. Вначале группа аналитиков собирала, анализировала и документировала требования. Когда требования были утверждены, начиналось проектирование; после проектирования шло написание кода. Каждая строка кода подлежала проверке, и только после ее утверждения ее разрешалось интегрировать в продукт. При этом считалось, что
· на каждой стадии разработки формируется законченный набор проектной документации, отвечающий критериям полноты и согласованности;
· то, что стадии разработки выполняются в логической последовательности, позволяет планировать сроки завершения всех работ и соответствующие затраты.
Принципиальной особенностью каскадного процесса является то, что переход на следующую стадию осуществляется только после того, как будет полностью завершена работа на текущей стадии, и возвратов на пройденные стадии не предусматривается. Пример каскадной модели ЖЦ показан на рис. 5.2.
Рис.5.2. Каскадная модель жизненного цикла
Нетрудно заметить, что каскадная модель имеет множество преимуществ, если ее использовать в проекте, для которого она достаточно приемлема:
· модель хорошо известна потребителям, не имеющим отношения к разработке и эксплуатации программ, и конечным пользователям (она часто используется другими организациями для отслеживания проектов, не связанных с разработкой ПО);
· она весьма доступна для понимания, так как преследуется простая цель -- выполнить необходимые действия;
· она проста и удобна в применении, так как процесс разработки выполняется поэтапно;
· она отличается стабильностью требований;
· она представляет собой шаблон, в который можно поместить методы для выполнения анализа, проектирования, кодирования, тестирования и обеспечения;
· она хорошо срабатывает тогда, когда требования к качеству доминируют над требованиями к затратам и графику выполнения проекта;
· она способствует осуществлению строгого контроля менеджмента проекта;
· при правильном использовании модели дефекты можно обнаружить на более ранних этапах, когда их устранение еще не требует относительно больших затрат;
· она облегчает работу менеджеру проекта по составлению плана и комплектации команды разработчиков;
· она позволяет участникам проекта, завершившим действия на выполняемой ими фазе, принять участие в реализации других проектов;
· она определяет процедуры по контролю за качеством, т.к. каждые полученные данные подвергаются обзору;
· ход выполнения проекта легко проследить с помощью использования временной шкалы (или диаграммы Гантта), поскольку момент завершения каждой фазы используется в качестве вехи, т.е. контрольной точки, позволяющей проанализировать достигнутые результаты.
В то же время, поскольку каскадная модель является механическим слепком со строительных или технических проектов, то в случае программного обеспечения она часто работает плохо. Причин для этого несколько.
1. При разработке ПО высок риск создания системы, не удовлетворяющей изменившимся потребностям пользователей. Практика показывает, что на начальной стадии проекта полностью сформулировать все требования к будущей системе не удается. Это происходит по двум причинам:
· пользователи не в состоянии сразу изложить все свои требования и не могут предвидеть как они изменятся в ходе разработки;
· за время разработки могут произойти изменения во внешней среде, которые повлияют на требования к системе.
(Сравните ситуации: если в процессе строительства моста руководителей проекта попросят добавить еще парочку полос для движения транспорта, то по этому поводу будет большой шум. А при разработке ПО изменение требований происходит достаточно часто).
2. В рамках каскадного процесса согласование получаемых результатов с пользователями производится только в точках, планируемых после завершения каждой стадии. При этом результаты могут корректироваться по замечаниям пользователей, но только в том случае, если эти замечания коренным образом не затрагивают технического задания. Таким образом, пользователи могут вынести свое окончательное суждение о системе только после того, как работа над ней будет полностью завершена. При этом если система не оправдала их ожиданий, приходится начинать новый проект, который может постигнуть та же участь.
3. Следующим узким местом каскадного процесса является тот факт, что спецификации программного обеспечения невозможно зафиксировать. Основополагающее допущение водопадного процесса заключается в том, что существует возможность правильного составления спецификаций проекта. В связи со сложностью процесса разработки программного обеспечения документация никогда не бывает полностью правильной. Очень сложно осмыслить то, как будет выполняться программа, как будут взаимодействовать все ее компоненты с такой степенью детализации, чтобы изложить проект на бумаге.
4. Программные проекты не определяются трудозатратами. Ф. Брукс был первым, кто заметил, что при разработке ПО практически невозможно четко определить объем выполняемых работ, не зависящий от количества работающих исполнителей. В связи со сложностью выполняемых задач все время возникают какие-то аспекты работы, требующие постоянного взаимного общения разработчиков друг с другом. Каждый разработчик должен быть уверен в том, что созданный им код будет работать совместно с кодом, созданным его коллегой. В связи с тем, что спецификации системы всегда являются неточными, разработчики не могут работать в точном соответствии с документацией. Координация действий является неотъемлемым элементом их работы. В результате, чем больше людей работает над проектом, тем ниже производительность каждого из них. Иногда самый надежный способ «потопить» проект - привлечь большое число людей к его выполнению.
5. Основные риски программных проектов смещены на завершающий этап работ. По мере выполнения строительного проекта его риск становится все меньше и меньше. Часто наибольший риск присутствует в начале проекта, на этапе рытья котлована и подготовки строительной площадки. К моменту выполнения отделочных работ он практически сводится к нулю, если только субподрядчики выполнят свои работы в соответствии с графиком и спецификациями. А в программных проектах все происходит с «точностью до наоборот». Наиболее рискованной частью разработки программных продуктов является объединение отдельных элементов системы.
6. При разработке ПО порядок работ не является фиксированным, а программные продукты являются абстрактными. Проводя аналогию со строительным проектом, мы не можем, например, выполнить строительство стен, пока не будет заложен фундамент, т.е. порядок работ достаточно фиксирован. Строительные проекты обладают вполне конкретными свойствами, которые позволяют определить процент выполненной работы. Перед руководителями программных проектов поставлена гораздо более сложная задача. Никто не может знать, сколько строк кода потребуется написать для завершения проекта. Так как это число изменяется по мере реализации проекта, то процент выполненной работы определить невозможно. Многие руководители пытаются бороться с такой неопределенностью, требуя дать точную оценку хода работ и точно указать время, требующееся для завершения той или иной задачи. Однако на практике может оказаться, что проекты, готовые по их мнению на 90%, на самом деле требуют еще 90% усилий.
Еще Фредерик Брукс во втором издании своего классического труда «Мифический человеко-месяц» обратил внимание на главный недостаток каскадной модели: «Основное заблуждение каскадной модели состоит в предположениях, что проект проходит через весь процесс один раз, архитектура хороша и проста в использовании, проект осуществления разумен, а ошибки в реализации устраняются по мере тестирования. Иными словами, каскадная модель исходит из того, что все ошибки будут сосредоточены в реализации, а потому их устранение происходит равномерно во время тестирования компонентов и системы». Однако реальный процесс разработки ПО никогда не укладывается в такую схему. Он носит, как правило, итерационный характер: результаты очередной стадии часто вызывают изменения в проектных решениях, выработанных на более ранних стадиях. Таким образом, постоянно возникает потребность в возврате к предыдущим стадиям и уточнении или пересмотре ранее принятых решений.
Тем не менее, каскадный процесс до сих пор находит практическое применение в тех случаях, когда жесткая структуризация работ и отсутствие возвратов являются методически оправданными. Это относится, прежде всего, к критически важным системам реального времени (таким как, например, управление авиационным движением или медицинским оборудованием), а также к масштабным проектам, в реализации которых задействовано несколько больших команд разработчиков. Модель работает устойчиво в тех случаях, когда требуется разработать новую версию уже существующего продукта или осуществить его перенос на новую платформу. Кроме того, каскадную модель жизненного цикла применяют организации. Имеющие большой практический опыт в создании программных систем определенного типа (например, бухгалтерский учет, начисление зарплаты и пр.) В этом случае при создании еще одного продукта того же типа вполне можно опираться на водопадный процесс. Чтобы адаптировать каскадный процесс к особенностям разработки ПО, были предприняты попытки его модификации, примером которой могут служить итерационная и V-образная модели жизненного цикла.
3. Классическая итерационная модель жизненного цикла ПО
При разработке больших программных систем на любом этапе жизненного цикла может возникнуть необходимость возвратов на предыдущие стадии. Причиной этого являются обнаружившиеся ошибки и неточности, допущенные на предыдущих шагах, а также изменение внешних требований к условиям эксплуатации системы. Необходимость учета таких возвратов послужила мотивом создания итерационной модели жизненного цикла (см. рис. 5.3). Классическая итерационная модель абсолютизирует возможность возвратов на предыдущие этапы.
Это обстоятельство всего лишь отражает главный аспект программных разработок, не опирающихся на объектно-ориентированное проектирование: стремление заранее предвидеть все ситуации использования системы и невозможность в подавляющем большинстве случаев достичь этого. Все традиционные технологии программирования направлены лишь на то, чтобы минимизировать возвраты. Но суть от этого не меняется: при возврате всегда приходится переделывать то, что уже считалось готовым. Иное положение с объектно-ориентированными технологиями, которые предполагают отказ от завершенности фаз и этапов. Вместо этого предлагается распределять наращивание функциональности и интерфейсных возможностей по итерациям, что позволяет ослабить требование переделки старого при возвратах. По существу, классическая схема остается верной, но только в рамках одной итерации и с одной важной поправкой: все полезное, что было сделано ранее, сохраняется. Понятно, что для программной системы в целом новый подход требует и новых моделей жизненного цикла, отражающих его особенности, отмеченные ранее.
Рис. 5.3. Классическая итерационная модель.
4. V-образная модель жизненного цикла разработки ПО
V-образная модель была создана как итерационная разновидность каскадной модели. В этой модели особое значение придается действиям, направленным на верификацию и аттестацию продукта. Тестирование продукта обсуждается, проектируется и планируется на ранних этапах жизненного цикла разработки. План приемки заказчиком разрабатывается на этапе планирования, а компоновочного испытания системы - на фазах анализа, разработки проекта и т.д. Этот процесс разработки планов испытания обозначен пунктирной линией между прямоугольниками V-образной модели. Помимо планов, на ранних этапах разрабатываются также и тесты, которые будут выполняться при завершении параллельных этапов (см. рис.5.4).
Рис. 5.4. V -образная модель жизненного цикла разработки ПО.
На фазе планирования проекта и требований определяются системные требования, и устанавливаются правила, по которым будут распределяться ресурсы организации с целью их соответствия поставленным требованиям. В случае необходимости на этой фазе выполняется определение функций для аппаратного и программного обеспечения. Анализ требований к продукту завершается созданием полной спецификации ожидаемой внешней линии поведения разрабатываемой программной системы. Архитектура или проектирование на высшем уровне определяет, каким образом функции ПО должны применяться при реализации проекта. На этапе детализированной разработки проекта определяются и документируются алгоритмы для каждого компонента, который был определен на фазе построения архитектуры. Эти алгоритмы впоследствии будут преобразованы в программный код на этапе кодирования, результатом которого является преобразование разработанных алгоритмов в готовое ПО. После чего следует модульное тестирование, в процессе которого выполняется проверка каждого закодированного модуля на наличие ошибок. Процесс интеграции и тестирования необходим для того, чтобы доказать, что ранее поэлементно испытанные модули работают в сборке также хорошо, как и по отдельности. Системное и приемочное тестирование проводится с целью проверки функционирования программной системы в целом, после помещения в ее аппаратную среду в соответствии со спецификацией требований к программному обеспечению. На этапе производства и эксплуатации программное обеспечение запускается в производство. На данной фазе предусмотрена также модернизация и внесение поправок в ПО.
Модель предусматривает также проведение приемочных испытаний (на рисунке не показаны), которые позволяют пользователю протестировать функциональные возможности системы на соответствие исходным требованиям. После этого ПО и окружающее его аппаратное обеспечение передаются для промышленной эксплуатации, а организация - разработчик обеспечивает сопровождение системы.
V-образная модель была разработана как разновидность каскадной модели, а значит, унаследовала от нее такую же последовательную структуру. Каждая последующая фаза начинается по завершению получения результативных данных от предыдущей фазы. Модель демонстрирует комплексный подход к определению фаз процесса разработки ПО. В ней подчеркнуты взаимосвязи, существующие между аналитическими фазами и фазами проектирования, которые предшествуют кодированию, после которого следуют фазы тестирования. Пунктирные линии означают, что эти фазы необходимо рассматривать параллельно.
При использовании V-образной модели при реализации проекта, для которого она в достаточной мере подходит, обеспечивается несколько преимуществ:
· модель проста в использовании (относительно проекта, для которого она является приемлемой);
· в модели особое значение придается планированию, направленному на верификацию и аттестацию разрабатываемого продукта на ранних стадиях его разработки;
· в модели предусмотрены аттестация и верификация всех внешних и внутренних полученных данных, а не только самого программного продукта;
· в V-образной модели определение требований выполняется перед разработкой проекта системы, а проектирование ПО -- перед разработкой компонентов;
· модель определяет продукты, которые должны быть получены в результате процесса разработки, причем каждые полученные данные должны подвергаться тестированию;
· благодаря модели менеджеры проекта может отслеживать ход процесса разработки, так как в данном случае вполне возможно воспользоваться временной шкалой, а завершение каждой фазы является контрольной точкой.
В то же время при использовании V-образной модели в проектах, для которых она не является в достаточной степени приемлемой, становятся очевидными ее недостатки:
· с ее помощью непросто справиться с параллельными событиями;
· в ней не учтены итерации между фазами;
· в модели не предусмотрено внесение динамических изменений на разных этапах жизненного цикла;
· тестирование требований в жизненном цикле происходит слишком поздно, вследствие чего невозможно внести изменения, не повлияв при этом на график выполнения проекта;
· в модель не входят действия, направленные на анализ рисков.
С целью преодоления этих недостатков V-образную модель можно модифицировать, включив в нее итерационные циклы, предназначенные для разрешения изменений в требованиях за рамками фазы анализа.
Подобно своей предшественнице, каскадной модели, V-образная модель лучше всего срабатывает тогда, когда вся информация о требованиях доступна заранее. V-образная модель -- это отличный выбор для систем, в которых требуется высокая надежность, таких как прикладные программы для наблюдения за пациентами в клиниках, а также встроенное ПО для устройств управления аварийными подушками безопасности в автомобилях.
5. Упрощенный процесс системного проектирования
Наиболее распространенный вариант водопадного процесса проистекает из дисциплины под названием системотехника, которая изучает проектирование, спецификации и верификацию компонентов комплексных систем. Эта наука получила свое развитие для решения задачи построения больших аэрокосмических систем, таких, например, как челночный воздушно-космический аппарат Space Shuttle.
Часто подобные системы бывают настолько велики, что их разработку необходимо разделить между несколькими компаниями. Одна из фирм, являющаяся генеральным подрядчиком, отвечает за проект в целом и за интеграцию системы. Системотехники компании -- генерального подрядчика собирают и анализируют технические требования к системе, а затем проектируют систему путем ее расчленения на ряд подсистем. Кроме того, они часто обдумывают и анализируют различные варианты расчленения и выбирают наиболее приемлемый из них. После определения подсистем системотехники устанавливают требования к ним.
Подсистемы могут разрабатываться субподрядчиками, которые по контракту обязуются выполнить разработку так, чтобы требования и спецификации подсистемы были удовлетворены. Разработанные подсистемы передаются генеральному подрядчику, который будет интегрировать их в итоговую систему. Системотехники генерального подрядчика проверяют, чтобы требования к подсистемам были удовлетворены, и наблюдают за процессом интеграции.
Некоторые программные системы достаточно велики, и их разработку распределяют между несколькими компаниями или между различными организациями одной большой корпорации. Компании, которые понимают, в чем заключается сущность схемы системного проектирования, могут применить ее к разработке программного обеспечения.
Сначала схема системного проектирования может показаться подходящим способом разработки больших программных систем. Многие ее этапы применимы к разработке программного обеспечения:
· сбор и анализ требований;
· разработка архитектуры (определение и составление спецификаций систем);
· разработка подсистем;
· интеграция и проверка.
Однако основополагающие допущения, на которых строится схема системного проектирования, не очень хорошо применимы к разработке программного обеспечения. Предполагается, что требования являются стабильными и что интерфейсы можно соответствующим образом указать еще до начала реализации. Практически же схема системного проектирования является особенно жестким вариантом водопадного процесса, унаследовавшим все его слабые стороны.
1. Классическое системное проектирование определяется документацией.
Работы по системному проектированию определяются формальными документами, разработанными проектировщиками и реализованными разработчиками. Проблема заключается в том, что документация никогда не бывает правильной. Системотехники полагаются на свое умение создать корректный документ. Все свои силы они прилагают к созданию спецификаций, которые, будучи один раз утвержденными, являются пригодными для проектирования каждой подсистемы. Любое изменение документации регулируется громоздкой процедурой согласования с головной организацией.
Т.е. схема системного проектирования, применяемая к разработке программного обеспечения, определяется, в сущности, некорректной документацией.
2. Интеграция является конечной, а не пошаговой операцией.
При использовании схемы системного проектирования подсистемы разрабатываются полностью, а на завершающей стадии проекта они объединяются в итоговую систему. Современные схемы разработки программного обеспечения требуют постоянной интеграции особенно сложных подсистем на этапе их реализации. Такая непрерывная интеграция позволяет лучше приспосабливать систему к возникающим изменениям. Кроме того, она обеспечивает способ регулировки степени риска проекта.
3. Одним из основных недостатков схемы системного проектирования являются ее часто сложные и противоречивые взаимосвязи между генеральным подрядчиком и субподрядчиками. Вместо того чтобы объединить свои усилия и направить их на получение хорошего проекта, генеральный подрядчик и субподрядчики разделяют свои обязанности по контракту. Субподрядчики отвечают за удовлетворение требований к подсистеме и не несут ответственности за то, чтобы целая система работала соответствующим образом. Некорректные спецификации являются проблемой генерального подрядчика. Неоднозначность спецификаций дает повод для того, чтобы искать виновных и перекладывать на них ответственность за неудачную разработку. Когда дела идут не так как нужно, генеральный подрядчик ждет, когда подсистема будет поставлена; субподрядчик ждет выделения средств на доработку подсистемы, вызванную некорректными спецификациями. Любое изменение требований или проекта является поводом для пересмотра условий контракта. А интеграция на завершающем этапе работ только усугубляет проблему. Расхождения могут быть не выявлены до тех пор, пока не будет потрачена большая часть средств.
Можно заметить, что предпосылки, лежащие в основе разработки программного обеспечения, такие как нестабильные требования и развивающийся проект, можно в равной степени применить и к системному проектированию.
6. Эволюционные и инкрементные модели жизненного цикла ПО
Уже десятки лет тому назад в своей книге «Мифический человеко-месяц» Фредерик Брукс писал: «В большинстве проектов первая построенная система едва ли пригодна к употреблению. Она может быть слишком медленной, слишком объемной, неудобной в использовании или обладать всеми тремя перечисленными недостатками. Нет другого выбора, кроме как начать с самого начала, приложив все усилия, и построить модернизированную версию, в которой решались бы все три проблемы.
В случае, когда в проекте используется новая системная концепция или новая технология, разработчик вынужден построить систему, которой впоследствии не воспользуется, поскольку даже при наилучшем планировании невозможно предвидеть достижение нужного результата.
Следовательно, вопрос менеджмента заключается не в том, создавать или нет экспериментальную систему, которой затем не воспользуются. Вы в любом случае так и сделаете. Единственный вопрос в том, нужно ли планировать создание продукта одноразового использования заранее или обещать поставить его заказчикам...»
В своей боле поздней работе под названием "No Silver Bullet, the Essence and Accidents of Programming" Брукс указывает на то, что большинство ошибок, возникающих при разработке ПО, все же связаны с неправильным пониманием концепции системы, а не с синтаксисом или логикой. Он подчеркивает положительный момент в применении методов быстрого прототипирования: «Самой тяжелой составляющей процесса построения программной системы является принятие однозначного решения о том, что именно необходимо построить. Ни одна из остальных составляющих работы над концепцией не представляет собой такую трудность, как определение детальных технических требований, включая все аспекты соприкосновения продукта с людьми, машинами и другими программными системами. Ни одна другая составляющая работы в такой степени не наносит ущерб полученной в результате системе, если она выполнена неправильно. Именно эту составляющую процесса разработки тяжелее всего исправить на более поздних этапах.
Следовательно, самая важная функция, которую выполняет разработчик клиентских программ, заключается в итеративном извлечении и уточнении требований к продукту. Ведь на самом деле клиент не имеет представления о том, что именно он хочет получить.
На данный момент времени одной из самых обещающих среди технологических попыток, сосредоточенных на сущности, а не на трудностях решения проблемы разработки ПО, является разработка методов и средств для ускоренного прототипиро-вания систем как составляющей итеративной спецификации требований».
Уоттс Хэмфри (WattsHumphrey), который известен как вдохновитель создания модели СММ, разработанной Институтом SEI, поддерживает Брукса в его подходе к важности требований и их разработки: «В большинстве систем заключен основной принцип, который включает в себя больше, чем незначительное эволюционное изменение. Система может изменить само эксплуатационное окружение. Поскольку пользователи могут рассуждать о том или ином явлении только в рамках известного им окружения, требования к таким системам всегда формулируются в рамках текущего окружения. Следовательно, эти требования непременно будут неполными, неточными и обманчивыми. Главной задачей для системного разработчика является изобретение процесса разработки, с помощью которого можно будет обнаружить, определить и разработать реальные требования. Этого можно достичь только при максимальном включении пользователя в процесс разработки и зачастую с помощью периодического тестирования прототипов или версий, полученных на ранних этапах разработки. Оказывается, что такие процессы всегда занимают больше времени, но неизменно в конце приводят к разработке лучшей системы намного быстрее, чем при использовании какой-либо другой стратегии».
Еще одним преимуществом, которое достигается за счет применения эволюционного подхода на основе организации итераций,является снижение неопределенности по завершению каждой итерации. В свою очередь, снижение неопределенности позволяет уменьшить риски. Рисунок 5.5 иллюстрирует некоторые идеи эволюционного подхода, предполагая, что итеративному разбиению может быть подвержен не только жизненный цикл в целом, включающий перекрывающиеся фазы - формирование требований, проектирование, конструирование и т.п., но и каждая фаза может, в свою очередь, разбиваться на уточняющие итерации, связанные, например, с детализацией структуры декомпозиции проекта - например, архитектуры модулей системы.
Именно это понимание необходимости построения экспериментальной, или прототипной системы привела к возникновению структурной, эволюционной модели быстрого прототипирования, модели RAD, и спиральной модели.
7. Модель прототипирования жизненного цикла разработки ПО
Быстрое прототипирование -- еще один результат недостатков водопадного процесса. Его основная цель - снять неопределенность в требованиях заказчика. С другой стороны, создание прототипа иногда полезно и для разработчика, который может сомневаться в приспосабливаемости продукта под конкретную операционную систему, форме диалога с пользователем или в эффективности реализуемого алгоритма.
Бернард Боар (BernardBoar) определил прототипирование как «метод, предназначенный для определения требований, при котором потребности пользователя извлекаются, представляются и разрабатываются посредством построения рабочей модели конечной системы -- быстро и в требуемом контексте». Т.е. прототип-- это рабочая модель системы, которая используется для уточнения требований к ней. Относительно высокая скорость реализации проекта при использовании метода прототипирования обеспечивается за счет планирования работ и участия заказчика в процессе разработки.
Структурная эволюционная модель быстрого прототипирования представлена на рис. 5.6.
Начало жизненного цикла разработки помещено в центре эллипса. Пользователь и программист разрабатывают предварительный план проекта, руководствуясь при этом предварительными требованиями. Используя методы ускоренного анализа, они совместно работают над определением требований и спецификаций для важнейших частей будущей системы. Планирование проекта -- это первое действие, с помощью которого получают документ, описывающий в общих чертах примерные графики и результативные данные.
Рис. 5.6. Структурная эволюционная модель быстрого прототипирования.
После планирования выполняется быстрый анализ, в процессе которого создается умышленно неполная высокоуровневая модель системы на уровне документации. В результате выполнения этой задачи получают документ, содержащий частичную спецификацию требований, который используется для построения исходного прототипа, создаваемого на последующих трех этапах, включающих проектирование базы данных и пользовательского интерфейса, а также разработку тех функций, которые определены в требованиях заказчика (см. рис.5.6).
Затем следует итерационный процесс быстрого прототипирования, в ходе которого разработчик проекта демонстрирует очередной прототип, а пользователь оценивает его функционирование. После этого определяются проблемы, которые устраняются совместными усилиями обеих сторон. Этот процесс продолжается до тех пор, пока пользователь не согласится с тем, что прототип в точности отображает системные требования. Получив одобрение пользователя, прототип преобразуют детальный проект, и настраивают систему на производственное использование. Именно на этом этапе настройки ускоренный прототип становится полнофункциональной системой, которая заменяет собой частичную систему, полученную в итерационном цикле прототипирования.
При разработке производственной версии продукта может возникнуть необходимость в дополнительных работах, таких как учет различных системных ресурсов, необходимых для обеспечения полной рабочей нагрузки, или ограничений по времени. После этого следуют тестирование системы в предельных режимах, определение измерительных критериев и настройка. На заключительной фазе происходит эксплуатация и сопровождение системы.
Не существует «правильного» способа использования метода прототипирования. Полученный результат может не пригодиться, может быть использован в качестве основания для последующей модернизации или превращен в продукт используемого процесса в зависимости от исходных целей. Понятно, что при использовании эволюционного прототипирования снижаются затраты и оптимизируется соблюдение графиков, поскольку каждый из его компонентов находит свое применение.
Модель быстрого прототипирования при правильном применении обладает следующими преимуществами:
· взаимодействие пользователя и/или заказчика с системой начинается на раннем этапе разработки;
· исходя из реакции заказчиков на демонстрацию текущего прототипа продукта, разработчики получают сведения об одном или нескольких аспектах поведения системы, благодаря чему сводится к минимуму количество неточностей в требованиях;
· за счет участия заказчика в процессе разработки снижается вероятность возникновения путаницы, искажения информации или недоразумений при определении системных требований, что, несомненно, приводит к созданию более качественного конечного продукта;
· в процесс разработки можно внести новые или неожиданные требования пользователя, что порой необходимо, так как реальность может отличаться от концептуальной модели;
· модель позволяет выполнять гибкое проектирование и разработку, включая несколько итераций на всех фазах жизненного цикла;
· при использовании модели заказчикам демонстрируются постоянные, видимые признаки прогресса в реализации проекта, что дает им возможность чувствовать себя более уверенно;
· возможность возникновения разногласий при общении заказчиков с разработчиками минимизирована;
· возможность наблюдать ту или иную функцию в действии побуждает к разработке дополнительных функциональных возможностей;
· благодаря меньшему объему доработок уменьшаются совокупные затраты на разработку;
· обеспечивается управление рисками;
· документация сконцентрирована на конечном продукте, а не на процессе его разработки;
· принимая участие в процессе разработки на протяжении всего жизненного цикла, пользователи в большей степени будут удовлетворены полученными результатами.
Недостатки структурной эволюционной модели быстрого прототипирования:
· модель может быть отклонена из-за создавшейся среди консерваторов репутации о ней как о методе разработки «на скорую руку»;
· разработанные прототипы часто страдают от неадекватной или недостающей документации;
· если цели прототипирования не согласованы заранее, процесс может превратиться в упражнение по созданию хакерского кода;
· с учетом создания рабочего прототипа, качеству всего ПО или долгосрочной эксплуатационной надежности может быть уделено недостаточно внимания.
· иногда в результате использования модели получают систему с низкой рабочей характеристикой, особенно если в процессе ее выполнения пропускается этап подгонки;
· при использовании модели решение трудных проблем может отодвигаться на будущее. В результате это приводит к тому, что последующие полученные продукты могут не оправдать надежды, которые возлагались на прототип;
· на итерационном этапе прототипирования быстрый прототип представляет собой частичную реализацию системы. Если выполнение проекта завершается досрочно, у конечного пользователя останется только лишь незавершенный продукт;
· несовпадение представлений заказчика и разработчиков об использовании прототипа может привести к необходимости создания другого пользовательского интерфейса;
· заказчик может предпочесть получить прототип, вместо того, чтобы ждать появления полной, хорошо продуманной версии;
· прототипирование вызывает зависимость и может продолжаться слишком долго. Нетренированные разработчики могут попасть в так называемый цикл «кодирование -- устранение ошибок», что приводит к дорогостоящим и незапланированным итерациям;
· разработчики и пользователи не всегда понимают, что когда прототип превращается в конечный продукт, все еще существует необходимость в традиционной документации. Если она отсутствует, модифицировать модель на более поздних этапах может оказаться более дорогостоящим занятием, чем просто не воспользоваться созданным прототипом;
· когда заказчики, удовлетворенные прототипом, требуют его немедленной поставки, перед менеджером программного проекта возникает соблазн пойти им навстречу;
· на заказчиков может оказать негативное влияние тот факт, что они не располагают информацией о точном количестве итераций, которые будут необходимы;
· на разработку системы может быть потрачено слишком много времени, так как итерационный процесс демонстрации прототипа и его пересмотр могут продолжаться бесконечно без надлежащего управления процессом. У пользователей может возникнуть стремление пополнять список элементов, предназначенных для прототипирования, до тех пор, пока проект ни достигнет масштаба, значительно превышающего рамки, определенные анализом осуществимости проектного решения;
· при выборе инструментальных средств прототипирования (операционные системы, языки программирования и алгоритмы) разработчики могут остановить свой выбор на менее подходящем решении, только чтобы продемонстрировать свои способности.
При использовании метода быстрого прототипирования необходимо помнить, что следует провести «реальный» анализ требований, осуществить проектирование и обратить внимание на качество с целью создания программы, допускающей сопровождение, точно так же, как и в любой другой модели жизненного цикла (хотя на эти действия может понадобиться меньше времени и ресурсов).
Менеджер проекта может быть уверен в необходимости применения структурной эволюционной модели быстрого прототипирования, если:
· требования не известны заранее, или непостоянны, или могут быть неверно истолкованы, или неудачно сформулированы;
· существует потребность в разработке пользовательских интерфейсов;
· нужна проверка концепции;
· осуществляются временные демонстрации;
· выполняется новая, не имеющая аналогов разработка (в отличие от эксплуатации продукта на уже существующей системе);
· разработчики не уверены в том, какую оптимальную архитектуру или алгоритмы следует применять;
· алгоритмы или системные интерфейсы усложнены;
· требуется продемонстрировать техническую осуществимость, когда технический риск высок;
· при разработке ПО проявляется средняя и высокая степень риска.
Эволюционное быстрое прототипирование можно успешно использовать в больших системах, в которых некоторые модели подвергаются прототипированию, а некоторые -- разрабатываются более традиционным образом. При этом оно часто применяется в комбинации с каскадной моделью: на начальном этапе проекта используется прототипирование, а на последнем -- фазы каскадной модели с целью обеспечения функциональной эффективности системы и ее качества.
Прототипирование всегда следует использовать вместе с элементами анализа и проектирования, применяемыми при объектно-ориентированной разработке. Быстрое прототипирование особенно хорошо подходит для разработки интенсивно используемых систем пользовательского интерфейса, таких как индикаторные панели для контрольных приборов, интерактивные системы, новые в своем роде продукты, а также системы обеспечения принятия решений, среди которых можно назвать подачу команд, управление или медицинскую диагностику.
8. Модель быстрой разработки приложений RAD (Rapid Application Development)
Разочарованные жесткостью водопадного метода, некоторые первопроходцы разработки программного обеспечения решили избрать другую крайность. Они сказали себе: «Давайте забудем об этих бесполезных требованиях и о документации проекта; она никогда не бывает правильной. Давайте просто создадим код». Для названия такого подхода иногда используют термин «совместная разработка прикладных систем» (свидетельствующий об участии потребителя в процессе разработки), или быстрая разработка прикладных систем (RAD -Rapid Application Development).
Основателем концепции RAD считается сотрудник компании IBM Джеймс Мартин, который в 1991 году опубликовал известную книгу, в которой детально изложил подход RAD и возможности его применения. В настоящее время средства разработки, основанные на RAD, имеют высокую популярность среди программистов.
Характерной чертой RAD является короткое время перехода от определения требований до создания полной системы. Метод основывается на создании последовательности прототипов, критический анализ которых производится заказчиком. В процессе такого анализа формируются требования к продукту.
Возможность такого подхода обусловлена тем, что при использовании модели RAD пользователь задействован на всех фазах жизненного цикла разработки проекта - не только при определении требований, но и при проектировании, разработке, тестировании, а также - при конечной поставке программного продукта.
Разработка каждого интегрированного продукта ограничивается четко определенным периодом времени, который, как правило, составляет не более 60 дней и называется временным блоком.
Возможность создания системы за 60 дней, причем без ущерба качеству, обеспечивается за счет использования мощных инструментальных средств разработки, высокого уровня повторного использования кода, а также осмысленных и выделенных ресурсов. В частности, подразумевается использование средств разработки графического пользовательского интерфейса и кодогенераторов. Такие инструментальные средства, как BorlandDelphi, BorlandC++ Builder, IBMLotus Domino Designer, Microsoft Visual Studio и другие.
Модель RAD проходит через следующие фазы (рис. 5.7):
· этап планирования требований -- сбор требований выполняется при использовании рабочего метода, называемого совместным планированием требований (Jointrequirementsplanning, JRP), который представляет собой структурный анализ и обсуждение имеющихся коммерческих задач;
· пользовательское описание -- совместное проектирование приложения (Jointapplicationdesign, JAD) используется с целью привлечения пользователей. На этой фазе проектирования системы, не являющейся промышленной, работающая над проектом команда зачастую использует автоматические инструментальные средства, обеспечивающие сбор пользовательской информации;
· фаза конструирования («до полного завершения») -- эта фаза объединяет в себе детальное проектирование, кодирование и тестирование, а также поставку программного продукта заказчику за определенное время. Сроки выполнения этой фазы в значительной мере зависят от использования генераторов кода, экранных генераторов и других типов производственных инструментальных средств;
· перевод на новую систему эксплуатации -- эта фаза включает проведение пользователями приемочных испытаний, установку системы и обучение пользователей.
Размещено на http://www.allbest.ru/
Рис. 5.7. Модель быстрой разработки приложений.
При использовании модели RAD в проекте, для которого она в достаточной степени приемлема, проявляются следующие преимущества:
· время цикла разработки сокращается благодаря использованию мощных инструментальных средств;
· требуется меньшее количество специалистов (поскольку разработка системы выполняется усилиями команды, осведомленной в предметной области);
· существует возможность произвести быстрый изначальный просмотр продукта;
· благодаря принципу временного блока уменьшаются затраты и риск, связанный с соблюдением графика;
· обеспечивается эффективное использование имеющихся в наличии ресурсов;
· постоянное присутствие заказчика сводит до минимума риск неудовлетворенности продуктом и гарантирует соответствие системы коммерческим потребностям;
· основное внимание переносится с документации на код, причем при этом справедлив принцип «получаете то, что видите» (Whatyouseeiswhatyouget, WYSIWYG);
· допускается повторное использование ранее разработанных компонентов;
В то же время, для проектов, для которых модель не подходит в полной мере, она не лишена недостатков:
· для реализации модели требуются разработчики и заказчики, которые готовы к быстрому выполнению действий ввиду жестких временных ограничений;
· невозможность участия пользователей на протяжении всего жизненного цикла может негативно сказаться на конечном продукте;
· при использовании этой модели необходимо достаточное количество высококвалифицированных разработчиков, умеющих применять выбранные инструментальные средства для сокращения времени разработки;
· использование модели может оказаться неудачным в случае отсутствия пригодных для повторного использования компонентов;
· существует риск, что работа над проектом никогда не будет завершена, - в связи с этим менеджер проекта должен сотрудничать как с командой разработчиков, так и с заказчиком, что позволит избежать появления замкнутого цикла.
Модель RAD подходит для использования в конкретном проекте в том случае, если ее применение обусловлено следующими причинами:
· в системах, которые поддаются моделированию (тех которые основаны на использовании компонентных объектов), а также в масштабируемых системах;
· в системах, требования для которых в достаточной мере известны;
· в случаях, когда конечный пользователь может принимать участие в процессе разработки на протяжении всего жизненного цикла;
· при невысокой степени технических рисков;
· при выполнении проектов, разработка которых должна быть выполнена в сокращенные сроки (как правило, не более чем за 60 дней);
· когда пригодные к повторному использованию части можно получить из автоматических хранилищ программных продуктов;
...Подобные документы
Общая характеристика основных моделей жизненного цикла: каскадная, инкрементная, спиральная. Стадия как часть процесса создания программного обеспечения, ограниченная определенными временными рамками и заканчивающаяся выпуском конкретного продукта.
презентация [159,1 K], добавлен 27.12.2013Понятие технологии разработки программы. Основа проектирования программного обеспечения. Модели жизненного цикла, возникшие исторически в ходе развития теории проектирования программного обеспечения. Спиральная (spiral), каскадная и итерационная модели.
презентация [1,0 M], добавлен 11.05.2015Понятие и этапы жизненного цикла программного обеспечения как некоторых событий, которые происходят с системой компьютера в процессе ее создания, внедрения и сопровождения. Модели данного процесса: каскадная, спиральная, их отличительные особенности.
доклад [33,5 K], добавлен 06.04.2015Требования к технологии проектирования программного обеспечения (ПО). Состав и описание стадий полного жизненного цикла ПО. Классификация моделей жизненного цикла ПО, их особенности. Методологии разработки ПО, приёмы экстремальный программирование.
презентация [874,4 K], добавлен 19.09.2016Особенности основных, вспомогательных и организационных процессов жизненного цикла автоматизированных информационных систем. Основные методологии проектирования АИС на основе CASE-технологий. Определение модели жизненного цикла программного продукта.
курсовая работа [1,8 M], добавлен 20.11.2010Понятие жизненного цикла программного обеспечения. Два вида деятельности, различаемые в технических проектах: проектирование и производство. Основные постулаты манифеста последователей гибких методологий. Базовые принципы экстремального программирования.
презентация [170,8 K], добавлен 14.08.2013Стадии жизненного цикла ИС и его стандарты. Методологии, поддерживающие спиральную модель. Каскадная и инкрементная модели, их достоинства и недостатки. Основные, вспомогательные и организационные процессы жизненного цикла. Сравнительный анализ моделей.
курсовая работа [186,4 K], добавлен 21.05.2015Схемы взаимодействия между заказчиком и разработчиком программного обеспечения. Качество программного обеспечения и определение основных критериев его оценка на современном этапе, особенности управления на стадиях жизненного цикла, анализ достаточности.
презентация [114,7 K], добавлен 14.08.2013Сферы применения методологии RAD. Особенности создания программного продукта, предназначенного для редактирования тестов. Рассмотрение моделей жизненного цикла: каскадная, спиральная. Этапы построения начальной контекстной диаграммы. Анализ DFD-диаграммы.
курсовая работа [1,9 M], добавлен 19.09.2012Характеристика программных средств, использованных при разработке сайта. Параметры аппаратных средств для демонстрации ПП. Особенности архитектуры программного обеспечения. Анализ модели жизненного цикла программного продукта. Построение Gant-диаграммы.
курсовая работа [886,9 K], добавлен 30.05.2015Анализ информационных потоков. Разработка структуры таблиц базы данных. Выбор CASE-средства для проектирования информационной системы и среды программирования. Разработка программных модулей (программного обеспечения). Подготовка справочных баз данных.
дипломная работа [6,8 M], добавлен 19.11.2013Основные области проектирования информационных систем: базы данных, программы (выполнение к запросам данных), топология сети, конфигурации аппаратных средств. Модели жизненного цикла программного обеспечения. Этапы проектирования информационной системы.
реферат [36,1 K], добавлен 29.04.2010Методология структурного анализа и проектирования информационных систем. Базовый стандарт процессов жизненного цикла программного обеспечения. Цели и принципы формирования профилей информационных систем. Разработка идеальной модели бизнес-процессов.
презентация [152,1 K], добавлен 07.12.2013Понятие технологии разработки программного обеспечения и модели жизненного цикла. Сущность объектно-ориентированного подхода. Строительные блоки, общие механизмы языка моделирования UML, диаграммы классов, состояний, взаимодействий и компонентов.
курсовая работа [262,5 K], добавлен 10.07.2014Анализ этапов и особенностей разработки оптимальной и функциональной ARIS-модели - программного продукта компании IDS Scheer для моделирования бизнес-процессов компании. Изучение основных концепций, методологий и подходов экстремального программирования.
контрольная работа [119,9 K], добавлен 04.06.2011Алфавит языка программирования C#. Лексемы языка программирования. Область действия переменных. Понятие классов и объектов. Структура программного модуля на С#. Управление процессом повторения вычислений. Продолжение цикла и модификация параметра цикла.
курсовая работа [557,1 K], добавлен 10.03.2014Основы методологии проектирования информационных систем, понятие их жизненного цикла. Основные модели жизненного цикла. Методология функционального моделирования SADT. Состав функциональной модели. Моделирование данных, характеристика case-средств.
реферат [327,5 K], добавлен 28.05.2015Цементирование обсадных колонн нефтяных скважин. Состав информационного обеспечения программного комплекса автоматизированного проектирования. Реализация инфологической модели и организация взаимодействия программного обеспечения с базой данных.
дипломная работа [2,3 M], добавлен 22.07.2013Анализ решений по автоматизации предметной области. Выбор методологии проектирования информационной системы. Обоснование выбора платформы. Взаимодействие приложения с источниками данных. Выбор жизненного цикла разработки программного обеспечения.
дипломная работа [3,7 M], добавлен 18.12.2010Понятие, сущность и структура жизненного цикла программного обеспечения, описание технологии его проектирования, разработки и сопровождения. Сущность и основные положения международного стандарта ISO/IEC 12207. Перечень основных принципов методологии RAD.
реферат [39,3 K], добавлен 30.11.2010