2009-09-09 6 views
6

Ich habe eine Quelle von Python-Programm, das keine Dokumentation oder Kommentare hat. Ich habe es zweimal versucht, um es zu verstehen, aber meistens verliere ich meine Spur, weil es viele Dateien gibt. Was sollten die Schritte sein, um dieses Programm vollständig und schnell zu verstehen?Wie man ein Programm reverse engineering, das keine Dokumentation hat

+0

es ein sehr häufiges Problem .. –

Antwort

10

Michael Feathers "Working Effectively with Legacy Code" ist ein hervorragender Ausgangspunkt für solche Bemühungen - nicht besonders sprachabhängig (seine Beispiele sind in mehreren Nicht-Python-Sprachen, aber die Techniken und Denkweisen DO reichen ziemlich gut zu Python und fast jeder andere Sprache).

Der Hauptfokus ist, dass Sie den Code aus einem Grund verstehen möchten - es modifizieren und/oder portieren. Daher ist das Instrumentieren des Legacy-Codes - mit Batterien und Gerüsten von Tests und Rückverfolgung/Protokollierung - der entscheidende Weg auf dem langen, harten Weg zum sicheren und verantwortungsvollen Verstehen und Modifizieren.

Federn schlägt Heuristiken und Techniken für die, wo Ihre Bemühungen zu konzentrieren und wie, um loszulegen, wenn der Code ein totales Durcheinander (daher „Legacy“) - keine Dokumente oder docs irreführend (beschreibt etwas ganz anderes, vielleicht in subtile Wege, von dem, was der Code tatsächlich tut), keine Tests, ein untestable-ohne-Refactoring Wirrwarr von Spaghetti-Abhängigkeiten. Dies mag ein extremer Fall sein, aber jeder, der eine lange Karriere in der Programmierung verbracht hat, weiß, dass es tatsächlich häufiger ist, als jeder es möchte ;-).

+1

+1 Ich frage mich, wie viele rep Punkte haben zu sagen „lesen effektiv Go Arbeiten mit Legacy Code“ ausgehändigt worden? –

0

Ich würde mit einer guten Python-IDE beginnen. Siehe die Antworten für this question.

5

hilft mit epydoc Ich würde empfehlen, eine Dokumentation zu erzeugen. Wenn kein Docstring vorhanden ist, wird das Ergebnis zwar schlecht sein, aber es wird Ihnen mindestens eine Ansicht Ihrer Anwendung geben und Sie können leichter in den Klassen navigieren.

Dann können Sie versuchen, selbst zu dokumentieren, wenn Sie etwas Neues verstehen und dann die Dokumente erneut generieren. Es ist nie zu spät, etwas anzufangen.

Ich hoffe, es

2

hilft ich hatte eine Menge in meinem Job zu tun. Was für mich funktioniert, mag anders sein als das, was für dich funktioniert, aber ich werde meine Erfahrung teilen.

Ich beginne mit der Identifizierung der verwendeten Datenstrukturen und zeichne Diagramme, die die Beziehungen zwischen ihnen zeigen. Nicht unbedingt etwas Formales wie UML, sondern eine Skizze auf Papier, die Sie verstehen, die Ihnen erlaubt, die Gesamtstruktur der Daten zu sehen, die durch das Programm manipuliert werden. Nur wenn ich einmal eine Ansicht der verwendeten Datenstrukturen habe, beginne ich zu versuchen, zu verstehen, wie die Daten manipuliert werden.

Zweitens, für eine große Menge von Software, manchmal müssen Sie zunächst mundgerechte Stücke zuerst angreifen. Sie werden nicht sofort ein Gesamtverständnis bekommen, aber wenn Sie kleine Teile im Detail verstehen und weiterhacken, fallen schließlich alle Teile zusammen.

Ich kombiniere diese beiden Ansätze und wechsle zwischen ihnen, wenn ich übermäßig frustriert oder gelangweilt bin. Regelmäßige Spaziergänge um den Block sind zu empfehlen :) Ich finde das bringt mir gute Ergebnisse am Ende.

Viel Glück!

3

Sie haben Glück, dass es in Python ist, die einfach zu lesen ist. Aber es ist natürlich auch in Python möglich, schwierig zu verstehenden Code zu schreiben.

Die Schritte sind:

  1. Starten Sie die Software und lernen, es zu benutzen, und verstehen, es ist Features zumindest ein wenig.
  2. Lesen Sie die Tests, falls vorhanden.
  3. Lesen Sie den Code durch.
  4. Wenn Sie auf Code stoßen, den Sie nicht verstehen, legen Sie eine Debug-Pause ein und gehen Sie durch den Code, um zu sehen, was er tut.
  5. Wenn keine Tests vorhanden sind oder die Testabdeckung gering ist, schreiben Sie Tests, um die Testabdeckung zu erhöhen. Es ist eine gute Möglichkeit, das System zu lernen.
  6. Wiederholen Sie den Vorgang, bis Sie das Gefühl haben, dass Sie den Code vage im Griff haben. Ein vager Griff ist alles was Sie brauchen, wenn Sie den Code verwalten. Sobald Sie anfangen, mit dem Code zu arbeiten, werden Sie einen guten Griff bekommen. Für ein großes System, das Jahre dauern kann, versuchen Sie nicht, alles zuerst zu verstehen.

Es gibt Tools, die Ihnen helfen können. Wie Stephen C sagt, ist eine IDE eine gute Idee. Ich werde erklären warum:

Viele Editoren analysiert den Code. Dies gibt Ihnen normalerweise Code-Vervollständigung, aber in diesem Fall ist es noch wichtiger, dass Sie einfach nur auf eine Variable klicken können, um zu sehen, wo sie herkommt. Dies beschleunigt die Dinge wirklich, wenn Sie den Code für andere Menschen verstehen wollen.

Außerdem müssen Sie einen Debugger lernen. Sie werden in kniffligen Teilen des Codes diese in einem Debugger durchlaufen müssen, um zu sehen, was der Code tatsächlich tut. Pythons pdb funktioniert, aber viele IDEs haben integrierte Debugger, die das Debuggen erleichtern.

Das ist es. Viel Glück.

0

Enterprise Architect von Sparx Systems ist sehr gut ein Quellverzeichnis bei der Verarbeitung und Klassendiagramme zu erzeugen. Es ist nicht kostenlos, aber sehr preiswert für das, was man bekommt. (Ich bin in keiner Weise mit dieser Firma verbunden, ich war nur ein zufriedener Benutzer ihres Produkts für mehrere Jahre.)

1

pyreverse von Logilab und PyNSource von Andy Bulka sind auch hilfreich für UML-Diagramm-Generierung.

Verwandte Themen