12.2. Семейства приложений
Один из наиболее эффективных подходов к повторному использованию базируется на понятии семейства приложений. Семейство приложений, или серия программных продуктов, – это набор приложений, имеющих общую архитектуру, отражающую специфику конкретной предметной области. Вместе с тем все приложения одной серии различны. Каждый раз при создании нового приложения повторно используется общее ядро семейства приложений. Далее в процессе разработки создается несколько дополнительных компонентов, а некоторые компоненты адаптируются согласно новым требованиям.
Существуют различные специализации семейств приложений, приведем некоторые из них.
1. Платформенная специализация, при которой для разных платформ разрабатываются свои версии приложения. Например, приложение может иметь версии для платформ Windows NT, Solaris или Linux. В данном случае функциональность приложения обычно не меняется; подвергаются изменениям только те компоненты, которые отвечают за взаимодействие с аппаратными средствами и операционной системой.
2. Конфигурационная специализация, при которой разные версии приложения создаются для управления различными периферийными устройствами. Например, разные версии системы безопасности могут зависеть от типа используемой радиосистемы. В этом случае изменяется функциональность приложения для того, чтобы соответствовать периферийным устройствам, и необходимо изменить те компоненты, которые связаны с периферийными устройствами.
3. Функциональная специализация, при которой создаются разные версии приложения для заказчиков с различными требованиями. Например, система автоматизации библиотек может иметь несколько модификаций в зависимости от того, где она применяется – в публичной, справочной или университетской библиотеке. В этом случае изменяются компоненты, реализующие функциональность системы, и добавляются новые компоненты.
Чтобы наглядно представить эту технологию повторного использования, рассмотрим архитектуру системы управления ресурсами, изображенную на рис. 12.7. Подобные системы используются в организациях для отслеживания активов (ресурсов, запасов) и управления ими. Например, система управления ресурсами энергосистемы должна отслеживать все стационарные энергообъекты и соответствующее оборудование. В университетах система управления ресурсами может отслеживать оборудование, используемое в учебных лабораториях.
Рис. 12.7. Обобщенная система управления ресурсами
Очевидно, системы управления ресурсами будут отличаться друг от друга в зависимости от типа ресурсов и от информации, необходимой для управления ими. Например, в приложении для энергосистемы не нужны средства, позволяющие изменять размещение ресурсов, так как все объекты энергосистемы стационарны. Однако система учета ресурсов для университета должна иметь такую возможность, так как оборудование может переходить из одной лаборатории в другую.
Тем не менее все эти системы должны предоставлять основные средства для управления ресурсами: возможность добавления и удаления ресурсов, формирование запросов, просмотр базы данных ресурсов и формирование отчетов. Следовательно, архитектура систем управления ресурсами будет одинакова для целого семейства приложений, в котором отдельные приложения поддерживают разные типы ресурсов.
Для того чтобы повторное использование систем было эффективным, на этапе создания архитектуры необходимо отделить основные средства системы от конкретной информации об управляемых ресурсах и от доступа пользователей к этой информации. На рис. 12.7 разделение достигнуто благодаря многоуровневой архитектуре, в которой на одном уровне встроены описания ресурсов, формирование экранных форм и отчетов. Верхние уровни системы используют эти описания в своих методах и не содержат конкретной информации о ресурсах. Посредством изменения уровня описаний можно создавать различные приложения управления ресурсами.
Конечно, такой тип систем можно выполнить в виде объектно-ориентированных, определив сначала объект абстрактного ресурса, а затем с помощью наследования – объект, зависящий от типа управляемого ресурса. В итоге такая архитектура будет немногим отличаться от архитектуры, изображенной на рис. 12.7. Однако для систем данного типа объектно-ориентированный подход не годится. Когда приложения рассчитаны на большие базы данных, содержащие миллионы записей, но относительно малое количество типов логических модулей (соответствующих объектам и сущностям), очевидно, что объектно-ориентированная система работает менее эффективно, чем системы с реляционными базами данных. На момент написания книги коммерческие объектно-ориентированные базы все еще остаются относительно медленными и не способными поддерживать сотни транзакций в секунду.
Подобно тому как посредством описаний новых ресурсов можно создавать новые члены семейства приложений, с помощью включения новых модулей на системном уровне в систему можно добавить новые функциональные возможности. Для создания библиотечной системы (рис. 12.8) адаптируем систему управления ресурсами, показанную на рис. 12.7. В результате в систему добавлены новые возможности для выдачи и возврата ресурсов и регистрации пользователей системой. На рис. 12.8 эти средства расположены справа. Так как программный доступ здесь не нужен, самый верхний уровень системы поддерживает доступ к ресурсам только на уровне пользователя.
Рис. 12.8. Библиотечная система
В целом адаптация версии приложения в процессе его разработки приводит к тому, что значительная часть кода приложения используется повторно. Более того, накопленный опыт часто можно использовать для разработки других систем, поэтому объединение разработчиков ПО в отдельную группу сокращает процесс их обучения. Так как тесты для большинства компонентов приложения также можно использовать повторно, то полное время, необходимое на разработку приложения, значительно уменьшается.
Процесс адаптации семейства приложений для создания нового приложения состоит из нескольких этапов, представленных на рис. 12.9. Детали процесса могут значительно отличаться для разных прикладных областей и для различных организаций.
Обобщенный процесс создания нового приложения состоит из следующих этапов:
1. Определение требований для нового приложения. Данный этап – обычный процесс разработки требований. Но так как система уже существует, естественно провести экспериментирование с ней и выявить те системные требования, которые необходимо изменить.
2. Выбор наиболее подходящего члена семейства приложений. Выполняется анализ требований, после чего выбирается наиболее подходящий член семейства, требующий внесения минимальных изменений.
3. Пересмотр требований. Как правило, появляется дополнительная информация, требующая внесения изменений в существующую систему, поэтому пересмотр требований на этом этапе позволяет уменьшить количество необходимых изменений.
4. Адаптация выбранной системы. Для системы разрабатываются новые модули, а существующие адаптируются к новым требованиям.
5. Создание нового члена семейства приложений. Для заказчика создается новый член семейства приложений. На этом этапе выполняется документирование ключевых особенностей системы, чтобы в дальнейшем ее можно было использовать как основу для разработки других систем.
Рис. 12.9. Процесс разработки нового члена семейства приложений
В процессе создания нового члена семейства приложений часто требуется найти некий компромисс между наиболее полным использованием существующих приложений и выполнением конкретных требований для нового приложения. Чем более детальны требования к системе, тем меньше вероятность, что имеющиеся компоненты будут соответствовать этим требованиям. Но практически всегда можно достигнуть определенного компромисса и ограничить объем изменений, вносимых в систему, тогда процесс создания новой системы выполняется быстро и с небольшими затратами.
За редким исключением, семейства приложений создаются из имеющихся приложений, т.е. организация создает приложения и затем при необходимости использует их как основу для разработки нового приложения. Но вместе с тем внесение изменений нарушает структуру приложения, поэтому рано или поздно принимается решение о создании семейства обобщенных приложений. В этом случае активно используются знания, собранные в процессе создания исходной группы приложений.
- З курсу
- З курсу
- Содержание
- Часть I. Инженерные основы программного обеспечения 10
- Часть II. Требования к программному обеспечению 33
- Часть III. Моделирование программного обеспечения 52
- Часть IV. Технологии разработки программного обеспечения 124
- Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения 145
- Часть VI. Управление проектом программного обеспечения 192
- Предисловие
- Часть I. Инженерные основы программного обеспечения
- 1. Введение в программную инженерию
- 1.1. Вопросы и ответы об инженерии программного обеспечения
- 1.2. Профессиональные и этические требования к специалистам по программному обеспечению
- 2. Системотехника вычислительных систем
- 2.1. Интеграционные свойства систем
- 2.2. Система и ее окружение
- 2.3. Моделирование систем
- 2.4. Процесс создания систем
- 2.5. Приобретение систем
- 3. Процесс создания программного обеспечения
- 3.1. Модели процесса создания программного обеспечения
- 3.2. Итерационные модели разработки программного обеспечения
- 3.3. Спецификация программного обеспечения
- 3.4. Проектирование и реализация программного обеспечения
- 3.5. Эволюция программных систем
- 3.6. Автоматизированные средства разработки программного обеспечения
- 4. Технологии производства программного обеспечения
- Часть II. Требования к программному обеспечению
- 5. Требования к программному обеспечению
- 5.1. Функциональные и нефункциональные требования
- 5.2. Пользовательские требования
- 5.3. Системные требования
- 5.4. Документирование системных требований
- 6. Разработка требований
- 6.1. Анализ осуществимости
- 6.2. Формирование и анализ требований
- 6.3. Аттестация требований
- 6.4. Управление требованиям
- 7. Матрица требований. Разработка матрицы требований
- Часть III. Моделирование программного обеспечения
- 8. Архитектурное проектирование
- 8.1. Структурирование системы
- 8.2. Модели управления
- 8.3. Модульная декомпозиция
- 8.4. Проблемно-зависимые архитектуры
- 9. Архитектура распределенных систем
- 9.1. Многопроцессорная архитектура
- 9.2. Архитектура клиент/сервер
- 9.3. Архитектура распределенных объектов
- 9.4. Corba
- 10. Объектно-ориентированное проектирование
- 10.1. Объекты и классы объектов
- 10.2. Процесс объектно-ориентированного проектирования
- 10.2.1. Окружение системы и модели ее использования
- 10.2.2. Проектирование архитектуры
- 10.2.3. Определение объектов
- 10.2.4. Модели архитектуры
- 10.2.5. Специфицирование интерфейсов объектов
- 10.3. Модификация системной архитектуры
- 11. Проектирование систем реального времени
- 11.1. Проектирование систем реального времени
- 11.2. Управляющие программы
- 11.3. Системы наблюдения и управления
- 11.4. Системы сбора данных
- 12. Проектирование с повторным использованием компонентов
- 12.1. Покомпонентная разработка
- 12.2. Семейства приложений
- 12.3. Проектные паттерны
- 13. Проектирование интерфейса пользователя
- 13.1. Принципы проектирования интерфейсов пользователя
- 13.2. Взаимодействие с пользователем
- 13.3. Представление информации
- 13.4. Средства поддержки пользователя
- 13.5. Оценивание интерфейса
- Часть IV. Технологии разработки программного обеспечения
- 14. Жизненный цикл программного обеспечения: модели и их особенности
- 14.1. Каскадная модель жизненного цикла
- 14.2. Эволюционная модель жизненного цикла
- 14.2.1. Формальная разработка систем
- 14.2.2. Разработка программного обеспечения на основе ранее созданных компонентов
- 14.3. Итерационные модели жизненного цикла
- 14.3.1 Модель пошаговой разработки
- 14.3.2 Спиральная модель разработки
- 15. Методологические основы технологий разработки программного обеспечения
- 16. Методы структурного анализа и проектирования программного обеспечения
- 17. Методы объектно-ориентированного анализа и проектирования программного обеспечения. Язык моделирования uml
- Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения
- 18. Документирование этапов разработки программного обеспечения
- 19. Планирование проекта
- 19.1 Уточнение содержания и состава работ
- 19.2 Планирование управления содержанием
- 19.3 Планирование организационной структуры
- 19.4 Планирование управления конфигурациями
- 19.5 Планирование управления качеством
- 19.6 Базовое расписание проекта
- 20. Верификация и аттестация программного обеспечения
- 20.1. Планирование верификации и аттестации
- 20.2. Инспектирование программных систем
- 20.3. Автоматический статический анализ программ
- 20.4. Метод "чистая комната"
- 21. Тестирование программного обеспечения
- 21.1. Тестирование дефектов
- 21.1.1. Тестирование методом черного ящика
- 21.1.2. Области эквивалентности
- 21.1.3. Структурное тестирование
- 21.1.4. Тестирование ветвей
- 21.2. Тестирование сборки
- 21.2.1. Нисходящее и восходящее тестирование
- 21.2.2. Тестирование интерфейсов
- 21.2.3. Тестирование с нагрузкой
- 21.3. Тестирование объектно-ориентированных систем
- 21.3.1. Тестирование классов объектов
- 21.3.2. Интеграция объектов
- 21.4. Инструментальные средства тестирования
- Часть VI. Управление проектом программного обеспечения
- 22. Управление проектами
- 22.1. Процессы управления
- 22.2. Планирование проекта
- 22.3. График работ
- 22.4. Управление рисками
- 23. Управление персоналом
- 23.1. Пределы мышления
- 23.1.1. Организация человеческой памяти
- 23.1.2. Решение задач
- 23.1.3. Мотивация
- 23.2. Групповая работа
- 23.2.1. Создание команды
- 23.2.2. Сплоченность команды
- 23.2.3. Общение в группе
- 23.2.4. Организация группы
- 23.3. Подбор и сохранение персонала
- 23.3.1. Рабочая среда
- 23.4. Модель оценки уровня развития персонала
- 24. Оценка стоимости программного продукта
- 24.1. Производительность
- 24.2. Методы оценивания
- 24.3. Алгоритмическое моделирование стоимости
- 24.3.1. Модель сосомо
- 24.3.2. Алгоритмические модели стоимости в планировании проекта
- 24.4. Продолжительность проекта и наем персонала
- 25. Управление качеством
- 25.1. Обеспечение качества и стандарты
- 25.1.1. Стандарты на техническую документацию
- 25.1.2. Качество процесса создания программного обеспечения и качество программного продукта
- 25.2. Планирование качества
- 25.3. Контроль качества
- 25.3.1. Проверки качества
- 25.4. Измерение показателей программного обеспечения
- 25.4.1. Процесс измерения
- 25.4.2. Показатели программного продукта
- 26. Надежность программного обеспечения
- 26.1. Обеспечение надежности программного обеспечения
- 26.1.1 Критические системы
- 26.1.2. Работоспособность и безотказность
- 26.1.3. Безопасность
- 26.1.4. Защищенность
- 26.2. Аттестация безотказности
- 26.3. Гарантии безопасности
- 26.4. Оценивание защищенности программного обеспечения
- 27. Совершенствование производства программного обеспечения
- 27.1. Качество продукта и производства
- 27.2. Анализ и моделирование производства
- 27.2.1. Исключения в процессе создания по
- 27.3. Измерение производственного процесса
- 27.4. Модель оценки уровня развития
- 27.4.1. Оценивание уровня развития
- 27.5. Классификация процессов совершенствования