Anchurus-GEN: generador de código PHP a
partir de modelos ISML
Frank Sebastián Franco Hernández
Agenda
• Introducción
• Trabajos relacionados
• Análisis
• Diseño
• Desarrollo de la solución
• Análisis de impacto
• Conclusiones
Introducción
Problemática
• En los últimos años ha habido un auge en el desarrollo de aplicaciones web.
• Los lenguajes de programación utilizados en dicho campo tienen una curva de aprendizaje elevada
MDE[1] como solución
[1] D. C. Schmidt, “Guest Editor’s Introduction: Model-Driven Engineering,” Computer, vol. 39, no. 2, pp. 25– 31, Feb. 2006.
Modelo Elemento del mundo real
Solución propuesta
Anchurus-GEN
ISML y generador de código para Java EE [2]
[2] J. C. Olarte Abello, ZOE-GEN: Un transformador para facilitar la generación de aplicaciones basado en modelos, Bogotá: Pontificia Universidad Javeriana, 2015.
¿Por qué usar ISML?
• ISML es un lenguaje sencillo
• Permite reutilizar componentes
• Permite transformar código
• Fuerza a seguir una disciplina para crear las páginas de la aplicación (con PHP se corre el riesgo de generar código poco estructurado).
¿Por qué PHP?• Es un lenguaje de programación
portable [3]
• Existen múltiples frameworks compatibles [4][5][6]
• Es un lenguaje de programación popular. [7][8]
[3] PHP, «Prefacio - Manual de PHP,» [En línea]. Available: https://secure.php.net/manual/es/preface.php. [Último acceso: 10 Noviembre 2015].[4] Laravel, «Introduction,» [En línea]. Available: http://laravel.com/docs/4.2/introduction. [Último acceso: 10 Noviembre 2015].[5] Symfony, «What is Symfony,» [En línea]. Available: http://symfony.com/what-is-symfony. [Último acceso: 16 Noviembre 2015].[6] Nette, «Documentation,» [En línea]. Available: https://doc.nette.org/en/2.3/. [Último acceso: 17 Noviembre 2015].[7] TIOBE Software, «TIOBE Index for October 2015,» Octubre 2015. [En línea]. Available: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html. [Último acceso: 4 Noviembre 2015].[8] N. Diakopoulos y S. Cass, «Interactive: The Top Programming Languages 2015,» 20 Julio 2015. [En línea]. Available: http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2015#index/2015/1/0/0/0/1/50/1/50/1/50/1/30/1/30/1/30/1/20/1/20/1/5/1/5/1/20/1/100/. [Último acceso: 8 Noviembre 2015].
Objetivo general
Construir un generador de código bajo el marco de trabajo de Eclipse, que convierta un modelo en ISML a código en PHP.
Anchurus-GEN
Objetivos específicos
• Especificar los requerimientos del generador de código
• Diseñar el producto basado en los requerimientos obtenidos previamente
• Implementar el diseño provisto anteriormente
• Probar la implementación diseñada con diferentes modelos ISML.
Metodología: Disciplinedagile delivery (DAD)
Metodología adaptada
Trabajos relacionados
Trabajos relacionadosCódigoabierto
Precio Generacódigo
PHP GUI Multiplataforma
Para todonavegador
Propósitogeneral
Generadesde unmodelode altonivel
PHPrunner No 499 USD Sí Sí Sí No No Sí No
PHPmaker No 300 USD Sí Sí Sí 1/2 Sí Sí No
ScriptCase No 359-630USD
Sí Sí Sí Sí Sí No No
PHP MySQLWizard
Si 48-94 USD Sí Sí Sí No Sí Si No
CodeCharge Studio
No 140-500USD
Sí Sí Sí No Sí Sí No
AppGini No 80 USD Sí Sí Sí No Sí Sí No
SynApp2 Sí Gratis Sí Sí Sí Sí Sí Sí No
Spring Roo Sí Gratis Sí No No Sí Sí Sí No
Anchurus-GEN
Sí Gratis Sí Sí Si Sí Sí Sí Sí
Análisis
Restricciones• Conocimientos medios de
inglés
• Plug-in de Eclipse
• Xtext 2.8
• Pantalla de 1024*768 píxeles mínimo
• Memoria RAM superior a 1,3 GB
Funciones del sistema
Abrir aplicaciónCrear modelo
ISMLEditar modelo
ISMLLimpiar
proyectoEditar
configuraciones
Modelo de dominio
Requerimientos funcionales
• Generar página PHP Blade a partir de una página ISML
• Generar controlador PHP a partir del controlador ISML
• Generar archivo de clase PHP a partir del servicio ISML
• Generar archivo de rutas PHP a partir de múltiples controladores
• Generar migración a partir de la entidad ISML
• Generar modelo a partir de la entidad ISML
Requerimientos no funcionalesMantenibilidad:
• Sistema dividido por paquetes
• Cada plantilla es una clase aparte
• Cada generador es una clase aparte
• Funciones comunes en una o más clases utilitarias
• Generadores referenciados desde la clase maestra
Portabilidad:
• Compatible con Linux, Windows y Mac
• Código generado compatible con Laravel
Diseño
Vista física
Vista lógica
Diagrama de paquetes
Paquete co.edu.javeriana.isml.generator.common
Paquete co.edu.javeriana.anchurus.generator.laravel.generators
Paquete co.edu.javeriana.anchurus.generator.laravel.templates
Paquete co.edu.javeriana.anchurus.generator.laravel.utils
Desarrollo de la solución
Estándares
• ISO/IEC/IEEE 29148:2011 (SRS)
• IEEE 1016:2009 (SDD)
• Meta Object Facility de OMG (metamodelos).
Prenat
Aplicación desarrollada por José Bocanegra para apoyar el proceso prenatal de una mujer embarazada
Funcionalidades del sistema
https://www.youtube.com/watch?v=C6oSNlgtPYE
Pruebas
Caso de prueba 5
Proyecto Anchurus-GEN
Fecha de entrega 13/05/2016
Datos de entrada Modelado de la entidad Dieta, que contiene cuatroatributos de tipo String (desayuno, almuerzo, cena ymerienda) y un atributo de tipo Integer (patología).
Pruebas
Salida esperada Archivo de modelo de PHP.
Conclusión La prueba fue exitosa.
Análisis de impacto
Análisis de impacto
• Se espera impacto positivo en la productividad de las empresas cuya base sea el desarrollo de aplicaciones web
• Reducciones potenciales de costos producto de las menores horas de desarrollo de las aplicaciones
Análisis de impacto
• Se espera que los ingenieros de software que desarrollen aplicaciones web cuenten con más opciones y de mejor calidad.
• Se espera que esta herramienta fuerce a los programadores a usar buenas prácticas de programación(como aplicar patrones tales como MVC)
Análisis de impacto
• Haciendo parte de una herramienta más grande, como Eclipse, se espera que se use en conjunto con otros plug-ins que desee el ingeniero de software.
Conclusiones y trabajo futuro
Conclusiones
• En este trabajo de grado se detalló el desarrollo de Anchurus-GEN.
• Se indicó el valor agregado que tiene Anchurus-GEN sobre las aplicaciones ya existentes.
Trabajo futuro
• Generar más widgets para las páginas
• Generador de recursos
• Generador de servicios
• Mejora de la parte visual de la página
• Agregar asociaciones en las clases modelo.
Lecciones aprendidas
• Uso de Xtend como lenguaje de programación
• En Xtend hay dos maneras de programar
• Adaptación a componentes externos que puedan tener errores en tiempo de ejecución
• No siempre se puede depender de todas las herramientas del lenguaje destino.
MUCHAS GRACIAS
Anexos
PHPrunner
• Es un generador de páginas web que construye interfaces web a partir de bases de datos, sean remotas o locales, que vengan desde servidores MySQL, Access, SQL Server, Postgres y Oracle.
PHPrunner
• Cuenta con plantillas según el tipo de negocio
• Editor visual
• Vista preliminar
• Internacionalización
PHPrunner
• Solo funciona en Windows
• Solo funciona en Internet Explorer
• Precio: 499 USD
PHPmaker
• Análogamente a PHPrunner, Makerpuede generar páginas PHP desde bases de datos de similares orígenes a PHPrunner, MySQL, Access, Postgres, SQL Server y Oracle.
PHPmaker
• Integración con Bootstrap
• Tablas exportables a diferentes formatos (Excel, PDF, CSV, XML, imprimible)
• Cliente Windows, servidor Windows o Linux
• Precio (versión completa): 299,90 USD
ScriptCase
• Compatible con múltiples sistemas de BD
• Orientación hacia el alto nivel de la organización -> herramientas de análisis
• Integración con PayPal
• Multiplataforma
• Precio: 359,10 a 629,10 USD según la licencia
PHP MySQL Wizard
• Compatible con MySQL
• Código abierto
• Manejo de registros de la BD
• Generar cantidades ilimitadas de proyectos
• Validación y opciones de seguridad
• Precio: 48 a 94 USD
CodeCharge Studio
• Es un generador desde una base de datos a página web, pero de propósito general, puesto que permite convertir casi cualquier tipo de base de datos (como Access, Oracle o SQL Server) en páginas web de PHP, ASP, JSP, entre otras.
CodeCharge Studio
• Incluye IDE, generador de código y soluciones preconstruidas
• Compatible con Windows
• Precio: 140 a 500 USD
AppGini
• Compatible con MySQL y genera hacia PHP
• Reducción en pruebas
• Código seguro
• Compatible con Windows
• Precio: 80 USD
SynApp2
• Compatible con MySQL y Oracle
• PHP y AJAX
• Código abierto
• Gratis
Spring Roo
• Generador de código para Java EE
• Carece de GUI
• Código abierto
• Gratis