Recientemente he estado trabajando a través de una gran base de código, refactorizando y en general mejorando el diseño para aumentar la cobertura. Además, en bastantes archivos eliminé declaraciones de uso excesivo, moví métodos para que una funcionalidad similar esté muy cerca, haya agregado regiones, etc. pero en realidad no haya cambiado la funcionalidad del código en el archivo.¿Existen herramientas de combinación para el control de código fuente que entienden el código?
Mientras tanto, en otras partes del equipo, otros desarrolladores están corrigiendo errores y cambiando líneas de código aquí y allá. Obviamente, cuando se trata de fusionar esto puede ser un problema ya que los números de línea ya no coinciden y es posible que los métodos se hayan movido.
Ahora, entiendo la regla general de que en un entorno controlado por fuente puede ser peligroso mover los métodos, y decidimos que el beneficio superaba el costo. Sin embargo, lo que no entiendo es por qué debería ser así.
decir que mi archivo inicial era una calculadora sencilla:
public class Calculator
{
public int Subtract(int a, int b)
{
return a + b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Y decidí que quería que los métodos sean alfabético:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a + b;
}
}
Mientras que otro desarrollador arregló el fallo en el método de resta
public class Calculator
{
public int Subtract(int a, int b)
{
return a - b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Una herramienta de fusión estándar probablemente requeriría que combine manualmente la Se dos archivos, pero uno que entiende la funcionalidad del código fácilmente podría conciliar estos dos cambios. Lo mismo aplica para eliminar o agregar otros métodos, comentarios, regiones o usar declaraciones.
Entonces, para (¡finalmente!) Llegar a la pregunta: ¿Existen herramientas de fusión que tengan una comprensión inteligente de la funcionalidad del código y podrían fusionar los dos archivos anteriores sin ninguna intervención humana? ¿Si no, porque no? ¿Hay alguna complicación que haga de este un problema irresoluble (por supuesto, entiendo que no es tan simple como estoy implicando, pero es imposible por alguna razón que no puedo ver?)
Yo uso C# en mi código fuente y me encantaría algo que funcionó con eso, pero estoy interesado en si esta existe en cualquier parte del mundo de la programación ...
ya estoy realmente preocupado por la longitud de esta cuestión, pero corregido para agregar cómo esperaría que el sistema de fuente inteligente funcione:
Cuando el archivo inicial de la calculadora se verificó en el sistema, p culo el archivo y crear una jerarquía de la clase:
File: Calculator.cs
|
|--Class[0]: Calculator
|
|--Method[0]: Subtract
|
|--Line[0]: return a + b;
|
|--Method[1]: Add
|
|--Line[0]: return a +b;
(Con líneas adicionales en ese país para los frenos, etc ...)
Cuando compruebo en mi código (haciendo que los métodos alfabéticos) que actualiza la jerarquía arriba para que Restar se convierta en Método [1] y Agregar se convierte en Método [0].
El segundo desarrollador verifica su código (que obviamente el sistema de control de origen sabe que estaba basado en el original) y nota el cambio a la primera línea en restar. Ahora, en lugar de encontrar ese número de línea por línea en el archivo general, sabe que puede encontrarlo como Calculator.cs/Calculator/Resta/0 y el hecho de que el método haya cambiado de ubicación no importa, aún puede hacer que el fusionar el trabajo.
¿Cuál debería ser el resultado de la conciliación "automática"? El problema no es tanto entender el idioma como entender la intención de los programadores, ¡y eso requeriría telepatía! –
Hubiera pensado que un sistema que entendía la funcionalidad del código y podía separarlo del diseño vería que el primer cambio era puramente de diseño, así que aplique eso al diseño del archivo y el segundo cambio era puramente función, así que aplique ese cambio al método en el que tuvo lugar el cambio funcional, dondequiera que ese método pueda ser ahora. –
Mi sospecha es que tal bestia no existe, pero me gustaría ver algunas otras respuestas. Tengo la sensación de que un sistema de este tipo estaría bordeando la IA y conduciría a SkyNET VCS. ;) –