Инженерия приложений и инженерия предметной области

Введение

В последние годы быстро развиваются такие направления программной инженерии, как построение ПС из ПИК; инженерные методы проектирования, которые характеризуются проверкой достижения показателей качества компонентов на этапах ЖЦ и оценкой затраченных ресурсов и стоимости. Главное место среди этих методов занимает компонентный подход к построению ПС, так как принцип использования готовых компонентов является основой этого подхода и стратегическим направлением повышения производительности разработчиков и обеспечения качества ПС.

Компонентный подход расширяет существующие методы программирования ПС этим принципом, а также проверкой правильности ПИК для надежного приспособления к новым условиям ПС, формализацией и приведением в порядок процесса разработки из них ПС соответственно требованиям заказчика. В результате получается значительное упрощение процесс разработки самих компонентов и ПС из них и соответственно уменьшение сроков и затрат на разработку ПС.

Исследования и разработки в области инженерии программирования, основанного на использовании готовых ранее разработанных ПИК привели к тому, что сформировалось и используются два инженерных направления применения разных видов готовых ПИК при создании новых ПС [4]:

1) инженерия построения новых одиночных ПС уникального типа из ПИК. Это направление получило название прикладная инженерия (application engineering), которой соответствует процесс производства конкретных ПС как совокупности компонентов, подсистем и ПИК одного класса, созданных раньше как самостоятельные программные продукты или как элементы процесса инженерии некоторой предметной области;

2) инженерия построения готовых частей систем в конкретной ПрО. Это направление получило название инженерия проблемной области (domain engineering), которой соответствует процесс классификации и фиксации ПИК многоразового пользования в рамках конкретной ПрО в виде готовых частей системы, самой системы или семейства систем. Данный процесс поддерживается системными инструментами обеспечения сбора, поиска, адаптации ПИК к новым условиям создаваемой системы семейства. Этим обеспечивается повторное использование не только элементов ПИК, а и инструментов поиска.

Обе разновидности инженерии базируются на объектно-ориентированных (ОО) методах анализа ПрО, методах проектирования классов объектов и образцов многоразового использования, которые создаются в разных системах и фиксируются как готовые решения для применения в других областях. Инженерность приложения и предметной области заключается в использовании в процессе проектирования методов поиска и оценки применимости ПИК, стоимости их приобретения и планирования работ по изготовлению из ПИК новых систем в заданные сроки. Инженерия ПИК предполагает проведение классификации и каталогизации готовых компонентов в специальных хранилищах для организации поиска, выбора с требуемыми функциями и характеристиками для последующего использования в новых проектах.

Анализ современных систем поддержки инженерии приложения (ОМТ, RUP, OOA/D и др.) показывает, что они ориентированы на разработку одиночных ПС и имеют такие недостатки:

1) отсутствует различие между разработкой и областью разработки для повторного использования и разработкой с повторным использованием. Областью разработки для повторного использования являются некоторые совокупности компонентов и подсистем. Процесс разработки с повторным использованием основывается на инструментальных средствах поиска и выбора готовых компонентов, которые создавались в процессе разработки одиночной системы для повторного использования;

2) повторное использование не базируется на модели ПрО, а ПИК создаются с ориентацией на создание отдельных одиночных программ;

3) отсутствует моделирование изменяемости компонентов в рамках одного приложения или нескольких приложений, которая может быть обеспечена использованием диаграмм классов UML с представлением изменяемых параметров и операций наследования, агрегации или параметризации.

Данные недостатки устраняются в рамках инженерии ПрО, для домена которой создается характеристическая модель, которая учитывает изменчивость параметров и разных характеристик для группы программных подсистем. Инженерия ПрО использует методы инженерии приложения по использованию ПИК и включает процессы корректировки и моделирования характеристик ПрО и их изменяемости; использует другие модели (Use Case, модели взаимодействия, переходов и т.п.) и механизмы повторного использования ПИК (хранение, поиск, оценивание, объединение).

