The Effect of Code Obfuscation on Human Program Comprehension

Este estudio investiga cómo la ofuscación de código afecta la comprensión humana mediante una tarea de predicción de salidas en Python y JavaScript, revelando que, aunque generalmente aumenta el tiempo de razonamiento y reduce la precisión, su impacto no es estrictamente monotónico y varía según el lenguaje, sugiriendo que los desafíos de la ofuscación dependen más de la familiaridad específica con el lenguaje que de la capacidad general de programación.

Anh H. N. Nguyen, Jack Le, Ilse Lahnstein Coronado, Tien N. Nguyen

Publicado Tue, 10 Ma
📖 5 min de lectura🧠 Análisis profundo

Each language version is independently generated for its own context, not a direct translation.

¡Claro que sí! Imagina que este artículo es como un experimento de cocina, pero en lugar de probar si una receta sabe bien, los investigadores querían ver qué tan difícil es entender una receta cuando alguien la ha escrito de forma extraña y confusa.

Aquí tienes la explicación de este estudio, contada como una historia sencilla:

🕵️‍♂️ La Misión: ¿Qué pasa cuando "ensuciamos" el código?

Los programadores a veces usan trucos para "ofuscar" su código (hacerlo ilegible). Lo hacen para proteger sus secretos, como si alguien escribiera una receta de pastel usando nombres de espías en lugar de ingredientes.

Los investigadores se preguntaron: ¿Realmente estos trucos hacen que sea más difícil para un humano entender qué hace el programa? Y lo más importante: ¿Funcionan igual de mal para todos?

Para averiguarlo, pusieron a 50 estudiantes de informática a jugar un juego: "Adivina el resultado". Les mostraban una función de código (en Python o JavaScript) y un número de entrada, y tenían que decir qué número saldría.

🎭 Los Niveles de "Confusión" (Las Pruebas)

Crearon cinco niveles de dificultad, como si fuera un videojuego:

  1. Nivel 0 (La receta limpia): El código normal, con nombres claros como calcularImpuestos.
  2. Nivel 1 (Nombres sin sentido): Cambiaron los nombres por cosas como x, var1, a. Es como si la receta dijera "mezcla el ingrediente A con el ingrediente B" en lugar de "harina y huevos".
  3. Nivel 1b (La trampa de la mentira): ¡Aquí está el truco! Cambiaron los nombres por cosas que parecían tener sentido pero mentían. Si el código sumaba números, lo llamaron restarCosas. Es como poner una etiqueta de "Veneno" en una botella de agua. ¡Es peligroso para el cerebro!
  4. Nivel 2 (El laberinto): Desordenaron la lógica. En lugar de leer de arriba a abajo, el código salta de un lado a otro como un conejo asustado.
  5. Nivel 3 (El caos total): Una mezcla de nombres mentirosos y un laberinto de lógica.

🧠 El Cerebro tiene dos Modos (Sistema 1 y Sistema 2)

Para entender los resultados, imagina que tu cerebro tiene dos modos de conducir:

  • Modo Automático (Sistema 1): Es como conducir por tu barrio conocido. Vas rápido, no piensas, y confías en tu intuición. Cuando el código es claro, los programadores usan este modo.
  • Modo Manual (Sistema 2): Es como conducir en una tormenta de nieve en un camino desconocido. Tienes que mirar cada paso, frenar, pensar y verificar. Esto es lento y cansa mucho.

Lo que descubrieron:
Cuando el código estaba "ensuciado" (ofuscado), el cerebro se veía obligado a cambiar del Modo Automático al Modo Manual. Esto hacía que la gente tardara más y se equivocara más.

🐍 Python vs. 🌐 JavaScript: Dos mundos diferentes

Aquí viene la parte más divertida, porque los dos lenguajes reaccionaron de forma opuesta:

  • JavaScript (El sensible): Funcionó como esperábamos. Cuanto más "ensuciado" estaba el código, más difícil fue entenderlo. Los nombres de las variables son muy importantes en JavaScript; si los borras o los cambias, la gente se pierde inmediatamente.
  • Python (El rebelde): ¡Aquí pasó algo raro! A veces, el código ofuscado fue MÁS fácil de entender que el original.
    • ¿Por qué? En Python, a veces los nombres originales engañan al cerebro (Modo Automático). La gente piensa: "Ah, esto es una lista, seguro hace esto...". Pero cuando cambiaron los nombres por cosas sin sentido (Nivel 1), la gente se detuvo, dejó de adivinar y empezó a leer el código paso a paso (Modo Manual). Al hacerlo con más cuidado, ¡acertaron más!
    • Analogía: Es como si en una receta original te dijeran "hornea a fuego alto" y te equivocaras porque no sabes qué es "alto". Si te dicen "hornea a 200 grados" (un nombre sin sentido pero preciso), te detienes a pensar y lo haces bien.

⏱️ El Tiempo es la Clave

  • Respuestas rápidas: Generalmente eran errores. La gente confiaba en su intuición (Modo Automático) y fallaba.
  • Respuestas lentas (pero no demasiado): ¡Estas eran las mejores! La gente usó el Modo Manual, pensó con calma y acertó.
  • Respuestas extremadamente lentas: Aquí la gente se confundió tanto que se perdió en el laberinto. Más tiempo no siempre significa mejor respuesta; a veces significa "estoy atascado".

🎓 La Experiencia no es todo

¿Los expertos son invencibles? No.

  • Si un experto en Python intentaba leer un código ofuscado en JavaScript, le iba peor que a un principiante. Su cerebro estaba tan acostumbrado a los trucos de Python que se confundía con los de JavaScript.
  • Sin embargo, la habilidad general de pensar lógicamente (rastrear el flujo de datos) sí ayudaba, sin importar el lenguaje.

🏁 Conclusión Simple

  1. Ofuscar no siempre es lineal: A veces, hacer el código "más feo" obliga a la gente a pensar mejor y acertar más (especialmente en Python).
  2. El cerebro se engaña: Los nombres que parecen lógicos pero son falsos (Nivel 1b) son las trampas más peligrosas porque nos hacen confiar en nuestra intuición errónea.
  3. No hay una fórmula mágica: Lo que funciona para ofuscar JavaScript no funciona igual para Python. Cada lenguaje tiene su propia "psicología".

En resumen: El código ofuscado es como un espejo deformante. A veces hace que veas cosas que no están ahí, y a veces, paradójicamente, te obliga a dejar de mirar el reflejo y empezar a examinar el objeto real con más detalle.