In ein paar Monaten wird ein Kollege zu einem neuen Projekt übergehen und ich werde eines seiner Projekte erben. Zur Vorbereitung habe ich bereits Michael Feathers ' Working Effectively with Legacy Code bestellt .
Aber diese Bücher sowie die meisten Fragen zu Legacy-Code, die ich bisher gefunden habe, befassen sich mit dem Fall, dass Code unverändert übernommen wird. In diesem Fall habe ich jedoch Zugriff auf den ursprünglichen Entwickler, und wir haben etwas Zeit für eine ordnungsgemäße Übergabe.
Einige Hintergrundinformationen zu dem Code, den ich erben werde:
- Es funktioniert: Es sind keine Fehler bekannt, aber da die Leistungsanforderungen weiter steigen, werden in nicht allzu ferner Zukunft einige Optimierungen erforderlich sein.
- Undokumentiert: Auf Methoden- und Klassenebene gibt es so gut wie keine Dokumentation. Was der Code auf einer höheren Ebene tun soll, ist jedoch gut verstanden, da ich seit Jahren gegen seine API (als Black-Box) schreibe.
- Nur übergeordnete Integrationstests: Es gibt nur Integrationstests, die die ordnungsgemäße Interaktion mit anderen Komponenten über die API (ebenfalls Blackbox) testen.
- Sehr niedrige Ebene, optimiert für Geschwindigkeit: Da dieser Code für ein ganzes System von Anwendungen von zentraler Bedeutung ist, wurde im Laufe der Jahre ein Großteil davon mehrmals optimiert und ist extrem niedrige Ebene (ein Teil verfügt für bestimmte Strukturen über einen eigenen Speichermanager) /Aufzeichnungen).
- Gleichzeitiges und sperrenfreies Programmieren : Während ich mit dem gleichzeitigen und sperrenfreien Programmieren sehr vertraut bin und tatsächlich einige Teile zu diesem Code beigetragen habe, wird hierdurch eine weitere Komplexitätsebene hinzugefügt.
- Große Codebasis: Dieses spezielle Projekt besteht aus mehr als zehntausend Codezeilen, daher kann ich mir auf keinen Fall alles erklären lassen.
- Geschrieben in Delphi: Ich werde dies nur veröffentlichen, obwohl ich nicht glaube, dass die Sprache für die Frage von Belang ist, da ich glaube, dass diese Art von Problem sprachunabhängig ist.
Ich fragte mich, wie die Zeit bis zu seiner Abreise am besten verbracht werden könnte. Hier sind ein paar Ideen:
- Damit alles auf meinem Computer funktioniert: Auch wenn alles in die Quellcodeverwaltung eingecheckt werden sollte, der nicht vergessen hat, ab und zu eine Datei einzuchecken, sollte dies wahrscheinlich die erste Aufgabe sein.
- Weitere Tests: Ich hätte gerne mehr Unit-Tests auf Klassenebene, damit bei Änderungen von mir eingeführte Fehler frühzeitig erkannt werden können, da der aktuelle Code nicht testbar ist (große Klassen, lange Methoden, zu viele) gegenseitige Abhängigkeiten).
- Was zu dokumentieren ist: Ich denke, für den Anfang ist es am besten, die Dokumentation auf die Bereiche im Code zu konzentrieren, die ansonsten schwer zu verstehen wären, z. B. wegen ihrer niedrigen / hochoptimierten Natur. Ich fürchte, es gibt ein paar Dinge, die hässlich aussehen und überarbeitet / umgeschrieben werden müssen, aber es handelt sich tatsächlich um Optimierungen, die aus einem guten Grund veröffentlicht wurden, den ich verpassen könnte (vgl. Joel Spolsky, Things You Should Mach niemals, Teil I )
- Wie zu dokumentieren: Ich denke, einige Klassendiagramme der Architektur und Sequenzdiagramme kritischer Funktionen, begleitet von einer Prosa, wären am besten.
- Zu dokumentierende Personen: Ich habe mich gefragt, was besser wäre, wenn er mir die Dokumentation schreibt oder erklärt, damit ich die Dokumentation schreiben kann. Ich befürchte, dass Dinge, die für ihn, aber nicht für mich, offensichtlich sind, sonst nicht richtig abgedeckt würden.
- Refactoring mit Pair-Programming: Dies könnte aus Zeitgründen nicht möglich sein, aber ich könnte möglicherweise einen Teil seines Codes refactoren, um ihn wartungsfreundlicher zu machen, während er noch da war, um Eingaben darüber zu machen, warum die Dinge so sind, wie sie sind.
Bitte kommentieren und ergänzen. Da ich nicht genug Zeit habe, um all dies zu tun, interessiert mich besonders, wie Sie Prioritäten setzen würden.
Update: Da das Übergabeprojekt vorbei ist, habe ich diese Liste mit meinen eigenen Erfahrungen in dieser Antwort unten erweitert .