Recientemente recogí un proyecto con una gran base de código que contenía mucha duplicación. El problema es que la funcionalidad duplicada no fue escrita por las mismas personas ni copiada entre ellos.¿Herramienta para analizar y comparar la lógica de funciones similares?
Entonces, ¿hay herramientas que pueda usar para comparar la lógica real de dos funciones? Estas son algunas de las restricciones que serían útiles.
- Ignorar orden donde el orden no es importante (como propiedades de ajuste)
- Los nombres de variables deben ser analizados por similitud, pero no es necesario para que coincida con si se utiliza por las mismas razones
- Mira profundamente en los otros métodos llamados por las funciones que se comparan y aplanar la lógica para la comparación
Idealmente, la herramienta produciría una salida de función única. Las diferencias lógicas reales se destacarían de alguna manera. Incluso puede estar en una forma que define funciones separadas para las diferencias en la lógica, pasándolas a la función principal que contiene la lógica que es idéntica.
Esto suena como una tarea difícil, pero ¿alguien ha encontrado herramientas que intenten hacer alguna de estas cosas?
Editar
Si bien hay algunas herramientas interesantes mencionados, que no se parece a ninguno de ellos tomará el contenido de llamadas funciones en cuenta al comparar la lógica de los dos métodos. Si soy incorrecto, ¡házmelo saber!
Creo que existe tal "herramienta" y es un programador humano :) – vulkanino
@vulkanino: ¿Eso significa que vendrás a analizar el código por mí? ¿Solo tendré que gastar $ 50- $ 200 una vez y poder usar esta "herramienta" cada vez que lo necesite? –
:) Cuesta más, pero seguramente encontrará una "herramienta" más barata en VWorker, por ejemplo;) – vulkanino