2010-11-23 9 views
3

Unser Team plant, einige der Module in Legacy-Code-Basis zu re-Faktor. Es ist eine Web-Anwendung in Java geschrieben. Es hat überhaupt keine Komponententests.Qualitätssicherung von Legacy-Code wird refaktoriert

Ich fragte Entwickler, ein Junit für vorhandene Funktionalität vor dem Re-Factoring zu schreiben, aber ich bin mir sicher, dass das nicht sehr umfangreich sein wird.

Was sind die anderen Maßnahmen (Blackbox/Whitebox/Prozesse) kann ich sicherstellen, dass das Re-Factoring keine bestehende Funktionalität stört.

das aktuelle System ist ziemlich stabil und läuft seit mehr als 8 Jahren.

Dank Grau

Antwort

0

Anders als mehr junits schreiben, könnte man immer record test scripts with JMeter. Fügen Behauptungen, um sicherzustellen, Sie bekommen die Ergebnisse, die Sie erwarten.

+0

Hey, das ist eine gute Idee. Aber das Projekt hat eine Menge bewegt, die ich nicht in aktuelle, Release investieren kann. Ich kann diesen Ansatz jedoch in zukünftigen Refactoring-Initiativen verwenden. Vielen Dank. –

1

Sie könnten 2 Probleme haben: dass der Code nicht im modernen Sinne testbar ist und dass es Fehler im Code gibt, die bisher noch nicht abgefangen wurden. Angesichts dieser Situation möchte ich Sie dazu ermutigen, so viel Schwarz-Weiß-Box-Tests wie möglich zu verwenden. Dies ist, wie ich verstehe, ein schmerzhafter Prozess, aber es gibt einen Weg, ihn zu lindern.

Können Ihre Ingenieure einige Schnittstellen ausrechnen, so dass Sie einige Integrationstests erstellen können. Das heißt, wenn sie refactoring sind, können sie sich um einige allgemeine Bereiche verfestigen und die Anwendung (en) in kleinere Stücke teilen, die für die vorhersehbare Zukunft während eines Entwicklungszyklus größtenteils statisch bleiben werden? Das würde Ihnen zumindest einige größere Mittel ermöglichen, mehr Tests durchzuführen. Es würde Ihnen auch ermöglichen, den bestehenden Code für das, was er erwarten würde, zu interagieren.

+0

Sie haben Recht. Der Großteil des Codes ist nicht testbar. Ein Teil des Refactorings entfernt hauptsächlich ungenutzte Variablen und Methoden und setzt wiederholten Code in gängige Methoden um. Wir stellen durch Werkzeuge sicher, dass die Methoden und Variablen wirklich unbenutzt sind Und ja, mit Blackbox-Tests abdeckend, wo Unit-Test nicht möglich ist –

+0

@Jenga Blocks sei vorsichtig dann. Manchmal neigt Legacy-Code dazu, "Fehlerbehebungen" an den falschen Stellen zu haben. Die Logik kann an einer Stelle gefunden werden, die direkt mit der fehlerhaften Logik an einer anderen Stelle zusammenhängt. Indem Sie den Fehler in einem beheben, können Sie einen Fehler in einem anderen einführen. – wheaties

2

Lesen Sie Michael Feathers 'Working Effectively with Legacy Code, bevor Sie beginnen.

Es ist sehr wahrscheinlich, dass der Code in seinem aktuellen Zustand nicht effektiv Unit-getestet werden kann (weil es wahrscheinlich nicht in Einheiten ist). Was ich gesehen habe, sind Tests auf Integrationsebene, die einfach mit einigen sinnvollen Eingaben ausgeführt werden und die Ausgaben aufzeichnen; Web-Anwendungen machen dies besonders geeignet. Schreiben Sie diese, dann sprießen Sie kleine Methoden und Klassen - Unit-Tests alles neu - während diese High-Level-Tests arbeiten. Es ist mehr Arbeit als TDD von Anfang an, aber es ist definitiv machbar.

+0

Dies ist ein großartiges Buch, das mir eine völlig neue (optimistischere) Perspektive auf die Codepflege gegeben hat. – nont

+0

Danke, dass Sie das Buch vorgeschlagen haben. Ich gehe durch und finde es nützlich. Ich habe den Entwickler gebeten, einen Test durchzuführen und ihn dann zu modifizieren. Aber es würde einige Kompromisse geben, wenn es darum geht, TDD bei Zeit/Budgetrestriktionen zu befolgen. –