13 Stimmen

Verbesserung wirklich schlechter Systeme

Wie würden Sie ein wirklich schlechtes System verbessern?

Lassen Sie mich erklären, was ich meine, bevor Sie die Erstellung von Unit-Tests und Refactoring empfehlen. Ich könnte diese Techniken anwenden, aber das wäre in diesem Fall sinnlos.

Eigentlich ist das System so kaputt, dass es nicht das tut, was es tun muss.

Zum Beispiel sollte das System zählen, wie viele Nachrichten es versendet. Meistens funktioniert das, aber in manchen Fällen "vergisst" es, den Wert des Nachrichtenzählers zu erhöhen. Das Problem ist, dass so viele andere Module mit ihren eigenen Workarounds auf diesem Zähler aufbauen, dass, wenn ich den Zähler korrigiere, das System als Ganzes schlechter werden würde, als es derzeit ist. Die Lösung könnte darin bestehen, alle Module zu modifizieren und ihre eigenen Korrekturen zu entfernen, aber bei über 150 Modulen würde das so viel Koordination erfordern, dass ich mir das nicht leisten kann.

Schlimmer noch, es gibt einige Probleme, die nicht im System selbst, sondern in den Köpfen der Menschen gelöst werden. Zum Beispiel kann das System nicht mehr als vier zusammenhängende Nachrichten in einer Nachrichtengruppe darstellen. Bei einigen Diensten sind fünf zusammenhängende Meldungen erforderlich. Die Buchhaltungsabteilung weiß um diese Einschränkung und zählt jedes Mal, wenn sie die Nachrichten für diese Dienste zählt, die Nachrichtengruppen und multipliziert sie mit 5/4, um die korrekte Anzahl der Nachrichten zu erhalten. Es gibt absolut keine Dokumentation über diese Abweichungen, und niemand weiß, wie viele solcher Dinge jetzt im System vorhanden sind.

Wie würden Sie also an der Verbesserung dieses Systems arbeiten? Welche Strategie würden Sie verfolgen?

Ein paar zusätzliche Dinge: Ich bin eine Ein-Mann-Armee, die daran arbeitet, so dass es keine akzeptable Antwort ist, genügend Leute einzustellen und das System neu zu entwerfen/umzugestalten. Und in ein paar Wochen oder Monaten sollte ich wirklich sichtbare Fortschritte machen, so dass es auch keine Option ist, das Refactoring in ein paar Jahren selbst durchzuführen.

Einige technische Details: Das System ist in Java und PHP geschrieben, aber ich glaube nicht, dass das wirklich wichtig ist. Es gibt zwei Datenbanken, eine Oracle- und eine PostgreSQL-Datenbank. Neben den bereits erwähnten Mängeln stinkt auch der Code selbst, er ist wirklich schlecht geschrieben und dokumentiert.

Zusätzliche Informationen:

Das Zählerproblem ist kein Synchronisationsproblem. Die Anweisungen counter++ werden in einigen Modulen hinzugefügt, in anderen Modulen jedoch nicht. Eine schnelle und schmutzige Lösung besteht darin, sie dort hinzuzufügen, wo sie fehlen. Die langfristige Lösung besteht darin, sie zu einer Art Aspekt für die Module zu machen, die sie benötigen, so dass es unmöglich ist, sie später zu vergessen. Ich habe keine Probleme damit, solche Dinge zu beheben, aber wenn ich diese Änderung vornehmen würde, würde ich über 10 andere Module zerstören.

Aktualisierung:

Ich habe die Antwort von Greg D. akzeptiert. Auch wenn mir die von Adam Bellaire besser gefällt, würde es mir nicht helfen, zu wissen, was ideal wäre zu wissen. Vielen Dank an alle für die Antworten.

0 Stimmen

Viel Glück! Eines mag ich an der Arbeit an einem kaputten System - nichts, was ich daran mache, kann es schlimmer machen, als es war, bevor ich angefangen habe :)

