Vor etwas mehr als einem Jahr hatte ich das Glück, eine neunmonatige Pause von der Arbeit machen zu können. Ich entschied, dass ich in dieser Zeit meine C # -Fähigkeiten verbessern würde. Ich begann an einer Reihe von Projekten zu arbeiten und zwang mich, TDD zu folgen.
Es war ein ziemlich aufschlussreicher Prozess.
Anfangs war es schwierig, aber im Laufe der Zeit lernte ich, mehr testbaren Code zu schreiben (was, wie sich herausstellt, mehr SOLID-Code ist) und schärfte dabei auch meine Fähigkeiten im OO-Design.
Jetzt bin ich wieder in der Belegschaft und merke etwas Seltsames.
Ich folge TDD lieber nicht.
Ich finde, TDD verlangsamt mich und erschwert das Entwerfen einer sauberen Anwendung.
Stattdessen habe ich einen etwas (massiv) anderen Ansatz gewählt:
- Wählen Sie ein vertikales Stück Arbeit
- Entwickeln Sie einen funktionierenden Prototyp
- Refactor bis alles schön aufgeräumt ist
- Lehnen Sie sich zurück und schätzen Sie den SOLIDEN und testbaren Code, den ich geschrieben habe.
Möglicherweise haben Sie bemerkt, dass Schritt 1 nicht "die öffentliche Oberfläche meines Testziels definieren" und Schritt 2 nicht "den Bejesus von dieser öffentlichen Oberfläche testen" war. Möglicherweise haben Sie auch bemerkt, dass keiner der Schritte Tests umfasst. Ich schreibe testbaren Code, aber ich teste ihn noch nicht.
Nun möchte ich klarstellen, dass ich nicht auf irgendwelche Tests verzichte. Der Code, den ich schreibe, funktioniert . Es funktioniert, weil ich es manuell teste.
Ich möchte auch klarstellen, dass ich auch nicht auf alle automatisierten Tests verzichte. Hier ist mein Prozess anders. Und deshalb stelle ich diese Frage.
TDD in der Theorie. Nicht in der Praxis.
Mein Prozess hat sich ein wenig weiterentwickelt und ich habe eine Balance zwischen TDD und keinen Tests gefunden, die ich als sehr produktiv und auch einigermaßen sicher empfinde. Es geht wie folgt:
- Implementieren Sie eine vertikale Arbeitsaufgabe mit Blick auf das Testen, schreiben Sie jedoch keine Tests.
- Wenn Sie später (z. B. einen Monat später) auf der Straße sind, muss dieses Segment geändert werden
- Schreiben Sie Unit-Tests, Integrationstests, Verhaltenstests usw., die sicherstellen, dass die Arbeit korrekt ist
- Ändern Sie den Code
- Wenn das Slice nicht geändert werden muss,
- Nichts tun
Indem ich einfach die Belastung durch das Schreiben von Tests von vor dem Schreiben des Codes auf vor dem Ändern des Codes verlagere , konnte ich viel mehr Arbeitscode produzieren. Und wenn ich zum Schreiben von Tests komme, schreibe ich viel weniger, aber fast genauso viel Grund (höherer ROI).
Ich mag diesen Prozess, bin aber besorgt, dass er möglicherweise nicht gut skaliert. Der Erfolg hängt davon ab, dass Entwickler fleißig Tests schreiben, bevor sie etwas ändern. Und das scheint ein ziemlich großes Risiko zu sein. TDD birgt jedoch das gleiche Risiko.
Also, gehe ich zur [BT] DD-Hölle, oder ist dies eine übliche Form von pragmatischem Codieren und Testen?
Ich würde gerne so weitermachen. Was kann ich tun, damit dieser Prozess langfristig funktioniert?
Hinweis:Ich bin der einzige Entwickler in meinen Projekten und für alles verantwortlich: Erfassung der Anforderungen, Design, Architektur, Tests, Bereitstellung usw. Ich vermute, dass dies der Grund ist, warum mein Prozess funktioniert.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development