Similitud de Instrucciones en Código de Fuente C #.

Descripción de los Datos

Nuestros datos serán pares de nodos que representan instrucciones de C#, recolectados a partir de pares de versiones consecutivas de ficheros, original y modificado, de un proyecto local Git. Una declaración de campo tiene la siguiente anatomía:

FIELD DECLARATION = ATTRIBUTES MODIFIERS Id [= INITIALIZER] 
(ej: [Serializable] public static table = new Table(“Customer”);)

Respecto a los pares consecutivos que serán analizados, estos son de la siguiente forma:

private readonly IndentedStringBuilder _stringBuilder   //sentencia original
private readonly StringBuilder _stringBuilder = new StringBuilder() //sentencia modificada

Para cada uno de estos pares, se aplicaron distintas métricas texto, ya sea de distancia como Levenshtein, de Euclides, de Bloque, entre otros. También se ejecutaron sobre ellos algoritmos de similitud tales como las utilizadas en la comparación de Coseno, Jaccard, Dice, entre otros. Por último, se agregaron atributos como cantidad de tokens, coordenadas X e Y y nodos reflejados en el árbol de sintaxis referidas a cada uno de los pares analizados. De esta manera y tomando como referencia las sentencias anteriormente descritas, se consideraron 18 métricas para el texto completo de las declaraciones, las cuales se pueden reflejar de manera resumida como sigue a continuación:

Sentencia Original Sentencia Modificada Levenshtein Eucledian Distance Jaccard
private readonly IndentedStringBuilder private readonly StringBuilder 0.661764 0.2022759 0.222222