30 noviembre 2009

Genoma - Visualización - UserControl TreeMap


Según Wikipedia, Visualización es la generación de una imagen mental o una imagen real de algo abstracto o invisible. http://es.wikipedia.org/wiki/Visualizaci%C3%B3n

Como parte del Proyecto Genoma, tengo la tarea de implementar algunos controles de visualización los cuales serán utilizados en el módulo GenomaServer.
La idea detrás de la creación de estos controles es que sean implementados como User Controls de GeneXus y luego sean liberados para uso de la comunidad (independiente del proyecto Genoma).

La implementación de estos user controls va a tomar su tiempo (aprender actionscript, flash, usercontrols y muchas cosas más), sin embargo para ir dando un adelanto de los avances y de cual es la idea detrás de los controles de visualización del proyecto, les presento una prueba de concepto del control denominado GenomaTreeMap (una implementación de Treemapping)

Tomé información de la KB pública de GXWiki (versión 3.0) en GeneXus Server y calculé la métrica de "cantidad de líneas de código por programa" (sin comentarios ni lineas vacías).

La idea detrás de GenomaServer es que puedan escoger sobre un conjunto variado de medidas y sea posible compararlas entre si de forma visual (las que sean implementadas mediante GenomaExtensions).
Por el momento la más simple de implementar para demostrar algo fue "cantidad de líneas de código", espero pronto mostrarles ejemplos más complejos como los mencionados en el proyecto.

Para ver el ejemplo, simplemente sigan el siguiente link:

Ver GXWiki 3.0 en GenomaTreeMap

Por el momento lo que hay es un poco pobre, espero que de todas formas les guste y les permita comenzar a hacerse de una idea sobre el proyecto Genoma.


UPDATE 30/03/2010:
Se publica versión inicial del User Control GeneXus en gallery.genexus.com

Se publica una demo de una versión más avanzada del control.

Se publica una demo del control con proyectos GXOpen


Recursos:

Para finalizar, les dejo un poco de información con referencia sobre visualización.

Visualization of Practices and Metrics
http://www.squale.org/quality-models-site/research-deliverables/WP1.2_Visualization-of-Practices-and-Metrics_v1.pdf

Treemaps for space-constrained visualization of hierarchies
http://www.cs.umd.edu/hcil/treemap-history/

27 noviembre 2009

GeneXus - Medición y Análisis de Productos



Imagínese que entra en la cabina del piloto de un moderno avión a reacción, y ve que allí hay un único instrumento. ¿qué pensaría usted con respecto a viajar en ese avión?

Pilotear el desarrollo de una aplicación, el apoyo de las herramientas de medición y análisis

Si no se mide lo que se hace, no se puede controlar y si no se puede controlar, no se puede dirigir y si no se puede dirigir no se puede mejorar.

El objetivo de la medición y el análisis es aportar a la empresa herramientas que le ayuden a seguir el camino correcto en búsqueda de su metas y objetivos fijados.

Proceso de medición y análisis

"La medición es el proceso mediante el que se asignan números o símbolos a los atributos de las entidades del mundo real de manera que dichos atributos sean descritos de acuerdo a unas reglas previamente definidas". http://portal.acm.org/citation.cfm?id=580949

El propósito del proceso de medición y análisis es identificar en qué problemas debe enfocarse la empresa, permitiendo definir acciones correctivas, asignando los recursos necesarios que permitan mejorar los procesos. Las mejoras deberán enfocarse en solucionar los problemas de raíz a efectos de mitigar la posibilidad en que los problemas vuelvan a ocurrir.

Las empresas de TI generalmente agrupan las métricas en las siguientes categorías:
  • Producto físico
  • Gestión de Proyectos
  • Desarrollo de Productos
  • Servicios
  • Satisfacción del Cliente
Como mencioné en el título del artículo, me voy a enfocar en los puntos asociados al producto (Producto físico y Desarrollo de Productos)

Las métricas que generalmente se definen sobre las agrupaciones anteriormente mencionadas son las siguientes:

Producto físico
  • Tamaño - Número de componentes, líneas de código, volumen de software, puntos de función
  • Reutilización - Número de componentes llamados más de n veces, número de llamadas, volumen de reutilización, ratio de reutilización
