Las métricas de código son una forma popular de analizar la complejidad de nuestro software. Por alguna razón, nos traen aquellos reportes de calidad de una sola figura, ya sean líneas de código, complejidad ciclomática o la puntuación de Pylint.

Más, una buena métrica puede iniciar una conversación, pero no te ayudará a conocerlas. Eso requiere tiempo y esfuerzo, humildad, tratar de comprender sus antecedentes y cambiar de opinión sobre supuestos anteriores cuando algo sobre ellos te desafía.

En este sentido, una métrica que se puede utilizar para el código Python es el área debajo de la sangria (donde menos área es mejor).

Python Métricas de Código

Esta medida captura dos cosas, las líneas de código como la profundidad de anidamiento, que es más válido para Python que para otros lenguajes debido al estilo de una acción por línea de Python. Con un límite de longitud razonable, también evita que las personas empaqueten expresiones extremadamente largas en una línea para de alguna forma evitar la métrica.

Más tener una métrica simple y comparable no significa que escribirás un mejor código, se require algo más.

¿Como se probará este código?

Diferentes lenguajes adoptan diferentes enfoques para validar la corrección del código. 

Python siempre se ha basado en pruebas dinámicas: para verificar si el codigo es correcto, lo ejecuta y ve lo que hace.

Eso tiene un gran valor en términos de expresividad. Permite la escritura de metaclases y decoradores, todos los cuales son difíciles o imposibles de verificar en forma estática. Permite la generación de código en tiempo de ejecución y la manipulación de la ruta de búsqueda para los imports. Simplifica la integración con otras aplicaciones. Permite una gama de cambios de API sin interrupciones que serían fatales en otros idiomas.

El costo es escribir pruebas.

Cuando se inventó Python, estoy seguro de que las pruebas paracía una carga innecesaria. En estos días, las mejores prácticas de ingeniería recomiendan pruebas para todo el código independientemente del idioma.

En lugar de ser una carga, escribir pruebas para el código dinámico es en realidad la mejor manera de garantizar que la arquitectura esté bien diseñada. No por que las pruebas en sí mismas sean mágicas, sino por que interactúan con su código fuente desde una perspectiva que esencialmente lo obliga a un buen diseño.

Arquitectura bien diseñada

Para establecer un contexto, estas son algunas de las características de una arquitectura bien diseñada. 

  • Fácil de navegar: Se puede encontrar fácilmente un código basado en saber lo que hace.
  • Fácil de modificar: Se puede cambiar fácilmente un fragmento de código sin afectar a aquellos que lo utilizan.
  • Efectos secundarios fácil de identificar: Se puede saber fácilmente si un fragmento de código requiere/modifica el estado externo.
  • Efectos secundarios fácil de evitar: puede usar parte del código y evitar deliberadamente cualquier impacto externo.

En este artículo hay falta de código, por que el objetivo es provocar un pensamiento profundo, más que tratar de enseñar algo específico. Con un poco de suerte, alguno se sentirá inspirado para tomar estas ideas y presentarla de manera más accesible a otras personas.

En Resumen

Si bien las métricas fáciles de medir son una forma popular de evaluar la complejidad del código, nunca pueden brindarle la historia completa.

Independientemente de la cantidad de código que tenga o del estilo en que esté escrito, si es fácil de navegar, fácil de modificar y fácil de identificar y evitar efectos secundarios, es probable que tenga la complejidad bajo control.

Y la forma más fácil de controlar la complejidad en Python es escribir pruebas. No porque la cobertura de prueba mágicamente resulte en un mejor código, sino porque diseñar su código para que sea comprobable es lo mismo que diseñar para humanos.


Este artículo se encuentra basado en The most critical Python code metric.

Python y las métricas del código
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Etiquetado en:    

Deja un comentario

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

Facebook