La ingeniería de dominio es el proceso completo de reutilización del conocimiento del dominio en la producción de nuevos sistemas de software . Es un concepto clave en la reutilización sistemática de software y la ingeniería de líneas de productos . Una idea clave en la reutilización sistemática de software es el dominio . La mayoría de las organizaciones trabajan solo en unos pocos dominios. Construyen repetidamente sistemas similares dentro de un dominio dado con variaciones para satisfacer las diferentes necesidades de los clientes. En lugar de construir cada nueva variante del sistema desde cero, se pueden lograr ahorros significativos al reutilizar partes de los sistemas anteriores en el dominio para construir otros nuevos.
El proceso de identificar dominios, delimitarlos y descubrir similitudes y variabilidades entre los sistemas en el dominio se denomina análisis de dominio . Esta información se captura en modelos que se utilizan en la fase de implementación del dominio para crear artefactos como componentes reutilizables, un lenguaje específico del dominio o generadores de aplicaciones que se pueden usar para construir nuevos sistemas en el dominio.
En la ingeniería de la línea de productos según la definición de ISO26550: 2015, la Ingeniería de dominio se complementa con la Ingeniería de aplicaciones que se encarga del ciclo de vida de los productos individuales derivados de la línea de productos. [1]
Propósito
La ingeniería de dominio está diseñada para mejorar la calidad de los productos de software desarrollados mediante la reutilización de artefactos de software. [2] La ingeniería de dominio muestra que la mayoría de los sistemas de software desarrollados no son sistemas nuevos sino variantes de otros sistemas dentro del mismo campo. [3] Como resultado, mediante el uso de la ingeniería de dominio, las empresas pueden maximizar las ganancias y reducir el tiempo de comercialización utilizando los conceptos y las implementaciones de los sistemas de software anteriores y aplicándolos al sistema de destino. [2] [4] La reducción de costos es evidente incluso durante la fase de implementación. Un estudio mostró que el uso de lenguajes específicos de dominio permitió que el tamaño del código, tanto en el número de métodos como en el número de símbolos , se redujera en más del 50%, y el número total de líneas de código se redujera en casi un 75%. [5]
La ingeniería de dominio se centra en capturar el conocimiento recopilado durante el proceso de ingeniería de software . Al desarrollar artefactos reutilizables, los componentes se pueden reutilizar en nuevos sistemas de software a bajo costo y alta calidad. [6] Debido a que esto se aplica a todas las fases del ciclo de desarrollo de software , la ingeniería de dominio también se enfoca en las tres fases principales: análisis, diseño e implementación, ingeniería de aplicaciones paralela. [7] Esto produce no solo un conjunto de componentes de implementación de software relevantes para el dominio, sino también requisitos y diseños reutilizables y configurables. [8]
Dado el crecimiento de los datos en la Web y el crecimiento de la Internet de las cosas , un enfoque de ingeniería de dominio también se está volviendo relevante para otras disciplinas. [9] La aparición de cadenas profundas de servicios web destaca que el concepto de servicio es relativo. Los servicios web desarrollados y operados por una organización pueden ser utilizados como parte de una plataforma por otra organización. Como los servicios pueden usarse en diferentes contextos y, por lo tanto, requieren diferentes configuraciones, el diseño de familias de servicios puede beneficiarse de un enfoque de ingeniería de dominio.
Etapas
La ingeniería de dominio, como la ingeniería de aplicaciones, consta de tres fases principales: análisis, diseño e implementación. Sin embargo, cuando la ingeniería de software se centra en un solo sistema, la ingeniería de dominio se centra en una familia de sistemas. [7] Un buen modelo de dominio sirve como referencia para resolver ambigüedades más adelante en el proceso, un depósito de conocimiento sobre las características y la definición del dominio, y una especificación para los desarrolladores de productos que son parte del dominio. [10]
Análisis de dominio
El análisis de dominio se utiliza para definir el dominio, recopilar información sobre el dominio y producir un modelo de dominio . [11] Mediante el uso de modelos de características (inicialmente concebidos como parte del método de análisis de dominio orientado a características ), el análisis de dominio tiene como objetivo identificar los puntos comunes en un dominio y los puntos variables en el dominio. [12] Mediante el uso del análisis de dominio, es posible el desarrollo de requisitos y arquitecturas configurables , en lugar de configuraciones estáticas que se producirían mediante un enfoque de ingeniería de aplicaciones tradicional. [13]
El análisis de dominio es significativamente diferente de la ingeniería de requisitos y, como tal, los enfoques tradicionales para derivar requisitos son ineficaces para el desarrollo de requisitos configurables como estarían presentes en un modelo de dominio. Para aplicar eficazmente la ingeniería de dominio, la reutilización debe considerarse en las primeras fases del ciclo de vida del desarrollo de software . Mediante el uso de la selección de características de los modelos de características desarrollados, la consideración de la reutilización de la tecnología se realiza muy temprano y se puede aplicar adecuadamente a lo largo del proceso de desarrollo. [14]
El análisis de dominio se deriva principalmente de artefactos producidos a partir de experiencias pasadas en el dominio. [11] Los sistemas existentes, sus artefactos (como documentos de diseño , documentos de requisitos y manuales de usuario ), estándares y clientes son fuentes potenciales de entrada de análisis de dominio. [11] [15] Sin embargo, a diferencia de la ingeniería de requisitos, el análisis de dominio no consiste únicamente en la recopilación y formalización de información; también existe un componente creativo. Durante el proceso de análisis de dominio, los ingenieros tienen como objetivo ampliar el conocimiento del dominio más allá de lo que ya se conoce y categorizar el dominio en similitudes y diferencias para mejorar la reconfigurabilidad. [11]
El análisis de dominio produce principalmente un modelo de dominio , que representa las propiedades comunes y variables de los sistemas dentro del dominio. [11] El modelo de dominio ayuda con la creación de arquitecturas y componentes de una manera configurable actuando como una base sobre la cual diseñar estos componentes. [16] Un modelo de dominio efectivo no solo incluye las características variables y consistentes en un dominio, sino que también define el vocabulario utilizado en el dominio y define conceptos, ideas y fenómenos dentro del sistema. [11] [17] Los modelos de características descomponen conceptos en sus características requeridas y opcionales para producir un conjunto completamente formalizado de requisitos configurables. [18]
Diseño de dominio
El diseño de dominio toma el modelo de dominio producido durante la fase de análisis de dominio y tiene como objetivo producir una arquitectura genérica a la que puedan ajustarse todos los sistemas dentro del dominio. [19] De la misma manera que la ingeniería de aplicaciones utiliza los requisitos funcionales y no funcionales para producir un diseño, la fase de diseño de dominio de la ingeniería de dominio toma los requisitos configurables desarrollados durante la fase de análisis de dominio y produce una solución configurable y estandarizada para la familia. de sistemas. El diseño de dominio tiene como objetivo producir patrones arquitectónicos que resuelvan un problema común en todos los sistemas dentro del dominio, a pesar de las diferentes configuraciones de requisitos. [20] Además del desarrollo de patrones durante el diseño del dominio, los ingenieros también deben tener cuidado de identificar el alcance del patrón y el nivel en el que el contexto es relevante para el patrón. La limitación del contexto es crucial: demasiado contexto da como resultado que el patrón no sea aplicable a muchos sistemas, y muy poco contexto da como resultado que el patrón no sea lo suficientemente poderoso como para ser útil. [21] Un patrón útil debe ser frecuente y de alta calidad. [22]
El objetivo del diseño de dominios es satisfacer tantos requisitos de dominio como sea posible manteniendo la flexibilidad que ofrece el modelo de características desarrollado. La arquitectura debe ser lo suficientemente flexible para satisfacer todos los sistemas dentro del dominio, al mismo tiempo que debe ser lo suficientemente rígida para proporcionar un marco sólido sobre el cual basar la solución. [23]
Implementación de dominio
La implementación del dominio es la creación de un proceso y herramientas para generar de manera eficiente un programa personalizado en el dominio.
Crítica
Últimamente, la ingeniería de dominio ha sido criticada por centrarse demasiado en la "ingeniería para la reutilización" o la "ingeniería con reutilización" de características de software genéricas en lugar de concentrarse en la "ingeniería para el uso" de manera que la visión del mundo de un individuo, el lenguaje o el contexto se integra en el diseño de software. [24]
Ver también
- Diseño impulsado por dominios
- Ingeniería de familia de productos
Referencias
- ^ ISO 26550: 2015 - Ingeniería de software y sistemas - Modelo de referencia para la ingeniería y gestión de la línea de productos
- ↑ a b Frakes y Kang , 2007 , p. 2
- ^ Frakes y Kang 2007 , p. 1
- ^ Czarnecki y Eisenecker 2000 , p. 19
- ^ Batory y col. 2002 , pág. 19
- ^ Czarnecki y Eisenecker 2000 , p. 20
- ↑ a b Czarnecki y Eisenecker , 2000 , p. 21
- ^ Harsu 2002 , p. 8
- ^ Reinhartz-Berger y col. 2013 , pág. xii
- ^ Falbo, Guizzardi y Duarte 2002 , p. 2
- ↑ a b c d e f Czarnecki y Eisenecker 2000 , p. 23
- ^ Czarnecki y Eisenecker 2000 , p. 38
- ^ Kang y col. 2004 , pág. 7
- ^ Kang y col. 2004 , pág. 3
- ^ Kang y col. 2004 , pág. 4
- ^ Frakes y Kang 2007 , p. 3
- ^ Czarnecki y Eisenecker 2000 , p. 84
- ^ Czarnecki y Eisenecker 2000 , p. 86
- ^ Czarnecki y Eisenecker 2000 , p. 24
- ^ Czarnecki y Eisenecker 2000 , p. 25
- ^ Buschmann, Henney y Schmidt 2007 , p. 42
- ^ Buschmann, Henney y Schmidt 2007 , p. 31
- ^ Czarnecki y Eisenecker 2000 , p. 28
- ^ Mettler 2017 , p. 5
Fuentes
- Batory, Don; Johnson, Clay; MacDonald, Bob; von Heeder, Dale (2002). "Lograr la extensibilidad a través de líneas de productos y lenguajes específicos de dominio: un estudio de caso". Transacciones ACM sobre Ingeniería y Metodología de Software . ACM . 11 (2): 191–214. CiteSeerX 10.1.1.100.7224 . doi : 10.1145 / 505145.505147 . S2CID 7864469 .
- Buschmann, Frank; Henney, Kevlin ; Schmidt, Douglas C. (2007). Arquitectura de software orientada a patrones: sobre patrones y lenguajes de patrones . 5 . John Wiley e hijos . ISBN 978-0-471-48648-0.
- Czarnecki, Krzysztof; Eisenecker, Ulrich W. (2000). Programación generativa: métodos, herramientas y aplicaciones . Boston: Addison-Wesley . ISBN 0-201-30977-7.
- Falbo, Ricardo de Almedia; Guizzardi, Giancarlo; Duarte, Katia Cristina (2002). "Un enfoque ontológico de la ingeniería de dominio". Actas de la 14ª Conferencia Internacional sobre Ingeniería de Software e Ingeniería del Conocimiento . ACM : 351–358. CiteSeerX 10.1.1.19.2577 . doi : 10.1145 / 568760.568822 . ISBN 1581135564. S2CID 16743035 .
- Kang, Kyo C .; Lee, Jaejoon; Kim, Kijoo; Kim, Gerard Jounghyun; Shin, Euiseob; Huh, Moonhang (octubre de 2004). "FORM: un método de reutilización orientado a características con arquitecturas de referencia específicas de dominio". Anales de Ingeniería de Software . Springer Holanda. 5 : 143-168. CiteSeerX 10.1.1.95.7568 . doi : 10.1023 / A: 1018980625587 . S2CID 1830464 .
- Frakes, William B .; Kang, Kyo (julio de 2007). "Investigación de reutilización de software: estado y futuro". Transacciones IEEE sobre ingeniería de software . 31 (7): 529–536. CiteSeerX 10.1.1.75.635 . doi : 10.1109 / tse.2005.85 . S2CID 14561810 .
- Harsu, Maarit (diciembre de 2002). Una encuesta sobre ingeniería de dominio (PDF) (Informe). Instituto de Sistemas de Software, Universidad Tecnológica de Tampere . pag. 26. ISBN 9789521509322.
- Mettler, Tobias (2017). "Contextualización de una red social profesional para la salud: experiencias de un estudio de investigación de diseño de acción" (PDF) . Revista de sistemas de información . 28 (4): 684–707. doi : 10.1111 / isj.12154 .
- Reinhartz-Berger, Iris; Sturm, Arnon; Clark, Tony; Cohen, Sholom; Bettin, Jorn (2013). Ingeniería de dominio: líneas de producto, lenguajes y modelos conceptuales . Springer Science + Business Media . ISBN 978-3-642-36654-3.