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 fundamental en la reutilización sistemática de software es el dominio . La mayoría de las organizaciones trabajan en pocos dominios. Desarrollan repetidamente sistemas similares dentro de un dominio determinado, con variaciones para satisfacer las diferentes necesidades de los clientes. En lugar de construir cada nueva variante de sistema desde cero, se pueden lograr ahorros significativos al reutilizar partes de sistemas anteriores en el dominio para construir otros nuevos.
El proceso de identificar dominios, delimitarlos y descubrir similitudes y diferencias entre los sistemas que los componen se denomina análisis de dominio . Esta información se plasma 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 permiten construir nuevos sistemas dentro del mismo.
En la ingeniería de líneas de productos, tal como se define en la norma ISO 26550: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 ]
Objetivo
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 e implementaciones de sistemas de software anteriores y aplicándolos al sistema objetivo. [ 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ó reducir el tamaño del código, tanto en número de métodos como de símbolos , en más del 50%, y el número total de líneas de código 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 pueden reutilizarse en nuevos sistemas de software a bajo costo y con alta calidad. [ 6 ] Dado que esto se aplica a todas las fases del ciclo de desarrollo de software , la ingeniería de dominio también se centra en las tres fases principales: análisis, diseño e implementación, en paralelo con la ingeniería de aplicaciones. [ 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 auge del Internet de las Cosas , el enfoque de ingeniería de dominios está adquiriendo relevancia también para otras disciplinas. [ 9 ] La aparición de profundas cadenas de servicios web pone de manifiesto la relatividad del concepto de servicio. Los servicios web desarrollados y operados por una organización pueden ser utilizados como parte de una plataforma por otra organización. Dado que los servicios pueden emplearse en distintos contextos y, por lo tanto, requieren configuraciones diferentes, el diseño de familias de servicios puede beneficiarse de un enfoque de ingeniería de dominios.
Fases

La ingeniería de dominio, al igual que la ingeniería de aplicaciones, consta de tres fases principales: análisis, diseño e implementación. Sin embargo, mientras que la ingeniería de software se centra en un único 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 posteriormente en el proceso, como repositorio de conocimiento sobre las características y la definición del dominio, y como especificación para los desarrolladores de productos que forman parte del dominio. [ 10 ]
Análisis de dominio
El análisis de dominio se utiliza para definir el dominio, recopilar información sobre él 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 busca identificar los puntos comunes y los puntos variables en un 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 como las que se producirían con un enfoque tradicional de ingeniería de aplicaciones. [ 13 ]
El análisis de dominio difiere significativamente de la ingeniería de requisitos y, por lo tanto, los enfoques tradicionales para derivar requisitos resultan ineficaces para el desarrollo de requisitos configurables, como los que se encuentran en un modelo de dominio. Para aplicar eficazmente la ingeniería de dominio, la reutilización debe considerarse en las fases iniciales del ciclo de vida del desarrollo de software . Mediante la selección de funcionalidades a partir de modelos de funcionalidades desarrollados, la reutilización de la tecnología se considera desde una etapa temprana y puede aplicarse adecuadamente a lo largo de todo el proceso de desarrollo. [ 14 ]
El análisis de dominio se deriva principalmente de artefactos producidos a partir de la experiencia previa en el dominio. [ 11 ] Los sistemas existentes, sus artefactos (como documentos de diseño , documentos de requisitos y manuales de usuario ), los estándares y los clientes son fuentes potenciales de información para el 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 buscan extender 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 a crear arquitecturas y componentes de manera configurable al actuar como 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 los 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 busca producir una arquitectura genérica a la que todos los sistemas dentro del dominio puedan ajustarse. [ 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 busca 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 de dominio, los ingenieros también deben tener cuidado de identificar el alcance del patrón y el grado en que el contexto es relevante para el patrón. La limitación del contexto es crucial: demasiado contexto hace que el patrón no sea aplicable a muchos sistemas, y muy poco contexto hace que el patrón sea insuficientemente potente para ser útil. [ 21 ] Un patrón útil debe ser recurrente y de alta calidad. [ 22 ]
El objetivo del diseño de dominio es satisfacer la mayor cantidad posible de requisitos del dominio, manteniendo la flexibilidad que ofrece el modelo de características desarrollado. La arquitectura debe ser lo suficientemente flexible para satisfacer a todos los sistemas dentro del dominio, a la vez que 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 de dominio consiste en la creación de un proceso y herramientas para generar de manera eficiente un programa personalizado dentro de ese dominio.
Crítica
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 modo que la visión del mundo, el lenguaje o el contexto de un individuo se integren en el diseño del software. [ 24 ]
Véase también
Referencias
- ↑ ISO 26550:2015 – Ingeniería de software y sistemas — Modelo de referencia para la ingeniería y gestión de líneas de productos .
- 1 2 Frakes y Kang 2007 , pág. 2
- ↑ Frakes y Kang 2007 , pág. 1
- ↑ Czarnecki y Eisenecker 2000 , pág. 19
- ^ Batory y col. 2002 , pág. 19
- ↑ Czarnecki y Eisenecker 2000 , pág. 20
- 1 2 Czarnecki y Eisenecker 2000 , pág. 21
- ↑ Harsu 2002 , pág. 8
- ↑ Reinhartz-Berger et al. 2013 , pág. xii
- ↑ Falbo, Guizzardi & Duarte 2002 , pág. 2
- 1 2 3 4 5 6 Czarnecki y Eisenecker 2000 , pág. 23
- ↑ Czarnecki y Eisenecker 2000 , pág. 38
- ↑ Kang et al. 2004 , pág. 7
- ↑ Kang et al. 2004 , pág. 3
- ↑ Kang et al. 2004 , pág. 4
- ↑ Frakes y Kang 2007 , pág. 3
- ↑ Czarnecki y Eisenecker 2000 , pág. 84
- ↑ Czarnecki y Eisenecker 2000 , pág. 86
- ↑ Czarnecki y Eisenecker 2000 , pág. 24
- ↑ Czarnecki y Eisenecker 2000 , pág. 25
- ↑ Buschmann, Henney y Schmidt 2007 , pág. 42
- ↑ Buschmann, Henney y Schmidt 2007 , pág. 31
- ↑ Czarnecki y Eisenecker 2000 , pág. 28
- ↑ Mettler 2017 , pág. 5
Fuentes
- Batory, Don; Johnson, Clay; MacDonald, Bob; von Heeder, Dale (2002). "Lograr extensibilidad a través de líneas de productos y lenguajes específicos de dominio: un estudio de caso". ACM Transactions on Software Engineering and Methodology . 11 (2). ACM : 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 . Vol. 5. John Wiley & Sons . 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 para la ingeniería de dominios». Actas de la 14.ª conferencia internacional sobre ingeniería de software e ingeniería del conocimiento . ACM . pp. 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 del dominio". Annals of Software Engineering . 5. Springer Netherlands: 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 sobre la reutilización de software: estado actual y futuro". IEEE Transactions on Software Engineering . 31 (7): 529– 536. CiteSeerX 10.1.1.75.635 . doi : 10.1109/tse.2005.85 . S2CID 14561810 .
- Harsu, Maarit (diciembre de 2002). Un estudio sobre ingeniería de dominios (PDF) (Informe). Instituto de Sistemas de Software, Universidad Tecnológica de Tampere . pág. 26. ISBN 9789521509322.
- Mettler, Tobias (2017). "Contextualizando una red social profesional para la atención médica: experiencias de un estudio de investigación de diseño de acción" (PDF) . Information Systems Journal . 28 (4): 684– 707. doi : 10.1111/isj.12154 . S2CID 49411423 .
- Reinhartz-Berger, Iris; Sturm, Arnon; Clark, Tony; Cohen, Sholom; Bettin, Jorn (2013). Ingeniería de dominios: líneas de productos, lenguajes y modelos conceptuales . Springer Science+Business Media . ISBN 978-3-642-36654-3.
- Diseño de software
- Ontología (ciencia de la información)
- proceso de desarrollo de software
- Ingeniería de sistemas
- Análisis empresarial