Una investigación reciente halla que la funcionalidad principal de un programa es encapsulado por sólo una pequeña fracción de su código.

Si eres un desarrollador de software y alguien te pregunta ¿qué porcentaje del código que escribes representa la funcionalidad real frente a la cantidad que está de relleno, lo innecesario o el código requerido por el lenguaje para que este pueda funcionar? ¿95%? ¿75%? ¿50%? No importa lo has adivinado, es probable que estés lejos porque la nueva investigación ha descubierto que sólo el 5% del código escrito capta la funcionalidad básica que realmente ofrece. En un nuevo documento titulado A Study of “Wheat” and “Chaff” in Source Code (Un Estudio de «trigo» y «paja» en el código fuente), los investigadores de la Universidad de California, Davis, Universidad del Sudeste de China, y el University College de Londres han lanzado la teoría de que, al igual que con los lenguajes naturales, algunos lenguajes y probablemente, la mayoría del código escrito no es necesario para transmitir lo que en realidad hace. Comparando los métodos de programación para tallos de trigo, los autores sostuvieron que algunas partes del código son el «trigo», que representa el núcleo semántico de una función, mientras que todo lo demás es la «paja». Los autores afirman que el trigo de una función puede ser encapsulado por pequeños conjuntos de palabras clave, que llamaron el «subconjunto distintivo mínimo» o MINSET. El MINSET se puede derivar al romper un método bajo en lexemas (es decir, el código delimitado por el espacio o puntuación), desechando lo que no es importante para el comportamiento de la función y el mapeo de las restantes palabras clave. Esas palabras clave continuación constituyen el MINSET. Para probar su teoría de que los MINSETs de funciones son, de hecho, un pequeño porcentaje del código escrito, en el verano de 2012 los investigadores descargaron 1000 de los proyectos de Java más populares de Apache, Eclipse, GitHub, y SourceForge. Desde los que llegaban a 100 millones de líneas de código Java quitando los métodos simples (aquellos con menos de 50 tokens). Eso dejó a poco menos de 1,9 millones de métodos distintos, de los que a continuación muestrearon aleatoriamente 10.000 y determinaron sus MINSETs. El código y los datos utilizados en el estudio están disponibles para su descarga desde Bitbucket. Estas son sus principales conclusiones:
· Los MINSETS son sorprendentemente pequeños. El tamaño medio del MINSET de un método fue 1.55 palabras clave y el más grande consistió en 6.
· El tamaño de los MINSET no aumentó con el tamaño del método. Al observar sólo a los 1.000 métodos más grandes, el promedio y el tamaño máximo del MINSET en realidad disminuyo a 1, 12 y 4, respectivamente. Esto indica, según los autores, que «Los MINSETs son pequeños y potencialmente eficaces índices de información único, incluso para los métodos anormalmente grandes.»
· La mayor parte del código es paja. En promedio, sólo el 4,6% de los lexemas únicos en un método conforman el MINSET. Es decir, más del 95% del código es improductivo. Un par de puntos importantes a tener en cuenta aquí. En primer lugar, el propio MINSET no es ejecutable; es simplemente el subconjunto más pequeño del código que caracteriza la funcionalidad básica. Los otros 95% del código (la paja) se requiere para que funcione, así que no es inútil. En segundo lugar, mientras que este estudio sólo observó a código Java, los autores esperan que estos hallazgos sean válidos para otros lenguajes, especialmente C y C++, debido a las similitudes de los lenguajes.
¿Cuáles son las implicaciones de este trabajo? Los investigadores mencionan una serie de posibles aplicaciones de MINSETs:
· Mejorar de la búsqueda de código – Los MINSETs podrían utilizarse para clasificar los resultados de búsqueda de código basado en la semejanza con una consulta.
· IDEs más inteligentes – Los IDEs que cuentan con una base de datos indexada de MINSETs podría proponer un código similar, apoyar la finalización de código automático y acelerar la depuración.
· Las formas alternativas de programación – Los MINSETs podrían ser utilizados para apoyar la programación basada en palabras clave, es decir, la creación de código utilizable a partir de un pequeño conjunto de palabras clave.
¿Quién sabía que los programadores y los agricultores tenían tanto en común?