Si usted ha programado durante un tiempo, no hay duda que habrá desarrollado algo que podría llamarse su propio estilo para programar. Cada desarrollador tiene sus propia preferencias no solamente en el espaciamiento o la indentación (tabuladores contra espacios, por ejemplo), sino también en la manera que define sus variables (por ejemplo MiVariable o mi_variable). Igualmente hay un estilo muy bien definido para los comentarios que los programadores ponen. Todo este cúmulo de cosas ahora son investigadas de manera que la forma en cómo alguien programa es una especie de huella digital y puede usarse para identificar quién escribió un programa, con un alto grado de precisión.
Investigadores de las Universidades de Drexel, la de Maryland, Goettingen y Princeton, han desarrollado un «estilómetro de código», el cual usa procesamiento de lenguaje natural y aprendizaje de máquina para determinar el autor de código fuente basado en su estilo para programar. Los hallazgos, los cuales se han publicado recientemente en un artículo titulado “De-anonymizing Programmers via Code Stylometry”, podrían ser aplicables a un amplio rango de situaciones donde el determinar quién es el autor de un programa es algo relevante. Por ejemplo, podría ser usado para identificar al autor de código malicioso y para ayudar a resolver cuestiones de plagio y disputas de derechos de autor.
Los autores basan su estilómetro en las características tradicionales: la manera de espaciar el código, los atributos sintácticos, etcétera. La innovación es lo que ellos han llamado «árboles sintácticos abstractos», que son similares a el recorrer los árboles para la definición de oraciones, los cuales son derivados de la sintaxis de los lenguajes usados y de sus palabras clave. Estos árboles capturan una característica sintáctica la cual, escriben los autores, «fue creada para capturar las propiedades del estilo de codificar, el cual es completamente independiente de la forma de escribir», vamos, digamos que hablamos de una especie de esencia particular en la forma de escribir de cada programador. Y sto parece ser invariante de esfuerzos por querer esconder la identidad de un programador cambiando algunas cosas en el código fuente. Parece ser que este atributo no se altera incluso intentando «ofuscar» el código.
Para probar sus dichos, los investigadores tomaron código fuente público del Google’s Code Jam, una competencia anual, que atrae a miles de programadores, desde estudiantes hasta profesionales. Se observó el código fuente en C++ desde el 2008 al 2014 escrito por más de 100,000 concursantes. Estos son los resultados:
- El estilómetro de código logró un 95% de precisión al identificar al autor de código anónimo, utilizando como base datos de 250 programadores sobre los últimos años, con un promedio de 630 líneas por autor. Usando un conjunto más chico, con menos programadores (30), pero más líneas de código por persona (1900), la precisión fue incluso más alta, 97%.
- La precisión no se alteró cuando se usó ofuscadores de código en C++. Ya que estas herramientas quitan comentarios y remueven espacios, la característica sintactica no fue cambiada, por lo que la identificación del autor fue similar y los porcentajes se mantuvieron en esas tasas altas de precisión.
- El estilo de codificación está mejor definido en la medida que el problema es más difícil de resolver. La precisión en la identificación se mejoró cuano se entrenó el conjunto de datos basados en problemas más complejos de resolver.
Esto habla de todos los seres humanos somos más que huellas biométricas. “El estilo es el hombre”: esta conocida frase, atribuida a Buffon habla en esta investigación por sí misma, sin duda alguna.
Referencias: