¿Tu código generado por IA es una BASURA? (Aquí te enseño cómo arreglarlo)

BBetter Stack
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00Hoy quiero hablar sobre CRAP. Y no, no es ese tipo de CRAP. Me refiero a la
00:00:05abreviatura que significa Índice de Antipatrones de Riesgo de Cambio (Change Risk Anti-Patterns Index). Y está diseñada para encontrar
00:00:12funciones de riesgo en tu código, que son altamente complejas pero están poco probadas. No es un concepto
00:00:18particularmente nuevo, pero que ha llamado mi atención recientemente, gracias a un paquete lanzado por
00:00:24Alexander Prokhoranko llamado Cargo CRAP, que identifica estas funciones clave en código Rust.
00:00:31La idea original de la métrica CRAP proviene de Alberto Savoia y Bob Evans, quienes inventaron la
00:00:37métrica en 2007 mientras experimentaban con herramientas de prueba automatizadas para desarrolladores. Pero Alexander
00:00:44recientemente reavivó la atención sobre esta métrica olvidada escribiendo este revelador blog post sobre
00:00:49ella y cómo hoy en día, cuando casi todo el código es escrito por agentes de IA, es más importante que nunca
00:00:55analizar tu base de código en busca de estos problemas ocultos. Es un concepto genial y vamos a explorarlo
00:01:01con más detalle en el video de hoy. Así que vamos a sumergirnos en ello. Para entender por qué esto importa, veamos
00:01:11esta función en mi pantalla. Maneja una transformación de datos de varios pasos con sentencias match
00:01:16profundamente anidadas, algunos bucles y muchos caminos de manejo de errores. Así que su complejidad ciclomática es bastante alta, alrededor de 15.
00:01:24Ahora, si no estás familiarizado con el término complejidad ciclomática, es básicamente una forma elegante de medir
00:01:30cuántos caminos diferentes puede tomar un fragmento de datos a través de tu código. Cada vez que escribes una sentencia if,
00:01:36o un match, o un bucle while, o un bloque catch, estás creando una bifurcación en el camino, y cuantas más bifurcaciones tengas,
00:01:43más alto sube la puntuación de complejidad. Y más difícil se vuelve para el cerebro humano mapear todos y cada uno de los posibles resultados
00:01:51en una función. Por eso, siempre que sea posible, intentamos dividir las funciones en tareas más pequeñas.
00:01:57Y para esta función en mi pantalla, una complejidad de 15 significa que hay 15 caminos completamente separados
00:02:04que esta lógica puede ejecutar de principio a fin. Ahora, si esta función está completamente cubierta por pruebas unitarias,
00:02:09su puntuación CRAP se mantiene en 15. Es compleja, pero es segura porque estamos validando su comportamiento.
00:02:16Y esto es lo que deberíamos esperar cuando ejecutamos la herramienta de Alexander, CargoCrap. Y aquí vemos que la puntuación es 13,
00:02:23no 15. Es probablemente porque la librería no tomó en cuenta los manejadores de errores.
00:02:27Pero de todos modos, 15 y 13 están bastante cerca. Así que básicamente esta herramienta está haciendo lo que esperamos.
00:02:33Pero veamos qué pasa si alguien borra esas pruebas o si un agente de IA genera esta función
00:02:39desde cero y omite escribir pruebas por completo. Así que en este ejemplo, voy a comentar mis pruebas.
00:02:45Y si volvemos a ejecutar CargoCrap, de repente esa puntuación supera los 100.
00:02:51Utiliza una fórmula directa para calcular el riesgo equilibrando la complejidad ciclomática,
00:02:57el número de caminos de ejecución lineales a través de tu código, frente a la cobertura de pruebas.
00:03:03Si observamos esta función, C es la complejidad ciclomática de la función y COV es la cobertura de pruebas
00:03:10expresada como una fracción entre cero y uno. Y la matemática penaliza fuertemente el código complejo que carece de pruebas.
00:03:17Así que si tu cobertura es del cien por cien, toda la primera parte de la ecuación cae a cero
00:03:23y tu puntuación CRAP simplemente equivale a tu complejidad ciclomática.
00:03:26Pero si tu cobertura cae, el exponente cúbico en el lado izquierdo hace que la puntuación de riesgo se dispare.
00:03:33Y una función con una complejidad de 10 y cobertura cero produce una puntuación CRAP de 110.
00:03:39Y esto es bueno, porque si quieres una base de código donde, digamos, por ejemplo,
00:03:43ninguna función exceda una complejidad ciclomática de cinco, entonces este es tu métrica base a tener en cuenta.
00:03:49Y si alguna función supera cinco, sabes que esta es el área a la que prestar atención.
00:03:55Normalmente permitirías una complejidad mayor. CargoCrap tiene un valor predeterminado de 30.
00:04:00Pero solo digo que puedes establecer esta métrica por tu cuenta como desees.
00:04:05Y, básicamente, esta es una buena métrica de punto medio a la que prestar atención.
00:04:09Y esto se vuelve crítico en la era del código generado por IA.
00:04:13Porque los agentes de IA son increíblemente buenos escupiendo estos bloques de código sintácticamente correctos y altamente complejos
00:04:20que manejan casos extremos en los que ni siquiera pensaste, pero son notoriamente malos escribiendo
00:04:25pruebas de integración significativas y robustas a menos que se les fuerce explícitamente.
00:04:30Así que herramientas como CargoCrap están pensadas para ejecutarse como un segundo control después de realizar todas las pruebas unitarias
00:04:37para evaluar la calidad general del código.
00:04:39Así que básicamente actúa como un mapa de calor para tu deuda técnica, señalándote directamente el código
00:04:44que es más probable que se rompa durante una refactorización.
00:04:47Y esto también es especialmente útil si quieres mantener tu base de código bien estructurada
00:04:52en caso de que necesites incorporar a un nuevo ingeniero a tu equipo.
00:04:56Y sabemos por relatos anecdóticos cuán increíblemente descontroladas pueden volverse las bases de código con todo este
00:05:02código generado por IA hoy en día si no prestamos atención a ello.
00:05:06Y a veces estos agentes de IA también tienen tendencia a duplicar la misma función en múltiples archivos.
00:05:13Así que creo que herramientas como estas, y más importante aún, metodologías como estas son importantes de conocer
00:05:19y no olvidar en nuestro panorama de codificación moderno para mantener alta nuestra calidad de código.
00:05:24Los mismos autores que idearon esta metodología también lanzaron una herramienta de métrica CRAP para Java.
00:05:30Y honestamente, hasta hace poco, al leer el blog post de Alexander, ni siquiera conocía esta métrica.
00:05:34Así que estoy agradecido de que su herramienta me hiciera notar esta práctica de ingeniería olvidada.
00:05:40Y estoy seguro de que otros lenguajes de programación también se beneficiarían de una herramienta así.
00:05:44Así que si estás pensando en un proyecto divertido para construir en tu tiempo libre,
00:05:48ve a leer el post original de Alberto Savoia y construye uno para otro lenguaje de programación
00:05:53porque podría ser una utilidad muy útil para muchos desarrolladores.
00:05:57Así que ahí lo tienen, amigos.
00:05:58Eso es CRAP en pocas palabras.
00:06:01Eso sonó divertido.
00:06:02De todos modos, ¿cuáles son algunas otras prácticas o métricas de ingeniería olvidadas que conoces
00:06:08a las que deberíamos prestar más atención en esta nueva era de la codificación agéntica?
00:06:13Háznoslo saber en la sección de comentarios a continuación.
00:06:15Y amigos, si les gustan estos tipos de análisis técnicos,
00:06:18por favor háganmelo saber aplastando ese botón de “Me gusta” debajo del video.
00:06:21Y también no olviden suscribirse a nuestro canal.
00:06:24Este ha sido Andrus de BetterStack y los veré en los próximos videos.
00:06:28Los veré en los próximos videos.

Key Takeaway

La métrica CRAP evalúa el riesgo del código combinando la complejidad ciclomática con la cobertura de pruebas, proporcionando un control de calidad esencial para gestionar la deuda técnica generada por agentes de IA.

Highlights

  • El Índice de Antipatrones de Riesgo de Cambio (CRAP) identifica funciones con alta complejidad ciclomática que carecen de pruebas unitarias adecuadas.

  • La fórmula matemática de CRAP penaliza exponencialmente el código complejo a medida que disminuye su cobertura de pruebas.

  • Una función con una complejidad de 10 y cobertura de pruebas cero produce una puntuación CRAP de 110.

  • Los agentes de IA generan código complejo rápidamente, pero frecuentemente omiten la creación de pruebas de integración robustas.

  • Herramientas como CargoCRAP funcionan como un mapa de calor para detectar deuda técnica y riesgos de rotura durante la refactorización.

Timeline

Definición y origen de la métrica CRAP

  • El Índice de Antipatrones de Riesgo de Cambio (CRAP) identifica funciones complejas y poco probadas.
  • La métrica fue creada por Alberto Savoia y Bob Evans en 2007.
  • La herramienta CargoCRAP permite aplicar esta métrica a proyectos escritos en Rust.

La métrica CRAP tiene como objetivo localizar funciones críticas que presentan un alto riesgo de error. Aunque su origen data de 2007 para herramientas de prueba automatizadas, su relevancia ha aumentado debido a la proliferación de código generado automáticamente.

Complejidad ciclomática y riesgo

  • La complejidad ciclomática mide los caminos distintos que pueden seguir los datos en una función.
  • Sentencias como if, match, bucles y bloques catch aumentan la puntuación de complejidad.
  • Una puntuación CRAP alta refleja una falta de pruebas unitarias que validen los múltiples caminos de ejecución.

La complejidad ciclomática cuantifica el esfuerzo necesario para mapear todos los resultados posibles de una función. Una función con complejidad 15 posee 15 caminos lógicos independientes; si carece de pruebas unitarias que cubran estos caminos, el riesgo de introducir fallos durante cambios en el código se vuelve crítico.

Matemática del riesgo y su aplicación práctica

  • La fórmula CRAP equilibra la complejidad ciclomática frente a la cobertura de pruebas.
  • Un exponente cúbico en la ecuación penaliza drásticamente el código complejo con baja cobertura.
  • Es posible establecer umbrales personalizados, como 30, para identificar áreas críticas en la base de código.

El cálculo matemático asegura que el riesgo crezca exponencialmente cuando la cobertura de pruebas es baja. Con una cobertura del 100%, la puntuación CRAP equivale solo a la complejidad, mientras que una cobertura mínima en una función compleja dispara la puntuación de riesgo, indicando áreas prioritarias para revisión.

Uso de CRAP en la era de la IA

  • Los agentes de IA producen código complejo correctamente pero suelen omitir pruebas significativas.
  • El análisis CRAP actúa como un control de calidad posterior a las pruebas unitarias.
  • La metodología ayuda a mantener la estructuración del código para nuevos integrantes del equipo.

En entornos donde la IA automatiza la escritura de funciones complejas, herramientas como CargoCRAP funcionan como un mapa de calor contra la deuda técnica. Esta práctica previene el descontrol en bases de código grandes y facilita la legibilidad y el mantenimiento a largo plazo para los desarrolladores humanos.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video