jueves, 4 de junio de 2015

KBDoctor: Encontrando objetos candidatos para refactoring.

Desarrolle en el KBDoctor una opción para listar objetos candidatos a ser reprogramados o ajustados.

Los criterios que por ahora estoy buscando son:

* Objetos con nivel de anidación alto
Listo cuando se tienen mas de x niveles de if/do/for anidados. 

* Objetos con complejidad ciclomática alta
Calculo la complejidad ciclomatica simplificada del objeto y listo los que tengan una mayor a un rango dada. 

* Objetos con grandes bloques de código
 Apuntamos a no tener bloques de código de mas de 100 lineas de código. 
El bloque de código puede ser una subrutina, o bloques de IF/DO/FOR, etc. 
Lo que hago es una heurística, que puede tener algunos errores, pero sirve en muchos casos. 
El parseo de codigo GeneXus es tarea compleja, pues no tengo ni la gramatica completa y menos un BNF para procesarla. Estaria muy bueno que en proximas versiones del SDK de GeneXus se agregue algunos helpers para el manejo de codigo. Tal vez existan y yo no los he encontrado aun. 

* Objetos con muchos comentarios 
Cuando hay una proporción alta de comentarios frente a código, puede significar que hay código comentado y debería evitarse. 
Esto puede dar falsos positivos, pero al menos es bueno tenerlos controlados. 

Tengo pensado seguir agregando algunos criterios adicionales, al menos como indicadores, por ejemplo , que se listen cuantos objetos hacen referencia desde y hacia el objeto listado. 

Si alguien tiene algún otro indicador que quiera agregar y que sea implementable, me puede mandar un mail o poner un comentario y lo puedo agregar. 

Subi la version a Assembla y van a faltar unas semanas para que la suba al Marketplace, porque el armado de versiones para Ev2, y dos versiones para Ev3, me da bastante pereza.  



martes, 26 de mayo de 2015

View Last Navigation

Alejandro Rivoir hizo esta extension, para acercar las navegaciones a los objetos GeneXus. Para esto, define un nuevo tab en el editor de objetos, donde se puede ver la ultima navegacion sin tener que volver a especificar el objetos.


Esto es bueno para quienes desarrollan con Evolution 2. Aun no hay version para Evolution 3 y para la Salto, ya hay opciones para ver la navegacion sin tener que re-especificar el objeto.

Es una extensión recomendable.


lunes, 25 de mayo de 2015

Export Commit History. Extensiones que uso en GeneXus

Federico Salomon hizo la extension Export Commit History, para poder listar o exportar a una planilla electronica, la historia de cambios en GeneXus Server.

Es una funcionalidad muy util, que permite subsanar la carencia (para mi bastante inexplicable) que tiene GeneXus Server que no permite extraer estadisticas de uso del mismo.

Para todos aquellos que trabajan con GXserver, es una extensión bastante util, como para ayudar a redactar los cambios que hay en una nueva versión.

sábado, 23 de mayo de 2015

Recover Object - Recuperar objetos borrados en GeneXus



Luciano Silveira hizo la extensión Recover Objet, para poder recuperar objetos borrados.
Su uso es bastante sencillo, pues basta con ir a la ventana de la extensión, poner una fecha anterior a cuando se borro el objeto y muestra todos los objetos borrados desde dicha fecha.

Luego, se selecciona los objetos que se quieren recuperar y al seleccionarlo el objeto deja de estar borrado.

Es una extensión muy útil (yo diría que indispensable, debería venir nativa con GeneXus) pues minimiza el riesgo de borrar algo por error, haciendo la limpieza de KB una tarea mucho menos riesgosa.

La recomiendo.

martes, 19 de mayo de 2015

Variables Cleaner by DVelop


Tengo pensado hacer una serie de post sobre extensiones que uso para el desarrollo con GeneXus.

Para iniciar la serie, inicio con Variables Cleaner de los amigos de DVelop.

Es una extensión que hace una sola cosa y la hace muy bien, BORRAR LAS VARIABLES QUE NO SE USAN en los objetos GeneXus.

Permite seleccionar un conjunto de objetos y borrar de ellos todas las variables no usadas. Las ventajas de borrar las variables no usadas, es que el código generado sera mas chico, permite eliminar referencias innecesarias a atributos, dominios, SDT, etc y mimiza errores.

También habilita un menú contextual en cada objeto, para borrar las variables de un objeto en particular. Resulta muy útil para borrar las variables no usadas antes de subir los objetos a GXServer.

Esta disponible para casi todas las versiones de GeneXus (falta solo para Evo3 U3, pues cambio su numero de compatibilidad) y la recomiendo mucho.