¿Tu código generado por IA es una BASURA? (Aquí te enseño cómo arreglarlo)
BBetter Stack
컴퓨터/소프트웨어경영/리더십AI/미래기술
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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video