Mejorando la calidad del código en una KB de versiones anteriores.
Por la forma en que desarrollamos GeneXus, basados en conocimiento y no en la tecnología de moda, es común que tengamos algunas KB que fueron desarrolladas años atras, que aun sigan funcionando sin problemas.
Además de controlar que todos los parámetros especifiquen si son de entrada salida, puse algunos controles adicionales, como el nivel máximo de anidamiento, un indice de complejidad (basado en el número ciclomático) y el largo máximo de bloque de código.
Esto es una ventaja enorme, pero también nos trae el problema de como hacer para que dicho codigo utilice las nuevas funcionalidades, para facilitar su mantenimiento.
Pongo un ejemplo concreto:
Parametros con IN:, OUT: e INOUT:
En versiones viejas de GeneXus, todos los parámetros eran de entrada/salida. En versiones mas recientes, se puede especificar si los parámetros son de entrada o de salida, por lo que se evitan problemas de modificar un parámetro sin querer y queda mas claro que es lo que hace el objeto al tener especificado cuales parámetros son de entrada y cuales de salida.
Ademas el código generado, es mas compacto, se usa menos memoria, etc.
Teniendo tantas ventajas, es deseable poder cambiar todo el código viejo y obligar que todos los objetos especifiquen como se utilizan sus parámetros. Esto es mas fácil decirlo que hacerlo. Lo deseable es que todos los objetos nuevos o modificados ya tengan esa funcionalidad, pero permitir los viejos que sigan funcionando como antes, hasta que necesiten alguna modificación.
Para lograr esto, hice una pequeña extensión (se llama KBDoctorValidator), que lo que hace es controla al salvar el objeto algunas características deseables del mismo e impide salvar si no cumple con los controles mínimos establecidos.
Tengo esperanzas que con esta extensión el código viejo vaya mejorando poco a poco, a medida que el mismo necesite modificarse.
Además de controlar que todos los parámetros especifiquen si son de entrada salida, puse algunos controles adicionales, como el nivel máximo de anidamiento, un indice de complejidad (basado en el número ciclomático) y el largo máximo de bloque de código.
Espero que con estas simples controles se pueda ir mejorando la calidad del código de objetos viejos a medida que van siendo modificados.
No la voy a liberar aun, pues quiero ver como se comporta en GeneXus Server, como funciona en los import / export de cosas viejas, etc. Es posible que tenga que poner algunas excepciones para que se permita salvar en algunos casos (por ejemplo, controlando la fecha de ultima modificacion, para permitir importar xpz viejos).
Mi idea es poder incorporar en la extensión otros indicadores de calidad de código y también algunas heuristicas para evitar problemas o retrabajos, como puede ser el dejar en default el Contextual Title o Column Title en atributos o la descripción de tablas o grupos de subtipos.
También esta en los planes dar la posibilidad de cambiar los limites para aceptar o no un determinado cambio, de forma de poder hacer la personalización a nivel de toda la KB, de modo que una KB acepte objetos con anidamiento 10 y otra solo con anidamiento 5.
No la voy a liberar aun, pues quiero ver como se comporta en GeneXus Server, como funciona en los import / export de cosas viejas, etc. Es posible que tenga que poner algunas excepciones para que se permita salvar en algunos casos (por ejemplo, controlando la fecha de ultima modificacion, para permitir importar xpz viejos).
Mi idea es poder incorporar en la extensión otros indicadores de calidad de código y también algunas heuristicas para evitar problemas o retrabajos, como puede ser el dejar en default el Contextual Title o Column Title en atributos o la descripción de tablas o grupos de subtipos.
También esta en los planes dar la posibilidad de cambiar los limites para aceptar o no un determinado cambio, de forma de poder hacer la personalización a nivel de toda la KB, de modo que una KB acepte objetos con anidamiento 10 y otra solo con anidamiento 5.
Comentarios
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.