Ingeniería de dominio
Gestión industrial de la diversidad
Si hay que definir con una sola palabra la historia más reciente de la Ingeniería de Software esta sería "niebla". El rumbo al que dirigirse siempre era prometedor, aunque distinto en las sucesivas etapas de la reciente era de la Ingeniería de Software. Las orientaciones cambiaban, vaticinando siempre un final exitoso: las metodologías, la herramienta CASE de ciclo completo, RAD (desarrollo rápido de aplicaciones) algunas tecnologías y lenguajes avanzados.
En lo relativo a las metodologías, éstas aparecieron cuando era necesario poner orden al proceso de construcción software, pero se vendieron como la solución para curar todos los males. Tuvieron su aportación significativa pero no contemplaban la diversidad, debiendo aplicarse los mismos pasos metodológicos para cualquier tipo de proyecto, con las dificultades y errores que esta aproximación genera.
Las herramientas CASE de ciclo completo aportaron el concepto de industrialización de la construcción de software pero también tenían como punto débil el no contemplar la diversidad. Aparte generan otros problemas de integración de las mismas, tanto en el entorno técnico de la organización que las adoptó como en el colectivo humano que de una u otra forma se relaciona con él (usuarios finales y desarrolladores).
Asimismo, algunas tecnologías, citando como ejemplo la tecnología objetos, pretende de un plumazo resolver el gran problema que no ha sido resuelto satisfactoriamente en el ámbito de la ingeniería de software: la Reutilización. Ofrecen una aportación conceptual importante a la ingeniería de software, pero tienen como inconveniente la no total aplicación de la misma en todos los entornos técnicos y el riesgo de no aprovechar todo su potencial, utilizando otras técnicas y conceptos correspondientes a otras etapas tecnológicas.
El defecto fundamental en todos los casos anteriores ha sido la no consideración de la diversidad. Se enfatiza en la obligación de seguir unas determinadas patrones no importando las circunstancias específicas del software a desarrollar. La máxima era acomodar todo en torno a una espina dorsal, sea esta un método, una herramienta o una tecnología.
La ingeniería de software ha ido incorporando en su camino los suficientes elementos técnicos, tecnológicos, estándares, normas y métodos como para necesitar una gestión inteligente de la diversidad con un objetivo básico de Reutilización. Una gestión de la diversidad que enfatice en la creación de software de forma industrial, altamente tecnificado y estandarizado pero que a la vez pueda producir software diferente, y que al ejecutarse trate inputs distintos y produzca resultados distintos. De la misma manera que se construye una máquina capaz de producir tubos de calibre circular o rectangular y en ambos casos de diferentes tamaños, con escasas manipulaciones en los mandos de la máquina, se puede construir software. Para pasar de la construcción artesanal de software, o construcción de software desde cero a una construcción de software industrializada es preciso la construcción primero de la máquina de hacer tubos que el caso del software es el resultado del proceso denominado "Ingeniería de Dominio".
La forma convencional de desarrollo del software enfatiza en una solución general para todo el software a construir, se centra o focaliza en los objetos que intervienen y no adopta una estrategia de reuso desde el comienzo.
Frente a esta aproximación, cuyas ventajas e inconvenientes son por todos conocidos, la estrategia de "Dominio" se preocupa más de los procesos (el aspecto dinámico del software), busca soluciones particulares para cada Dominio y adopta desde el comienzo una estrategia de construir para reusar, no sólo reusar lo que se ha construido. Sólo con estas premisas nos estaremos acercando al concepto de "industrialización del software". No se puede pretender industrializar si aplicamos la misma fórmula para problemas distintos, de la misma forma que la tecnología, métodos y herramientas empleadas para la producción de motocicletas son distintas (no distintas una a una sino en su conjunto) de las empleadas en la construcción de automóviles.
Situación actual
El estado del arte en el área de desarrollo software en las organizaciones o empresas que tienen una actividad históricamente importante en esta materia se caracteriza por una insuficiente eficacia en términos generales. Esta situación se va agravando progresivamente por razones como:
- Crecimiento del parque software a gestionar
- Demanda creciente de transformación de los sistemas y aparición de nuevas áreas de demanda
- Incremento notable del conjunto de tecnologías a integrar para seguir construyendo soluciones, que estén al día
- Aplicación desigual y parcial de métodos, técnicas y elementos de ingeniería software con resultados no convincentes
Esta situación es fruto de una sedimentación de problemas no resueltos, técnicas y metodologías aplicadas y un creciente aluvión de técnicas no dominadas que aportan un nueva complejidad al conjunto.
Conforme esto ocurre se plantean preguntas tales como:
- ¿Qué metodología se debe emplear para mejorar la eficacia y control de los proyectos?
- ¿Cómo aumentar la calidad del software a producir?
- ¿La tecnología objetos resolverá la baja reutilización?
- ¿Cómo progresar en la elaboración de métricas para evaluar los costes del proyectos?
- ¿Qué estándares y arquitecturas se deben adoptar?
Esta combinación de interrogantes sitúa al entorno de software en un estado en el que se precisa un relanzamiento y sobre todo una orientación de nuevo cuño para encarar un cambio.
Lo que sí es notorio respecto a situaciones anteriores que el reto se plantea en la gestión de un entorno tecnológico cada vez más complejo y con un ritmo de cambio sostenido y creciente en ciertas tecnologías.
¿Qué es un Dominio?
Un Dominio es un conjunto de especificaciones y elementos susceptibles de ser tratados de manera global bajo un proceso industrial, que engloba las similitudes y diferencias. Un Dominio contiene una maquinaria específica que produce software según normas y destinada a resolver un determinado conjunto de problemas dentro de las especificaciones técnicas o funcionales que caracterizan al dominio.
La identificación de un Dominio requiere primero la identificación de los requerimientos de la familia de productos software que va a producir. Estos requerimientos se deben basar en principios de similaridad (que tendrá de común el software producido) y de variabilidad (qué elementos será preciso considerar para que sean distintos).
Esta última es una característica diferenciadora del concepto de industrialización. En la industria, un sistema de producción, por ejemplo de tornillos, produce siempre el mismo tornillo, salvo que la máquina se programe para producirlos de otro tamaño. Un Dominio, por contra, produce, cada vez que se pone a producir, un software distinto, un software que cuando se ejecuta trata inputs distintos y produce outputs distintos, de otro software obtenido del mismo Dominio. Por contra, ambos productos del mismo Dominio, responden a los mismos objetivos y respetan identicos estándares.
La similaridad es lo que marca la comunalidad y objetivo fundamental del Dominio y la variabilidad incorporada es la que hace que el resultado producido por el Dominio sea, o pueda ser, siempre distinto.
Los aspectos fundamentales que caracterizan el concepto de Dominio son:
- La razón de ser de un determinado Dominio estará en función de lo que ha de producir (el software) y éste estará en función del usuario del mismo. Por tanto, identificando estos usuarios, sean internos o externos, y sus requerimientos tendremos una identificación de los Dominios.
- Dado que un Dominio