Ich überarbeite derzeit einen Teil einer großen Codebasis ohne Unit-Tests. Ich habe versucht, Code auf brutale Weise umzugestalten, dh indem ich versucht habe zu erraten, was der Code tut und welche Änderungen seine Bedeutung nicht ändern würden, aber ohne Erfolg: Es werden zufällig Funktionen rund um die Codebasis unterbrochen.
Beachten Sie, dass das Refactoring das Verschieben von Legacy-C # -Code in einen funktionaleren Stil umfasst (der Legacy-Code verwendet keine der Funktionen von .NET Framework 3 und höher, einschließlich LINQ), das Hinzufügen von Generika, bei denen der Code davon profitieren kann usw.
Ich kann keine formalen Methoden anwenden, wenn man bedenkt, wie viel sie kosten würden.
Andererseits gehe ich davon aus, dass mindestens die Regel "Jeder überarbeitete Legacy-Code muss mit Komponententests geliefert werden" strikt befolgt werden sollte, unabhängig davon, wie viel es kosten würde. Das Problem ist, dass das Hinzufügen von Komponententests eine schwierige Aufgabe ist, wenn ich einen winzigen Teil einer privaten 500-LOC-Methode umgestalte.
Was kann mir helfen zu wissen, welche Komponententests für einen bestimmten Code relevant sind? Ich vermute, dass eine statische Analyse des Codes irgendwie hilfreich wäre, aber mit welchen Tools und Techniken kann ich Folgendes tun:
Wissen Sie genau, welche Unit-Tests ich erstellen soll,
Und / oder wissen Sie, ob die von mir vorgenommene Änderung den ursprünglichen Code so beeinflusst hat, dass er anders ausgeführt wird als jetzt?
formal methods in software development
sowieso nicht verwenden wollen, da es verwendet wird, um die Richtigkeit eines Programms mithilfe von Prädikatenlogik zu beweisen, und nicht für die Umgestaltung einer großen Codebasis anwendbar wäre. Formale Methoden, die normalerweise zum Nachweis von Code verwendet werden, funktionieren in Bereichen wie medizinischen Anwendungen korrekt. Sie haben Recht, es ist teuer zu tun, weshalb es nicht oft verwendet wird.