El modelado específico de dominio ( DSM ) es una metodología de ingeniería de software para diseñar y desarrollar sistemas, como software de computadora . Implica el uso sistemático de un lenguaje específico de dominio para representar las diversas facetas de un sistema.
Los lenguajes de modelado específicos de dominio tienden a soportar abstracciones de mayor nivel que los lenguajes de modelado de propósito general , por lo que requieren menos esfuerzo y menos detalles de bajo nivel para especificar un sistema determinado.
El modelado específico de dominio a menudo también incluye la idea de generación de código : automatizar la creación de código fuente ejecutable directamente desde los modelos de lenguaje específico de dominio. Al estar libre de la creación y el mantenimiento manual del código fuente, el lenguaje específico de dominio puede mejorar significativamente la productividad del desarrollador. [1] La confiabilidad de la generación automática en comparación con la codificación manual también reducirá la cantidad de defectos en los programas resultantes, mejorando así la calidad.
El lenguaje específico de dominio difiere de los intentos anteriores de generación de código en las herramientas CASE de la década de 1980 o las herramientas UML de la década de 1990. En ambos, los generadores de código y los lenguajes de modelado fueron creados por proveedores de herramientas. [ cita requerida ] Si bien es posible que un proveedor de herramientas cree un lenguaje y generadores específicos de dominio, es más normal que el lenguaje específico de dominio ocurra dentro de una organización. Uno o unos pocos desarrolladores expertos crean el lenguaje de modelado y los generadores, y el resto de los desarrolladores los usan.
Tener el lenguaje de modelado y el generador construidos por la organización que los utilizará permite un ajuste perfecto con su dominio exacto y en respuesta a los cambios en el dominio.
Los lenguajes específicos de dominio generalmente pueden cubrir una variedad de niveles de abstracción para un dominio en particular. Por ejemplo, un lenguaje de modelado específico de dominio para teléfonos móviles podría permitir a los usuarios especificar abstracciones de alto nivel para la interfaz de usuario , así como abstracciones de nivel inferior para almacenar datos como números de teléfono o configuraciones. De manera similar, un lenguaje de modelado específico de dominio para servicios financieros podría permitir a los usuarios especificar abstracciones de alto nivel para clientes, así como abstracciones de nivel inferior para implementar algoritmos de negociación de acciones y bonos.
Para definir un lenguaje, se necesita un lenguaje en el que escribir la definición. El lenguaje de un modelo se suele llamar metamodelo , por lo que el lenguaje para definir un lenguaje de modelado es un metametamodelo. Los metametamodelos se pueden dividir en dos grupos: los que se derivan de lenguajes existentes o son personalizaciones de estos, y los que se han desarrollado específicamente como metametamodelos.
Los meta-metamodelos derivados incluyen diagramas de relación de entidades , lenguajes formales , forma Backus-Naur extendida (EBNF), lenguajes de ontología , esquemas XML y Meta-Object Facility (MOF). Las fortalezas de estos lenguajes tienden a estar en la familiaridad y estandarización del lenguaje original.
El espíritu del modelado de dominios específicos favorece la creación de un nuevo lenguaje para una tarea específica, por lo que no sorprende que haya nuevos lenguajes diseñados como meta-metamodelos. La familia de lenguajes más utilizada es la de OPRR, [2] [3] GOPRR, [4] y GOPPRR, que se centran en dar soporte a las cosas que se encuentran en los lenguajes de modelado con el mínimo esfuerzo.
Muchos lenguajes de modelado de propósito general ya cuentan con herramientas de soporte disponibles en forma de herramientas CASE . Los lenguajes de dominio específico tienden a tener un tamaño de mercado demasiado pequeño para respaldar la construcción de una herramienta CASE a medida desde cero. En cambio, la mayor parte del soporte de herramientas para lenguajes de dominio específico se construye sobre la base de marcos de lenguaje de dominio específico existentes o mediante entornos de lenguaje de dominio específico.
Un entorno de lenguaje específico de dominio puede considerarse como una herramienta de metamodelado, es decir, una herramienta de modelado utilizada para definir una herramienta de modelado o una herramienta CASE. La herramienta resultante puede funcionar dentro del entorno de lenguaje específico de dominio o, con menos frecuencia, puede producirse como un programa independiente. En el caso más común, el entorno de lenguaje específico de dominio admite una capa adicional de abstracción en comparación con una herramienta CASE tradicional.
El uso de un entorno de lenguaje específico de dominio puede reducir significativamente el costo de obtener soporte de herramientas para un lenguaje específico de dominio, ya que un entorno de lenguaje específico de dominio bien diseñado automatizará la creación de partes del programa que son costosas de construir desde cero, como editores, navegadores y componentes específicos de dominio. El experto en el dominio solo necesita especificar las reglas y construcciones específicas del dominio, y el entorno de lenguaje específico de dominio proporciona una herramienta de modelado adaptada al dominio de destino.
La mayoría de los lenguajes específicos de dominio existentes se desarrollan con entornos de lenguajes específicos de dominio, ya sean comerciales como MetaEdit+ o Actifsource , de código abierto como GEMS o académicos como GME . La creciente popularidad de los lenguajes específicos de dominio ha llevado a que se agreguen marcos de lenguajes específicos de dominio a los IDE existentes, por ejemplo, Eclipse Modeling Project (EMP) con EMF y GMF , o en las herramientas DSL de Microsoft para fábricas de software .
El lenguaje de modelado unificado (UML) es un lenguaje de modelado de propósito general para sistemas con uso intensivo de software que está diseñado para soportar principalmente la programación orientada a objetos . En consecuencia, a diferencia de los lenguajes de dominio específico, UML se utiliza para una amplia variedad de propósitos en una amplia gama de dominios. Las primitivas que ofrece UML son las de la programación orientada a objetos, mientras que los lenguajes de dominio específico ofrecen primitivas cuya semántica es familiar para todos los profesionales de ese dominio. Por ejemplo, en el dominio de la ingeniería automotriz , habrá modelos de software para representar las propiedades de un sistema de frenos antibloqueo , o un volante , etc.
UML incluye un mecanismo de perfil que permite restringirlo y personalizarlo para dominios y plataformas específicos. Los perfiles UML utilizan estereotipos , atributos de estereotipo (conocidos como valores etiquetados antes de UML 2.0) y restricciones para restringir y extender el alcance de UML a un dominio en particular. Quizás el ejemplo más conocido de personalización de UML para un dominio específico es SysML , un lenguaje específico de dominio para ingeniería de sistemas .
UML es una opción popular para diversos enfoques de desarrollo basados en modelos, mediante los cuales artefactos técnicos como código fuente, documentación, pruebas y más se generan algorítmicamente a partir de un modelo de dominio. Por ejemplo, los perfiles de aplicación del estándar de documentos legales Akoma Ntoso se pueden desarrollar mediante la representación de conceptos y ontologías legales en objetos de clase UML. [5]