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 Modelo Elemento del mundo real [1] D. C. Schmidt, “Guest Editor’s Introduction: Model-Driven Engineering,” Computer, vol. 39, no. 2, pp. 25– 31, Feb. 2006. Solución propuesta AnchurusGEN 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-languages2015#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. AnchurusGEN 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: Disciplined agile delivery (DAD) Metodología adaptada Trabajos relacionados Trabajos relacionados Código abierto Precio Genera código PHP GUI PHPrunner No 499 USD Sí Sí Sí Multiplata Para todo Propósito Genera forma navegador general desde un modelo de alto nivel No No Sí No PHPmaker No 300 USD Sí Sí Sí 1/2 Sí Sí No ScriptCase No 359-630 USD Sí Sí Sí Sí Sí No No PHP MySQL Si Wizard CodeCharg No e Studio 48-94 USD Sí Sí Sí No Sí Si No 140-500 USD 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 AnchurusGEN Gratis Sí Sí Si Sí 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ón Crear modelo ISML Editar modelo ISML Limpiar proyecto Editar 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 funcionales Mantenibilidad: • 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=C6oSN lgtPYE Pruebas Caso de prueba 5 Proyecto Anchurus-GEN Fecha de entrega 13/05/2016 Datos de entrada Modelado de la entidad Dieta, que contiene cuatro atributos de tipo String (desayuno, almuerzo, cena y merienda) 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, Maker puede 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