Frage

Ich arbeite an einer Anwendung, die etwa 250.000 Codezeilen sind. Ich bin derzeit der einzige Entwickler auf dieser Anwendung arbeiten, die ursprünglich in .NET 1.1 gebaut wurden. Pervasive überall ist eine Klasse, die von Collection erbt. Alle Datenbank-Sammlungen von dieser Klasse erben. Ich erwäge Refactoring stattdessen von der generischen Sammlung Liste zu übernehmen. Unnötig zu sagen, hat Refactoring Buch Martin Fowler keine Vorschläge. Sollte ich dieses refactor versuchen? Wenn ja, was ist der beste Weg, um dieses Refactoring zu bewältigen?

Und ja, es sind Unit-Tests im gesamten Gebäude, aber kein QA-Team.

War es hilfreich?

Lösung

250.000 Lines alot Refactoring, plus Sie sollten mehrere der Folge berücksichtigen:

  1. Haben Sie eine QA-Abteilung in der Lage sein wird, den Refactoring-Code QA?
  2. Haben Sie Unit-Tests für den alten Code?
  3. Sie haben einen Zeitrahmen, um das Projekt ist, das heißt pflegen Sie den Code als Benutzer Fehler zu finden sind?

Wenn Sie beantwortet 1 und 2 Nein, ich würde in erster Linie Schreib Unit-Tests für den vorhandenen Code. Machen Sie sie umfangreich und gründlich. Sobald Sie diese an der richtigen Stelle, verzweigen eine Version, und Refactoring starten. Die Unit-Tests sollten in der Lage sein, um Ihnen richtig in der Generika-Refactoring zu helfen.

Wenn 2 ist ja, dann nur verzweigen und Refactoring beginnen, auf diesen Unit-Tests verlassen.

Eine QA-Abteilung würde auch helfen, eine Menge, da Sie ihnen den neuen Code zu Testfeld können.

Und schließlich, wenn Kunden / Benutzer benötigen Fehler behoben, fixieren sie zuerst.

Andere Tipps

Nicht. Es sei denn, Sie haben eine wirklich gutes Geschäft Rechtfertigung Ihre Code-Basis durch diese Übung für die Umsetzung. Was ist die Kosteneinsparungen oder Einnahmen durch Ihren refactor erzeugt? Wenn ich Ihre Manager wäre, würde ich wahrscheinlich davon abraten. Es tut uns leid.

Wie ausgesetzt ist Collection von der vererbten Klasse?
Gibt es Dinge, die Generics besser machen könnte als Collection?

Ich meine diese Klasse stark genutzt wird, aber es ist nur eine Klasse. Schlüssel zum Refactoring ist nicht zu stören, den Status quo des Programms. Die Klasse sollte immer seinen Vertrag mit der Außenwelt aufrechtzuerhalten. Wenn Sie dies tun können, ist es nicht eine Viertel Million Codezeilen Sie Refactoring, aber vielleicht nur 2500 (Zufallsvermutung, habe ich keine Ahnung, wie groß diese Klasse ist).

Aber wenn es eine Menge der Exposition von dieser Klasse ist, müssen Sie unter Umständen statt, dass die Exposition als Vertrag behandeln und versuchen, die Exposition ausklammern.

Wenn Sie sind gehen, mit ihm zu gehen, verwenden Sie nicht Liste . Verwenden Sie stattdessen System.Collections.ObjectModel. Collection , die eher ein spirtual succesor zu Collection ist.

Die Collection<T> Klasse stellt geschützte Methoden, die verwendet werden können, ihr Verhalten anpassen, wenn das Hinzufügen und Entfernen von Einträgen, das Löschen der Sammlung oder den Wert eines vorhandenen Elements einstellen. Wenn Sie List<T> verwenden es gibt keine Möglichkeit, die Add() Methode außer Kraft zu setzen, wenn jemand Anzeigen der Sammlung zu behandeln.

Ich denke, Refactoring und Code zu halten auf dem neuesten Stand ein sehr wichtiger Prozess ist Code rot / Geruch zu vermeiden. Viele Entwickler leiden entweder an ihren Code verheiratet zu sein oder einfach nicht sicher genug, um in ihren Unit-Tests der Lage sein, Dinge zu zerreißen und reinigt es und tut es richtig.

Wenn Sie nicht die Zeit nehmen, sie zu bereinigen und den Code besser zu machen, Sie werden es auf lange Sicht bedauern, weil Sie diesen Code zu halten haben für viele Jahre zu kommen, oder wer auch immer übernimmt der Code hasse dich. Sie sagten, Sie Unit-Tests haben, und Sie sollen diesen Tests vertrauen können, um sicherzustellen, dass, wenn Sie den Code Refactoring es noch funktionieren wird.

Also habe ich es sagen tun, reinigen Sie es, es ist schön machen. Wenn Sie nicht sicher sind, dass die Komponententests die refactor umgehen kann, schreiben einige mehr.

Ich stimme mit Thomas.

Ich fühle mich die Frage, die Sie sollten sich immer fragen, wann Refactoring ist „Was kann ich gewinnen, indem sie dies tun, etwas anderes mit meiner Zeit vs tun?“ Die Antwort kann vieles sein, von Wartbarkeit zu einer besseren Leistung zu erhöhen, aber es wird auf Kosten von etwas anderem immer kommen.

Ohne den Code zu sehen, es ist schwer für mich, zu sagen, aber das klingt wie eine sehr schlechte Situation wird in Refactoring. Tests sind gut, aber sie sind nicht narrensicher. Alles was man braucht ist für eine von ihnen eine schlechte Annahme zu haben, und Ihre Refactoring könnte einen fiesen Fehler einführen. Und ohne QA es zu fangen, das wäre nicht gut.

Ich bin auch persönlich ein wenig Bange massiver refactors wie diese. Kostet mich einen Job einmal. Es war mein erster Job außerhalb der Regierung (die ein wenig toleranter zu sein scheint, wenn Sie ‚tenure‘ bekommen es ist verdammt schwer zu gefeuert) und ich war der einzige Web-Programmierer. Ich habe ein Vermächtnis ASP-Anwendung, die schlecht geschrieben wurde in den Schoß gefallen. Meine erste Priorität war das verflixte Ding in etwas weniger ... Icky Refactoring zu bekommen. Mein Arbeitgeber wollte das Feuer löscht und nichts mehr. Sechs Monate später ich war auf der Suche nach Arbeit wieder: p Moral dieser Geschichte:. Überprüfen Sie mit Ihrem Manager, bevor auf diese einsteigen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top