Инженерия приложений фактически предназначена для создания целевых одиночных ПС из соответствующего набора ПИК, а инженерия предметной области ставит задачу создания множества программных систем для ПрО (домена) и совокупностей ПрО с выделением в этой ПрО отдельных функций или группы функций для проектирования подсистем, обладающих общими свойствами и характеристиками для многоразового использования в других доменах этой совокупности ПрО.

Инженерия ПИК

Большой объем накопленных программных продуктов мало используется при изготовлении новых систем, поэтому на тысячах предприятий продолжается дублирование разработки программ, которые массово используются. Инженерия ПИК является инструментом решения проблемы дублирования и сокращения времени и стоимости разработки новых ПС с одновременным снижением затрат и сложности

Инженерия ПИК ­– это систематическая и целенаправленная деятельность по подбору реализованных программных артефактов, и представленных в виде ПИК, анализу их функций для добавления в качестве готовых в проектируемую систему и их интеграция с другими компонентами. Согласно стандарту ISO/IEC 12207 эта деятельность классифицируется как организационная и планируемая инженерная деятельность, которая заключается в выявлении общих и специфических черт компонентов для принятия решений об их использовании в разработке новых ПС [1, 6-10].

ПИК нуждается во вложении капитала для их разработки, сохранении и приобретении. Системное применение ПИК оказывает содействие получению прибыли за счет экономии затрат на разработку, а менеджмент помогает принять решение по эффективному вкладу средств в ПИК, оценки рисков его использования и объемов отдачи от применения. Оценка риска выполняется по каждому атрибуту ПИК: сначала вычисляются ранги риска атрибутов, исходя из количества вопросов к ним, потом вычисляется уровень риска каждого атрибуту и всех атрибутов в целом.

Повторное использование базируется на любых порциях формализованных знаний, полученных от реализации завершенных разработок и зафиксированных в разнообразных формах: от конкретных параметризованных программных модулей к каркасам, архитектурам и средам.

Методология разработки системы из готовых компонентов основывается на изучении спектра задач во вновь разрабатываемой системе, выявлении в ней задач с общими подходами к их решению и нахождения подходящих ПИК с определением их возможностей и принятия решений о целесообразности применения в будущей системе.

Разработчику системы необходимо иметь большой опыт в представлении и не одной, а нескольких однотипных задач, чтобы суметь обнаружить их общность, определить приемы настройки на характерные для каждой задачи особенности и принять ответственное решение.

Базисом ПИК являются хранилища с информационным каталогом этих ПИК, соответствующих типичным функциям, которые настраиваются на новые условия с меньшими усилиями, чем новая разработка. Информационной основой подбора ПИК в специальных хранилищах является классификация и каталогизация.

Сущность классификации состоит в предоставлении информации о функциях, среде и требуемых ресурсов для ПИК, которые размещаются в информационных репозитариях программной продукции.

Каталогизация - это средство физического размещения готовых компонентов в каталоге репозитария после завершения их реализации в структуре некоторой ПС для организация поиска формализованных ПИК, оценки их пригодности для последующего использования.

Действия по классификации и каталогизации компонентов и ПИК являются систематическими и целенаправленными, необходимыми многим специалистам, которые заинтересованы в готовой программной продукции для решения своих задач. При этом с помощью каталога можно узнать о ПИК как о готовых деталях и правилах их соединения в программную конструкцию. Именно эта сторона и характеризует повторное использование, как систематическую деятельность по созданию и использованию каталога ПИК.

Систематическое повторное использование – это капиталоемкий подход, который предусматривает наличие двух процессов в ЖЦ разработки ПС.

Первый процесс – создание ПИК путем:

– изучения спектра решаемых задач предметной области, выявление среди них общих подходов к реализации;

– реализации задач и функций в виде компонентов, которые будут повторно используемыми компонентами;

– построение каталога, предназначенного для обеспечения поиска необходимых компонентов.

Для успешной реализации данного процесса необходимо иметь определенный опыт в решении нескольких подобных между собой задач, позволившими выявить как их общие черты, так и различия, чтобы найти общее решение для их реализации, а также приемы настройки на характерные для каждой задачи особенности.

