Ja, das gefürchtete M-Wort.
Sie haben eine Workstation, Quellcodeverwaltung und eine halbe Million Zeilen Quellcode, die Sie nicht geschrieben haben. Die Dokumentation war nicht mehr zeitgemäß, als sie genehmigt und veröffentlicht wurde. Die ursprünglichen Entwickler sind LTAO, beim nächsten Projekt / Start / Loony Bin und beantworten keine E-Mails.
Was wirst du tun?
{favorite editor} und Grep werden Sie mit Ihrem Spelunking durch die knorrigen Eingeweide der Code-Basis beginnen, aber welche anderen Werkzeuge sollten in der Wartungsingenieur-Toolbox sein?
Um das Ballrollen zu beginnen; Ich glaube nicht, dass ich ohne source-insight für C / C ++ - Spelunking leben könnte. (HAFTUNGSAUSSCHLUSS: Ich arbeite nicht für sie).
Eines der besten Tools im .Net-Bereich ist ReSharper . Dieses Tool hat mir in allen Aspekten des Entwicklungslebenszyklus Zeit gespart. Sie haben mir auch geholfen, bei undokumentierten Projekten / Lösungen zu überleben.
Dies sind nur einige der vielen Funktionen, mit denen man zeitraubende Aufgaben ausführen kann.
Genauso wie der Elefant gegessen wird - ein Bissen nach dem anderen:)
Manchmal kann das große Bild ein echter Demotivator sein, und Sie müssen einen Punkt auswählen und Stück für Stück angehen.
Natürlich müssen Sie immer noch das Bit für den Start auswählen ... Normalerweise wird dies am meisten von den Benutzern / Unternehmen mit den wichtigsten Änderungen (gestern ...) verlangt, aber wenn Sie ein wenig Flexibilität oder Einarbeitungszeit haben Metriken sind oft nützlich. Die Tools variieren je nach Technologie und Sprache, aber Tools wie NDepend und JDepend , alle eingebauten Code Metriken (wie in Visual Studio Team System oder die verschiedenen verfügbaren Eclipse Plugins) oder ein Tool wie Simian , um ein Gefühl für die Größe des Kopier- und Einfügeproblems zu bekommen.
Hoffentlich ist die Anzahl der Komponententests und -abdeckung größer als Null. Daher ist es immer ein guter erster Schritt, alle Tests, die Sie in einer Continuous Integration-Umgebung ausführen können, als Grundlage für das Hinzufügen weiterer Tests zu verwenden.
Und wie andere schon gesagt haben - vorausgesetzt, dass Optionen für die Sprache verfügbar sind - ist eine gute IDE mit Code-Navigation und automatischem Refactoring ein Muss (Eclipse, Visual Studio (mit oder ohne ReSharper).
)Ein paar Bücher, die die Moral steigern:
Viel Glück:)
Code-Suchmaschinen können Ihnen helfen, sich in einer riesigen Quellenbasis zurechtzufinden.
Eine langzeitsensitive Quellcode-Suchmaschine kann gefunden werden in der SD-Quellcode-Suchmaschine . Es kann viele Sprachen gleichzeitig verarbeiten. Suchvorgänge können für Muster in einer bestimmten Sprache ausgeführt werden, oder Muster in verschiedenen Sprachen (z. B. "Kennungen mit TAX finden"). Durch die Empfindlichkeit gegenüber Sprachmünzen wird die Anzahl der falsch positiven Ergebnisse reduziert. Zeit für den Benutzer sparen. Es versteht C, C ++, C #, COBOL, Java, ECMAScript, Java, XML, Verilog, VHDL und eine Reihe anderer Sprachen.
(Ich bin der Werkzeugarchitekt).
Ich beginne normalerweise mit Emacs + CScope unter Linux. Visual Studio verfügt über einige Prüfwerkzeuge, die ähnliche Funktionen für Windows bieten. Doxygen kann auch sehr nützlich sein - es erzeugt Dokumente, die nützlich sein können, selbst wenn die Quellen keine Dokumentationskommentare haben.
Ich werde ein UML-Tool (vielleicht einfaches Notizbuch mit einem Stift =)) und / oder Werkzeuge für den Aufbau von Klassen, Aufrufe, Methodenhierarchien (integriert in IDE) ausführen. Dann schaue ich mir Dynamik mit Debugger oder einfache Unit-Tests an. Mit diesem Zeug werde ich versuchen, eine Art Reverse Engineering durchzuführen, um das Design herauszufinden.
Die Verwendung eines Unterschriftsüberblicks Prozesses ist ein guter Weg, um einen sehr guten Überblick über den Code zu bekommen. Mit einer guten Skriptsprache und etwas Mojo, um es zu verwenden, erstellen Sie eine sehr individuelle Umfrage für Ihre eigene Codebase, in welcher auch immer Ihre Sprache keine schwierige Aufgabe ist.
Die Bug-Tracking-Software, besonders wenn sie mit Ihrer Quellcode-Kontrollsoftware verbunden ist, wird von unschätzbarem Wert sein, da sie Ihnen einen Einblick geben kann, warum einige schlechte Entscheidungen getroffen wurden. Dies ist umso wichtiger, wenn der Wartungsprogrammierer auch ein Refactoring plant.
Ein geschriebenes Protokoll ist ebenfalls hilfreich, damit Sie das System auf dem Weg dokumentieren können.
Ja, schlag den Nagel auf den Kopf. Eine Unix-Shell und das handliche Notepad ++ ist das, was ich früher bei Wartungsarbeiten in ColdFusion, PHP, Perl usw. benutzt habe. Es ist schön, keine Editoren zu wechseln und alle Verweise auf einen Namen / Parameter / Variable aufzuspüren.
Jetzt klicke ich einfach mit der rechten Maustaste und drücke in Visual Studio auf "Alle Referenzen finden", was wie ein Betrüger aussieht, um ehrlich zu sein. Die PHP-Leute sind extrem eifersüchtig, da sie gezwungen sind, vi zum Editieren zu benutzen. ;)
Das kritische Tool ist etwas, mit dem Sie die Codebasis navigieren und bearbeiten können, um Ihr Verständnis zu verbessern.
Es ist sehr nützlich, etwas zu haben, das die Klassenbeziehung anzeigen kann (wenn OO-Sprache verwendet wird). Die Möglichkeit, (statische) Aufrufbäume anzuzeigen, ist ebenfalls sehr nützlich, wenn Sie die Auswirkungen einer Änderung messen möchten, die Sie vornehmen werden.
Sie erwähnen Source-Insight. Ein lang laufendes Open-Source-Projekt ist der Quellnavigator . Es sieht so aus, als hätte die Entwicklung wieder begonnen, nachdem sie eine Weile stagniert hat.
NDepend ist ein Tool, das speziell für Legacy-Code entwickelt wurde, insbesondere für große verschränkte Legacy-Code-Basen Disclaimer: Ich gehöre dazu Werkzeugentwickler
Um Scott Hanselman zu zitieren, der einmal in seinem Blog geschrieben hat : "NDepend gibt mir einen Einblick in meine Bewerbungen, die ich vorher nicht hatte (...) Als ich die Tiefe und Breite der Informationen erkannte, die ich mir anschaute, war ich wie ein Kind in einem Süßwarenladen. "
Einige nützliche Funktionen von NDepend für das Re-Engineering sind:
Sie müssen in der Codebasis navigieren können. Wenn Ihre bevorzugte IDE dies zulässt, können Sie einen Indexer wie Verstehen für C ++ (bereits zitiert),
In Eile können Sie sich auf grep (1s) oder - besser -
Tags und Links maintenance code-search-engine