¿Sabes qué es Dart Code Metrics?

Sofka Blog
Por Jorge Rodriguez Carreño y Juan Diego Loaiza
Comparte

Dart Code Metrics es una herramienta de análisis estático que ayuda a analizar y mejorar la calidad de nuestro código.

Esta herramienta se usa para evaluar la complejidad, legibilidad y otros aspectos del código, además proporciona información útil a los desarrolladores para mejorar la calidad y reducir el riesgo de errores y problemas en el futuro.

Improve your code quality

Dart Code Metrics verifica antepatrones e informa las métricas del código para ayudarlo a monitorear la calidad de su código y mejorarlo

Additional rules

Dart Code Metrics provides additional configurable rules for the Dart analyzer.

Use as Analyzer plugin

Connecting Dart Code Metrics as a plugin to the Analysis Server allows you to receive real-time feedback directly from the IDE.

Integrate into the CI/CD process

Launching vía the command line allows you to easily integrate Dart Code Metrics into the CCD process, and you can get results in Console, HTML, JSON, CodeClimate, or GitHub.

Community-friendly

Dart Code Metrics is developed by community for community. Your feedback and PRs won’t be ignored.

¿Por qué usar Dart Code Metrics?

Mejora la calidad de tu código

Dart Code Metrics verifica anti-patrones e informa las métricas del código para ayudarlo a monitorear la calidad de su código y mejorarlo.

Reglas adicionales

Dart Code Metrics proporciona reglas configurables adicionales para el analizador Dart.

Usar como complemento del analizador

La conexión de Dart Code Metrics como un complemento al servidor de análisis le permite recibir comentarios en tiempo real directamente desde el IDE.

Integrarse en el proceso de CI/CD

El lanzamiento a través de la línea de comandos le permite integrar fácilmente Dart Code Metrics en el proceso CI/CD y puede obtener resultados en Console, HTML, JSON, CodeClimate o GitHub.

Amigable con la comunidad

Dart Code Metrics es desarrollado por comunidad para comunidad. Sus comentarios y relaciones públicas no serán ignorados.

La fácil integración, las reglas predefinidas y configurables, listas para implementarlas en los proyectos en los que estamos codificando nos brindan valor inmediato, mejorando la calidad de nuestros productos en muy corto plazo.

¿Cómo se configura el proyecto?

Instalación:

O puede agregar la dependencia manualmente en el pubspec.yaml

Y luego de esto debemos hacer un pub get, para bajar las dependencias.

Siguientes pasos…

En el archivo de analysis_option.yaml que cada proyecto tiene definido, se debe agregar la configuración descrita en la siguiente imagen:

Extends

Esta opción permite extender la configuración de Dart Code Metrics utilizando ajustes predefinidos. Puedes incluir uno o varios ajustes para heredar una configuración comúnmente aceptada y ajustarla según tus necesidades específicas. Los ajustes o presets son conjuntos de configuraciones predefinidas que contienen métricas, reglas y exclusiones comunes.

Metrics:

Aquí se puede configurar la lista de métricas que se informarán al ejecutar Dart Code Metrics.

Las métricas son valores numéricos que miden diferentes aspectos del código, como la complejidad ciclomática, la longitud de los métodos o la cohesión de las clases. Se puede especificar qué métricas deseas que se evalúen y se informen durante el análisis del código.

Algunos ejemplos:

Complejidad ciclomática :

La complejidad ciclomática es una métrica que mide la complejidad de una función o método en función del número de caminos  independientes que tiene.

  • 1-10- Programa Simple, sin mucho riesgo.
  • 11-20 – Más complejo, riesgo moderado.
  • 21-50 – Complejo, Programa de alto riesgo.
  • 50 – Programa no testeable, Muy alto riesgo.

Maximum nesting level :

Esta métrica mide el nivel máximo de anidamiento de estructuras de control de flujo, como if/else, while, for, etc.

Source lines of code: Esta métrica mide el número total de líneas de código en un archivo.Se ha establecido un límite de 250, lo que significa que cualquier archivo con más de 250 líneas de código generará una advertencia o un error, según la configuración.

Métricas excluidas

