Encontrei uma lista de leitura bastante extensa sobre todos os tópicos de aprendizado de máquina relacionados à codificação .
Como você pode ver, as pessoas têm tentado aplicar o aprendizado de máquina à codificação, mas sempre em campos muito estreitos, não apenas uma máquina que pode lidar com todos os tipos de codificação ou depuração.
O restante desta resposta se concentra na sua máquina de "depuração" de escopo relativamente amplo e por que isso ainda não foi realmente tentado (tanto quanto mostra minha pesquisa sobre o tópico).
Eu redigi uma parte longa da resposta. Para resumir (é importante para a próxima parte): seguir a metodologia atual de aprendizado de máquina, qualquer coisa que um humano possa aprender, uma máquina também. Estamos limitados apenas pelo domínio físico (velocidade da CPU, tamanho de uma máquina, ...), não uma suposta aplicabilidade limitada do próprio algoritmo de aprendizado.
Que pesquisa foi feita até agora na aplicação do aprendizado de máquina ao desenvolvimento de código? Que tal depuração?
A questão aqui não é que seja impossível, mas que é um tópico incrivelmente complexo.
Os seres humanos nem sequer chegaram perto de definir um padrão de codificação universal com o qual todos concordam. Mesmo os princípios mais amplamente aceitos, como o SOLID, ainda são uma fonte de discussão sobre a profundidade em que deve ser implementado. Para todos os fins práticos, é impossível aderir perfeitamente ao SOLID, a menos que você não tenha nenhuma restrição financeira (ou de tempo); o que simplesmente não é possível no setor privado, onde ocorre o maior desenvolvimento. O SOLID é uma diretriz, não um limite rígido.
Na ausência de uma medida objetiva do certo e do errado, como poderemos dar um feedback positivo / negativo a uma máquina para fazê-la aprender?
Na melhor das hipóteses, podemos fazer com que muitas pessoas dêem sua própria opinião à máquina ("este é um código bom / ruim"), e o resultado da máquina será então uma "opinião média". Mas isso não é necessariamente o mesmo que uma solução correta . Pode ser, mas não é garantido que seja.
Em segundo lugar, para depuração em particular, é importante reconhecer que desenvolvedores específicos tendem a introduzir um tipo específico de bug / erro. A natureza do erro pode, em alguns casos, ser influenciada pelo desenvolvedor que o introduziu.
Por exemplo, como estou frequentemente envolvido na correção de códigos de outras pessoas no trabalho, tenho uma espécie de expectativa de que tipo de erro cada desenvolvedor está propenso a cometer. Dado um certo problema, eu sei que o dev A provavelmente esquece de atualizar o arquivo de configuração, enquanto o dev B geralmente escreve consultas LINQ ruins. Baseado no desenvolvedor, posso olhar primeiro para o arquivo de configuração ou para o LINQ.
Da mesma forma, já trabalhei em várias empresas como consultor agora e posso ver claramente que tipos de bugs podem ser direcionados a certos tipos de empresas. Não é uma regra rígida e rápida que eu possa apontar conclusivamente, mas há uma tendência definida.
Uma máquina pode aprender isso? Consegue perceber que é mais provável que o dev A atrapalhe a configuração e o dev B atrapalhe uma consulta LINQ? Claro que pode. Como eu disse antes, qualquer coisa que um humano pode aprender, uma máquina também pode.
No entanto, como você sabe que ensinou à máquina toda a gama de possibilidades? Como você pode fornecer um conjunto de dados pequeno (isto é, não global) e saber que ele representa todo o espectro de bugs? Ou, você criaria depuradores específicos para ajudar desenvolvedores / empresas específicos, em vez de criar um depurador universalmente utilizável?
Pedir um depurador aprendido a máquina é como pedir um Sherlock Holmes aprendido a máquina. Não é comprovadamente impossível criar um, mas muitas vezes o principal raciocínio de ser um depurador / Sherlock depende de avaliações subjetivas que variam de assunto para assunto e tocam em uma variedade incrivelmente ampla de conhecimentos / possíveis falhas.
A falta de resultados corretos / incorretos, comprováveis rapidamente, dificulta o ensino fácil de uma máquina e a verificação de que ela está fazendo um bom progresso.