Ich fand eine ziemlich umfangreiche Leseliste zu allen Themen rund um das maschinelle Lernen .
Wie Sie sehen, haben die Leute versucht, maschinelles Lernen auf das Codieren anzuwenden, aber immer in sehr engen Bereichen, nicht nur auf einem Computer, der alle Arten von Codierung oder Debugging beherrscht.
Der Rest dieser Antwort konzentriert sich auf Ihren relativ breiten Bereich "Debugging" -Maschine und warum dies noch nicht wirklich versucht wurde (soweit meine Forschung zum Thema zeigt).
Ich habe einen längeren Teil der Antwort überarbeitet. Zusammenfassend (es ist wichtig für den nächsten Teil): Nach der aktuellen Methode des maschinellen Lernens kann jeder Mensch alles lernen, auch eine Maschine. Wir sind nur durch den physischen Bereich (CPU-Geschwindigkeit, Größe einer Maschine, ...) und nicht durch eine angeblich eingeschränkte Anwendbarkeit des Lernalgorithmus selbst begrenzt.
Welche Forschungen wurden bisher durchgeführt, um maschinelles Lernen auf die Codeentwicklung anzuwenden? Wie wäre es mit Debuggen?
Das Problem hier ist nicht, dass es unmöglich ist, sondern dass es ein unglaublich komplexes Thema ist.
Der Mensch hat noch nicht einmal annähernd einen universellen Kodierungsstandard definiert, dem alle zustimmen. Selbst die am weitesten verbreiteten Prinzipien wie SOLID sind immer noch eine Quelle für Diskussionen darüber, wie tief sie umgesetzt werden müssen. Für alle praktischen Zwecke ist es unmöglich, SOLID perfekt einzuhalten, es sei denn, Sie haben keinerlei finanzielle (oder zeitliche) Einschränkungen. Das ist im privaten Sektor, in dem die meisten Entwicklungen stattfinden, einfach nicht möglich. SOLID ist eine Richtlinie, keine feste Grenze.
Wie können wir einer Maschine, die kein objektives Maß für Richtig und Falsch hat, positives / negatives Feedback geben, um sie zum Lernen zu bringen?
Bestenfalls können wir viele Leute dazu bringen, der Maschine ihre eigene Meinung mitzuteilen ("das ist ein guter / schlechter Code"), und das Ergebnis der Maschine ist dann eine "durchschnittliche Meinung". Dies ist jedoch nicht unbedingt das Gleiche wie eine korrekte Lösung . Es kann sein, aber es ist nicht garantiert.
Zweitens ist es insbesondere für das Debuggen wichtig zu berücksichtigen, dass bestimmte Entwickler dazu neigen, eine bestimmte Art von Fehlern einzuführen. Die Art des Fehlers kann in einigen Fällen von dem Entwickler beeinflusst werden, der ihn eingeführt hat.
Da ich zum Beispiel häufig an der Fehlerbehebung des Codes anderer beteiligt bin, habe ich eine gewisse Erwartung, welche Art von Fehler jeder Entwickler machen kann. Angesichts eines bestimmten Problems weiß ich, dass Entwickler A wahrscheinlich die Aktualisierung der Konfigurationsdatei vergisst, während Entwickler B häufig fehlerhafte LINQ-Abfragen schreibt. Basierend auf dem Entwickler kann ich zuerst in Richtung der Konfigurationsdatei oder der LINQ schauen.
In ähnlicher Weise habe ich jetzt als Berater in mehreren Unternehmen gearbeitet, und ich sehe deutlich, dass Arten von Fehlern auf bestimmte Arten von Unternehmen ausgerichtet sein können. Es ist keine feste Regel, auf die ich endgültig hinweisen kann, aber es gibt einen eindeutigen Trend.
Kann eine Maschine das lernen? Kann es erkennen, dass Entwickler A die Konfiguration eher durcheinander bringt und Entwickler B eine LINQ-Abfrage eher durcheinander bringt? Natürlich kann es. Wie ich bereits sagte, alles, was ein Mensch lernen kann, kann auch eine Maschine.
Woher wissen Sie jedoch, dass Sie der Maschine alle Möglichkeiten beigebracht haben? Wie können Sie ihm jemals einen kleinen (dh nicht globalen) Datensatz zur Verfügung stellen und wissen, dass er das gesamte Spektrum an Fehlern darstellt? Oder würden Sie stattdessen bestimmte Debugger erstellen, um bestimmten Entwicklern / Unternehmen zu helfen, anstatt einen Debugger zu erstellen, der universell einsetzbar ist?
Nach einem maschinengelernten Debugger zu fragen ist wie nach einem maschinengelernten Sherlock Holmes zu fragen. Es ist nicht nachweislich unmöglich, einen zu erstellen, aber der Kern der Überlegung, ein Debugger / Sherlock zu sein, hängt oft von subjektiven Einschätzungen ab, die von Thema zu Thema variieren und eine unglaublich große Vielfalt an Kenntnissen / möglichen Fehlern berühren.
Das Fehlen von schnell nachweisbaren korrekten / inkorrekten Ergebnissen macht es schwierig, eine Maschine einfach zu unterrichten und zu überprüfen, ob sie gute Fortschritte macht.