Unidad 4 / 12

Revisión de código, refactorización y deuda técnica

Ganancias:

  • Capacidad para utilizar la IA como segundo ojo en la revisión del código para mejorar la legibilidad, la lógica y la seguridad.
  • Capacidad para planificar pasos de refactorización con soporte de IA sin interrumpir el comportamiento complejo del código.
  • Capacidad para verificar las recomendaciones de revisión y edición de AI con pruebas y comparación de control de versiones.

En ingeniería de software, el código se lee mucho más de lo que se escribe. Una línea de código se escribe una vez, pero se lee, modifica y construye docenas de veces a lo largo de meses. Es por eso que la revisión de código (revisar el código propio o de otra persona para determinar su lógica, legibilidad y seguridad) y la refactorización (mejorar la estructura del código sin cambiar su comportamiento) están en el corazón de la ingeniería. La IA se convierte en un poderoso “segundo ojo” para estas dos tareas: sugiere rápidamente legibilidad, señala problemas de lógica y seguridad pasados ​​por alto y divide una refactorización grande en pasos seguros más pequeños. Pero hay una regla crítica: la refactorización no debe cambiar el comportamiento, y lo único que garantiza esto son las pruebas.

En esta unidad, veremos cómo utilizar la IA de forma estructurada para la revisión de código, cómo corregir código complejo sin alterar su comportamiento y cómo gestionar la deuda técnica (decisiones de código rápidas pero costosas).

Conceptos: Deuda técnica: Decisiones de código tomadas hoy para lograr velocidad que dificultan el mantenimiento en el futuro. Olor de código: patrones que no son errores en sí mismos pero que indican problemas (funciones demasiado largas, código repetitivo). Regresión: Cuando un cambio rompe algo que anteriormente funcionaba.

Uso de IA en la revisión de código estructurado

Cuando el tiempo es limitado, es necesario centrarse en las cuestiones de mayor riesgo. El formateador automático maneja problemas de formato como sangría y espaciado; Debe dedicar atención humana a la lógica, la seguridad y el comportamiento de los casos extremos. Cuando realice la revisión de la IA, solicite una lista de prioridades, no un simple aluvión de revisiones.

  1. Dale el alcance. Qué código, qué hacer, en qué contexto funciona.
  2. Especifique el eje prioritario. Precisión y seguridad primero, legibilidad después.
  3. Solicite una corrección concreta. “Por qué surge el problema” y “solución recomendada” para cada hallazgo.
  4. Usted verifica los hallazgos. La IA también produce falsos positivos; Verifique cada hallazgo con el código y las pruebas.

Mensaje de revisión estructurada: "Examine la siguiente función como un ingeniero senior. Enumere los hallazgos en orden de importancia y márquelos con estas etiquetas: [CRÍTICO] lógica/seguridad, [MEDIO] caso límite/rendimiento, [BAJO] legibilidad/nombre. Para cada hallazgo: por qué preguntar, sugerencia de solución concreta. NO SALTE los problemas de formato/sangría, la herramienta automatizada se encargará de ello. Código: [código]"

Mensaje de revisión centrado en la seguridad: "Revise este código únicamente por motivos de seguridad: falta de validación de entrada, riesgo de inyección, falta de control de autorización, fuga de información confidencial, valores predeterminados inseguros. Agregue un escenario de ataque de ejemplo a cada hallazgo. Si no hay ningún problema de seguridad, indique claramente 'No encontré ningún problema de seguridad crítico'. Código: [código]".

Precaución: El hecho de que la IA diga "no hay problema" no es prueba de que no haya ningún problema. La IA puede producir falsos negativos; puede evitar un problema de seguridad real. La revisión de IA complementa, no reemplaza, la revisión humana y las pruebas de seguridad. En códigos críticos para la seguridad, el ingeniero competente tiene la última palabra.

Refactorización preservada por pruebas

La regla de oro de la refactorización: probar primero, cambiar después. Antes de corregir el código, deben realizarse pruebas que bloqueen el comportamiento actual para saber inmediatamente si el cambio altera algo. No rompas el orden al refactorizar la IA.

  1. Ponga a prueba el comportamiento actual. De lo contrario, haga que la IA produzca una “prueba de caracterización” (prueba que captura el comportamiento actual tal como es).
  2. Arréglelo en pequeños pasos. Las pruebas deben permanecer verdes en cada paso.
  3. Ejecútelo después de cada paso. Detecte la regresión temprano.

Mensaje del plan de refactorización segura: "La siguiente función de 60 líneas hace demasiado y es difícil de leer. Quiero refactorizarla SIN cambiar su comportamiento. Primero: enumere qué casos de prueba necesito para bloquear el comportamiento actual. Luego: divida la refactorización en pequeños pasos, cada uno de los cuales se puede ejecutar mientras las pruebas están en verde. No escriba el código todavía, proporcione el plan primero. Código: [código]"

