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

Limpieza de los Datos

Inicialmente se obtuvieron poco más de 175 500 pares de declaraciones, entre las cuales notamos alta repetición de los pares de información a comparar. Esto se debe a que el mismo par de campos d y o puede obtenerse cada vez que se comparen dos versiones cualquiera de un mismo archivo, aun cuando tales campos no se hayan modificado. Además, si tanto árbol original como el modificado contienen dos campos w y z, entonces serán inicialmente generados tanto los pares w como z. Una segunda iteración de obtención de los datos tuvo lugar, esta vez sobre los datos iniciales para eliminar cualquier repetición de pares de información a comparar. Finalmente se obtuvieron poco más de 11 250 situaciones de pares de declaraciones a comparar.

Por cada declaración de campo el texto a comparar fue reducido a su forma significativa al eliminar sus modificadores de visibilidad (public, internal, protected, private), clase estática (static) y variable de sólo lectura (readonly). La Figura 1 contrasta los resultados de las medidas aplicadas con el texto completo (postfijo Raw) y con el texto reducido a su forma significativa.

Notar que aunque todavía no existe un consenso entre las distintas medidas sí se nota una tendencia general a disminuir los valores, lo que sugiere que los modificadores eliminados estaban efectivamente abultando los resultados similitud. No se tiene una referencia fiel de cuáles de estos valores son o no similares, pero incluimos el criterio del algoritmo Change Distiller (Levenshtein >= 0.4) para tener una idea visual de cuánto difieren los resultados al comparar las declaraciones con o sin modificadores. Aparentemente parece ser que tal criterio, al eliminar los modificadores, merece ser revisado, al menos al considerar alguna métrica distinta de Levenshtein.

Para comprobar si el criterio referencia (Levenshtein >= 0.4) puede ser mejorado con reglas sintácticas, se filtraron los pares que coinciden en el nombre de la variable declarada (1085) y adicionalmente cuyo texto de declaración es diferente (144). Estos fueron clasificados en similares (135) o no similares (9) dado el criterio de referencia, para un fallo del (6.25%) que puede ser mejorado si simplemente se concluyen como similares aquellas declaraciones de campo cuyo nombre de variable sea el mismo.

Adicionalmente, se eliminaron e insertaron nuevos atributos al dataset. Por ejemplo, se obtenían valores para el total de hojas o token de la sentencia original y la modificado. Sin embargo, estos valores en bruto no aportaban mayor incidencia por lo que fueron removidos. En su lugar, se consideró la diferencia entre métricas similares para el original y el modificado, por lo cual fueron incluidos 3 nuevos atributos, como la diferencia entre nodos hojas, entre tokens y nodos totales.