Es fördert die Idee, dass Code perfekt sein und keine Bugs existieren sollten
Ganz bestimmt nicht. Es fördert die Idee, dass Ihre Tests nicht scheitern sollten, nicht mehr und nicht weniger. Angenommen, Tests (auch viele) sagen etwas über "perfekt" oder "keine Fehler" aus, ist ein Irrtum. Die Entscheidung, wie flach oder tief Ihre Tests sein sollten, ist ein wesentlicher Bestandteil des Schreibens guter Tests und der Grund, warum wir eindeutig getrennte Testkategorien haben ("Unit" -Tests, Integrationstests, "Szenarien" im Gurken-Sinne usw.).
Es ist nicht ratsam, Komponententests auszudenken, die fehlschlagen werden. Oder sicherlich mit Unit-Tests kommen, die schwierig zu beheben wäre.
Bei der testgetriebenen Entwicklung ist es obligatorisch, dass jeder Komponententest zuerst fehlschlägt, bevor mit dem Code begonnen wird. Es wird aus genau diesem Grund "Rot-Grün-Zyklus" (oder "Rot-Grün-Refaktor-Zyklus") genannt.
- Ohne das Fehlschlagen des Tests wissen Sie nicht, ob der Code tatsächlich durch den Test getestet wird. Die beiden könnten überhaupt nicht verwandt sein.
- Wenn Sie den Code so ändern , dass der Test genau von Rot auf Grün wechselt, nicht mehr und nicht weniger, können Sie sich ziemlich sicher sein, dass Ihr Code das tut, was er tun soll, und nicht viel mehr (was Sie möglicherweise nie brauchen).
Wenn zu irgendeinem Zeitpunkt alle Komponententests bestanden werden, gibt es zu keinem Zeitpunkt ein umfassendes Bild über den Status der Software. Es gibt keine Roadmap / Ziel.
Tests sind eher ein Mikrotor. Bei der testgetriebenen Entwicklung schreibt der Programmierer zuerst einen Test (Singular) und hat dann das klare Ziel, Code zu implementieren. dann der nächste Test und so weiter.
Die Funktion der Tests besteht darin, nicht vollständig zu sein, bevor Code geschrieben wird.
Wenn dies richtig gemacht wird, in einer Sprache und mit einer Testbibliothek, die für diesen Ansatz gut geeignet ist, kann dies die Entwicklung tatsächlich massiv beschleunigen, da die Fehlermeldungen (Ausnahmen / Stacktraces) den Entwickler direkt darauf hinweisen können, wo er die Arbeit ausführen muss Nächster.
Es hält Schreibgerätetests von vornherein ab - vor der Implementierung.
Ich verstehe nicht, wie diese Aussage zutreffen würde. Schreibtests sollten idealerweise Teil der Implementierung sein.
Vermisse ich hier etwas? Warum erwarten Unternehmen, dass alle Komponententests bestanden werden?
Weil Unternehmen erwarten, dass Tests für den Code relevant sind. Wenn Sie Tests schreiben, die erfolgreich sind, haben Sie einen Teil Ihrer Anwendung dokumentiert und nachgewiesen, dass die Anwendung das tut, was es sagt (der Test). Nicht mehr und nicht weniger.
Ein sehr großer Teil des Testens ist die "Regression". Sie möchten in der Lage sein, neuen Code sicher zu entwickeln oder umzugestalten. Mit einer großen Anzahl von Grüntests können Sie dies tun.
Dies geht von einer organisatorischen zu einer psychologischen Ebene. Ein Entwickler, der weiß, dass seine Fehler höchstwahrscheinlich von den Tests erfasst werden, hat viel mehr Freiheit, intelligente und mutige Lösungen für die Probleme zu finden, die er lösen muss. Andererseits wird ein Entwickler, der keine Tests hat, nach einiger Zeit zum Stillstand kommen (aus Angst), weil er nie weiß, ob eine Änderung den Rest der Anwendung beeinträchtigt.
Lebt das nicht in einer Traumwelt?
Nein. Die Arbeit mit einer testgetriebenen Anwendung ist reine Freude - es sei denn, Sie mögen das Konzept aus irgendeinem Grund ("Mehraufwand" usw. usw.) nicht, den wir in einer anderen Frage diskutieren können.
Und schreckt es nicht tatsächlich ein wirkliches Verständnis von Code ab?
Absolut nicht, warum sollte es?
Sie finden viele große Open-Source-Projekte (für die das Management des "Verstehens" und des Know-hows über den Code ein sehr dringendes Thema ist), die die Tests tatsächlich als Hauptdokumentation der Software verwenden, indem sie nicht nur Tests sind, sondern Stellen Sie auch echte, funktionierende, syntaktisch korrekte Beispiele für Benutzer oder Entwickler der Anwendung / Bibliothek bereit. Dies funktioniert oft hervorragend.
Offensichtlich ist es schlecht, schlechte Tests zu schreiben. Das hat aber nichts mit der Funktion von Tests an sich zu tun.