Code-Verständnis, Reverse Engineering, beste Konzepte und Tools. Java

8

Eine der anspruchsvollsten Aufgaben für jeden Programmierer, der Architekt versteht den Code des anderen.

Zum Beispiel bin ich Auftragnehmer, der beauftragt wurde, ein Projekt sehr schnell zu retten. Beheben Sie Fehler, planen Sie globales Refactoring und deshalb brauche ich den effizientesten Weg, den Code zu verstehen. Was ist die Liste der Konzepte, ihre Priorität und beste Werkzeuge dafür?

Von dem, was ich weiß: Reverse-Code-Engineering zum Erstellen von Objektmodellen (Erstellen von Diagramm pro Paket ist nicht so bequem), Erstellen von Sequenzdiagrammen (das Tool verbindet im Debug-Modus mit dem System und generiert Diagramme von der Laufzeit). Einige Visualisierungstechniken verwenden einige Werkzeuge, um nicht nur mit .java , sondern auch mit z. JPA Implementoren wie Hibernate . Generieren Sie ein Diagramm für nicht alle Codebasen, fügen Sie jedoch eine Klasse und dann Klassen hinzu, die von ihr verwendet werden.

Ist Sparx Enterprise Architect im Reverse Engineering State of the Art oder weit davon entfernt? Irgendwelche anderen besseren Werkzeuge? Idealerweise würde dieses Tool mir den Code verständlich machen, als ob ich es selbst geschrieben hätte:)

    
core07 17.04.2010, 11:05
quelle

6 Antworten

11

Das Buch Objektorientierte Reengineering-Muster behandelt das im Detail. Leider gibt es keine Silberkugel: -)

Es enthält jedoch eine Menge nützlicher Techniken zur Übernahme von Legacy-Code. Kurz gesagt

  • interviewen zumindest einige der ursprünglichen Entwickler (wenn sie noch da sind)
    • Entwicklungsgeschichte: Phasen, Releases
    • aktueller Stand der Dinge
    • team soziale struktur, politik, dynamik: wann und warum kamen und gehen leute
    • Bugs: typisch, am einfachsten, am schwersten
    • Code-Qualität: sauberste / hässlichste Teile
    • Konfigurationsdaten: Form, Inhalt und Verwendung
    • Einheit / Integration / Handbuch / ... Testfälle und Daten
    • SCM-Zweigstruktur und -Verwendung
    • Dokumentation: Was ist wo dokumentiert, ist es auf dem neuesten Stand
    • ?
    • Ansprechpartner für externe Schnittstellen
  • Beobachten Sie Entwickler / Benutzer während der Demo zu finden
    • Hauptmerkmale
    • typische Anwendungsfälle
    • Anekdoten
    • gute / schlechte, fehlende / überflüssige Funktionalität
  • "Lesen Sie den gesamten Code in einer Stunde"
    • erhalten eine hierarchische Ansicht von Klassenhierarchien, Interfaces
    • nehmen Sie bei Bedarf mehrere Sitzungen
    • vor
    • identifizieren große Strukturen (diese enthalten oft wichtige Funktionen)
    • Suche nach Designmustern
    • check Kommentare (sie können viel verraten, können aber auch irreführend sein)
  • skim Dokumentation (falls vorhanden)
    • einfach die Verfügbarkeit bestimmter Arten von Dokumenten aufzeichnen, z. Spezifikation, UML-Diagramm, Wiki, Javadoc usw.
    • ist es nützlich und warum (nicht)
    • ist es auf dem neuesten Stand
Péter Török 17.04.2010 11:46
quelle
6

Bei weitem die wichtigsten Werkzeuge sind Ihre Ohren, Ihre Zunge und Ihr Kehlkopf. Fragen Sie die Personen, die mit dem Code vertraut sind - sie werden Ihnen helfen, die allgemeine Architektur besser zu verstehen als alle Software-Tools.

Automatisch reverse-engineered komplette UML-Modelle sind im Allgemeinen fast nutzlos, weil sie nicht zwischen wichtigen Abstraktionen und Implementierungsdetails unterscheiden können - was den ganzen Sinn solcher Modelle ausmacht.

Software-Tools sind hilfreicher, um sehr spezifische Fragen zu beantworten, wenn Sie Details untersuchen, z. B. "Wo wird diese Methode aufgerufen?" oder "welche Klassen diese Schnittstelle implementieren" - jede gute IDE wird das können. Debugger können auch helfen - Breakpoints an Schlüsselpunkten des Codes zu platzieren und den Aufruf-Stack zu betrachten, wenn sie getroffen werden, ist oft sehr aufschlussreich.

    
Michael Borgwardt 17.04.2010 11:36
quelle
2

Nur um Michaels zu erwähnen, die gute IDEs erwähnen, die Ihnen helfen können:

Ich benutze die folgenden Eclipse-Möglichkeiten sehr oft:

  • Shift-F2, wenn der Cursor in einem Bezeichner steht, öffnet das Javadoc für diesen Bezeichner, falls vorhanden. Gut zum Navigieren.
  • Wenn Sie den Mauszeiger über eine Kennung bewegen, wird eine Box mit dem Javadoc angezeigt, sofern vorhanden. Gut zum erinnern, wenn z. ein Methodenaufruf.
  • Die Deklarationsansicht zeigt die Quelle, in der das Schlüsselwort definiert ist, auf dem der Cursor platziert ist. Dies wird aktualisiert, wenn sich der Cursor bewegt.
  • F3 geht zur Definition des aktuellen Bezeichners.
  • Strg-T bei einem Bezeichner zeigt alle Unterklassen und Implementierungen in einem Popup an. Sehr nützlich bei der Arbeit an Schnittstellen.
  • F4 für einen Bezeichner öffnet die Implementierungshierarchie dieses Bezeichners in einem Bereich, der navigiert werden kann. Sehr nützlich, um zu lernen, wie Dinge miteinander verbunden sind. Dies umfasst sowohl Klassen als auch Schnittstellen.
quelle
1

EclipseUML Omondo ist das beste Java-Reverse-Engineering-Tool. Sie kehren den ganzen Java-Code, alle Pakete und sogar die Klasseninteraktion mit der Schnittstelle um, wenn sie nicht im selben Paket sind. Einfach unglaublich. Sie können auch umkehren: - Klasse - Hibernate-Annotationen - JPA-Anmerkungen

Was ich an diesem Tool mag, ist, dass mein Code sauber ist, weil alle Modellinformationen in einem xmi-Format und nicht als Tag in meinem Code gespeichert werden. Sie können auch kleine Dokumentation innerhalb jedes vorhandenen Pakets erstellen, indem Sie Diagramme als Ansicht des Modells verwenden. Einfach wunderbar und respektiert die offizielle Uml 2.2 Spezifikation. Das einzige Problem ist, dass es wirklich zu teuer ist , also ist der Preis ein Halt für mich!

    
UML GURU 17.04.2010 20:02
quelle
1

Extrahiert keine High-Level-Architekturen, aber macht es viel einfacher, Ihren Java-Code zu umgehen: unser Java Quellcode-Browser . Dieser liest den Quellcode (und die unterstützenden Klassendateien) und erstellt die Dokumentation im Javadoc-Stil sowie den Quelltext, der in beide Richtungen mit den Javadoc-Informationen verlinkt ist. (Ich bin einer der Hauptverantwortlichen dahinter).

    
Ira Baxter 29.04.2010 03:24
quelle
0

Ich benutze Enterprise Architect für ganze UML (einschließlich Reverse Engineering mit Java) und es funktioniert perfekt.

    
Xorty 19.04.2010 07:29
quelle

Tags und Links