Desarrollo de Productos
  • Documentación - Calidad de la documentación del proyecto, calidad de la documentación de soporte.
  • Calidad de código - Porcentaje de código comentado, complejidad ciclomática, código muerto.
  • Calidad de pruebas - Cobertura de pruebas, densidad de defectos.
Proceso de medición y análisis; modelos de calidad y estándares

Pueden encontrar mucha más información sobre el proceso de medición y análisis en internet, libros y también en estándares y modelos de madurez (calidad) que actualmente son muy difundidos en el sector de TI.

Les menciono un par que se apoyan fuertemente en el proceso de medición y análisis.: CMMI (CMMI-DEV) e ISO/IEC 15504

Si desarrollo mis sistemas con GeneXus... ¿que herramientas tengo para implementar medición y análisis sobre mis productos?

Las herramientas base para implementar herramientas de medición y análisis existen desde hace ya un tiempo (analizando XPW's,XPZ, GXPublic y más recientemente el SDK de GeneXus X+). Sin embargo no logré localizar ninguna implementación 100% enfocada a la medición y análisis.
Con anterioridad les mencioné un poco lo referente a "Análisis estático de código", en donde localicé varias herramientas asociadas al análisis de código, pero nada muy relacionado a la medición, ni tampoco encontré algún método o base sobre la cual implementar este tipo de herramientas.

Proyecto Genoma (CP 2.0)
Infraestructura para implementar tus propias herramientas de medición y análisis (y mucho +) en GeneXus.

"El objetivo principal del proyecto es implementar la infraestructura necesaria que permita a programadores GeneXus (o programadores de extensiones) desarrollar herramientas de medición, análisis y procesamiento sobre la información contenida en las bases de conocimiento GeneXus."

Me imagino un futuro en el cual el desarrollo de sistemas GeneXus se encuentre guiado por herramientas automáticas, herramientas que te permitan tener acceso a un conjunto de reportes de métricas así como ayudar a detectar puntos en donde realizar mejoras, o listar informes de anomalías o "faltas" a las políticas o guías o simplemente un conjunto de informes con los resultados de las actividades de integración, generación, compilación, pruebas o deploy, los cuales podrían ser ejecutados de forma desatendida o automática.

Por el momento es un proyecto para comenzar a experimentar sobre la marcha, comenzando por algo más modesto, la medición (con algo de análisis), claro que sin dejar la puerta abierta a la posibles extensiones sobre la infraestructura planteada. La idea es ir aprendiendo con cada paso todas las nuevas posibilidades brindadas por las herramientas y tecnologías detrás de GeneXus.

Como siempre, se acepta todo tipo de sugerencias y apoyo, la idea de la herramienta es que sea para uso público (Comunidad GeneXus). Nos queda mucho camino por recorrer :-)

Si les interesa conocer sobre el proyecto Genoma, les dejo algunos links relacionados.


Otros Recursos

Quienes quieran conocer más sobre " la cabina de un avión con un único instrumento", les recomiendo leer la introducción del libro "The Balanced Scorecard: Translating streategy into action" de Kaplan y Norton. Pueden leerlo en inglés en Google Books aquí (lamentablemente Google Books no tiene publicada la preview de la edición en español, "Cuadro de mando integral").

Existe una guía en internet que trae un buen resumen sobre medición y análisis. INTECO - Calidad de Software - Guía práctica de medición y análisis.
INTECO (Instituto Nacional de Tecnologías de la Comunicación de España) proporciona un buen catálogo de materiales relacionado a calidad de software. Les recomiendo que vean el listado de guías el cual pueden acceder desde aquí.

Sobre métricas de software, les recomiendo la siguiente presentación: Métricas técnicas de Software es un buen resumen de las métricas más comúnmente utilizadas (No encontré la fuente origen de la misma).
También relacionado a lo mencionado por INTECO y la presentación anterior, les adjunto una presentación en donde presenta "Conceptos básicos, definición y formalización", pueden bajarse la misma desde aquí.

