Hay cosas inútiles, cosas totalmente inútiles y Métricas de Código (sobre todo para desarrollo con SharePoint)

Todos tenemos de esas cosas que nos enervan… cuando empieza a llover (y nos mojamos) en un día de sol… la fila en el supermercado que avanza más rápido que en la que estas… despertarse y no poderse volver a dormir… Métricas de Código… cosas de esas que te irritan sin saber por que…

En estos días, por eso de que hay que estar al tanto de lo que pasa en el mundo, he estado dándole una revisada a las últimas herramientas para Visual Studio, sobre todo las últimas versiones de CodeRush y Resharper. Con herramientas para Visual Studio siempre he tenido una relación de amor-odio: me encantan por lo que pueden hacer y las odio porque son tan lentas y porque se comen tanta memoria y tiempo de CPU, que me rompen la “dinámica” cuando estoy escribiendo código… con toda seguridad me entienden… si estas inspirado y por fin te están saliendo las líneas de código a borbotones, lo menos que quieres es que una herramienta estúpida se demore media hora en mostrar la lista de Intellisense en una variable…

En fin, luego de usar un par de días Resharper 4.0, termine sacándolo del sistema por eso mismo… los 5.835 (o que se yo cuantos) shortcuts que utilizaba la version anterior son ahora 10 veces más, y la velocidad de operación es 2 veces menor… fuera de mi sistema… luego instale CodeRush 3.0.8; la verdad, este va evolucionando mas por el camino que yo desearía: menos funcionalidad que nunca se usa, y menos carga para el sistema. Aunque sigue poniendo problemas de vez en cuando, sobre todo por lo de las graficas que utiliza (CodeRush era anteriormente conocido como CodeCrash, según me comentaba alguna vez Hadi Hariri), es bastante más rápido para utilizar que Resharper, y la verdad sea dicha, la parte grafica es realmente encantadora (cuando funciona).

Pero se trata de Métricas de Código. Pues bien, CodeRush ofrece la posibilidad de mostrar al lado de cada método o clase que crees un número indicando la cantidad de renglones del método, su Complejidad Ciclomática o su Complejidad de Mantenimiento. Estos dos últimos son Métricas de Código que pretenden indicar que tan difícil de entender es un pedazo de código (“Cyclomatic Complexity en SharePoint” http://geeks.ms/blogs/gvelez/archive/2007/09/02/cyclomatic-complexity-en-sharepoint.aspx ) o que tan difícil será para darle mantenimiento. La forma para calcular la Complejidad de Mantenimiento es tan complejo que es prácticamente imposible de darle mantenimiento, pero si lo desea saber en detalle, en el articulo “Here’s your new metric” (http://www.doitwith.net/PermaLink.aspx?guid=39a0e537-5d0e-4f9b-ac5c-51e8b3d1d4ec) encontrará todo lo que desee saber al respecto. En resumidas cuentas, un número mayor de 1001 es “Ultra-complejo, extremadamente difícil de mantener, alta prioridad para simplificar”.

Pues bien, da la casualidad de que yo trabajo con SharePoint, en donde si quiero hacer una WebPart tengo que usar un override de un método que se llama “CreateChildControls”, en donde tengo que crear todas las instancias de los controles que quiero usar y asignarles sus propiedades básicas. En la WebPart que estaba construyendo, tengo 38 controles creados, lo que me produce un Maintenance Complexity de 1154, una enorme raya roja a lo largo de toda la rutina y un enorme insulto del compilador cuando genero el ensamblado… pero que quieren que haga? Partir el CreateChildControls en 38 rutinas pequeñitas y llamarlas desde el metodo una por una? Eso es mas inmantenible que el código actual… y entre otras cosas, los 38 controles usan cada uno código muy sencillo, que no tiene ningún problema de mantenimiento por si mismo… Métricas de Código son estúpidas… CodeRush fuera de mi sistema…

Sigamos… Visual Studio 2008 Team System viene con Métricas de Código: excelente. Podemos ver Profundidad de Herencia, Acoplamiento de Clases, Complejidad Ciclomática e Índex de Mantenibilidad. Por supuesto que este último es diferente al de CodeRush, y, si lo desea saber, es calculado según la fórmula:

Maintenability Index = 171 – 5.2 * log2 (Halstead Volumen) – 0.23 * (Cyclomatic Complexity) – 16.2 * log2 (Lines of Code)

Queda claro? Perfecto… Como se habrá podido dar cuenta, 171, 5.2, 0.23 y 16.2 son factores calculados científicamente por la Carnegie Mellon University (no, en serio, no es para reírse, léalo usted mismo en http://blogs.msdn.com/fxcop/archive/2007/11/20/maintainability-index-range-and-meaning.aspx si no me cree) de tal forma que te salga un numero entre 100 (muy bien) y 0 (requetemal). Yo diría que lo hicieron al revés, un indexe de mantenibilidad de cero me dice que hay que darle cero mantenibilidad, pero quién soy yo para contradecir a la Carnegie Mellon University…

Pues bien, al intentar usar las Metricas de Visual Studio 2008, sale inmediatamente un error “An error ocurred while calculating code metrics for target file bla-bla-bla…”. Googleando por aquí y por allá, parece que es un bug del tamaño de una vaca, que posiblemente será corregido en el Service Pack 1 de VS, y que para evitarlo hay que meter referencias a los NameSpaces mencionados en el error (http://neovolve.com/archive/2007/12/21/bug-found-in-calculating-code-metrics-in-vs2008.aspx). Luego de hacerlo de esa forma, es posible hacer funcionar la cosa, y que resulta? Que mi método CreateChildControls tiene un Maintenability Index de 25… Bastante malo… Métricas de Código a la basura… O soy yo el que está metiendo las patas por algún lado?… lo único que puedo decir es que digan lo que digan las Métricas, mi código funciona bastante bien, y hasta ahora solamente un par de programadores incapaces e ineptos se han atrevido a quejarse de que no es mantenible…


Gustavo – http://www.gavd.net/servers/
Escriba un Comentario que me haga reir…

6 comentarios en “Hay cosas inútiles, cosas totalmente inútiles y Métricas de Código (sobre todo para desarrollo con SharePoint)”

  1. Gustavo,
    Muy buen post…como siempre, real como la vida misma…curioso lo del bug que comentas de Team System…a ver si Mr. Corral nos ilumina con sus conocimientos en la materia ;-).

    Un abrazo

    JC’s

  2. Hola Gustavo

    Las métricas (estadísticas) a veces no dicen mucho; si tu y yo estamos en un restaurante y yo solito me bebo una botella de vino ¿por que ambos nos hemos bebido media….?

    Pienso que a muchos se nos escapa (o no hallamos) el horizonte donde la métrica se aproxima a la realidad…Todo llegará

    Por cierto ¿sabes de blogs o webs en castellano donde hablen de métricas de código? A los que el inglés se nos dió mal lo llevamos complicado.
    Gracias.

  3. “pero que quieren que haga? Partir el CreateChildControls en 38 rutinas pequeñitas y llamarlas desde el metodo una por una?”

    ¡Por supuesto! ¿Tienes mezclada la lógica de 38 controles dentro de UN solo método?!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *