
- •Архитектуры баз данных. Преимущества и недостатки
- •Реляционные базы данных, основные понятия.
- •Понятия и терминология, связанные с таблицей реляционной базы данных
- •1.4.1. Отношение "один-ко-многим"
- •Отношение "один-к-одному"
- •Отношение "многие-ко-многим"
- •Понятия терминология, связанные с полем таблицы
- •Понятия ключевых атрибутов для таблиц и индексов.
- •1.7. Индексы и методы доступа
- •Реляционные отношения и целостность данных. Пример
- •1.4.1. Отношение "один-ко-многим"
- •1.4.2. Отношение "один-к-одному"
- •1.4.3. Отношение "многие-ко-многим"
- •1.4.4. Связь между записями одной таблицы
- •1.5. Ссылочная целостность и каскадные воздействия
- •Навигационный и sql ориентированный подход к обработке данных.
- •Нормализация данных. Первая нормальная форма. Пример
- •Нормализация данных. Третья нормальная форма. Пример
- •Индексы. Определение, назначение, характеристики.
- •Жизненный цикл программного обеспечения. Модели жизненного цикла.
- •Основные этапы программирования (структурный, rad технологии, case технологии). Кризис программирования.
- •Методология системного анализа и системного моделирования. Диаграммы idefo.
- •Язык uml. Назначение.
- •Статические диаграммы uml (варианты использования, классов)
- •Диаграммы поведения uml ( состояний, последовательности, деятельности).
- •Основные принципы организации процесса разработки по по rup.
- •Понятие rup. Основные принципы. Структура процесса проектирования. Инструментальная поддержка.
- •Статическая структура описания rup. Понятия исполнителей и артефактов. Основные технологические процессы.
- •Технологический процесс управления проектом.
- •Технологический процесс процесса моделирования производства. 6 сценариев разработки моделей.
- •Технологический процесс управления требованиями
- •Технологический процесс анализа и проектирования
- •Технологический процесс реализации
- •Технологический процесс тестирования
- •Технологический процесс управления конфигурацией и изменениями
- •Технологический процесс управления средой
- •Технологический процесс распространения
- •Конфигурирование и реализация rup
Основные принципы организации процесса разработки по по rup.
Rational Unified Process – это процесс разработки программного обеспечения, созданный и распространяемый корпорацией Rational Software. Это – упорядоченный подход к распределению задач и обязанностей в организации-разработчике и управлению ими. Цель этого процесса – создать в рамках прогнозируемого бюджета и графика работ программное обеспечение высокого качества, отвечающее требованиям конечного пользователя.
В Rational Unified Process собраны многие из лучших методов организации производственных работ в современной области разработки программного обеспечения. Эти методы представлены в адаптируемой форме, подходящей для множества проектов и организаций Rational Unified Process оперативно доносит все указанные методы к проектной группе, причем делает это в достаточно удобной форме.
Различные проекты разработки программного обеспечения терпят неудачу (к сожалению, ''провалом" заканчивают слишком многие). Мы можем выделить несколько основных показателей, характеризующих "провал" проектов1.
Неточное понимание нужд конечных пользователей
Неспособность работы в условиях меняющихся требований
Продукт состоит из несовместимых модулей
Программное обеспечение трудно поддерживать или расширять
Позднее обнаружение существенных изъянов проекта
Плохое качество программного обеспечения
Неприемлемая производительность
Каждый сотрудник занимается чем-то своим, причем непонятно, кто, когда, где и зачем что-либо меняет
Ненадежный процесс создания-выпуска
Хотя различные проекты "проваливаются" по различным причинам, похоже, что большинство неудам происходит вследствие сочетания следующих основных причин.
Неумелое управление специальными требованиями
Неопределенная и неточная связь
"Хрупкая" архитектура
Чрезмерная сложность
Необнаруженные противоречия в требованиях, проектах и реализациях
Недостаточное тестирование
Субъективная оценка состояния проекта
Неспособность справиться с реализовавшимся риском
Неуправляемое распространение изменений
Недостаточная автоматизация
Как лучше всего организовать процесс разработки
Своевременное распознание причины позволяет не только устранить ее симптомы, но и занять более выгодное положение с точки зрения разработки и поддержки качественного программного обеспечения посредством процесса, который можно повторить, а результаты действия которого можно предсказать.
Предлагаемые лучшие советы по организации производственных работ – это коммерчески доказанные подходы к разработке программного обеспечения, которые, будучи использованными вместе, устраняют основные причины проблем, возникающих при разработке программного обеспечения2. Они являются "лучшими" не потому, что им можете точно определить их ценность, а скорее потому, что их широко используют преуспевающие организации.
Итак, предлагаемые советы по организации производственных процессов можно сформулировать следующим образом:
Разрабатывайте итеративно
Управляйте требованиями
Пользуйтесь модульными архитектурами
Используйте визуальное моделирование
Не забывайте о проверке качества
Следите за изменениями
Разрабатывайте итеративно
Классический подход к разработке программного обеспечения включает водопадный жизненный цикл, показанный на рис. 1.1. При таком подходе разработка последовательно проходит фазы анализа требований, проектирования, программирования и тестирования элементов, а также тестирования подсистемы и всей системы в целом.
Основной проблемой описанного подхода является рост риска со временем; так что устранять ошибки предыдущих фаз становится слишком дорого. Первоначальный проект, наверняка, будет иметь изъяны в ключевых требованиях, и, более того, позднее обнаружение проектных недоработок может привести к перерасходу средств или отказу от проекта. Как сказал Том Гилб (Tom Gilb): “Если вы активно не нападете на риски вашего проекта, они активно нападут на вас”. Водопадный подход имеет тенденцию к «маскировке» действительных рисков до тех пор, пока не будет слишком поздно на них реагировать.
Рис.1.1 Водопадный жизненный цикл.
Альтернативой водопадному подходу является поэлементный итеративный процесс, показанный на рис. 1.2. При таком подходе, основанном ни спиральной модели Барри Боема (Barry Boehm) , установление рисков, угрожающих проекту, осуществляется на более ранних этапах жизненного цикла, когда еще можно эффективно и своевременно реагировать на них. С помощью данного подхода осуществляется непрерывное обнаружение, исследование и реализация, причем при каждой итерации группа разработчиков управляет артефактами проекта в целях их постепенного сближения.
Итеративный подход множество решений, устраняющих основные причины проблем и процессе разработки программного обеспечения.
Существенные недоразумения становятся очевидными на ранних этапах жизненного цикла, когда еще можно принять меры по их устранению.
Описанный подход способствует установлению обратной связи с пользователем в целях выяснения истинных требований к системе.
Группы разработчиков сосредотачивается на особо важных вопросах проекта, а не на тех, которые только отвлекают внимание команды от действительно опасных моментов.
Непрерывное итеративное тестирование позволяет объективно оценить состояние проекта.
Противоречия в требованиях, проектах и реализациях выявляются раньше.
Нагрузка команды (особенно команды тестирования) возрастает по мере развития проекта.
Команда может обучаться и вследствие этого непрерывно улучшать процесс.
На протяжении всего жизненного цикла проекта его организаторы могут получать реальное представление о текущем состоянии проекта.
Рис.1.2 Поэлементный итеративный процесс
Управляйте требованиями
Сложность управления требованиями преимущественно программных систем состоит в динамичности этих требований; стоит ожидать, что в процессе развития проекта они изменятся. Более того, определение действительных требований системы – необходимых для достижения экономических и технических целей системы – является непрерывным процессом. Целиком определить системные требования до начала процесса разработки можно только для тривиальных систем. Действительно, при видоизменениях новой или модернизированной системы меняется и понимание пользователем требований к ней.
Вообще, требование – это условие или характеристика, которой должна соответствовать система. Активное управление требованиями включает три вида деятельности: установление, упорядочение и документирование функциональных возможностей и ограничений системы; оценка изменений требований и определение их влияния на систему; отслеживание и документирование решений и компромиссов.
Управление требованиями проекта предлагает множество решений, устраняющих основные причины проблем в процессе разработки программного обеспечения.
Управление требованиями позволяет упорядочить процесс разработки программного обеспечения.
Связь основывается на определенных требованиях.
Требования могут располагаться в соответствии с приоритетами; кроме того, их можно отфильтровать и отследить.
Возможна, объективна оценка функциональных возможностей и производительности.
Противоречия выявляются на более ранних этапах проекта.
При надлежащей инструментальной поддержке можно создать корпоративную базу данных системных требований, параметров и отслеживания, автоматически связываемую с внешними документами.
Пользуйтесь модульными архитектурами
Визуализация, спецификация, создание и документирование преимущественно программной системы – все это зависит от вида системы с различных точек зрения. Каждая из заинтересованных сторон – конечных пользователей, аналитиков, разработчиков, системных интеграторов, испытателей, технических редакторов и руководителей проекта – привносит свое видение проекта, причем каждый из них видит систему с какой-то своей точки зрения, которая, к тому же, может меняться и процессе развития проекта. Поэтому системная архитектура – это, вероятно, важнейший компонент, который может использоваться для управления этими различными точками зрения и, в связи с этим, управлять наращиваемым итеративным развитием системы во время ее жизненного цикла.
Системная архитектура включает решения относительно
Организации программной системы;
Выбора структурных элементов и их интерфейсов при формировании системы;
Поведения этих структурных элементов, обусловленного совместной их работой;
Формирования из структурных элементов и линий их поведения постепенно укрупняющихся подсистем;
Архитектурного стиля, направляющего структуру, состоящую из элементов и их интерфейсов, а также их совместной работы и объединения.
Архитектура программного обеспечения связана не только с вопросами структуры и поведения, но также с вопросами использования, функциональных возможностей, производительности, эластичности, повторного использования, удобопонятности, экономических и технологических ограничений, компромиссов, а также вопросами эстетики.
Эластичность архитектуры характеризуется экономической возможностью повторного использования системы, что, в свою очередь, позволяет очевидным образом разделить работу между командами разработчиков, выделить зависимости от аппаратного и программного обеспечения, которые могут подвергаться изменениям, и сделать эксплуатацию более удобной.
Важным подходом
к архитектуре программного обеспечения
является модульная разработка
(component-based development— CBD), позволяющая повторно
использовать или настраивать
компоненты из множества коммерчески
доступных источников. Модель компонентных
объектов (component object model — СОМ) корпорации
Microsoft, архитектура CORBA (Common Object Request
Broker Architecture) группы Object Management Group и
Enterprise JavaBeans (EJB) от компании Sun Microsystems –
вот примеры распространенных и широко
поддерживаемых платформ, на которых
может использоваться модульная
архитектура. Как показано на рис.1.3,
компоненты делают возможным повторное
использование в значительных масштабах,
позволяют системам складываться из
существующих частей, готовых частей от
сторонних
производителей и нескольких
новых, которые относятся к определенным
областям и объединяют остальные
части.
Рис. 1.3. Модульная архитектура программного обеспечения
Итеративная разработка программного обеспечения с использованием модульной архитектуры связана с непрерывным развитием архитектуры системы. При каждой итерации создается реализуемая архитектура, которую можно измерить, протестировать и оценить по отношению к системным требованиям. Кроме того, этот подход позволяет команде непрерывно бороться с важнейшими рисками проекта.
Использование модульной архитектуры предлагает множество решений, устраняющих основные причины проблем в процессе разработки программного обеспечения.
Модули способствуют эластичности архитектуры.
При внесении изменений модульная структура позволяет явно разделить обязанности между элементами системы.
Благодаря стандартизованным конструкциям (таким, как СОМ+, CORBA и EJB) и коммерчески доступным компонентам возможно повторное использование системы.
На основе модулей естественным образом организовывается управление: конфигурацией.
Средства визуального моделирования автоматизируют модульную разработку.
Используйте визуальное моделирование
Модель — это упрощение действительности, которое полностью описывает систему с определенной точки зрения, как показано на рис. 1.4. Модель помогает лучше понять модулируемую систему. Кроме того, в сложных системах, которые невозможно представить полностью, без модели обойтись вообще невозможно.
Рис. 1.4. Моделирование системы с различных точек зрения
Моделирование — это важно, поскольку оно помогает команде разработчиков визуализировать, определять, создавать и документировать структуру и поведение архитектуры системы. Использование стандартного языка моделирования, такого как UML (Unified Model Language — унифицированный язык моделирования), позволяет членам команды разработчиков однозначно доносить свои решения друг другу.
Средства визуального моделирования облегчают управление моделями, позволяя показывать или скрывать подробности по мере надобности. Визуальное моделирование также способствует поддержанию непротиворечивости артефактов системы: требовании, проектов и реализаций. Иными словами, визуальное моделирование дает команде возможность бороться со сложностью программного обеспечения.
Применение итеративной разработки с использованием визуального моделирования позволяет выделять и оценивать изменения в архитектуре, а также сообщать о них всей команде разработчиков. Впоследствии во время каждой итерации можно, при наличии надлежащих средств, синхронизировать модели с исходными кодами.
Визуальное моделирование программного обеспечения предлагает множество решений, устраняющих основные причины проблем в процессе разработки программного обеспечения.
Прецеденты и сценарии однозначно определяют (от линии поведения).
Модели однозначно фиксируют структуру программного обеспечения.
Выявляются немодульные и неэластичные архитектуры.
При необходимости можно скрыть подробности.
В однозначных проектах более явно видны противоречия.
Качественные приложения начинается с хорошего проекта.
Средства визуального моделирования поддерживают моделирование на языке UML
Не забывайте о проверке качества
Как показано на рис. 1.5, поиск и исправление ошибок после распространения программного обеспечения обходится и 100-1000 раз дороже, чем до распространения. По этой причине важно постоянно определять качество системы, используя в качестве критериев ее функциональные возможности, надежность и эффективность.
Рис. 1.5. Цена исправления ошибок
Проверка функциональных возможностей системы (основная часть работы по тестированию) включает создание теста для всех ключевых сценариев, каждый из которых представляет некоторый аспект ожидаемого поведения системы. Определить функциональные возможности системы можно, выяснив, какие сценарии "сорвались", где это произошло и какие сценарии и соответствующие коды еще не были выполнены. Если уж вы разрабатываете программное обеспечение итеративно, то и тестирование следует проводить при каждой итерации, т.е. необходимо производить непрерывную качественную оценку.
Проверка качества программного обеспечения предлагает множество решений, устраняющих основные причины проблем в процессе разработки программного обеспечения.
Состояние проекта оценивается объективно, а не субъективно, поскольку оцениваются результаты тестов, а не то, что написано на бумаге.
Эта объективная оценка показывает противоречия в требованиях, проектах и реализациях.
Тестирование и контроль сосредоточены в областях наибольшего риска; следовательно, в этих областях повышается качество и эффективность системы.
Дефекты выявляются на более ранних этапах, что значительно снижает стоимость их исправления.
Автоматизированные средства тестирования позволяют тестировать функциональные возможности, надежность и производительность системы.
Следите за изменениями
Основной проблемой при разработке преимущественно программных систем является необходимость работы с множеством команд разработчиков, находящихся, возможно, в различных местах. Все они совместно работают с множественными итерациями, версиями, продуктами и платформами. При отсутствии строгого контроля процесс разработки быстро станет хаотичным.
Координация действий и артефактов, создаваемых отдельными разработчиками и целыми командами, включает определение технологических процессов, направленных на управление изменениями, вносимыми в программное обеспечение и другие производственные артефакты. Это позволяет лучше распределить ресурсы, основываясь на приоритетах и рисках проекта; кроме того, с помощью координации можно активно управлять работой над изменениями в различных итерациях. Такой подход, вместе с итеративной разработкой программного обеспечения, позволяет непрерывно наблюдать за изменениями, что способствует своевременному выявлению проблемы и быстрому реагированию на нее.
Координация итераций и версий включает установление и выпуск проверенной базовой линии в конце каждой итерации. Кроме того, для оценки влияния изменений и активного управления ими необходима возможность оперативного контроля над элементами каждой версии и одинаковыми элементами множественных параллельных версий.
Контроль над изменениями в программном обеспечении предлагает множество решений, устраняющих основные причины проблем в процессе разработки программного обеспечения.
Результаты каждого действия технологического процесса управления требованиями можно предсказать, а сам процесс повторить.
Запросы на внесение изменений способствуют установлению более надежной связи между группами разработчиков и заинтересованными сторонами.
Работа в обособленных группах устраняет взаимные помехи, возникающие между сотрудниками, параллельно выполняющими какое-либо задание.
Сбор статистических данных позволяет объективно оценить состояние проекта.
Рабочие среды содержат все артефакты, согласовывающие процесс.
Распространение изменений поддается оценке и контролю.
Изменения можно поддерживать в устойчивых, настраиваемых системах.
Существует четыре функции процесса разработки программного обеспечения.
Обеспечивать руководство последовательностью действий команды.
Определять, какие артефакты должны создаваться и когда.
Указывать, чем должны заниматься отдельные разработчики и целые команды.
Предлагать критерии наблюдения и измерения продуктов и видов деятельности проекта.
Rational Unified Process объединяет эти советы в форму, подходящую для значительного числа проектов и организаций.