Второй процесс – конструирование новых систем из готовых компонентов путем:

– понимания сущности новой разработки, цели ее создания и предъявляемых к ней требований;

– поиска в каталоге готовых компонентов, которые кажутся подходящими для их использования;

– сопоставление цели новой разработки с возможностями найденных ПИК и принятия решений о целесообразности их использования;

– применение отобранных ПИК и интеграция их в новую разработку с обеспечением необходимых соединений друг с другом.

Первый процесс требует вложения капитала, второй – получения прибыли за счет экономии трудозатрат. Инвестиции в повторное использование требуют оценки эффективности вложений капитала, прогнозирования сроков и объемов возврата вложений, оценки рисков и др. Бизнес повторного использования, как любой бизнес, требует специальных условий по менеджменту всей инженерной деятельности. Критерии успеха такого бизнеса определяются выполнением следующих условий:

– повторное использование должно обеспечиваться меньшими трудозатратами, чем разработка ПС как разовых продуктов;

– поиск пригодных для использования компонентов требует меньших трудозатрат, чем новая разработка их функций для нужд проектируемой системы;

– настройка компонентов на новые условия среды применения должна обеспечиваться меньшими трудозатратами, чем новая разработка.

Основная парадигма ПИК – “писать – один раз, выполнять – много раз, где угодно”. Архитектура, в которую встраивается готовый ПИК, поддерживает стандартные механизмы для работы с компонентами как со строительными блоками. Чтобы обеспечить высокий уровень использования ПИК они должны обладать такими основными свойствами: функциональность, удобство использования и качество реализации.

Разновидности ПИК. В качестве ПИК могут использоваться формализованные артефакты деятельности разработчиков ПС, которые отражают некоторую функциональность для применения в новых разработках. Под артефактом понимается реальная порция информации, которая может создаваться, изменяться и использоваться при выполнении деятельности, связанной с разработкой ПС различного назначения. Артефактами могут быть:

– промежуточные продукты процесса разработки ПС (требования, постановки задач, архитектура и др.);

