Generación de código – Claves del éxito

generacion-codigo-graficoLa generación de código viene acompañándonos en el desarrollo de software durante mucho tiempo, aunque ha pasado ciertamente inadvertida y quizá, a veces, dedicamos poco tiempo a pensar si es aplicable o no en nuestro trabajo diario.

Me gustaría centrar este artículo en abordar las claves del éxito para utilizar generación de código dentro de un proyecto, más que en las diferentes tecnologías existentes.

La creación de código siempre ha sido más bien una tarea de artesanía. Muchas veces es necesario recabar requisitos específicos y crear piezas de software a medida.  Sin embargo, al igual que ocurrió en el pasado con los procesos industriales, cuando la artesanía se fue convirtiendo en procesos de fabricación en serie más eficientes y capaces de generar lo mismo en una menor cantidad de tiempo, ahorrando costes y recursos, pudiendo aumentar tanto el producto como los servicios.

Algo similar ocurre con la generación de código. Cuando “fabricar” software es un proceso “factorizable” es decir, que se puede convertir en un proceso de fabricación siguiendo determinados estándares, es conveniente plantearse una arquitectura de desarrollo basada en la generación de código. Gracias a esto nuestros procesos más técnicos se verán acelerados y podemos centrarnos más en las necesidades y procesos de negocio más concretos, sin necesidad de invertir demasiado tiempo en los conceptos técnicos.

Esto aporta principalmente dos cosas: al disponer de más tiempo es más fácil analizar y centrarse en el negocio propiamente dicho, ofreciendo soluciones más concretas y aumentando la oferta al cliente, reduciendo costes y tiempos de entrega. El otro aporte es que, a la hora de refactorizar, la generación de código nos aporta una gran ventaja, ya que tenemos una forma global de controlar los cambios frente a la forma artesanal, en la que tendríamos que ir pieza a pieza.

La generación de código se compone de tres piezas fundamentales:

Modelo de origen: es la fuente de la información, el conjunto de variables. Puede ser algo tan sencillo como una lista de nombres o tan complejo como un modelo de negocio con áreas, conceptos, procesos, etc. El modelo de origen suele centrarse en los aspectos de negocio y de diseño, obviando por completo las características técnicas.

Plantillas: son el factor común de aquello que se va a generar. Las plantillas suelen usar una tecnología concreta. Las plantillas suelen ser programables, usan variables mezclados con fragmentos de código que utilizan el modelo de origen para generar el código fuente de salida.

Motor de generación: es el proceso que permite la generación de código. Se encarga de leer el modelo de origen y convertirlo en un modelo interpretable por las plantillas y leer las plantillas para generar el código fuente.

Visto desde el punto de vista de procesos, sería como indica la imagen:

generacion-codigo

Existen varias claves a la hora de plantearse el uso de alguna plataforma de generación de código, entre otras, las explicadas a continuación:

Generación a pequeña escala: en cualquier tipo de proyecto, da igual la magnitud de este, se puede aplicar generación de código. Siempre hay piezas del software que pueden ser generadas, tales como recursos, excepciones, esqueletos de servicios, etc. Estas piezas cuyo código suele ser el mismo pero que varían en cuanto a contenido y parámetros son candidatas a ser generadas.

Arquitectura de generación: en proyectos grandes, conviene crear un sistema en el que convivan el código generado y el código hecho a medida. Esta arquitectura nos permitirá respirar tranquilos cuando necesitemos “saltarnos la norma global”, es decir, cuando de repente surja un caso concreto en el que necesitemos hacer “algo más” o algo “diferente”.

“Enmarcar” el código: no debemos olvidarnos que la generación de código no reemplaza los marcos de trabajo (frameworks). Al contrario. La generación de código debe convivir y ser consciente de que existe un marco de trabajo, ya que éste recoge el factor común de todos los procesos. Por tanto, la generación de código puede basar sus plantillas en un framework, siempre que tengamos en cuenta que el uso que realicemos de dicho framework dentro de las plantillas debe ser genérico ya que si en algún momento se cambia de marco de trabajo esté sea fácilmente sustituible en las plantillas. Es conveniente por ello a la hora de elegir qué parte de las plantillas estarán “contaminadas” por dicho marco y abordar estrategias para minimizar el impacto en caso de refactorización o cambio tecnológico.

