Ich schreibe ein ziemlich kompliziertes maschinelles Lernprogramm für meine Diplomarbeit in Computer Vision. Es funktioniert ziemlich gut, aber ich muss weiterhin neue Dinge ausprobieren und neue Funktionen hinzufügen. Das ist problematisch, weil ich manchmal Fehler einführe, wenn ich den Code erweitere oder versuche, einen Algorithmus zu vereinfachen.Unit Testing Machine Lerncode
Natürlich ist es das Richtige, Unit Tests hinzuzufügen, aber es ist nicht klar, wie dies zu tun ist. Viele Komponenten meines Programms erzeugen eine etwas subjektive Antwort, und ich kann keine Gesundheitsüberprüfungen automatisieren.
Zum Beispiel hatte ich einen Code, der eine Kurve mit einer niedriger auflösenden Kurve approximierte, so dass ich rechenintensive Arbeit an der niedriger auflösenden Kurve machen konnte. Ich habe versehentlich einen Fehler in diesen Code eingeführt und ihn nur durch eine sorgfältige Suche gefunden, als die Ergebnisse meines gesamten Programms etwas schlechter wurden.
Aber als ich versuchte, einen Unit-Test dafür zu schreiben, war unklar, was ich tun sollte. Wenn ich eine einfache Kurve mache, die eine klar korrekte Version mit niedrigerer Auflösung hat, dann teste ich nicht wirklich alles aus, was schief gehen könnte. Wenn ich eine einfache Kurve mache und dann die Punkte ein wenig störe, beginnt mein Code, verschiedene Antworten zu erzeugen, obwohl dieses spezielle Stück Code jetzt wirklich gut zu funktionieren scheint.
Dies ist eigentlich der hilfreichste Rat. All mein erfolgreiches Debugging ist auf die Verwendung solcher Techniken von Hand zurückzuführen. Aber dieses PDF gibt einige gute Ratschläge zur Automatisierung des Prozesses. Ihr PDF-Link funktionierte nicht für mich, aber ein einfacher Google fand es. – forefinger
@forefinger - Ich habe jetzt den Link behoben. Aber ich bin froh, dass Sie den Artikel gefunden haben und ihn nützlich fanden. – APC
Der Autor dieses PDFs hat jetzt ein exzellentes Buch zum selben Thema: http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – TrueWill