Введение
Доменная инженерия – это весь процесс повторного использования знаний предметной области при создании новых программных систем. Это ключевое понятие в систематическом повторном использовании программного обеспечения и разработке семейств программных продуктов. Основной идеей систематического повторного использования программного обеспечения является предметная область (домен). Большинство организаций работают лишь в нескольких предметных областях. Они неоднократно создают схожие системы в рамках одной и той же предметной области, внося изменения для удовлетворения различных потребностей заказчиков. Вместо разработки каждого нового варианта системы с нуля, можно добиться значительной экономии, повторно используя части предыдущих систем в предметной области для создания новых. Процесс выявления предметных областей, определения их границ и обнаружения общих и изменяемых характеристик систем в предметной области называется анализом предметной области. Эта информация фиксируется в моделях, которые используются на этапе реализации предметной области для создания артефактов, таких как повторно используемые компоненты, язык, специфичный для предметной области, или генераторы приложений, которые могут быть использованы для создания новых систем в этой области. В разработке семейств программных продуктов, как это определено в ISO26550:2015, доменная инженерия дополняется прикладной инженерией, которая отвечает за жизненный цикл отдельных продуктов, полученных из семейства продуктов.
Цель
Доменная инженерия предназначена для повышения качества разрабатываемых программных продуктов за счет повторного использования программных артефактов. Доменная инженерия показывает, что большинство разрабатываемых программных систем – это не новые системы, а скорее варианты других систем в той же предметной области. В результате, благодаря применению доменной инженерии, предприятия могут максимизировать прибыль и сократить время выхода на рынок, используя концепции и реализации из ранее разработанных программных систем и применяя их к целевой системе. Снижение затрат заметно уже на этапе реализации. Одно исследование показало, что использование языков, специфичных для предметной области, позволило сократить размер кода – как по количеству методов, так и по количеству символов – более чем на 50%, а общее количество строк кода – почти на 75%. Доменная инженерия фокусируется на накоплении знаний, полученных в процессе разработки программного обеспечения. Разрабатывая повторно используемые артефакты, компоненты можно повторно использовать в новых программных системах с низкими затратами и высоким качеством. Поскольку это применимо ко всем фазам жизненного цикла разработки программного обеспечения, доменная инженерия также фокусируется на трех основных фазах: анализе, проектировании и реализации, что соответствует инженерной области приложений. Это позволяет получить не только набор компонентов реализации программного обеспечения, относящихся к предметной области, но и повторно используемые и конфигурируемые требования и проекты. Учитывая рост объемов данных в сети Интернет и развитие Интернета вещей, подход доменной инженерии становится актуальным и для других дисциплин. Появление сложных цепочек веб-сервисов подчеркивает относительность концепции сервиса. Веб-сервисы, разработанные и эксплуатируемые одной организацией, могут использоваться другой организацией как часть платформы. Поскольку сервисы могут использоваться в различных контекстах и, следовательно, требовать различных конфигураций, проектирование семейств сервисов может выиграть от применения подхода доменной инженерии.
Фазы
Инженерная область, подобно прикладной разработке, состоит из трех основных фаз: анализ, проектирование и реализация. Однако, в отличие от разработки программного обеспечения, которая ориентирована на одну систему, инженерная область ориентирована на семейство систем.
Анализ домена
Анализ домена используется для определения домена, сбора информации о домене и создания модели домена. С помощью моделей признаков (первоначально разработанных в рамках метода анализа домена, ориентированного на признаки), анализ домена направлен на выявление общих и вариативных аспектов в домене. Благодаря анализу домена становится возможной разработка конфигурируемых требований и архитектур, в отличие от статических конфигураций, которые были бы получены при использовании традиционного подхода к разработке приложений. Анализ домена существенно отличается от разработки требований, и поэтому традиционные методы вывода требований неэффективны для разработки конфигурируемых требований, характерных для модели домена. Для эффективного применения инженерии домена необходимо учитывать возможность повторного использования на ранних этапах жизненного цикла разработки программного обеспечения. Выбор признаков из разработанных моделей признаков позволяет уже на ранних стадиях рассмотреть возможность повторного использования технологий и эффективно применять это на протяжении всего процесса разработки. Анализ домена основывается главным образом на результатах, полученных из опыта работы в данной области. Однако, в отличие от разработки требований, анализ домена не ограничивается только сбором и формализацией информации, он также включает в себя творческий компонент. В процессе анализа домена инженеры стремятся расширить знания о домене, выходя за рамки уже известного, и классифицировать его по сходствам и различиям для повышения возможности реконфигурации. Эффективная модель домена включает в себя не только вариативные и общие признаки домена, но и определяет используемую в домене терминологию, а также концепции, идеи и явления, относящиеся к системе. Модели признаков декомпозируют концепции на обязательные и необязательные признаки, формируя полностью формализованный набор конфигурируемых требований.
Дизайн домена
Дизайн домена использует модель домена, полученную на этапе анализа домена, и направлен на создание обобщенной архитектуры, которой могут соответствовать все системы в рамках домена. Подобно тому, как прикладная инженерия использует функциональные и нефункциональные требования для разработки проекта, фаза проектирования домена в рамках инженерии домена берет конфигурируемые требования, разработанные на этапе анализа домена, и создает конфигурируемое, стандартизированное решение для семейства систем. Цель доменного дизайна – создание архитектурных шаблонов, решающих общую проблему для систем в пределах домена, несмотря на различные конфигурации требований. Помимо разработки шаблонов в процессе доменного дизайна, инженеры должны также определить область применения шаблона и степень релевантности контекста. Ограничение контекста критически важно: избыточный контекст делает шаблон неприменимым ко многим системам, а недостаточный – недостаточно эффективным для практического использования. Эффективный шаблон должен быть как часто встречающимся, так и обладать высоким качеством. Задача доменного дизайна – удовлетворить как можно больше требований домена, сохраняя при этом гибкость, обеспечиваемую разработанной моделью признаков. Архитектура должна быть достаточно гибкой, чтобы соответствовать всем системам в домене, и в то же время достаточно строгой, чтобы служить надежной основой для решения.
Реализация домена
Реализация домена — это создание процесса и инструментов для эффективного создания специализированной программы в данной области.
Критика
Доменная инженерия подвергается критике за чрезмерную сосредоточенность на "разработке для повторного использования" или "разработке с использованием повторно используемых компонентов" общих программных функций, вместо того чтобы концентрироваться на "разработке для применения", обеспечивающей интеграцию в дизайн программного обеспечения индивидуального мировоззрения, языка или контекста.