- •Оглавление
- •Глава 1. Жизненный цикл программного обеспечения ……………………………………………43
- •Глава 2. Методические аспекты
- •Глава 3. Моделирование бизнес-процессов
- •Глава 4. Анализ и проектирование
- •Глава 5. Технологии создания программного
- •Глава 6. Оценка трудоемкости создания
- •Глава 7. Особенности современных проектов ........527
- •Предисловие
- •Введение
- •Глава 1 жизненный цикл программного обеспечения
- •Нормативно-методическое обеспечение создания по
- •Стандарт жизненного цикла по
- •Основные процессы жц по
- •Вспомогательные процессы жизненного цикла по
- •Организационные процессы жизненного цикла по
- •Взаимосвязь между процессами жц по
- •Модели жизненного цикла по
- •Каскадная модель жц
- •Итерационная модель жизненного цикла
- •Методика spmn
- •Пример процесса «управление требованиями»
- •Пример процесса «управление конфигурацией по»
- •Общие принципы проектирования систем
- •Визуальное моделирование
- •Структурные методы анализа и проектирования по
- •Метод функционального моделирования
- •Описание типов связей
- •Моделирования процессов idef3
- •Типы связей idef3
- •Типы соединений
- •Моделирование потоков данных
- •Количественный анализ диаграмм
- •Сравнительный анализ sadt-моделей и диаграмм потоков данных
- •Моделирование данных
- •Объектно-ориентированные методы анализа и проектирования по
- •Основные принципы построения объектной модели
- •Основные элементы объектной модели
- •Значения мощности
- •Унифицированный язык моделирования uml
- •Диаграммы вариантов использования
- •Диаграммы взаимодействия
- •Диаграммы классов
- •Диаграммы состояний
- •Диаграммы деятельности
- •Диаграммы компонентов
- •Диаграммы размещения
- •Механизмы расширения uml
- •Количественный анализ диаграмм uml
- •Основные элементы языка uml
- •Основные типы связей языка uml
- •Диапазоны оценок для диаграмм uml
- •Образцы
- •Сопоставление и взаимосвязь структурного и объектно-ориентированного подходов
- •Структурный (процессный) подход к моделированию бизнес-процессов
- •Принципы процессного подхода
- •Применение диаграмм потоков данных
- •Система моделирования aris
- •Метод ericsson-penker21
- •Пример использвания процессного подхода
- •История болезни пациента
- •Спецификация структур данных
- •Построение диаграмм потоков данных нулевого и последующих уровней
- •Объектно-ориентированный подход к моделированию бизнес-процессов
- •Методика моделирования
- •Пример использования объектно-ориентированного подхода
- •Пример спецификации требований к программному обеспечению
- •Пример структурного проектирования по
- •Построение диаграмм системных процессов и диаграмм последовательностей экранных форм
- •Объектно-ориентированный анализ
- •Архитектурный анализ
- •Анализ вариантов использования
- •Объектно-ориентированное проектирование
- •Проектирование архитектуры системы
- •Проектирование элементов системы
- •Глава 5 технологии создания программного обеспечения
- •Определение технологии
- •Общие требования, предъявляемые
- •Внедрение тс по в организации
- •Общие сведения
- •Определение потребностей в тс по
- •Оценка и выбор тс по
- •Критерии оценки и выбора тс по
- •Выполнение пилотного проекта
- •Практическое внедрение тс по
- •Примеры тс по
- •Технология rup (rational unified process)
- •Технология oracle
- •Технология borland
- •Технология computer associates
- •Глава 6 оценка трудоемкости создания программного обеспечения
- •Методы оценки и их классификация
- •Методика оценки трудоемкости разработки по на основе функциональных точек
- •Определение функциональных типов
- •Определение количества и сложности функциональных типов по данным
- •Сложность ilf и eif
- •Определение количества и сложности транзакционных функциональных типов
- •Подсчет количества функциональных точек
- •Зависимость количества fp от сложности функционального типа
- •Коммуникации данных
- •Распределенная обработка данных
- •Сложность ei
- •Сложность ео
- •Производительность
- •Эксплуатационные ограничения
- •Частота транзакций
- •Ввод данных в режиме «онлайн»
- •Эффективность работы конечных пользователей1
- •Онлайновое обновление
- •Сложная обработка31
- •Повторное использование
- •Простота установки
- •Простота эксплуатации
- •Количество возможных установок на различных платформах
- •Гибкость32
- •Оценка трудоемкости разработки
- •Размер программного обеспечения в fp и loc
- •Распределение временных затрат по стадиям для маленьких и больших проектов
- •Статистические данные
- •Статистические (регрессионные) модели
- •Группа процессов
- •Определение весовых показателей вариантов использования
- •Определение технической сложности проекта
- •Определение уровня квалификации разработчиков
- •Оценка трудоемкости проекта
- •Методы, основанные на экспертных оценках
- •Метод дельфи
- •Метод декомпозиции работ
- •Средства оценки трудоемкости
- •Планирование итерационного процесса создания по
- •Глава 7 особенности современных проектов
- •Категории «безнадежных» проектов
- •Причины, порождающие «безнадежные» проекты
- •Причины разногласий между участниками проекта
- •Переговоры в «безнадежном» проекте
- •Человеческий фактор в «безнадежных» проектах
- •Процессы в «безнадежных» проектах
- •Динамика процессов
- •Контроль над продвижением проекта
- •Технология и инструментальные средства «безнадежных» проектов
- •Дополнительная литература
- •Краткий словарь терминов
- •Список основных сокращений
Проектирование элементов системы
Проектирование элементов системы выполняется проектировщиками и включает в себя:
уточнение описания вариантов использования;
проектирование классов;
проектирование баз данных.
Уточнение описания вариантов использования
Уточнение описания вариантов использования заключается в модификации их диаграмм взаимодействия и диаграмм классов с учетом вновь появившихся на шаге проектирования классов и подсистем, а также проектных механизмов. Так, например, диаграммы взаимодействия варианта использования «Зарегистрироваться на курсы», изображенные на рис. 4.7 и 4.8, примут вид, показанный на рис. 4.29 и 4.30.
Объект класса CourseRegBDManager на рис. 4.29 играет роль интерфейса с объектной базой данных системы регистрации (предполагается, что данные о студентах, графиках и профессорах будут храниться в объектной БД).
Проектирование классов
Проектирование классов включает следующие действия:
детализация проектных классов;
уточнение операций и атрибутов;
моделирование состояний для классов;
уточнение связей между классами.
Детализация проектных классов. Каждый граничный класс преобразуется в некоторый набор классов, в зависимости от своего назначения. Это может быть набор элементов пользовательского интерфейса, зависящий от возможностей среды разработки, или набор классов, реализующий системный или аппаратный интерфейс.
Классы-сущности с учетом соображений производительности и защиты данных могут разбиваться на ряд классов. Основанием для разбиения является наличие в классе атрибутов с различной частотой использования или видимостью. Такие атрибуты, как правило, выделяются в отдельные классы.
Рис. 4.29. Кооперативная диаграмма «Зарегистрироваться на курсы» — основной поток событий
Классы, реализующие простую передачу информации от граничных классов к сущностям, могут быть удалены. Сохраняются классы, выполняющие существенную работу по управлению потоками событий (управление транзакциями, распределенная обработка и т.д.).
Полученные в результате уточнения классы подлежат непосредственной реализации в коде системы.
Рис. 4.30. Кооперативная диаграмма «Зарегистрироваться на курсы» -подчиненный поток «Создать график»
Уточнение операций и атрибутов. Обязанности классов, определенные в процессе анализа и документированные в виде операций «анализа», преобразуются в операции, которые будут реализованы в коде. При этом:
каждой операции присваивается краткое имя, характеризующее ее результат;
определяется полная сигнатура операции (в соответствии с нотацией, принятой в языке UML;
создается краткое описание операции, включая смысл всех ее параметров;
определяется видимость операции: public, private или protected;
определяется область действия операции: экземпляр (операция объекта) или классификатор (операция класса);
может быть составлено описание алгоритма выполнения операции (с использованием диаграмм деятельности в виде блок-схем, а также диаграмм взаимодействия различных объектов при выполнении операции).
Уточнение атрибутов классов заключается в следующем:
кроме имени атрибута, задается его тип и значение по умолчанию (необязательное);
учитываются соглашения по именованию атрибутов, принятые в проекте и языке реализации;
задается видимость атрибутов: public, private или protected;
при необходимости определяются производные (вычисляемые) атрибуты.
Пример уточнения операций и атрибутов приведен на рис. 4.31.
Моделирование состояний для классов. Если некоторый объект всегда одинаково реагирует на событие, то он считается независимым от состояния по отношению к этому событию. В отличие от него зависимые от состояния объекты по-разному реагируют на одно и то же событие в зависимости от своего состояния. Обычно в экономических ИС содержится очень мало объектов, зависимых от состояния, а системы управления технологическими процессами (системы реального времени) зачастую содержат множество таких объектов.
Если в системе присутствуют зависимые от состояния объекты со сложной динамикой поведения, то для них можно построить модель, описывающую состояния объектов и переходы между ними. Эта модель представляется в виде диаграмм состояний.
В качестве примера, связанного с системой регистрации, рассмотрим поведение объекта класса CourseOffering. Диаграмма состояний строится в несколько этапов:
Идентификация состояний. Признаками для выявления состояний являются изменение значений атрибутов объекта или создание и уничтожение связей с другими объектами. Так, объект CourseOffering может находиться в состоянии Open (прием на курс открыт) до тех пор, пока количество зарегистрировавшихся на него студентов не превышает 10, а как только оно станет равным 10, объект переходит в состояние Closed (прием на курс закрыт). Кроме того, объект CourseOffering может находиться в состоянии Unassigned (его никто не ведет, т.е. отсутствует связь с каким-либо объектом Professor) или Assigned (такая связь существует).
Рис. 4.31. Класс Student с полностью определенными операциями
и атрибутами
Идентификация событий. События связаны, как правило, с выполнением некоторых операций. Так, в классе CourseOffering в результате распределения обязанностей при анализе варианта использования «Выбрать курсы для преподавания» определены две операции — addProfessor и removeProfessor, связанные с выбором курса некоторым профессором (созданием новой связи) и отказом от выбранного курса (разрывом связи). Этим операциям ставятся в соответствие два события - addProfessor и removeProfessor.
Идентификация переходов между состояниями. Переходы вызываются событиями. Таким образом, состояния Unassigned и Assigned соединяются двумя переходами (рис. 4.32).
Рис. 4.32. Переходы между состояниями
Дальнейшая детализация поведения объекта CourseOffering приведет к построению диаграммы состояний, показанной на рис. 4.33. На данной диаграмме использованы такие возможности моделирования состояний, как композитные состояния (composite state) и историческое состояние (history state). В данном случае композитными состояниями являются Open и Closed, а вложенными состояниями — Unassigned, Assigned, Cancelled (курс отменен), Full (курс заполнен) и Committed (курс включен в расписание). Композитные состояния позволяют упростить диаграмму уменьшая количество переходов, поскольку вложенные состояния наследуют все свойства и переходы композитного состояния.
Историческое состояние (обозначенное на диаграмме окружностью с буквой «Н») — это псевдосостояние, которое восстанавливает предыдущее активное состояние в композитном состоянии. Оно позволяет композитному состоянию Open запоминать, какое из вложенных состояний (Unassigned или Assigned) было текущим в момент выхода из Open, для того, чтобы любой из переходов в Open (add student или remove student) возвращался именно в это вложенное состояние, а не в начальное состояние.
Рис. 4.33. Диаграммы состояний с композитными состояниями
Построение диаграмм состояний может оказать следующее воздействие на описание классов:
события могут отображаться в операции класса (например, события, связанные с изменением количества студентов, записавшихся на курс, могут быть отображены в операции addstudent и removestudent класса CourseOffering);
особенности конкретных состояний могут повлиять на детали выполнения операций;
описание состояний и переходов может помочь при определении атрибутов класса (например, значение количества студентов, записавшихся на курс (numStudents), может быть добавлено в класс CourseOffering в качестве производного атрибута).
Уточнение связей между классами. В процессе проектирования связи между классами (ассоциации, агрегации и обобщения) подлежат уточнению.
Ассоциации между граничными и управляющими классами отражают связи, динамически возникающие между соответствующими объектами в потоке управления. Для таких связей достаточно обеспечить видимость классов, поэтому они преобразуются в зависимости.
Если для некоторых ассоциаций нет необходимости в двунаправленной связи, то вводятся направления навигации.
Агрегации, обладающие свойствами композиции (см. подразд. 2.4.2), преобразуются в связи композиции.
Рис. 4.34. Пример преобразования ассоциаций и агрегаций
Пример преобразования связей в соответствии с данными рекомендациями для классов варианта использования «Зарегистрироваться на курсы», приведен на рис. 4.34. Ассоциация между управляющим и граничным классами преобразована в зависимость. Агрегация между классами Student и Schedule обладает свойствами композиции. Направления навигации на ассоциациях между классами Schedule и CourseOffering введены по следующим соображениям: нет необходимости в получении списка графиков, в которых присутствует какой-либо курс, и количество графиков относительно мало по сравнению с количеством конкретных курсов.
Рис. 4.35. Преобразование обобщения
Связи обобщения могут преобразовываться в ситуациях с так называемой метаморфозой подтипов. Например, в случае с системой регистрации студент может переходить с очной формы обучения на вечернюю, т.е. объект Student может менять свой подтип. При таком изменении придется модифицировать описание объекта в системе. Чтобы избежать этой модификации и тем самым повысить устойчивость системы, иерархия наследования реализуется с помощью классификации, как показано на рис. 4.35.
Проектирование баз данных
Проектирование БД зависит от типа используемой для хранения данных СУБД - объектной или реляционной. Для объектных БД никакого проектирования не требуется, поскольку классы-сущности непосредственно отображаются в БД. Для реляционных БД классы-сущности объектной модели должны быть отображены в таблицы реляционной БД. Совокупность таблиц и связей между ними может быть представлена, в виде диаграммы классов, которая по существу является ER-диаграммой. Набор правил, применяемых при отображении классов в таблицы БД, фактически совпадает с правилами преобразования сущностей и связей, описанными в подразд. 4.1. В технологии RUP, в частности, для такого отображения используется специальный инструмент — Data Modeler. Он выполняет преобразование классов-сущностей в классы-таблицы с последующей генерацией описания БД на SQL.
Для описания схемы БД применяется следующий набор элементов языка UML со своими стереотипами (профиль UML):
таблица представляется в виде класса со стереотипом «Table»;
представление изображается в виде класса со стереотипом «View»;
столбец таблицы представляется в виде атрибута класса с соответствующим типом данных;
обычная ассоциация и агрегация представляются в виде ассоциации со стереотипом «Non-Identifying» (в терминологии IDEF1X — неидентифицирующей связи);
композиция представляется в виде ассоциации со стереотипом «Identifying» (в терминологии IDEF1X — идентифицирующей связи);
схема БД представляется в виде пакета со стереотипом «Schema», содержащего классы-таблицы;
контейнер хранимых процедур представляется в виде класса со стереотипом «SP Container»;
ограничения целостности, индексы и триггеры представляются в виде операций классов-таблиц со стереотипами «РК» (Primary key), «FK» (Foreign key), «Unique», «Check», «Index» и «Trigger»;
физическая база данных представляется в виде компонента со стереотипом «Database».
Рис. 4.36. Пример неидентифицирующих связей
Примеры преобразования, выполненного для классов варианта использования «Зарегистрироваться на курсы» средствами Data Modeler, приведены на рис. 4.36 - 4.38.
На рис. 4.36 ассоциации-классы, представляющие свойства связей между классами Schedule и CourseOffering (см. рис. 4.16), преобразованы в таблицы в соответствии с правилом преобразования бинарных связей типа «многие-ко-многим».
Идентифицирующая связь между таблицами T_Student и T_Schedule на рис. 4.37 соответствует связи композиции между классами Student и Schedule на рис. 4.34.
На рис. 4.38 показано преобразование связи обобщения, изображенной на рис. 4.35. Здесь используется отдельная таблица для каждого подтипа (в соответствии с правилом из подразд. 4.1). Достоинства и недостатки различных способов преобразования обсуждались в подразд. 4.1). Преимуществом способа, применяемого в данном случае, является простота алгоритма автоматического преобразования, выполняемого средствами Data Modeler.
Рис. 4.37. Пример идентифицирующей связи
Рис. 4.38. Пример преобразования обобщения
! Следует запомнить
Целью объектно-ориентированного анализа является трансформация функциональных требований к ПО в предварительный системный проект и создание стабильной основы архитектуры системы. В процессе проектирования системный проект «погружается» в среду реализации с учетом всех нефункциональных требований.
Основные понятия
Архитектурные механизмы, архитектурные уровни, классы анализа, проектные классы, процесс, поток.
? Вопросы для самоконтроля
Перечислите правила формирования схемы базы данных из ERM.
К каким последствиям для системы может привести отсутствие архитектурного анализа?
Что дает использование образцов распределения обязанностей?
Какие классы нуждаются в моделировании состояний?
Охарактеризуйте достоинства и область применения методики анализа и проектирования Rational Unified Process.
