Während der Entwicklung gab es aufgrund sehr enger Fristen keinen testgetriebenen Entwicklungsprozess
Diese Aussage ist sehr besorgniserregend. Nicht, weil Sie ohne TDD entwickelt haben oder weil Sie nicht alles testen. Dies ist besorgniserregend, da es zeigt, dass TDD Sie verlangsamt und Sie eine Frist verpassen wird.
Solange Sie das so sehen, sind Sie noch nicht bereit für TDD. TDD ist nicht etwas, in das Sie allmählich nachlassen können. Entweder weißt du, wie es geht, oder du weißt es nicht. Wenn Sie es auf halbem Weg versuchen, werden Sie es schaffen und sich selbst sehen schlecht aus.
TDD sollten Sie zuerst zu Hause üben. Lerne es zu tun, denn es hilft dir jetzt beim Programmieren . Nicht, weil dir jemand gesagt hätte, dass du es tun sollst. Nicht, weil es hilft, wenn Sie später Änderungen vornehmen. Wenn es zu etwas wird, das Sie tun, weil Sie es eilig haben, dann sind Sie bereit, es professionell zu tun.
TDD ist etwas, was Sie in jedem Geschäft tun können . Sie müssen nicht einmal Ihren Testcode einreichen. Sie können es für sich behalten, wenn die anderen Tests verachten. Wenn Sie es richtig machen, beschleunigen die Tests Ihre Entwicklung, auch wenn sie von niemand anderem ausgeführt werden.
Auf der anderen Seite sollten Sie bedenken, dass es nicht Ihre Aufgabe ist, Tests einzuchecken, wenn andere Ihre Tests lieben und ausführen. Es geht darum, bewährten Produktionscode zu erstellen. Wenn es testbar ist, ordentlich.
Wenn Sie der Meinung sind, dass das Management an TDD glauben muss oder dass Ihre Kollegen Ihre Tests unterstützen müssen, ignorieren Sie das Beste, was TDD für Sie tut. Es zeigt Ihnen schnell den Unterschied zwischen der Funktionsweise Ihres Codes und der tatsächlichen Funktionsweise.
Wenn Sie nicht sehen können, wie Sie auf diese Weise einen Termin schneller einhalten können, sind Sie für TDD bei der Arbeit noch nicht bereit. Sie müssen zu Hause üben.
Das heißt, es ist schön, wenn das Team Ihre Tests nutzen kann, um Ihren Produktionscode zu lesen, und wenn das Management schicke neue TDD-Tools kauft.
Ist es eine gute Idee, alle möglichen Testfälle zu schreiben, nachdem Sie das Team auf TDD umgestellt haben?
Unabhängig davon, was das Team tut, ist es nicht immer eine gute Idee, alle möglichen Testfälle zu schreiben. Schreiben Sie die nützlichsten Testfälle. 100% Codeabdeckung ist kostenpflichtig. Ignorieren Sie nicht das Gesetz der Ertragsminderung, nur weil es schwierig ist, ein Urteil zu fällen.
Sparen Sie Ihre Test-Energie für die interessante Geschäftslogik. Das Zeug, das Entscheidungen trifft und Richtlinien durchsetzt. Testen Sie das Heck raus. Langweiliger, leicht zu lesender struktureller Klebercode, der nur das Zeug zusammendrahtet, muss nicht annähernd so schlecht getestet werden.
(1) Ist es immer noch in Ordnung oder eine gute Idee, den Großteil der Entwicklung zu stoppen und von Anfang an mit dem Schreiben aller möglichen Testfälle zu beginnen, obwohl (noch) alles in Ordnung ist? Oder
Nein. Das ist "Lass uns ein vollständiges Umschreiben machen". Dies zerstört hart erarbeitetes Wissen. Bitten Sie das Management nicht um etwas Zeit, um Tests zu schreiben. Schreiben Sie einfach Tests. Sobald Sie wissen, was Sie tun, werden Sie durch Tests nicht mehr gebremst.
(2) Es ist besser zu warten, bis etwas Schlimmes passiert, und dann während des Fixes neue Unit-Tests zu schreiben, oder
(3) Vergessen Sie sogar frühere Codes und schreiben Sie Unit-Tests nur für die neuen Codes und verschieben Sie alles auf den nächsten großen Refactor.
Ich beantworte 2 und 3 auf die gleiche Weise. Wenn Sie den Code aus irgendeinem Grund ändern, ist es sehr schön, wenn Sie einen Test machen können. Wenn es sich bei dem Code um ein Legacy handelt, wird derzeit kein Test begrüßt. Was bedeutet, dass es schwierig ist, es zu testen, bevor es geändert wird. Nun, da du es sowieso änderst, kannst du es in etwas Testbares verwandeln und es testen.
Das ist die nukleare Option. Es ist riskant. Sie nehmen Änderungen ohne Tests vor. Es gibt einige kreative Tricks, um älteren Code zu testen, bevor Sie ihn ändern. Sie suchen nach sogenannten Nähten, mit denen Sie das Verhalten Ihres Codes ändern können, ohne den Code zu ändern. Sie ändern Konfigurationsdateien, erstellen Dateien, was auch immer erforderlich ist.
Michael Feathers gab uns ein Buch darüber: Effektiv mit Legacy Code arbeiten . Probieren Sie es aus und Sie werden sehen, dass Sie nicht alles Alte abbrennen müssen, um etwas Neues zu machen.