Angenommen, man hat ein relativ großes Programm (etwa 900.000 SLOC in C #), das alle gründlich kommentiert / dokumentiert ist, gut organisiert ist und gut funktioniert. Die gesamte Codebasis wurde von einem einzigen Senior-Entwickler geschrieben, der nicht mehr im Unternehmen ist. Der gesamte Code ist so wie er ist testbar und IoC wird durchgehend verwendet - außer aus irgendeinem seltsamen Grund haben sie keine Komponententests geschrieben. Jetzt möchte Ihr Unternehmen den Code verzweigen und Unit-Tests hinzufügen, um festzustellen, wenn Änderungen die Kernfunktionalität beeinträchtigen.
- Ist das Hinzufügen von Tests eine gute Idee?
- Wenn ja, wie würde man überhaupt mit so etwas anfangen?
BEARBEITEN
OK, also hatte ich nicht damit gerechnet, dass Antworten gute Argumente für gegensätzliche Schlussfolgerungen liefern. Das Problem kann sowieso aus meinen Händen sein. Ich habe auch die "doppelten Fragen" durchgelesen und die allgemeine Meinung ist, dass "das Schreiben von Tests gut ist" ... ja, aber in diesem speziellen Fall nicht zu hilfreich.
Ich glaube nicht, dass ich hier allein bin, um über das Schreiben von Tests für ein Altsystem nachzudenken. Ich werde Metriken darüber erstellen, wie viel Zeit aufgewendet wird und wie oft die neuen Tests Probleme aufdecken (und wie oft nicht). Ich werde wiederkommen und dies in etwa einem Jahr mit meinen Ergebnissen aktualisieren.
FAZIT
Es stellt sich also heraus, dass es im Grunde unmöglich ist, einen Unit-Test mit irgendeinem orthodoxen Anschein zu einem bestehenden Code hinzuzufügen. Sobald der Code funktioniert, können Sie Ihre Tests offensichtlich nicht rot / grün leuchten lassen. In der Regel ist nicht klar, welche Verhaltensweisen zu testen sind, wo Sie beginnen sollen und erst recht nicht, wann Sie fertig sind. Wirklich selbst diese Frage zu stellen, verfehlt in erster Linie den Hauptgrund, Tests zu schreiben. In den meisten Fällen fand ich es tatsächlich einfacher, den Code mit TDD neu zu schreiben, als die beabsichtigten Funktionen zu entschlüsseln und nachträglich in Komponententests hinzuzufügen. Wenn Sie ein Problem beheben oder eine neue Funktion hinzufügen, ist dies eine andere Geschichte, und ich glaube, dass dies der Zeitpunkt ist, um Komponententests hinzuzufügen (wie einige unten dargelegt haben). Irgendwann wird der meiste Code umgeschrieben, oft früher als erwartet.