Para utilizar todas las funcionalidades que ofrece este sitio, es necesario tener JavaScript habilitado.

Hace un par de entradas, había tocado el tema de la complejidad ciclomática. Hoy quiero hablar sobre la complejidad N-Path.

N-Path es una métrica de software, que por encima se parece un poco a la complejidad ciclomática. Aunque ambos se relacionan un poco, en realidad nos sirven para medir cosas completamente distintas. Con N-Path calculamos el número de caminos distintos que puede tomar una rutina (cuando digo rutina, me refiero a funciones o métodos).

Tenemos una función en javascript. Veamos su NPath - Como guía trazé unas lineas, de distintos colores, que indican cuales son los distintos caminos que puede tomar la rutina.

El NPath de esa sola función es de 8! Si nos queremos ahorrar el trazado de las lineas, hay una fórmula para calcular el valor apartír de la complejidad ciclomática. La fórmula en algunos casos no nos dará el valor real, lo que si nos dará es el valór máximo al que puede llegar el NPath. NPath = 2^(CC-1).

En este caso, esta rutina tiene una CC (complejidad ciclomática) de 4. El resultado sería - NPath = 2^(4-1) = 2^3 = 8.

Al igual que con la complejidad ciclomática, también existe una tabla de referencia para ver que tan compleja es una rutina.

  • 1 - 16: Complejidad Baja.
  • 17 - 128: Complejidad Moderada.
  • 129 - 1024: Complejidad Alta.
  • 1025+: Complejidad Muy Alta.

Ya sabemos como calcularlo y ahora tenemos una tabla de referencia, pero aún no sabemos para que nos sirve en nuestro día a día desarrollando software!

NPath va de la mano con el desarrollo guiado a pruebas. NPath nos ayuda a definir el número mínimo de pruebas/tests que se deben realizar, para asegurar el funcionamiento de toda una rutina.

Si retomamos nuestro ejemplo inicial y escribimos un solo test. Teniendo el calculo del NPath, sabemos que nos faltan 7 tests distintos para asegurar que la rutina se va a comportar de la forma en como esta pensada. Aclaro - No solo se trata acerca de escribir 7 tests más! La idea es crear tests buenos, que recorran distintos caminos dentro de la rutina.

En pocas palabras, si tenemos una rutina con un NPath de 800, eso significa que deberíamos escribir 800 tests buenos para asegurar su funcionamiento. De esta forma nos podemos hacer una idea sobre que tan mantenible es el codigo que hemos escrito. Por eso la recomendación es siempre buscar la forma de mantener una complejidad Baja en nuestras rutinas.

Para PHP hay una herramienta que nos ayuda a calcular el NPath de uno o varios archivos llamada PDepend. Inicialmente, es un poco confuso puesto que solo devuelve un archivo en xml con la información detallada de cada archivo, rutina y otros datos más, como la complejidad ciclomática.

Nuevamente debo reiterar, que este tipo de métricas, nos sirven para reflexionar y analizar el código que hemos escrito. Al final del día, lo que al cliente más le interesa es tener código que funcione, independientemente de su complejidad.

De todas formas, estoy convencido que poco a poco debemos tratar de implementar estas herramientas como guías para ayudarnos a generar mejor código. Con el paso del tiempo se ven los resultados.

Te quedaron dudas? O depronto tienes correcciones para esta entrada? Dejame un comentario! Gracias por leer.

Comentarios