Cyclomatic Complexity en SharePoint

Como ya Carlos (http://geeks.ms/blogs/csegura/archive/2007/08/29/sharepoint-pruebas-unitarias-1.aspx) a tomado el token de las Pruebas Unitarias para SharePoint, y me ha liberado del asunto, me han quedado un par de minutos libres para dedicarme a cosas más divertidas…

Ayer, programando un poquito con SharePoint para no perder la costumbre (tratando de manejar WebParts programáticamente http://www.gavd.net/servers/sharepointv3/spsv3_item.aspx?top=3&itm=509), me tocó descompilar por milésima vez el ensamblado de WSS (por eso de que como Microsoft no nos quiere dar un SDK decente, tenemos que buscar la información que necesitamos en el código mismo), y me encontré la función “CreateWebPartsFromRowSetData”, que era precisamente lo que estaba buscando, si le creemos al nombre. Pero la verdad es que mirando el código era como si estuviera mirando llover pa’riba: no entendía ni media palabra. Por lo que se me ocurrió una idea malvada: cuál es la Complejidad Ciclomática de WSS? Alguien lo ha buscado alguna vez?

Los que saben que es Complejidad Ciclomática (Cyclomatic Complexity, CC), sáltense este parágrafo. A los que se les ha olvidado, les recuerdo que es una medida en software (una de las tantas) que indica que tan complejo es un método o una clase en un programa. El CC mide cuantas rutas diferentes se pueden caminar en una función. Por ejemplo, el método:


public int CCuno()
{
    int a = 0;
    int b = 1;

    return a + b;
}


tiene un solo camino a seguir, así que su CC es uno. La función:


public int CCDos()
{
    int a = 0;
    int b = 1;

    if(a == b)
        return a + b;
    else
        return a – b;
}


puede recorrer dos caminos (si a es igual a b, y si no lo es), así que su CC es dos. Sencillo, verdad?. Las cosas se complican si se usan estamentos con lógica interna (if(a == b && a > 1), si a es igual a b Y a es mayor que uno, CC es tres) o se utilizan operadores condicionales terciarios (“?” [el signo de interrogación] en C# o Java). Pero bueno, eso es teoría de construcción de software, y eso se lo dejamos a los teoréticos. Lo que nos interesa a nosotros, los pica-código, es lo que significa este numerito.

Es generalmente aceptado que un CC de 30 es más o menos un límite. Complejidad de código tiene consecuencias para la mantenibilidad (si el código es muy complejo, dentro de seis meses, el pobre desarrollador que tiene que darle mantenimiento va a querer cambiar de oficio), para el testeo (si la función es muy compleja, el código de pruebas lo es también) y el funcionamiento del asunto (si el código es muy complejo, es muy fácil meter las patas, y es muy difícil eliminar errores). Muchas empresas exigen que el código a utilizar no sobrepase cierto límite de CC; esto tiene ventajas y desventajas: un CC bajo significa en general que el código es razonablemente comprensible; pero, mirándolo desde el punto de vista del desarrollador, yo quiero que mi código sea juzgado por su calidad, y no por un numerito cualquiera. En fin, resumiendo:



























CC Complejidad Quien puede entender el codigo
1-4 my baja todo el mundo, inclusive Bill Gates
5-10 normal cualquier desarrollador
11-30 compleja un buen desarrollador
31-60 my compleja solamente Brian Kernighan y Dennis Ritchie
>60 incomprensible ni siquiera el pobre idiota que lo escribió

Pero estoy desvariando. Volviendo a SharePoint, cuando vi el CC de Microsoft.SharePoint.dll, me encontré con lo siguiente:


La función que estaba intentando seguir tiene un CC de solamente 107… y yo creyendo que la podía comprender…

Y hay funciones aun más complejas (CC = 127), y hay 108 funciones con un CC mayor de 30, algunas importantes como el SPListItemCollection (CC=34).

Pero bueno, también hay que poner las cosas un poquito en perspectiva: el Microsoft.SharePoint.dll tiene 26.379 métodos (a que Microsoft no los ha contado), así que 108 métodos con un CC mayor de 30 representan el 0,4% del trabajo total… como de costumbre, estoy haciendo una tormenta Ciclomática en un vaso de Complejidad…

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

3 comentarios en “Cyclomatic Complexity en SharePoint”

  1. Pues mira, pa usos raros, mi compilador de microcontroladores pic12f675 me da un cc de 56.9 con n programa que ocupa 1004 bytes,

    Pobre bichito con sus 8 patitas, es mas una cucaracha que un micro, debe tener un dolor de cabeza con tanta complejidad!!!!

    GRacias por tu explicacion, lastima que no pueda solucionarlo, no me queda memoria.

Deja un comentario

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