Extender el modelo: muchas veces las herramientas de modelado se quedan cortas o incluso lejos de lo que necesitamos para definir tecnológicamente nuestro negocio. En este momento nos debemos plantear el uso de una extensión del modelo. Esto es, buscar un mecanismo que nos permita de forma sencilla agregar propiedades al modelo y cumplimentarlo con más información de modo que el generador lea el modelo, lea la extensión del modelo y sea capaz de aportar mucha más información a las plantillas. Esto nos permite enriquecer el código generado y seguir evolucionando sin depender del modelo. Eso sí, sin olvidar que los diseños modelados definen nuestro negocio y lo documentan por lo que deben seguir conteniendo toda la información importante del negocio.

Mudanza tecnológica: todos hemos vivido alguna vez algún cambio tecnológico, ya sea a pequeña o gran escala. En este caso la generación de código también aporta su grano de arena ya que todos los diseños modelados siguen siendo válidos. Por tanto, este cambio tecnológico solo debería afectar a las plantillas. De hecho, si hemos sido cuidadosos distribuyendo nuestro sistema ni siquiera el código a medida debería verse afectado.

Ciclo de desarrollo: es fundamental conocer cómo funciona el ciclo de desarrollo con generación de código. Esto nos permitirá dar una estimación de tiempo más razonable y acertada. Para poder calcular el tiempo de desarrollo con generación de código es necesario conocer:

  • El tiempo invertido en modificar el modelo.
  • El tiempo invertido en modificar las plantillas hasta conseguir el resultado deseado.
  • El tiempo de diseño del código original que se usará para crear la plantilla.
  • El tiempo de generación, que dependerá de la cantidad de conceptos de negocio que sea necesario generar.

La plantilla de generación suele crearse a partir de código probado y funcionando, para asegurar que lo generado cumple con el nivel de efectividad, eficiencia y calidad requerido. En paralelo es posible crear el modelo en el que se basará nuestra generación. Una vez exista el modelo y la plantilla el siguiente paso es generar y comprobar los resultados. Lo normal es que haya que hacer ajustes en el comportamiento del código, plantilla  y modelo hasta conseguir el resultado deseado. Esta tarea suele ser las más compleja y difícil ya que requiere el trabajo en equipo de las personas que modelan el negocio y los desarrolladores. Una vez generado el código es hora de pasar a la integración del código a medida.

ciclo-desarrollo

Tras un ciclo de desarrollo es conveniente volver a generar el código integrado con el código a medida, para garantizar que el conjunto total del desarrollo es compatible con ciclos de regeneración posteriores. Esto nos evitará sorpresas.

Más información:

David-Ruiz-SogetiDavid Ruiz es Licenciado en Ingeniería informática por la Universidad Pontificia de Salamanca. Con más de 10 años de experiencia orientados al diseño, análisis y desarrollo de soluciones empresariales basadas en tecnologías Microsoft y a la supervisión de equipos de desarrollo, aplicando patrones, estándares y métricas de calidad, buscando la simplicidad aún a pesar de que los conceptos sean complejos.  Desde 2012 ejerce como arquitecto de software dentro de la Unidad de Soluciones Microsoft de Sogeti España.

Si quieres saber más sobre los servicios de desarrollo de proyectos de TI, puedes consultar la web de Sogeti.

Autor: ITblogsogeti

Sogeti es una compañía tecnológica perteneciente al Grupo Capgemini y especialista en: Testing y Calidad de Software; Soluciones Microsoft y High Tech Consulting. En Sogeti entendemos la importancia de obtener el máximo valor empresarial de sus sistemas de IT, por ello somos líderes mundiales en Testing & QA.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s