Siehe das Buch Working Effectively with Legacy Code von Michael Feathers.
Zusammenfassend ist es eine Menge Arbeit, vorhandenen Code in testbaren und getesteten Code umzuwandeln; Manchmal ist es zu viel Arbeit, um praktisch zu sein. Es hängt davon ab, wie groß die Codebasis ist und wie stark die verschiedenen Klassen und Funktionen voneinander abhängen.
Refactoring ohne Tests führt zu Änderungen im Verhalten (d. H. Fehler). Und Puristen werden sagen, dass es nicht wirklich umstrukturiert wird, weil es keine Tests gibt, um zu überprüfen, dass sich das Verhalten nicht ändert.
Anstatt Test auf der ganzen Linie zu Ihrer gesamten Anwendung auf einmal hinzuzufügen, fügen Sie Tests hinzu, wenn Sie in einem Bereich von Code arbeiten. Wahrscheinlich müssen Sie wieder zu diesen "Hotspots" zurückkehren.
Fügen Sie Tests von unten nach oben hinzu: Testen Sie kleine, unabhängige Klassen und Funktionen auf Korrektheit.
Fügen Sie Tests von oben nach unten hinzu: Testen Sie ganze Subsysteme als schwarze Felder, um zu sehen, ob sich ihr Verhalten mit den Änderungen im Code ändert. Und so können Sie durch sie gehen, um herauszufinden, was vor sich geht. Dieser Ansatz wird Ihnen wahrscheinlich den größten Nutzen bringen.
Machen Sie sich zunächst keine Gedanken darüber, was das "richtige" Verhalten ist, während Sie Tests hinzufügen, um Verhaltensänderungen zu erkennen und zu vermeiden. Große, noch nicht getestete Systeme haben oft interne Verhaltensweisen, die möglicherweise falsch erscheinen, von denen jedoch andere Teile des Systems abhängen.
Denken Sie über isolierte Abhängigkeiten wie Datenbank, Dateisystem, Netzwerk nach, damit sie während des Testens für Scheindatenanbieter ausgetauscht werden können.
Wenn das Programm keine internen Schnittstellen hat, Linien, die die Grenze zwischen einem Subsystem/Layer und einem anderen definieren, dann müssen Sie möglicherweise versuchen, diese einzuführen und an ihnen zu testen.
Auch automatische Spott Frameworks wie Rhinomocks oder Moq können helfen, bestehende Klassen hier zu verspotten. Ich habe die Notwendigkeit für sie in Code für Testbarkeit nicht wirklich gefunden.
Ich denke, Ihre Antwort ist viel besser mit dem zusammenfassenden Text: Wir können mehr Details von den Links erhalten, wenn wir wollen, aber wir können Ihre Position verstehen, ohne durchzulesen. –