J'ai trouvé une liste de lecture assez complète sur tous les sujets d'apprentissage automatique liés au codage .
Comme vous pouvez le voir, les gens ont essayé d'appliquer l'apprentissage automatique au codage, mais toujours dans des domaines très étroits, pas seulement une machine capable de gérer toutes sortes de codage ou de débogage.
Le reste de cette réponse se concentre sur votre machine de «débogage» de portée relativement large et pourquoi cela n'a pas encore vraiment été tenté (pour autant que mes recherches sur le sujet le montrent).
J'ai expurgé une longue partie de la réponse. Pour résumer (c'est important pour la partie suivante): selon la méthodologie actuelle d'apprentissage automatique, tout ce qu'un humain peut apprendre, une machine peut aussi. Nous ne sommes limités que par le domaine physique (vitesse du processeur, taille d'une machine, ...), et non par une applicabilité supposée limitée de l'algorithme d'apprentissage lui-même.
Quelles recherches ont été faites jusqu'à présent pour appliquer l'apprentissage automatique au développement de code? Et le débogage?
Le problème ici n'est pas qu'il est impossible, mais plutôt que c'est un sujet incroyablement complexe.
Les humains ne sont même pas parvenus à définir une norme de codage universelle avec laquelle tout le monde est d'accord. Même les principes les plus largement acceptés comme SOLID sont toujours une source de discussion sur la profondeur de sa mise en œuvre. À toutes fins pratiques, il est impossible d'adhérer parfaitement à SOLID à moins que vous n'ayez aucune contrainte financière (ou temporelle) quelle qu'elle soit; ce qui n'est tout simplement pas possible dans le secteur privé où se produit l'essentiel du développement. SOLID est une directive, pas une limite stricte.
En l'absence d'une mesure objective du bien et du mal, comment allons-nous pouvoir donner une rétroaction positive / négative à une machine pour la faire apprendre?
Au mieux, beaucoup de gens peuvent donner leur propre opinion sur la machine ("c'est un bon / mauvais code"), et le résultat de la machine sera alors une "opinion moyenne". Mais ce n'est pas nécessairement la même chose qu'une bonne solution . C'est possible, mais ce n'est pas garanti.
Deuxièmement, pour le débogage en particulier, il est important de reconnaître que des développeurs spécifiques sont enclins à introduire un type spécifique de bogue / erreur. La nature de l'erreur peut dans certains cas être influencée par le développeur qui l'a introduite.
Par exemple, comme je suis souvent impliqué dans la correction de bogues du code des autres au travail, j'ai une sorte d'attente quant au type d'erreur que chaque développeur est susceptible de commettre. Étant donné un certain problème, je sais que le dev A est susceptible d'oublier la mise à jour du fichier de configuration, tandis que le dev B écrit souvent de mauvaises requêtes LINQ. Sur la base du développeur, je peux d'abord regarder vers le fichier de configuration ou le LINQ.
De même, j'ai travaillé dans plusieurs entreprises en tant que consultant maintenant, et je peux clairement voir que les types de bugs peuvent être biaisés vers certains types d'entreprises. Ce n'est pas une règle stricte et rapide que je peux souligner de manière concluante, mais il y a une tendance définie.
Une machine peut-elle apprendre cela? Peut-il se rendre compte que le dev A est plus susceptible de gâcher la configuration et que le dev B est plus susceptible de gâcher une requête LINQ? Bien sûr que oui. Comme je l'ai déjà dit, tout ce qu'un humain peut apprendre, une machine peut aussi.
Cependant, comment savez-vous que vous avez appris à la machine toutes les possibilités? Comment pouvez-vous jamais lui fournir un petit ensemble de données (c'est-à-dire non global) et savoir avec certitude qu'il représente le spectre complet des bogues? Ou, voudriez-vous plutôt créer des débogueurs spécifiques pour aider des développeurs / entreprises spécifiques, plutôt que de créer un débogueur qui est universellement utilisable?
Demander un débogueur appris par machine, c'est comme demander un Sherlock Holmes appris par machine. Il n'est pas prouvable impossible d'en créer un, mais souvent le raisonnement de base pour être un débogueur / Sherlock repose sur des évaluations subjectives qui varient d'un sujet à l'autre et touchent à une variété incroyablement large de connaissances / défauts possibles.
L'absence de résultats corrects / incorrects rapidement prouvables fait qu'il est difficile d'enseigner facilement une machine et de vérifier qu'elle progresse bien.