Existe mucho material en internet, pueden encontrar toneladas de información, pero muy pocas "guías prácticas" al respecto, recomiendo lecturas sobre métricas en Wikipedia, libros y pegarle una ojeada a estándares o normas como CMMI e ISO (15504, 9126 y 12.207 entre otros) que generalmente ayudan como guías muy generales sobre el tema (te dicen que cosas tienes que hacer, pero no te dicen exactamente cómo).

05 noviembre 2009

GeneXus - Estilo de codificación y refactorización del código fuente



En el artículo anterior les comenté un poco sobre "análisis estático de código".

Me quedaron un par de temas pendientes a tratar (si bien los mencioné en la sección de recursos):
¿Cuál es la correlación con análisis estático de código?

Las "guías o reglas de estilo" ayudan a detectar cuales son las infracciones (desviaciones a los estándares definidos).
Y la refactorización del código, permite la corrección automática de esas infracciones.

De esta forma sería posible que una herramienta corrija código aplicando los patrones de estilos, buscando además patrones de código con "malas prácticas" y  transformando los mismos en una codificación válida y unificada.

Para que realmente exista utilidad, debería de permitir aplicar diferentes estándares (propios o usar de terceros) y permitir incorporar conocimiento sobre los patrones a identificar (malas prácticas). Todo el proceso de corrección debería de ser efectuado de forma automática o asistida.

Ejemplos prácticos en GeneXus

Marcos Crispino nos comentó (en enero) sobre temas relacionados a Refactoring http://blog.marcoscrispino.com/2009/01/refactoring-de-cdigo-genexus.html

Algo que menciona Marcos, es referente al trabajo realizado por Matias Barrios, sobre el proyecto GxVisualindent (http://www.gxopen.com/gxopen/servlet/projectinformation?755), el cual se encarga de la indentación de código fuente en GeneXus 9.

Luego Matías basándose seguramente en las ideas de Marcos instauró el proyecto RefactorinGX (http://www.gxopen.com/gxopen/servlet/projectinformation?757), el cual implementa métodos que permiten identificar algunos casos, aplicando correcciones o informándolas.

Sin embargo no encontré en la comunidad ejemplos que mezclen los conceptos de "declaración o definición de estilo de codificación" y detección de patrones (que se encuentren declarados) para luego ser detectados y refactorizados.

Espero que a futuro aparezcan herramientas que permitan implementar análisis estático de código y refactorización de programas GeneXus.

Por el momento, solamente puedo adelantarles que estoy trabajando en un proyecto relacionado a estos temas (Pero que no necesariamente se atacarán estos temas a corto plazo).
Seguramente pronto tendrán novedades sobre el mismo en éste mismo medio.


Recursos

Para el caso de "Las guías o estándares", no conozco mucho que se encuentre de acceso público en internet.
Los que pude localizar son los mencionadas a continuación (si conocen alguna más, se agradece el aporte para irlo incorporando al listado)

Nomenclatura GIK : http://wiki.gxtechnical.com/commwiki/servlet/hwiki?GIK,

GIK & GxSoft Nomenclaturas :
http://gxsoft.googlepages.com/gik%26gxsoftnomenclaturas
http://www.scribd.com/doc/289187/Nomenclatura-GxSoft-vs-GIK

Ejemplo usado en el proyecto ModsGX (Facultad de Ingeniería)http://www.fing.edu.uy/inco/cursos/ingsoft/pis/memoria/experiencia2002/ModsGX/modelo/introduc/metgen.htm#_Toc16527191

Seguramente en las empresas existen documentos del tipo "manual de nomenclaturas" o "manual de estándares de programación" o algún documento del tipo "buenas prácticas de programación", en donde traten los temas relacionados a estándares de codificación.
Principalmente lo que busca cada uno de estos estándares es unificar, permitiendo que cualquier programador que conozca el estándar, pueda leer y entender los programas sin mayores problemas (mejor comprensión para revisión y mantenimiento).

Para finalizar les dejo algunos ejemplos aplicados para otros lenguajes de programación:
http://en.wikipedia.org/wiki/Programming_style#Coding_conventions_for_languages

Para refactorización tienen la sección de "Automated code refactoring" mencionado en la Wikipedia
http://en.wikipedia.org/wiki/Code_refactoring#Automated_code_refactoring