– описания, полученные в процессе разработки ПС (спецификации, модели, каркас (framework и т.п.)

– готовые компоненты ПС или отдельные ее части;

– продукции, фреймы, диаграммы, паттерны и т.п.

К компонентам ПИК выдвигаются такие требования, как независимость от конкретной платформы, наличие стандартного интерфейса со средой, возможность взаимодействия с системами без внесения в них изменений.

Разработке ПС с помощью ПИК соответствует модель ЖЦ со следующими этапами:

– анализ объектов и отношений реализуемой ПрО для выявления ПИК, обладающих общими свойствами, присущими группам объектов этой области;

– адаптация имеющихся в базе ПИК и разработка новых компонентов, не представленных в этой базе и доведение их до уровня ПИК;

– разработка интерфейсов компонентов и их размещение в базе ПИК;

– интеграция ПИК для получения конфигурации создаваемой системы.

Повторные компоненты могут быть готовыми прикладными и общесистемными компонентами.

Прикладные компоненты выполняют отдельные задачи и функции прикладной области деятельности – ПрО (бизнес–домены, коммерция, экономика и т.п.), которые могут использоваться как готовые при разработке новых прикладных систем с их использованием.

К общесистемным компонентам относятся системные компоненты общего назначения и универсальные общесистемные сервисные средства, которые обеспечивают системное обслуживание и предоставление универсального сервиса для всех создаваемых программных систем разного назначения. К компонентами общего назначения относятся: трансляторы, редакторы тестов, системы генерации, интеграции, загрузчики и др. Они используются всеми прикладными системами в процессе их проектирования и выполнения. Универсальные системные компоненты обеспечивают функционирование любых (в том числе и прикладных) компонентов, обмен данными и передачей сообщений между всеми видами компонентов. К ним относятся ОС, СУБД, сетевое обеспечение, электронная почта и др.

Связь между прикладными и общесистемными средствами осуществляется через стандартные интерфейсы, обеспечивающие взаимодействие разных типов компонентов через механизмы передачи данных и сообщений.

На современном рынке программных продуктов циркулируют следующие виды готовых компонентов:

– структуры данных,

– процедуры и функции на ЯП высокого уровня,

– алгоритмы, программы,

– классы объектов и абстрактные классы,

– API – модули,

– Веб–ресурсы,

– сервисы и среда развертывания (например, компоненты типа Java Beans, CORBA, COM, .NET)

– готовые абстрактные решения – паттерны и фреймы.

Все многообразие видов и типов готовых компонентов требует от разработчиков их поиска и изучения для использования в новых ПС. Процесс разработки новых ПС с помощью разных видов ПИК является капиталоемким, в нем в качестве капитала выступают готовые ПИК, на применение которых затрачивается меньше средств, чем на повторную их разработку.

Спецификация ПИК

В качестве ПИК могут быть объекты, созданные в рамках объектно–ориентированного программирования с наследованием их реализации, а также компоненты в компонентном программировании, для них наследуется не реализация, а интерфейсы. При этом компонент обладает такими свойствами:

– связывания компонентов на последних этапах разработки ПС,

– инкапсуляции (компонент, как “черный ящик ” без вмешательств в код),

– наследования интерфейсов,

– повторное использование кода.

Для компонентов повторного использования сложилось несколько разных определений.

Определение 1. Компонент ПИК – это некоторая функция с определенными атрибутами, обеспечивающая функциональность, взаимодействие со средой и поведение.

Определения 2. Готовый к повторному использованию компонент представляет собой совокупность методов определенной сигнатуры и типов данных, которые передаются и возвращаются после выполнения метода.

Определение 3. ПИК – это самостоятельный программный элемент, который удовлетворяет определенным функциональным требованиям, требованиям архитектуры, структуры и организации взаимодействия в заданной среде, имеет спецификацию, помогающую пользователю объединять его с другими компонентами в интегрированную ПС.

Нас более всего интересует последнее определение компонента, модель спецификации которого имеет вид:

ПИК = ( T, I, F, R, S),

где T – тип компоненты, I – множество интерфейсов компонента; F – функциональность компонента; R – реализация (скрытая часть) – программный код;

S – сервис для взаимодействия со средой или шаблон развертывания.

Каждый из элементов спецификации компонента представляет собою видимую или скрытую от пользователя часть его абстракции.

В зависимости от сложности ПИК их можно разделить на следующие группы:

– простые компоненты (функция, модуль, класс и пр.);

– объекты–компоненты, имеющие интерфейс, функциональность и реализацию на любом ЯП, а также возможность дополнять спецификации шаблоном развертывания и интеграции;

– готовые к использованию ПИК (например, beans компоненты в Java, AWT компоненты, классы и др.);

– сложные ПИК типа каркасов, паттернов с элементами группирования из нескольких простых ПИК и взаимодействия между ними при решении одной общей задачи ПС.

Большое количество готовых компонентов требует от разработчиков и пользователей задания их категории, т.е. метаинформации о том, какие классы совместимы с заведомо определенными семантическими ограничениями описания ПИК, и состоят из:

– интерфейсов, которые реализуют компоненты,

– механизмов повторного использования,

– среды развертывания компонента

– сервиса, поддерживаемого компонентом,

– ролей, которые выполняют компоненты в ПС,

– формализованные языки описания ПИК.

Современная технология применения ПИК базируются на таких особенностях:

– отображение, как способность ПС анализировать самого себя и описывать свои возможности динамично во время выполнения, а не во время компиляции, что обеспечивает управление большинством свойств, событий и методов компонента;

– анализа компонента для определения его возможностей.

– отсутствие средств поддержки реинженерии программного компонента и необходимости задания параметров его разработки;

– способности компонента к рефакторингу т.е. к трансформации компонента с сохранением функциональности, но с возможным изменением структуры и исходного кода для повторного использования.

– сохранение параметров конфигурации (шаблонов отладки) в постоянной памяти для использования в нужное время;

– регистрация сообщений о событиях, полученных от других объектов либо через ссылки (например, beans компоненты и инструментарий архива в технологии JAVA), а также группирование компонентов в JAR файле для дальнейшего повторного использования;

– использование компонента в разных языковых средах;

– адаптация ПИК к разным контекстам их использования и выделение свойств, которые мешают повторному использованию и модификации для применения в конкретных целях.

Компоненты в отличие от объектов могут изменяться и пополняться новыми функциями и интерфейсами. Они конструируются в виде некоторой программной абстракции, состоящей из трех частей: информационной, внешней и внутренней.

Информационная часть содержит описание: назначение, даты изготовления, условия применения (ОС, платформа и т.п.), возможностей ПИК, среды окружения и др.

Внешняя часть – это интерфейс, который определяет взаимодействие компонента с внешней средой и с платформой, на которой он будет выполняться и включает следующие общие характеристики:

– интероперабельность – способность взаимодействовать с компонентами других сред;

– переносимость – способность компонента выполняться на разных платформах компьютеров;

– интеграционость – объединение компонентов на основе интерфейсов в более сложные ПС;

– нефункциональность – требование на обеспечение безопасности, надежности и защиты компонентов и данных.

Внутренняя часть компонента – это программный фрагмент кода, системная или абстрактная структура, представленные в виде проекта компонента, спецификации и выходного кода.

Данная часть компонента состоит из полей (рис.6.1):

– интерфейса (interfaces),

– реализации (implementation),

– схемы развертки (deployment).

Структурные части компонента
инженерия приложений и инженерия предметной области - student2.ru Интерфейс     ¨ Один или несколько; ¨ Уникальность именования в пределах системы; ¨ Клиентский или серверный (входной или выходной); ¨ Определенная сигнатура; ¨ Описание методов взаимодействия Реализация   ¨ Одна или несколько; ¨ Ориентация на конкретную платформу и операционное окружение ¨ Выбор конкретной реализации; ¨ Поддержка интерфейсов компонента Схема развертывания   ¨ Типовость процедуры развертывания; ¨ Управляемость; ¨ Настраиваемость на операционную среду; ¨ Модифицируемость

Рис.6.1. Структурные части компонента

Интерфейс компонента содержит обращения к другим компонентам через описание параметров средствами языков IDL или APL. В нем указываются типы данных и операции передачи параметров для взаимодействия компонентов друг с другом. Каждый компонент может реализовать совокупность интерфейсов. Интерфейс компонента – это видимая часть спецификации компонента, которая является неизменной и обязательной в описании компонента. Например, система Inspector Components предназначена для изменения необходимых параметров интерфейса компонента без вмешательства в его код.

Параметры интерфейса могут определяться типом ПИК и включать в себя инварианту спецификации с указанием: типа и названия компонента, входных и выходных параметров, методов компонента и др. В языке JAVA, например, можно определять такие типы компонентов: проекты, формы (AWT компоненты), beans компоненты, COBRA компоненты, RMI компоненты, стандартные классы-оболочки, БД, JSP компоненты, сервелети, XML документы, DTD документы и т.п.

Реализация – это код, который будет использоваться при обращении к операциям, определенным в интерфейсах компонента. Компонент может иметь несколько реализаций, например, в зависимости от операционной среды или от модели данных и соответствующей системы управления базами данных, которая необходима для функционирования компонента.

Развертка - это физический файл или архив, готовый к выполнению, который передается пользователю и содержит все необходимые инструкции для создания, настройки и функционирования компонента.

Компонент описывается в ЯП, не зависит от операционной среды (например, от среды виртуальной машины JAVA) и от реальной платформы (например, от платформ в системе CORBA), где он будет функционировать.

Расширением понятия компонента есть паттерн – абстракция, которая содержит описание взаимодействия совокупности объектов в общей кооперативной деятельности, для которой определены роли участников и их ответственность. Паттерн является повторяемой частью программного компонента, как схемы или взаимосвязи контекста описания решения проблемы.

Наши рекомендации