So stellen Sie sicher, dass der Code nach dem Refactoring noch funktioniert (dynamische Sprache)

7

Wie kann sichergestellt werden, dass der Code nach dem Refactoring (d. h. nach der Änderung des Variablennamens) noch funktioniert?

Wenn in einer statischen Sprache eine Klasse umbenannt wird, aber keine andere referenzierende Klasse, wird ein Kompilierungsfehler angezeigt.

Aber in dynamischer Sprache gibt es kein solches Sicherheitsnetz, und Ihr Code kann beim Refactoring brechen, wenn Sie nicht vorsichtig genug sind . Sie können Unit-Test verwenden, aber wenn Sie Mocks verwenden, ist es ziemlich schwer zu wissen, dass sich der Name ändert und als Konsequenz kann es nicht helfen.

Wie man dieses Problem löst?

    
Graviton 27.03.2009, 06:36
quelle

4 Antworten

17

Bevor Sie mit dem Refactoring beginnen, sollten Sie Tests erstellen, mit denen Sie testen können, was Sie ändern werden - wenn Sie sagen, Komponententests reichen nicht aus oder sind schwer zu erstellen, erstellen Sie auf jeden Fall höhere Ebenen testet möglicherweise sogar das gesamte Produkt.

Wenn Sie Code-Coverage-Tools für Ihre Sprache haben, verwenden Sie diese, um die Qualität der von Ihnen erstellten Tests zu messen - nachdem ein einigermaßen hoher Wert erreicht wurde und die Tests auf dem neuesten Stand gehalten und erweitert werden mit deinem Code sehr effizient zu arbeiten und ziemlich sicher zu sein, dass die Dinge nicht in die falsche Richtung gehen.

    
RnR 27.03.2009, 06:46
quelle
10

Ich unterrichte eine Klasse über Komponententests, Refactoring und so weiter, und das ist wahrscheinlich das, was die meisten Leute falsch verstehen. Refactoring ist nicht nur den Code ändern. Es ändert den Code, ohne das externe Funktionsverhalten zu ändern. Das ist ein sehr wichtiger Punkt.

Mit anderen Worten, Sie müssen eine Möglichkeit haben, zu überprüfen, ob das externe funktionale Verhalten nach dem Refactoring intakt ist. Ohne göttliche Einsicht finde ich Komponententests sehr nützlich. In seinem Buch über Refactoring betont Martin Fowler den Einsatz automatisierter Tests für diese Verifizierung.

Wenn Ihr Code mit TDD entwickelt wurde, haben Sie die notwendige Testsuite, wie sie während der Entwicklung des Codes selbst entwickelt wird. Wenn Sie Code umgestalten müssen, für den keine Tests verfügbar sind, empfiehlt es sich, automatisierte Tests einzurichten, bevor Sie Änderungen am Code vornehmen. Mir ist klar, dass das Einrichten von Tests für vorhandenen Code schwierig sein kann, aber Sie werden dabei viel über den Code lernen.

Vielleicht möchten Sie auch Bruce Eckels Essay über starke Typisierung im Vergleich zu starken Tests überprüfen, da er das Feedback, das Sie haben, diskutiert erhalten Sie vom Compiler gegen das Feedback, das Sie von Ihrer Testsuite erhalten.

    
Brian Rasmussen 27.03.2009 06:55
quelle
1

Ihr Code kann beim Refactoring sogar mit einer kompilierten Sprache unterbrochen werden. Wenn Sie sich darauf verlassen, geraten Sie in Schwierigkeiten. Automatisiertes Testen ist der beste Weg, um sicher zu sein, dass das Programm so funktioniert, wie es sollte.

Wenn Sie sagen, welche dynamische Sprache Sie verwenden, können wir Ihnen vielleicht Ratschläge zu Tools geben, die Ihnen beim Testen helfen können. Alles kann getestet werden.

BEARBEITEN:

Sie haben geantwortet und gesagt, dass Sie PHP und Python verwenden.

Wenn dies eine Web-App ist, verwenden Sie selen , um die Tests im Browser zu erstellen. Zuerst brauchen Sie nur Selenium IDE. Stellen Sie alle Ihre Tests in einer einzigen Test Suite zusammen, so dass Sie alle einfach ausführen können. Wenn die Liste wächst, können Sie mit Selenium RC und Selenium Grid beginnen.

    
Sarel Botha 27.03.2009 06:54
quelle
0

1) Für Python verwenden Sie PyUnit für PHP phpunit. 2) TDD-Ansatz ist gut, aber auch Tests nach dem Schreiben von Code ist akzeptabel. 3) Verwenden Sie auch Refactoring-Tools, die für Ihre IDE verfügbar sind. Sie tun nur sichere Refactorings. In Python hast du Seil (das ist eine Bibliothek, aber Plugins für die meisten IDEs). 4) Gute Bücher sind: 'Testgetriebene Entwicklung am Beispiel' Best 'Experten-Python-Programmierung' Tarek Ziade (erklären Sie sowohl TDD als auch Refactoring)

Google TDD und Datenbank, um ein gutes Buch über TDD-Ansatz für die Entwicklung von Datenbanken zu finden.

Fügen Sie Informationen zu Mocks hinzu, die Sie verwenden. AFAIK-Mocks werden nur benötigt, wenn eine Datenbank oder ein Netzwerk beteiligt ist. Aber normalerweise sollte Unit-Test kleine Stück Code (nur eine Klasse) manchmal zwei Klassen abdecken, so dass kein Modell benötigt wird!

    
przemo_li 28.11.2009 18:02
quelle

Tags und Links