In unserer Produktgruppe streben wir eine Codeabdeckung von 50-70% aus Komponententests und eine Abdeckung von 90% aus Komponententests und Testautomatisierung zusammen an. Die für das Schreiben von Komponententests vorgesehene Zeit beträgt in der Regel etwa 1 Tag für jede Funktion, für die 3-4 Tage für die Heads-Down-Codierung erforderlich sind. Das kann aber mit vielen Faktoren variieren.
99% Code-Abdeckung ist großartig. Unit-Tests sind großartig. Aber eine Codeabdeckung von 99% allein durch Unit-Tests? Es fällt mir schwer zu glauben, dass Sie so viel Berichterstattung allein durch Unit-Tests erhalten können.
Für den Fall, dass Sie 3 Tage damit verbracht haben, Tests für eine Klasse zu schreiben, deren Implementierung ansonsten 1 Tag gedauert hat. Sie haben nicht herausgefunden, warum es so lange gedauert hat oder warum Sie Code geteilt haben. Aus Spekulationen schätze ich, dass Sie nicht wirklich einen echten Komponententest für Ihre Klasse geschrieben haben, sondern Testautomatisierung . Und daran ist eigentlich nichts auszusetzen - solange Sie den Unterschied zwischen den beiden verschiedenen Arten von Tests erkennen.
Aber Sie sagten, die drei Tage des Testschreibens waren nur für eine einzelne Klasse. Vielleicht war die Klasse selbst nicht für Unit-Tests gedacht. Implementiert die Klasse die Benutzeroberfläche? Vernetzung? Datei I / O? In diesem Fall haben Sie möglicherweise mehr Code zum Testen der Java-Laufzeit geschrieben als Ihre Geschäftslogik, die mit der Laufzeit interagiert.
TDD bringt Sie dazu, über Schnittstellen und Schnittstellen zu Abhängigkeiten nachzudenken. Diese einzelne Klasse, die die Benutzeroberfläche, das Netzwerk und file / io für ein einzelnes Feature implementiert, lässt sich möglicherweise besser in mehrere Klassen aufteilen - eine für das Netzwerk, eine für file / io und die in ein Modell-Viewer-Controller-Design aufgeteilte Benutzeroberfläche. Anschließend können Sie mit einfachen Mock-Objekten für die Abhängigkeiten jeweils entsprechende Tests implementieren. All dies nimmt natürlich mehr Zeit in Anspruch. Anstatt 1 Tag für die Codierung und 3 Tage für das Schreiben von Tests, kann diese Art von Design 3 Tage für die Codierung und 1 Tag für das Schreiben von Tests erfordern. Der Code ist jedoch weitaus besser wartbar und wiederverwendbar.