2. Automatización en el desarrollo de software
a través de lenguajes específicos de
dominio – caso CRUDyLeaf
Omar S. Gómez
FIE-ESPOCH
III Congreso Internacional de Ciencias Informáticas 21 – 23 Octubre 2020
3. Agenda
• Contexto
• Lenguajes específicos de dominio
• Automatización en el desarrollo de software - caso CRUDyLeaf
• Proceso para desarrollar un lenguaje específico de dominio
• Conclusiones
4. Contexto
Sin duda alguna, actualmente en nuestra sociedad, el software desempeña un
papel relevante, prácticamente se encuentra presente en todos los sectores:
- Educación
- Defensa
- Ciencia
- Servicios
- Ocio
- Etc.
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZOImagen de: https://sp.depositphotos.com/201006334/stock-illustration-software-word-cloud-collage-business.html
5. Contexto
Principalmente, el software es desarrollado y corregido por profesionales del área
informática.
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZOImagen de: https://vizah.ch/en/how-to-choose-the-right-dedicated-software-development-team-in-2020/
6. Demanda mundial de profesionales del
software
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Imagen de: https://www.michaelpage.co.uk/minisite/most-in-demand-professions/
7. Contexto
Dada la gran demanda de productos software, los profesionales del software día
con día se enfrentan con diferentes retos para entregar productos software en
tiempo, bajo presupuesto y con cierta calidad.
Procesos de automatización comienzan a aplicarse en diferentes fases del proceso
de desarrollo para agilizar la entrega de productos software.
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Imagen de: https://www.krminc.com/custom-it-solutions/
8. Contexto
Como parte de estos procesos de automatización, de manera paulatina, el uso de
lenguajes específicos de dominio (en Inglés, domain specific languages o DSLs)
comienzan a utilizarse.
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Imagen de: https://martinfowler.com/books/dsl.html
9. ¿Qué es un lenguaje específico de
dominio?
A diferencia de los lenguajes de propósito general como Java, C# o UML, un
lenguaje específico de dominio (DSL) es diseñado para expresar instrucciones en
un espació de problema o dominio particular.
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZOImagen de: https://opensource.com/article/20/2/domain-specific-languages
10. Lenguajes específicos de dominio
Los DSLs pueden servir para diferentes propósitos particulares,
pueden ser usados en diferentes contextos por diferentes tipos de
usuarios.
Por ejemplo, algunos DSLs son usados por programadores y suelen
ser más técnicos, mientras que otros son menos técnicos y
requieren menos conocimientos técnicos por parte de los usuarios.
11. Lenguajes específicos de dominio
Algunos DSLs pueden ser extremadamente específicos y ser creados, por
ejemplo, sólo para usarse dentro de alguna compañía.
12. Estructura de un DSL
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Imagen de: https://www.se-rwth.de/topics/Domain-Specific-Languages.php
13. Clasificación
Caracterización de los DSLs:
- Horizontal o Vertical (Dominio técnico vs Dominio de negocio)
- Interno o externo
- Gráfico o textual
- Declarativo o imperativo
https://qrgo.page.link/4J49G https://qrgo.page.link/2df3X
Información detallada en:
14. Algunos ejemplos de DSLs
DOT – DSL para definir grafos
PlantUML – DSL para crear diagramas UML
Gherkin – DSL para especificar pruebas funcionales
Sonic Pi – DSL para realizar live-coding y producción musical.
Más ejemplos en: https://qrgo.page.link/WV5cY
15. Ejemplo DSL: Sonic Pi
Características:
- Horizontal
- Interno
- Textual
- Imperativo
16. Fragmento de la canción can-can de Jacques Offenbach escrita en
Sonic Pi.
Código de la canción disponible en:
Ejemplo código DSL Sonic Pi
https://qrgo.page.link/f4Cbj
https://qrgo.page.link/ku321
17. Ejemplo DSL: PlantUML
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Características:
- Horizontal
- Externo
- Textual
- Declarativo
20. Motivación de CRUDyLeaf
En el universo Java, Spring Boot es un framework que ha ganado
popularidad a nivel mundial entre los desarrolladores. Spring Boot
es usado para implementar aplicaciones orientadas a micro
servicios las cuales son fácilmente desplegadas.
21. Motivación de CRUDyLeaf
En este contexto de Spring Boot, un tipo de aplicación comúnmente
desarrollada es la implementación del backend con micro servicios
(recursos REST) para efectuar operaciones CRUD (Create, Read,
Update, Delete) sobre tablas de alguna base de datos.
24. Proceso para desarrollar un DSL
1. Inmersión
del dominio
2. Desarrollo de
la aplicación
plantilla
3. Definición de
la sintaxis
4. Generación
del metamodelo
5. Generador
de código
6. Despliegue
7. Refinamiento
Omar S. Gómez, Raúl H. Rosero, and Karen Cortés-Verdín.
2020. CRUDyLeaf: A DSL for Generating Spring Boot REST
APIs from Entity CRUD Operations. Cybern. Inf. Technol. 20, 3
(Sep 2020), 3–14.
25. Inmersión del dominio
Para el caso de CRUDyLeaf, la inmersión del dominio consistió en
conocer la estructura de un aplicación Spring Boot que expone
recursos REST (microservicios) asociados a operaciones CRUD de
tablas de una base de datos.
27. Definición de la sintaxis
Para la definición de la sintaxis de
CRUDyLeaf se usó Xtext
28. Generación del metamodelo
A partir de la definición de la sintaxis, se genera un meta modelo el cual permitirá extraer
información sobre la sintaxis del DSL. Este metamodelo es utilizado para generar el código
según la sintaxis del DSL.
Metamodelo
completo en:
30. Despliegue
Una vez desarrollado el DSL, éste está listo para ser desplegado y utilizado. En este caso,
CRUDyLeaf se desarrolló como un plugin para el IDE eclipse.
31. Refinamiento
En esta última etapa del proceso de desarrollo de un DSL, el refinamiento
sirve para iterar a través de las anteriores etapas y mejorar el DSL propuesto.
36. Evaluación de CRUDyLeaf
Con 18 líneas de código (ejemplo descrito en Gómez et al., 2020) escritas en
CRUDyLeaf se generaron automáticamente 578 LOC.
Generated File LOC
pom.xml 58
application.properties 10
DemoApplication.java 47
DemoApplicationTests.java 19
Car.java 36
CarController.java 63
CarRepository.java 22
CarService.java 68
Order.java 66
OrderController.java 66
OrderRepository.java 30
OrderService.java 70
RecordNotFoundException.java 23
Total 578
Omar S. Gómez, Raúl H. Rosero, and Karen Cortés-Verdín.
2020. CRUDyLeaf: A DSL for Generating Spring Boot REST
APIs from Entity CRUD Operations. Cybern. Inf. Technol. 20, 3
(Sep 2020), 3–14.
Tasa de automatización (LOCS): 32:1
37. Ventajas y desventajas
de los DSLs
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO
Imagen de: https://tomassetti.me/domain-specific-languages/
38. Conclusiones
Dada la gran demanda por profesionales en el desarrollo de software, una
opción para agilizar el desarrollo de éste es utilizar lenguajes específicos de
dominio.
Los lenguajes específicos de dominio (DSLs) pueden ser utilizados en diferentes
etapas del proceso de desarrollo software.
Para desarrollar un DSL se pueden usar como referencia las etapas antes
descritas: inmersión del dominio, desarrollo de la aplicación plantilla,
definición de la sintaxis, generación del metamodelo, implementación del
generador de código, despliegue y refinamiento.
CRUDyLeaf facilita el desarrollo de aplicaciones Spring Boot que exponen
recursos REST (microservicios) a partir de operaciones CRUD.