Encontré una lista de lectura bastante extensa sobre todos los temas de aprendizaje automático relacionados con la codificación .
Como puede ver, la gente ha estado tratando de aplicar el aprendizaje automático a la codificación, pero siempre en campos muy estrechos, no solo en una máquina que puede manejar todo tipo de codificación o depuración.
El resto de esta respuesta se centra en su máquina de "depuración" de alcance relativamente amplio y por qué esto aún no se ha intentado realmente (hasta donde mi investigación sobre el tema muestra).
Redacté una larga parte de la respuesta. Para resumir (es importante para la siguiente parte): siguiendo la metodología actual de aprendizaje automático, cualquier cosa que un humano pueda aprender, una máquina también puede hacerlo. Solo estamos limitados por el ámbito físico (velocidad de CPU, tamaño de una máquina, ...), no una supuesta aplicabilidad limitada del algoritmo de aprendizaje en sí.
¿Qué investigación se ha realizado hasta ahora para aplicar el aprendizaje automático al desarrollo de código? ¿Qué hay de la depuración?
El problema aquí no es que sea imposible, sino que es un tema increíblemente complejo.
Los humanos ni siquiera se han acercado a definir un estándar de codificación universal con el que todos estén de acuerdo. Incluso los principios más ampliamente acordados como SOLID siguen siendo una fuente de discusión sobre cuán profundamente debe implementarse. A todos los efectos prácticos, es imposible adherirse perfectamente a SOLID a menos que no tenga ninguna restricción financiera (o de tiempo); lo cual simplemente no es posible en el sector privado donde ocurre la mayor parte del desarrollo. SOLID es una guía, no un límite estricto.
En ausencia de una medida objetiva de lo correcto y lo incorrecto, ¿cómo vamos a poder dar retroalimentación positiva / negativa a una máquina para que aprenda?
En el mejor de los casos, podemos hacer que muchas personas den su propia opinión a la máquina ("este es un código bueno / malo"), y el resultado de la máquina será una "opinión promedio". Pero eso no es necesariamente lo mismo que una solución correcta . Puede ser, pero no se garantiza que lo sea.
En segundo lugar, para la depuración en particular, es importante reconocer que los desarrolladores específicos son propensos a introducir un tipo específico de error / error. La naturaleza del error puede en algunos casos ser influenciada por el desarrollador que lo introdujo.
Por ejemplo, como a menudo participo en la corrección de errores del código de otros en el trabajo, tengo una especie de expectativa sobre qué tipo de error es propenso a cometer cada desarrollador. Dado un cierto problema, sé que es probable que el desarrollador A se olvide de actualizar el archivo de configuración, mientras que el desarrollador B a menudo escribe consultas LINQ incorrectas. Según el desarrollador, primero puedo mirar hacia el archivo de configuración o el LINQ.
Del mismo modo, he trabajado en varias empresas como consultor ahora, y puedo ver claramente que los tipos de errores pueden estar sesgados hacia ciertos tipos de empresas. No es una regla dura y rápida que pueda señalar de manera concluyente, pero hay una tendencia definitiva.
¿Puede una máquina aprender esto? ¿Puede darse cuenta de que es más probable que el desarrollador A estropee la configuración y que el desarrollador B estropee una consulta LINQ? Por supuesto que puede. Como dije antes, cualquier cosa que un humano pueda aprender, una máquina también puede hacerlo.
Sin embargo, ¿cómo sabe que le ha enseñado a la máquina toda la gama de posibilidades? ¿Cómo puede proporcionarle un conjunto de datos pequeño (es decir, no global) y saber con certeza que representa el espectro completo de errores? ¿O, en su lugar, crearía depuradores específicos para ayudar a desarrolladores / compañías específicas, en lugar de crear un depurador que sea universalmente utilizable?
Pedir un depurador aprendido por la máquina es como pedir un Sherlock Holmes aprendido por la máquina. No es probable que sea imposible crear uno, pero a menudo el razonamiento central para ser un depurador / Sherlock depende de evaluaciones subjetivas que varían de un sujeto a otro y tocan una variedad increíblemente amplia de conocimiento / posibles fallas.
La falta de resultados correctos / incorrectos comprobables rápidamente hace que sea difícil enseñar fácilmente a una máquina y verificar que esté progresando bien.