Ich werde die Aufgabe übernehmen, eine bereits definierte Schnittstelle (eine Reihe von C ++ - Header-Dateien) in einer relativ großen und alten Codebasis neu zu implementieren. Zuvor möchte ich eine möglichst vollständige Testabdeckung haben, damit ich Implementierungsfehler so früh und einfach wie möglich erkennen kann. Das Problem ist, dass die bereits vorhandene Codebasis nicht einfach zu testen ist, da sie (sehr) große Klassen und Funktionen, einen hohen Kopplungsgrad, Funktionen mit (vielen) Nebenwirkungen usw. enthält.
Es wäre schön, von früheren Erfahrungen mit ähnlichen Aufgaben und einigen guten und konkreten Tipps zu hören, wie Sie automatisierte Tests (Einheiten, Integrationen, Regressionen usw.) in Ihren Legacy-Code nachrüsten.
Antworten:
Lassen Sie sich zunächst von Michael Feathers Effektiv mit Legacy-Code arbeiten und lesen Sie ihn - er ist eine unverzichtbare Hilfe für solche Aufgaben.
Dann ein paar Notizen:
quelle
Die beste bekannte Methode ist die Mikado-Methode. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ Dies ist nur die Verallgemeinerung einer einfachen Technik, aber es ist die einzige Möglichkeit, die Codequalität in einer großen Codebasis zu verbessern ohne unnötige Risiken einzugehen.
WEWLC ist auch ein sehr gutes Buch darüber, aber in C ++ geschrieben zu sein ist mit Java- oder Ruby-Code nicht immer nützlich.
quelle
Nachträgliche Anpassungstests an eine alte Codebasis können recht schwierig sein, wenn sie monolithisch aufgebaut ist.
Wenn möglich (haben Sie die Zeit / das Geld), wäre eine Möglichkeit, voranzukommen, den Code in testbarere Einheiten umzugestalten.
quelle
Ich möchte einen Link hinzufügen . Es gibt nur wenige Beispiele für nicht so einfach zu testende Implementierungen, die in mehr xUnit-freundlichem Code umgesetzt wurden. Als allgemeine Vorgehensweise versuchen Sie es mit den bereits erwähnten Links (Joel Post, Working With Legacy Code)
quelle