Mein Workflow bestand immer darin, einen logischen Schritt zu schreiben, dann das Programm auszuführen und die Ausgabe zu überprüfen. Dieser Prozess hat mir bei Einsätzen an der Universität unglaublich gute Dienste geleistet. Wenn ich mich jedoch weiter entwickle, kann es vorkommen, dass das einfache Kompilieren und Ausführen des Codes 1 bis 2 Minuten dauert. Beispiele hierfür sind das Hochladen eines Programms auf einen Mikrocontroller, die Interaktion mit einem externen Server und die Nichtimplementierung der Automatisierung aufgrund von Authentifizierung, Softwarearchitektur oder Komplexität.
Diese Art von Aufgaben ist sehr ungeeignet für das, was ich normalerweise programmiere, und ich habe Schwierigkeiten, effektiv zu programmieren. Normalerweise mache ich viele Syntax- und Logikfehler, von denen ich die meisten leicht durch Testen fange. Bei solch einer langen Wartezeit ist diese Methode jedoch zu zeitaufwändig.
quelle
Antworten:
Zunächst einmal ist jede Art von interaktivem Debugging großartig. Sie wollen das in Ihrem Toolkit, denn wenn noch nicht, dann werden Sie eines Tages wirklich davon profitieren. (Details variieren je nach Sprache, Plattform und IDE.)
Ich würde einige Frameworks für die Verwendung von Scheinobjekten untersuchen . Mit diesen können Sie die zu testende Komponente mit einem gefälschten Ökosystem anderer Komponenten umgeben, sodass Ihre Tests gezielter sind und Sie vermeiden können, alles als Ganzes zu testen.
Darüber hinaus können die Scheinobjekte selbst mit Assertions programmiert werden, sodass Sie überprüfen können, ob die zu testende Komponente tatsächlich einen bestimmten Aufruf getätigt hat.
quelle
Ich würde hart arbeiten, um die Testzeit zu verkürzen. Ich hatte in einigen Unternehmen an der Entwicklung von Embedded Code gearbeitet, und das Testen war mühsam. Dazu mussten Sie in den Serverraum gehen und manuelle FTPs und Neustarts sowie mehrere Befehle an die Testhardware senden. Dann schloss ich mich einer wirklich guten Gruppe an, in der ich einfach 'make test' an meinem Schreibtisch eingeben und die Ergebnisse in weniger als einer Minute erhalten konnte. In dieser einen Minute:
Es hat einige Zeit gedauert, bis all dies funktioniert hat, aber der Aufwand, all diese Schritte zu automatisieren, hat sich mit dem Anwachsen des Entwicklerteams hundertfach amortisiert.
quelle
Automatisierte Tests ersetzen nicht die Überprüfung und das Verständnis.
Möglicherweise verwenden Sie Tests als Krücke. Wenn Sie dies tun, werden Sie Ihr Lernen behindern. Ich befürworte nicht, dass Sie nicht testen. Stattdessen würde ich Ihnen empfehlen, dass Sie das, was Sie geschrieben haben, überprüfen, bevor Sie den Test ausführen. Verstehe, was du geschrieben hast, stelle sicher, dass es sinnvoll ist und dass die Syntax korrekt aussieht.
quelle
Sie haben bereits die Antwort gegeben:
I usually make a lot of syntax errors and logic errors
Wenn Sie hart daran arbeiten, dies zu verbessern, sollten Sie in der Lage sein, die Testzeit zu verkürzen. Die Syntaxfehler sollten die allerersten sein, die Sie reduzieren sollten. Hatten Sie noch nie einen Programmiertest mit Papier und Bleistift in Ihrem Studium?
Ich hatte das Gleiche, als ich von PHP auf Java umgestiegen bin. Ich musste lernen zu debuggen, anstatt nur einige Variablen zu drucken und F5 im Browser zu drücken ...
quelle
make a lot of
es klingt wie er seine Energie investieren sollte, um es zu verbessernSie benötigen eine gute Unit- oder Functional-Test-Plattform, die automatisch Tests für Sie ausführen kann, vorzugsweise im Hintergrund. Dies erfordert die Verwendung von Mocks, wie oben erwähnt, und abhängig von der Sprache, in der Sie eine Art Abhängigkeitsinjektion verwenden.
Indem Sie Ihre Objekte so unabhängig wie möglich machen und dann mithilfe von Injektionsmethoden äußere Einschränkungen hinzufügen, ist es nicht schwierig, eine Testplattform für Ihren Code zu erstellen.
quelle
Der wahre Spaß kommt, wenn Sie Ihren Code einfach nur testen können, indem Sie ihn im Zorn verwenden. Dies ist bei Handelssystemen häufig der Fall, da die verfügbaren Börsensimulatoren häufig entweder schlecht oder nicht vorhanden sind oder nicht einmal den Aussagen der Anbieter der Börsensoftware entsprechen. Ich fürchte, dies ist ein Teil des reichen Wandteppichs des Lebens. Mein Ansatz ist es, sicherzustellen, dass zumindest meine Seite der Transaktion gut geschrieben und dokumentiert ist, sodass sie leicht und schnell geändert werden kann.
quelle
Unit Testing; Scheinanwendungen / Simulatoren.
Dies wird natürlich einige Zeit in Anspruch nehmen, und Sie müssen möglicherweise Beispieldaten sammeln und massieren, um geeignete Modelle zu erstellen. Am Ende macht es sich jedoch bezahlt: Sie sparen sich die Zeit und die Mühe, die Sie beim Testen gegen externe Geräte haben systeme.
Bei korrekter Verwendung stellen diese Tools sicher, dass Sie, bevor Sie sich externen Systemen nähern, zu 99,9% sicher sind, dass ein Fehler im externen System / einer Änderung der Umgebung die Ursache für den Fehler ist und kein Fehler im eigenen Code.
Ich habe eine ganze Weile beruflich gearbeitet, wie Sie es in der Schule getan haben, und in vielen Fällen war es sehr effektiv. Schließlich arbeitete ich unter einigen Leuten, die mich zwangen, diese Methodik aufzugeben und stattdessen Unit-Tests und Mock-ups zu verwenden.
Jetzt starte ich kein Projekt mehr, ohne vorher über die Durchführung der Testphasen nachgedacht zu haben - Unit-Tests, Mock-ups, Simulatoren, Beispieldaten usw.
quelle
Vielleicht kann Ihnen ein Linter hier etwas helfen.
Ich befand mich in einer ähnlichen Situation wie mein früherer Arbeitgeber. Unsere Codebasis war wirklich riesig und um Änderungen vornehmen zu können, musste ich die
.class
Dateien auf einem Dev-Server kompilieren, ersetzen und dann den Dev-Server mit einem Restart-Skript neu starten. Und zu meinem Entsetzen wird es ungefähr eine halbe Stunde dauern, bis der Entwickler-Server wieder verfügbar ist.Später stellte ich fest, dass auch ein Remote-Debugging des Dev-Servers möglich war.
Hier ist, was ich getan habe, um meinen Prozess zu optimieren
In der ersten Runde des Debuggens per Fernzugriff konnte ich den genauen Codefluss und die genauen Werte / Zustände von Variablen sehen.
Planen, wie und welche Änderungen ich vornehmen werde.
Änderungen vornehmen und dann die Unterschiede vergleichen
Caching-Fehler durch Verwendung von Linter oder durch Kompilieren.
Erteilen des Hotfixes durch Ersetzen der
.class
Dateien und Neustarten.Manchmal füge ich auch eine Menge Log-Anweisungen hinzu, um den Code-Fluss erneut zu überprüfen und nach Werten / Zuständen zu suchen. Das hat mir sehr geholfen.
Auch die Verwendung einer IDE mit guter automatischer Komplikation kann erheblich zur Reduzierung von Tippfehlern beitragen.
Hoffe das hilft.
quelle