Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2699

Fixed Buffer: Mejorando la calidad del código con NDepend (con sorteo de licencia!)

$
0
0
Tiempo de lectura:6minutos
Imagen ornamental con el logo de NDpend

Hace ya unos meses, me escribió Patrick Smacchia, autor y lead del equipo de desarrollo de NDepend para ofrecerme probar su herramienta y hacer una review sobre ella.

Me ha costado sacar tiempo para trastear la herramienta (lo siento Patrick 🙁 ), pero finalmente lo he podido hacer y ahí vamos con ello.

Disclaimer: Nada de lo que digo aquí está condicionado, Patrick me ofreció una licencia para probar el software y hacer una review objetiva sobre lo que ofrece si me parecía interesante, pero en ningún caso ha revisado ni opinado sobre lo que aquí estoy escribiendo

¿Qué es NDepend?

NDepend es un analizador de código con el que vamos a poder generar informes interactivos con métricas sobre la calidad del código analizado. Cada métrica está documentada y es monitorizable.

Se trata por tanto de una herramienta, enfocada a desarrolladores y arquitectos software, que realiza análisis estático de proyectos .NET y .NET Core.

Además, puede utilizarse tanto en nuestro propio equipo durante el proceso de desarrollo (ejecutable standalone e integraciones con Visual Studio), como en varios sistemas de integración continua como pueden ser Azure DevOps, TFS, Teamcity, Jenkins y algunas más.

¿Para qué me puede servir NDepend?

Detectar errores y demás está muy bien, pero eso ya lo consigo con FxCop Analyzers, ¿no?. La verdad es que NDepend llega bastante más alla de los que puede ser análisis de código estático simplemente. Una de las ventajas que nos aporta es la detección automática de puntos donde algo raro está pasando (code smells), así como la detección de buenas prácticas (o ausencia de ellas). Obviamente, también tenemos métricas sobre cantidad de lineas, complejidad ciclomática, etc…

En resumen (de brocha gorda):

  • Detección de código sospechoso (code smells)
  • Detección de zonas donde el código es complejo (complejidad ciclomática)
  • Detección de referencias (que partes de nuestro código son las más utilizadas)
  • Detección de acoplamiento
  • Cálculo de deuda técnica (sí, aunque no lo reconozcas, no todo tu código es perfecto)
  • Tendencias y gráficos de evolución sobre la calidad del código
  • Estimación del tiempo invertido

Un caso práctico

Como siempre, hablar es fácil y por eso quiero poner un caso práctico del análisis de una aplicación. En mi caso concreto yo he probado NDepend con un cliente en el que tenemos nada más y nada menos que 36 proyectos dentro de la misma solución (pequeñito el sistema… xD). Como evidentemente no puedo dar datos sobre los clientes de mi trabajo, el caso práctico lo vamos a plantear sobre un proyecto público que a más de uno os puede resultar familiar como es Dapper, un micro-ORM desarrollado por la gente de Stack Exchange (casi nada…)

Lo primero de todo, es que yo he optado por utilizar la versión standalone directamente en lugar de la integración con Visual Studio, ya que en muchos proyectos utilizo Visual Studio Code. No obstante, en una prueba rápida con su integración en VS he podido comprobar que ofrece prácticamente lo mismo.

Para esto simplemente he tenido que ejecutar la aplicación que me he descargado sin necesidad de hacer ninguna instalación extra. Una vez dentro de Visual NDepend, basta con ir al menú de archivo y decirle que queremos analizar un proyecto o solución de VS.

Tras unos instantes analizando el proyecto (que dependerá del tamaño del proyecto que estemos analizando), podremos acceder a los diferentes paneles con la información.

Panel general (dashboard)

Este es el cuadro de mando general con las métricas del análisis, por ejemplo, en el proyecto de Dapper:

  • 13059 líneas de código
  • 129 archivos de código fuente
  • 11 ensamblados
  • 40 espacios de nombres
  • 6385 líneas de comentarios
  • Estimación del esfuerzo para realizar la aplicación: 345 días
  • Deuda técnica: 40 días
  • 5 días y 6 horas de esfuerzo para reducir la deuda técnica de C a B
  • 2 alertas de fallos primordiales a revisar
  • 8 alertas de reglas críticas no superadas
La imagen muestra el panel de Visual NDepend donde se leen los datos arriba descritos

Vista de métricas

Este es otro panel que aporta a mi modo de ver una información importante de manera muy visual. Gracias a sus tres selectores vamos a poder configurar el nivel de agrupación (cantidad de métodos, campos, espacios de nombres,…), dentro de la agrupación, vamos a poder seleccionar en base a que métrica queremos que tenga el tamaño, y por último vamos a poder seleccionar en base a que métrica queremos que tenga el color.

De este modo vamos a poder hacer una revisión visual muy rápida, por ejemplo, de la complejidad ciclomática de cada método, haciendo que se represente más grande cuantas más referencias tiene:

La imagen muestra un recuadro por cada método del proyecto en un color del verde al rojo en funcion de la complejidad ciclomática del método

Gráfico y matriz de dependencias

Otros de los paneles que ofrece y que me parecen extremadamente interesantes son los referentes a las dependencias dentro de la solución. Estos paneles de dependencias nos van a mostrar, valga la redundancia, las dependencias.

De manera gráfica:

La imagen muestra de manera visual las dependencias  entre partes del proyecto

Y para proyectos más grandes, en forma de matriz:

Conclusión

Aunque he tenido poco trato con NDepend en batallas del día a día, la verdad es que creo que es una herramienta con mucho potencial. La posibilidad de crear reglas de análisis propias le otorga un grado extra de flexibilidad que creo que puede conseguir que se adapte a más escenarios.

El soporte que ofrece para diferentes entornos de integración y despliegue continuo la verdad que me parece una maravilla también, ya que simplifica mucho el proceso de utilización de la herramienta.

Más allá del coste de licenciamiento, que puede ser o no una barrera para adoptar NDepend (como cualquier otro software), si que creo importante resaltar que es una herramienta muy focalizada en .Net.

También he de añadir que NDepend se integra con SonarQube y puede hacer su trabajo también junto a este si necesitas encajarlo con esta herramienta.

Si con todo esto que he comentado, crees que puede encajarte esta herramienta, te recomiendo echarle un ojo tanto a sus costes como a su versión de prueba.

¡Participa en el sorteo!

Como comentaba en el titulo, NDepend ha cedido muy amablemente una licencia de desarrollador, valorada en 399 Euros, para sortear entre los lectores de FixedBuffer.

Para participar, basta con escribir un comentario en este post (OJO, en la sección de correo electrónico hay que poner uno válido o no podré contactar), podéis aprovechar también para contarnos qué os parece NDepend o en qué pensáis que os podría ayudar, todo lo que os gusta FixedBuffer, o si hace frío o calor. La cosa es comentar algo para participar 😉

El sorteo se realizará el próximo domingo día 10octubre de 2020 y consistirá en elegir al azar entre uno de los comentarios. Tras ello, me pondré en contacto con el autor para detallarle los pasos a dar para reclamar su licencia gratuita.

¡No dejéis de participar! ¡Suerte!

**La entrada Mejorando la calidad del código con NDepend (con sorteo de licencia!) se publicó primero en Fixed Buffer.**


Viewing all articles
Browse latest Browse all 2699