Aviso débil / Aviso fuerte

DÉBIL: "Mejora este código". (Resultado: no está claro qué mejorar; la IA realiza cambios arbitrarios, puede cambiar el comportamiento silenciosamente). FUERTE: "Refactorice esta función de cálculo de pagos para facilitar la lectura. RESTRICCIÓN: el comportamiento debe permanecer exactamente igual, los valores de retorno no deben cambiar. Divida la función larga en funciones de utilidad significativas, aumentando los números mágicos a constantes con nombre. Enumere los cambios elemento por elemento y explique POR QUÉ cada elemento no cambia el comportamiento. Código: [código]"

El poderoso mensaje establece claramente la restricción "el comportamiento debe seguir siendo exactamente el mismo" y lo que se debe mejorar. Sin esta restricción, la IA puede cambiar la lógica en nombre de la “mejora” y producir una regresión silenciosa.

Gestión de la deuda técnica

Enfoque

En el corto plazo

a largo plazo

ignorando la deuda

progreso rápido

Parálisis de mantenimiento, el equipo se ralentiza

reescribe todo

Desarrollo de características permanentes

Rentabilidad incierta, alto riesgo

Refactorización medida y protegida por pruebas

desaceleración menor

Velocidad sostenible

La forma más saludable es la tercera: hacer visible la deuda (realizar un seguimiento en una lista), comenzar donde más duele y probar cada solución. La IA es una buena ayuda para identificar y priorizar elementos de deuda, pero qué deuda pagar es una decisión comercial.

Mini casos

Caso 1: Regresión silenciosa. Un desarrollador le dice a la IA que “simplifique esta función”; La IA traduce una condición incorrectamente y el cálculo del retorno se interrumpe. Como no hay pruebas, el error ocurre después de 3 semanas con una queja del cliente. El equipo hace el mismo trabajo escribiendo primero una prueba de caracterización y detecta el error con una prueba roja en la primera ejecución.

Caso 2: Segundo ojo útil. Al revisar el código, la IA se da cuenta de que la autorización del usuario sólo se verifica en la interfaz y no en el servidor. Esta es una vulnerabilidad de acceso no autorizado. El ingeniero agrega verificación de autorización del lado del servidor; La inspección por IA previene un incidente de seguridad real.

Caso 3: Falso positivo. AI dice "esta variable nunca se usa, elimínela"; Sin embargo, se utiliza indirectamente a través de un mecanismo de reflexión variable. Si el ingeniero no verificaba la sugerencia con la prueba, se eliminaría y se produciría un error de tiempo de ejecución. Cada hallazgo de IA debe confirmarse antes de su implementación.

Errores comunes

  • Refactorización sin pruebas. No queda nada para garantizar que se preserve el comportamiento.
  • Aplicar los hallazgos de la IA sin validarlos. Tanto los falsos positivos como los falsos negativos ocurren.
  • Perder el tiempo humano en problemas de formato. Centrarse en tareas que pueden resolverse mediante herramientas automatizadas eclipsa los riesgos reales.
  • Tomando como garantía la respuesta “No hay problema”. La IA puede eludir la vulnerabilidad; Se requiere revisión humana.
  • Intentando saldar toda la deuda de una vez. Las reescrituras importantes son arriesgadas; Se prefieren los pasos que se miden y protegen mediante pruebas.

En resumen

La revisión y refactorización del código determina la longevidad del código. La IA es un poderoso segundo ojo y un generador de planes: proporciona hallazgos priorizados, escenarios de seguridad y planes de refactorización en pequeños pasos. Pero la refactorización no debería cambiar el comportamiento, y sólo las pruebas lo garantizan. Validar cada hallazgo de IA comparándolo con código y pruebas; No tome la respuesta "no hay problema" como evidencia. Haga visible la deuda técnica y paguela en pasos medidos y protegidos por pruebas.

Tarea de aplicación

Tome una línea 40-70, función algo compleja que tiene (o haga que la IA genere). Primero siga el mensaje de revisión estructurada y ordene los hallazgos como [CRÍTICO]/[MEDIO]/[BAJO]; Verifique manualmente al menos un hallazgo con el código. Luego, con el mensaje del plan de refactorización segura, primero genere y ejecute las pruebas de caracterización, luego aplique la refactorización en pequeños pasos y verifique que las pruebas permanezcan verdes en cada paso.

lista de verificación

  • [] Estructuré la revisión con etiquetas de prioridad (crítica/media/baja).
  • [] He verificado al menos un hallazgo de IA con el código/prueba.
  • [] Probé el comportamiento actual antes de refactorizar.
  • [] Hice los cambios en pequeños pasos y realicé pruebas en cada paso.
  • [] Especifiqué la restricción "El comportamiento debe permanecer igual" en el mensaje.
  • [] He confirmado que los hallazgos de seguridad requieren confirmación humana.