jueves, 12 de octubre de 2017

CapicuaGen, Generador automático de Código Empresarial


Hace aproximadamente un año presente la tesis de mi máster en investigación en ingeniera de software, la cual base en la creación de un sistema generador automático de código llamado CapicuaGen. Durante todo este año decide tomarme un descanso del proyecto, al haberle delicado, en su momento, mucho tiempo y esfuerzo. Sin embargo he decido que ya es hora de continuarlo, para establecerlo como una buena herramienta de generación de código empresarial.

Mi tesis puede encontrarse en el siguiente enlace:


Con una pequeña presentación:


También puede encontrarse más información sobre los fuentes y compilados del proyecto en:


Contexto


CapicuaGen se ubica dentro de los tipos de herramientas conocidas como "Generadores de código", siendo su especialidad la generación de código con enfoques empresariales.

Los "Generadores de código" son sistemas (o partes de sistemas) cuya funcionalidad, como dice su mismo nombre, es crear el código fuente de un sistema destino a través de una configuración o especificación de una necesidad establecida previamente.

El cómo se especifica dicha necesidad puede variar entre distintos enfoques para cada generador en particular, pudiendo ser mediante un diseño en UML, un lenguaje específico del domino (DSL) o cualquier otro mecanismo, pero teniendo todos ellos en común que son más afines a características y elementos de negocio que a temas de índole técnicos en concreto. Esto es porque intentan llevar la abstracción de la construcción de sistema a un nivel más elevado que la programación directa en un lenguaje en particular.



Ilustración 1. Ejemplo de generador de código.


CapicuaGen nace dentro de un contexto empresarial basándose en dos principios, por los que se considera que es beneficioso el uso de generadores de código.
  • El software va a cambiar: Los cambios son necesarios para el negocio , además se dan de forma cada vez más frecuente, lo cual tiene un alto impacto en las empresas. Debemos poder responder a la necesidad de dicho cambio para que nuestra empresa siga vigente en el mercado de la forma adecuada. Los generadores de código nos pueden ayudar a gestionar dichos cambios de una manera más sencilla y rápida.
  • El software se parece entre sí: Casi todo el software empresarial se parece entre sí. La mayoría de las compañías gestionan recursos de algún tipo (humano, económico, etc.) y generan un producto (dinero, servicios, o bienes de alguna naturaleza). Técnicamente hablando, casi todos los sistemas tienen características como acceso a datos, seguridad, interacción con el usuario o trazabilidad. Los generadores de código nos ayudarán a crear apropiadamente todos estos elementos comunes, disminuyendo el tiempo y los recursos dedicados a tal efecto.

Acerca de CapicuaGen


CapicuaGen es un proyecto de código abierto, bajo licencia LGPL, que puede ser usado tanto para crear software comercial, como software libre.

Es un proyecto modular, basado en un generador central, que delega en elementos más pequeños conocidos como "Generadores de características", cuya misión es generar un aspecto en particular de un software destino, como puede ser la interfaz gráfica, la capa de acceso a datos, o la exposición de servicios y funcionalidades a través de una red corporativa o pública.

Los generadores de características son intercambiables e independientes, pudiendo elegir los que sean más convenientes para un escenario en particular, y cambiándolos cuando sea necesario. Igualmente pueden organizarse en repositorios públicos o privados (empresariales) y ser de fácil acceso para su uso, implementación y ampliación.

El uso del generador y la contracción de los repositorios se sustentan sobre lenguajes y tecnologías ampliamente adoptados por la industria, como Git, Ruby o repositorios públicos como GitHub, o RubyGems, con lo que su curva de aprendizaje es corta y sus capacidades de distribución y ampliación son altas.

El funcionamiento general de CapicuaGen es representado por el siguiente diagrama:




Ilustración 2. Diagrama de funcionamiento de CapicuaGen.

CapicuaGen es, a la fecha, un proyecto personal construido durante un periodo de seis meses, que contiene una serie de generadores de características sencillas expuestas a nivel didáctico, pero plenamente funcionales. Debido a su naturaleza de índole abierta, y su escalabilidad, es de desear que pronto pueda ampliarse con nuevas e interesantes características, aumentando cada vez más su potencia y utilidad.

Las capacidades generadoras que posee en la actualidad son las siguientes:

  •  Generación de proyectos para Visual Studio 2015.
  •  Creación de proyectos de escritorio.
  •  Creación de proyectos para exposición de servicios Web.
  • Generación de proyectos para Android Studio 2.0.

No hay ninguna restricción en cuanto a la tecnología o lenguajes para los que es posible generar código fuente, siempre que exista un generador adecuado para tal efecto. En los ejemplos anteriores generamos elementos para Windows, Web, Android, y en C#, Java o XML.

Igualmente y tal como se verá en la descripción específica de la solución desarrollada, CapicuaGen está pensado para ser parte del ciclo de trabajo del desarrollo de un sistema, permitiendo ampliar su funcionalidad y reciclándola para nuevos proyectos según se muestra en el siguiente diagrama:



Ilustración 3. Diagrama de flujo de trabajo de CapicuaGen.

Objetivos de CapicuaGen


Los objetivos a conseguir son los siguientes:

  • Agilizar la construcción de un sistema a partir del uso de generadores de código que creen de manera adecuada las características comunes ensamblándolas apropiadamente.
  • Reducir la programación manual de un sistema a los elementos particulares que así lo requieran, esto es, a aquellas partes que son exclusivas de dicho sistema y por lo tanto no están incluidas en otros.

Con el cumplimiento de estos dos objetivos se espera satisfacer las siguientes necesidades:

  • Aumento de la calidad del software al generarse en parte de forma automática. Los fallos detectados se podrían corregir en los elementos generadores y aplicar, por ende, al código de los sistemas.
  • Los codificadores no perderían tiempo realizando tareas repetitivas y se concentrarían en las que realmente dan valor al sistema y no en aquellas que se duplican desarrollo tras desarrollo.
  • Reducción de tiempo de desarrollo , con base en la generación de código automático.