Esta opción metrics-exclude indica a la herramienta que excluya de sus métricas cualquier archivo que se encuentre en el directorio test y sus subdirectorios (representado por test/**).

Reglas

Las reglas en Dart Code Metrics son un conjunto de criterios que se utilizan para evaluar la calidad del código fuente en una aplicación escrita en Dart.Estas reglas están diseñadas para ayudar a los desarrolladores a identificar patrones comunes de código que pueden afectar negativamente la calidad, el rendimiento y la eficiencia del código.

Anti patrones

Aquí se puede configurar la lista de anti-patrones, que son pautas que identifican prácticas de programación ineficientes, obsoletas o potencialmente problemáticas.
Ejemplo del analysis_options.yaml :

Para habilitar una regla, agregue su id a la entrada de reglas.

Severidad en reglas

Todas las reglas tienen una severidad

¿Qué tipos de severidad tenemos ?

  • none
  • style
  • perfomance
  • warning
  • error

None (Ninguna): Esta severidad indica que la regla no tiene un nivel de importancia definido. Las reglas con esta severidad generalmente no tienen un impacto crítico en la calidad del código y se consideran sugerencias o recomendaciones opcionales más que errores o advertencias.

Style (Estilo): Esta severidad se utiliza para las reglas relacionadas con el estilo de codificación y convenciones de Dart. Estas reglas se enfocan en mantener la consistencia y la legibilidad del código siguiendo las pautas de estilo recomendadas. Aunque no afectan directamente el funcionamiento del código, seguir las convenciones de estilo puede mejorar la legibilidad y facilitar el mantenimiento del código a largo plazo.

Performance (Rendimiento): Esta severidad se aplica a las reglas que están relacionadas con el rendimiento del código. Estas reglas buscan identificar patrones o prácticas que podrían tener un impacto negativo en el rendimiento del programa. Al seguir estas reglas, puedes mejorar la eficiencia de tu código y evitar cuellos de botella o problemas de rendimiento innecesarios.

Warning (Advertencia): Esta severidad indica que se ha encontrado una violación de una regla que puede generar problemas o comportamientos inesperados en el código. Aunque no son errores críticos, se considera importante tener en cuenta estas advertencias, ya que pueden indicar posibles problemas que podrían surgir en el funcionamiento del programa.

Error (Error): Esta severidad se utiliza para las reglas que representan errores críticos en el código. Las violaciones de estas reglas pueden resultar en comportamientos incorrectos o fallos en el programa. Estas reglas suelen estar relacionadas con prácticas peligrosas o errores conocidos que pueden provocar resultados inesperados.

Comandas de ayuda

CommandShort description
AnalyzeReports code metrics, rules and anti-patterns violations.
check-unnecessary-nullableChecks unnecessary nullable parameters.
check-unused-filesChecks unused *.dart files.
check-unused-110nChecks unused localization in *.dart files.
check-unused-codeChecks unused code in *.dart files.
Se puede activar el dart code metrics de forma global.
Y para usarlo ejecutamos el siguiente comando:

A continuación, se explica brevemente cada uno de los comandos:

Analyze

Lo que hace es generar un reporte de las métricas del proyecto, en cómo se está comportando con las reglas que yo defino y frente a los patrones, si se están cumpliendo o no, esa es la tarea principal del proyecto.

Esta tarea se ejecuta automáticamente mientras yo voy programando, entonce yo puedo ir solucionando los problemas que se van generando y la herramienta va analizando la solución.

check-unnecessary-nullable

Este comando se encarga de encontrar casos donde se está utilizando el operador de nullable (**`?`**) de manera innecesaria en variables, parámetros de métodos, retornos de métodos, etc.

Esta regla ayuda a mejorar la legibilidad y claridad del código, ya que el uso excesivo del operador nullable puede hacer que el código sea más difícil de entender y seguir. Además, también puede ayudar a reducir la complejidad potencial del código, ya que los desarrolladores no tendrán que preocuparse por manejar el caso nullable en situaciones donde no es necesario.

check-unused-files

Este comando se encarga de identificar y reportar los archivos que no están siendo utilizados en tu proyecto de Dart. Esta regla ayuda a mantener tu proyecto limpio y ordenado, evitando archivos innecesarios que pueden generar confusión, aumentar el tiempo de compilación y afectar el rendimiento general del proyecto.

check-unused-codede

Este comando se encarga de identificar y reportar el código que no está siendo utilizado en tu proyecto de Dart. Esta regla ayuda a mantener tu código más limpio y organizado, evitando funciones, métodos, variables, clases y otros elementos que pueden estar presentes pero que no se están utilizando en el código.

check-unused-l10n

Este comando se encarga de identificar y reportar las claves de internacionalización (i18n) que no están siendo utilizadas en tu proyecto de Dart. Esta regla ayuda a mantener tus archivos de internacionalización más limpios y organizados, evitando claves que pueden no estar siendo utilizadas en el código y que pueden generar confusión.

Últimos artículos