Archivo del sitio
Resumen de la Metodología
A lo largo de diversas publicaciones hemos ido mostrando los diferentes elementos en que se apoya la automatización y sus beneficios. Resumimos aquí, de manera ordenada, dicha metodología:
- Automatizacion de Software. Introduccion.. Primera aproximación a la tecnología..
- ¿Por qué generación de código?. Es esta primera publicación explicamos cuales son los motivos que llevan a elegir el camino de la generación de código para mejorar el proceso de desarrollo de software.
- Buenas Prácticas en la Generación de Código. Conocido lo qué es y el por qué de su uso, mostramos unos consejos sobre cómo generar código correctamente.
- 10 Ventajas de la Generación de Código. Lista de ventajas.
- DSLs. Siguiendo el camino de la automatización, pasamos a explicar lo qué son los Lenguajes Específicos de Dominio (DSL) y la ventajas que nos aportan. Los DSLs son necesarios si queremos que nuestro proceso de automatización llegue al grado más alto.
- Language Workbench. Para diseñar y usar los DSLs necesitamos herramientas que nos provean de estos servicios. Estas herramientas se denominan técnicamente Language Workbench, y nos permiten, además, integrar todo el proceso de desarrollo e incluso entrar en el área de la representación del conocimiento.
- Representación del Conocimiento y Automatización de Software. Profundizamos más en este área.
- Diseñadores de Lenguajes. Características de este nuevo perfil requerido en el desarrollo de software.
- Frameworks: la Media Naranja de la Generación de Código. Introduccion y ventajas de los Frameworks y colaboración con la generación de código.
- Automatización: Proceso Completo. Compilación del proceso de desarrollo.
Language Workbench
En anteriores publicaciones vimos lo que son los DSLs y por qué son necesarios y útiles en el desarrollo de software. Una vez que decidimos apoyarnos en ellos, nos encontramos ante la necesidad de una herramienta que nos permitan diseñarlos y utilizarlos. Esta herramienta se denomina técnicamente Language Workbench (LW).
Un LW está formado por dos partes fundamentales:
Un LW está formado por dos partes fundamentales:
- Diseño del lenguaje.
- Uso del lenguaje. Programación.
Es posible que en el futuro la herramienta se divida en dos, de tal manera que, dentro o fuera de una organización, existirán dos roles perfectamente diferenciados: quienes diseñen el lenguaje y quienes se encarguen de utilizarlo, de programar en él.
Diseño del lenguaje
Un LW debe ser capaz de proveer las utilidades para definir las diferentes partes que forman el lenguaje:
Diseño del lenguaje
Un LW debe ser capaz de proveer las utilidades para definir las diferentes partes que forman el lenguaje:
- Sintaxis abstracta. La estructura gramatical/conceptual que define el lenguaje. Puede ser entendido también como el meta-modelo.
- Sintaxis concreta. La representación o representaciones visuales de dichos conceptos. Pueden ser representaciones en formato texto y/o gráfico. Para entendernos, es la definición de la interfaz visual con la que trabajará el programador.
- Semántica estática. Define aquellas restricciones o reglas que el lenguaje debe cumplir (aparte de ser sintácticamente correcto).
- Semántica dinámica. Sería sobre todo la traducción a lenguajes tradicionales aunque, como mencionaremos luego, aquí se encuentra el mayor potencial de esta metodología de desarrollo.
Uso del lenguaje
Una vez definidos los puntos anteriores, la herramienta es capaz de interpretarlos y proveernos de un entorno de desarrollo (IDE). Según sea más o menos sofisticado, a parte de la edición, nos podrá proveer de utilidades como: autocompletar, validaciones estáticas, resaltar elementos sintácticos, mostrar diferentes vistas e incluso debug.
A parte de las características anteriores, este entorno nos permitirá generar código e incluso podrá dotarnos de un proceso de building para obtener el aplicativo final.
Potencial futuro
Todo lo comentado hasta ahora nos permite tener un proceso de desarrollo análogo al tradicional pero con las ventajas que ofrecen los DSLs y la generación de código, lo cual es un enorme avance en el que se apoyan los defensores e investigadores de esta metodología.
Estando de acuerdo en lo anterior, para nosotros el verdadero potencial, aun por descubrir, es el hecho de que la programación deja de ser una mera declaración funcional y pasa a ser una representación del conocimiento. Una vez que definimos los conceptos y sus reglas, la semántica puede ser capaz de ofrecernos muchos más servicios que la simple generación de código.
Ver todos los posts Teórico.
Una vez definidos los puntos anteriores, la herramienta es capaz de interpretarlos y proveernos de un entorno de desarrollo (IDE). Según sea más o menos sofisticado, a parte de la edición, nos podrá proveer de utilidades como: autocompletar, validaciones estáticas, resaltar elementos sintácticos, mostrar diferentes vistas e incluso debug.
A parte de las características anteriores, este entorno nos permitirá generar código e incluso podrá dotarnos de un proceso de building para obtener el aplicativo final.
Potencial futuro
Todo lo comentado hasta ahora nos permite tener un proceso de desarrollo análogo al tradicional pero con las ventajas que ofrecen los DSLs y la generación de código, lo cual es un enorme avance en el que se apoyan los defensores e investigadores de esta metodología.
Estando de acuerdo en lo anterior, para nosotros el verdadero potencial, aun por descubrir, es el hecho de que la programación deja de ser una mera declaración funcional y pasa a ser una representación del conocimiento. Una vez que definimos los conceptos y sus reglas, la semántica puede ser capaz de ofrecernos muchos más servicios que la simple generación de código.
Ver todos los posts Teórico.
10 Ventajas de la Generación de Código
Vayamos al grano. He aquí la lista:
- Calidad SW: En todos los aspectos: rendimiento, fiabilidad, seguridad, etc.
- Estandarización: no sólo en el código fuente: en la interfaz de usuario, en las estructuras de base de datos, etc.
- Centralización: políticas globales tales como el manejo de errores, la gestión de excepciones, el formato de visualización de datos, las validaciones de datos, comprobar los permisos, etc. están centralizados en el generador. Este tipo de políticas son también conocidos como funcionalidades transversales y es un tema abordado por la Programación Orientada a Aspectos (AOP en inglés) en la programación tradicional. La centralización evita este problema.
- Refactorización: relacionado con el beneficio anterior, la refactorización de código es fácil y segura.
- Productividad: Menor coste y menor tiempo de lanzamiento al mercado (entre versiones).
- Habilidades Analíticas: la generación de código requiere un análisis más profundo del dominio antes de implementar la solución a través del generador.
- Habilidades de Diseño: requiere un buen arquitecto, con una visión más amplia.
- Crecimiento Sano: previene la degradación de la arquitectura.
- Integración de Nuevos Miembros: la cultura o las normas de desarrollo son menores cuando se trabaja con generación de código.
- Nivel de abstracción: la programación a un nivel más abstracto, además de fácil de entender (es más intencional), abre la puerta a nuevas posibilidades, tales como: generación de pruebas unitarias, auto-documentación, carga automática de datos, semántica, racionamiento automático, etc.
La generación de código no es fácil, la implementación de un generador requiere de tiempo y esfuerzo, y más aún si se trata de un Language Workbench, pero, sin duda, los beneficios son enormes.
Ver todos los posts Teórico.