0 Stimmen

+1 - Diese Situation ist so furchtbar geil! oder ist sie furchtbar schrecklich?

1voto

Christian Davén Punkte 14978

Ich arbeite jetzt seit fast drei Jahren mit einem Altsystem mit denselben Merkmalen, und es gibt keine mir bekannten Abkürzungen.

Was mich an unserem Altsystem am meisten stört, ist, dass ich einige Fehler nicht beheben darf, da viele andere Funktionen kaputt gehen könnten, wenn ich sie behebe. Das erfordert hässliche Workarounds oder die Erstellung neuer Versionen alter Funktionen. Die Aufrufe der alten Funktionen können dann nach und nach durch die neuen ersetzt werden (während des Testens).

Ich bin mir nicht sicher, was das Ziel Ihrer Aufgabe ist, aber ich rate Ihnen dringend, so wenig wie möglich am Code zu verändern. Tun Sie nur das, was Sie tun müssen.

Vielleicht möchten Sie so viel wie möglich durch Befragung von Personen dokumentieren. Das ist eine große Aufgabe, denn Sie wissen nicht, welche Fragen Sie stellen sollen, und die Leute werden viele Details vergessen haben.

Ansonsten gilt: Sorgen Sie dafür, dass Sie bezahlt werden und genügend moralische Unterstützung erhalten. Es wird Heulen und Zähneknirschen geben...

0voto

Mark Heath Punkte 46572

Irgendwo muss man ja anfangen, und es klingt, als gäbe es Fehler, die behoben werden müssen. Ich würde mich durch diese Fehler arbeiten, indem ich schnelle Refactorings durchführe und alle möglichen Unit-Tests auf dem Weg schreibe. Ich würde auch ein Tool wie SourceMonitor einige der "komplexesten" Teile des Codes im System zu identifizieren und zu sehen, ob ich ihr Design in irgendeiner Weise vereinfachen kann. Letztendlich muss man einfach akzeptieren, dass es ein langsamer Prozess ist, und kleine Schritte auf dem Weg zu einem besseren System machen.

0voto

Draemon Punkte 32703

Ich würde versuchen, einen Teil des Systems zu wählen, der relativ schnell extrahiert und isoliert umgeschrieben werden kann. Selbst wenn es nicht viel bringt, kann man ziemlich schnell Fortschritte erzielen und hat nicht das Problem, dass man direkt mit dem alten Code zu tun hat.

Wenn es Ihnen gelingt, ein paar solcher Aufgaben zu erledigen, wird man hoffentlich sehen, dass Sie sichtbare Fortschritte machen, und Sie können ein Argument dafür vorbringen, mehr Leute einzustellen, um die größeren Module umzuschreiben. Wenn Teile des Systems auf fehlerhaftem Verhalten beruhen, haben Sie keine andere Wahl, als sich zu trennen, bevor Sie etwas reparieren.

Hoffentlich können Sie nach und nach ein Team aufbauen, das in der Lage ist, das Ganze neu zu schreiben.

All dies müsste mit einer angemessenen Schulung einhergehen, da sonst die alten Gewohnheiten der Menschen bestehen bleiben und Ihre Arbeit dafür verantwortlich gemacht wird, wenn die Dinge nicht wie erwartet funktionieren.

Viel Glück!

0voto

Illandril Punkte 674

Verwerfen Sie alles, was derzeit existiert und Probleme hat, und schreiben Sie neue, die korrekt funktionieren. Dokumentieren Sie so viel wie möglich darüber, was sich ändern wird, und stellen Sie überall große, rot blinkende Schilder auf, die auf diese Dokumentation verweisen.

Auf diese Weise können Sie die vorhandenen Fehler (die an anderer Stelle kompensiert werden) beibehalten, ohne Ihre Fortschritte auf dem Weg zu einem tatsächlich funktionierenden System zu verlangsamen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X