En un estudio reciente, investigadores de instituciones japonesas analizaron tres bibliotecas populares de Python disponibles en la plataforma PyPI: fpdf2, mpmath y pytorch-geometric. El enfoque fue evaluar la relación entre la complejidad del código y su mantenibilidad. A través de la técnica de recolección de datos en 3,003 archivos pertenecientes a estas bibliotecas, se identificaron instancias de código con alta competencia que también presentaban altos riesgos para su mantenimiento.
La investigación utilizó una métrica llamada ‘complejidad ciclomática’ (CC) para evaluar el nivel de dificultad del bloque de código y el riesgo potencial. Se identificaron un total de 10,874 casos, de los cuales se destacaron aquellos categorizados como ‘Seguros’ y ‘Riesgosos’. El análisis reveló que un alto procentaje del código, clasificado como Advance-Safe (46.61%) y Mastery-Safe (50.25%), presenta un bajo riesgo de mantenibilidad. Curiosamente, se halló sólo un 3% de código con alta competencia que presenta alto riesgo de dificultar el mantenimiento.
Esto resalta una paradoja en el desarrollo: mientras más sofisticado y competente sea el código, es posible que aumente la dificultad para mantenerlo si el equipo no comprende su complejidad. La tabla de clases compilada mostró un uso extendido de características avanzadas como comprensiones de lista, llamamientos a ’enumerate’, expresiones generadoras y la función ‘super’.
Los investigadores utilizaron herramientas como Pycefr y Radon para clasificar la competencia del código y calcular su complejidad. Estas herramientas permitieron identificar el grado de competencia adecuada, dividida en niveles de “Competencia Avanzada” (C1) y “Maestría” (C2). El proyecto mpmath, por ejemplo, tiene un alto número de casos donde se implementaron comprensiones simples de lista de manera riesgosa.
El estudio concluyó que aunque la mayoría del código sofisticado revisado es manejable, aún hay instancias donde se debe tener precaución al usar código altamente competente en entornos colaborativos o en proyectos extensos. Para desarrollos futuros, sería beneficioso investigar más a fondo estas observaciones, posiblemente utilizando inteligencia artificial para sugerir actualizaciones de código.