Wie lese ich Quellcode? Wie lerne ich ein großes System? [geschlossen]

8

Nehmen wir an, Sie möchten einen Beitrag zu einem Open-Source-Projekt mit Tausenden von LOCs leisten. Ich interessiere mich für Wege / Vorschläge, wie Sie das neue System erlernen / hacken würden.

    
Chrys 02.12.2008, 14:02
quelle

12 Antworten

6

Durchsuche den Code und suche nach Orten, von denen du denkst, dass du weißt, was passiert. Lies dir diese Abschnitte durch, um zu sehen, ob dein erster Gedanke Bestand hat, und versuche dann, ihn zu ändern, um zu sehen, ob du ihn ändern kannst, um etwas anderes zu tun.

Ich schlage vor, dass sich dies leicht an der Projekt-Roadmap orientiert, damit Sie dann feststellen können, wo Sie neue Funktionen und Fehlerkorrekturen finden, damit Sie sinnvoll beitragen können.

Lesen Sie auch die Dokumentation und eventuell vorhandene Spin-up-Dokumente (funktionale Spezifikationen, Anforderungsspezifikationen usw.). Dies kann Ihnen helfen, die Codeseile schneller zu lernen:)

    
workmad3 02.12.2008, 14:13
quelle
8

Lernen Sie mit einem Ziel. Ich denke, du wirst am besten lernen, wenn du ein Ziel vor Augen hast - repariere das oder füge diese Funktionalität hinzu. Suchen Sie nach den wahrscheinlichen Orten, an denen Sie Ihre Änderungen vornehmen müssen. Folgen Sie den Threads der Steuerung rückwärts, um herauszufinden, wie Sie zu diesem Punkt im Code gelangen. Werfen Sie auch einen Blick auf den Code "aus der Vogelperspektive" - ​​sehen Sie sich das Layout und die Struktur an. Guter Code wird beschreibende Namen haben, die angeben, für welche Klasse und für welche Methode sie bestimmt sind. Sehen Sie, ob Sie Implementierungsmuster erkennen und sehen können, wo / wie sie verwendet werden. Legen Sie nicht zu viel in die Dokumentation - Dokumente können ausgezeichnet sein, aber sie sind oft nicht synchron mit dem, was der Code wirklich tut. Lassen Sie den Code selbst die beste Dokumentation sein.

    
tvanfosson 02.12.2008 14:18
quelle
7

Wenn Sie Bücher suchen, die ich nützlich fand, um zu lernen, wie man aus dem Code lernt, würde ich die Bücher von Diomidis Spinellis Code lesen Lesen: Die Open-Source-Perspektive und Codequalität: Die Open-Source-Perspektive .

Für Ihre spezifische Frage würde ich mit Code Reading beginnen. Aber beide sind gute Bücher.

    
Thomas Owens 02.12.2008 14:17
quelle
5
  • Verbringe nicht zu viel Zeit mit kleinen Details.
  • Versuchen Sie nicht, das Gesamtsystem zu Beginn zu verstehen.
  • Der Punkt ist der Versuch, ein Modul oder eine Komponente zu verstehen, die relativ "unabhängig" ist und die in der Vergangenheit als eine Entität (Merkmal) hinzugefügt wurde. Dies liegt normalerweise innerhalb der Größenbeschränkung, die Ihre Gehirnleistung bewältigen kann, weil sie von jemand anderem gleichzeitig als ein Modul ausgeführt wurde.
  • Ihr Verständnis des Gesamtsystems wird verbessert, nachdem mehr Komponenten oder "Teile" verdaut und zusammengefügt wurden.
  • Werkzeuge sind sehr hilfreich: Doxygen + GraphViz, oder eine Software wie "Verstehen", Call- und Caller-Graph in Visual Studio, "Finde alle" und "finde alle Referenzen", etc.
Sijiang Du 18.10.2012 22:54
quelle
3

Ich ziehe es vor, den Code Zeile für Zeile in einem IDE-Debugger zu durchlaufen. Es ist nicht praktisch zu versuchen, den gesamten Code in einem großen System zu erreichen, aber ich beginne damit, den Start der Anwendung zu debuggen und gehe dann zu anderen Bereichen des Codes über, die für die Anwendung interessant / wichtig sind.

    
Jim Anderson 02.12.2008 14:20
quelle
3

Ich würde Doxygen gegen den Quellcode laufen lassen, so dass ich eine durchschaubare, lesbare Ansicht auf Klassenebene habe Quelle. Es ist hervorragend dafür geeignet, Sie durch eine riesige Code-Basis zu führen.

    
Alex 02.12.2008 14:21
quelle
3

Danke für Ihre Antworten. Viele nützliche Informationen.

Einige Tools, die ich denken kann, sind:

  • grep
  • ctags
  • cscope
  • javadoc (Java)
  • Doxygen (C, C ++)
  • lxr (Software-Toolset zum Indexieren und Präsentieren von Quellcode-Repositories)

Noch mehr Vorschläge zu nützlichen Tools?

    
Chrys 03.12.2008 14:14
quelle
2

Finde einen kleinen Ort, an dem du dich wohl fühlst und verändere ihn. Ignoriere den Rest; Sie werden lernen, wenn Sie es brauchen. Fühle dich von der Größe nicht überwältigt; Jedes Programm begann mit der ersten Zeile, und wenn es nicht in kleinen, unabhängigen Bits organisiert war, konnte es nicht beibehalten werden. Es gibt also immer eine Nische für dich.

    
Aaron Digulla 02.12.2008 14:17
quelle
2

Ich würde vorschlagen, eine Funktion zu finden, die Sie wirklich hinzufügen möchten.

Ich habe nur einmal wirklich einmal einen Berg von jemand anderem Code durchgesehen, und es wurde viel einfacher gemacht, weil das Feature, das ich hinzufügen wollte, etwas war, was ich wirklich brauchte. Ich denke, das ist der Grund, warum die meisten Open-Source-Projekte trotzdem starten. um ein Bedürfnis zu erfüllen.

Rob

    
RobS 02.12.2008 14:22
quelle
2
  1. Holen Sie sich den Code, der auf Ihrer Entwicklungsumgebung erstellt und ausgeführt wird.
  2. Finden Sie heraus, wie das System verwendet wird, und machen Sie sich mit den verwendeten Bibliotheken vertraut. (Wenn Sie beispielsweise Code mit Aufrufen einer OpenGL-Bibliothek sehen, machen Sie sich mit dieser Bibliothek vertraut) Lesen Sie die Systemdokumentation.
  3. Ich würde dann einen Punkt des Codes finden, der aufgrund einiger Eingaben ausgeführt wird. Nehmen wir an, das System erzeugt basierend auf einer Eingabe eine Ausgabe. Ich würde die Methode finden, die den Prozess initiiert. Versuchen Sie nun, entweder durchzukommen (könnte ein Schmerz sein) oder lesen Sie einfach den Code und versuchen Sie einen Überblick über das, was vor sich geht, zu erhalten.

Ich habe festgestellt, dass Schritt 3 in der Regel sehr involviert ist und es mir eine Richtung gibt, wie man den Code liest und lernt, wie das System funktioniert.

Das Hinzufügen einer Funktion kann eine gute Idee sein, aber in einem großen System könnte es ein Problem sein, herauszufinden, was diese Funktion ist. Nicht nur das, jede Funktion, die Sie schreiben, um das System zu lernen, wird höchstwahrscheinlich am Ende aussehen wie Mist, weil Sie keine Ahnung haben, was wo ist und wie das System funktioniert. Die Funktion, die Sie hinzufügen möchten, kann Sie jedoch zu dem richtigen Punkt in # 3 führen, also raten Sie nicht ab.

-s

    
Szymon Rozga 02.12.2008 14:55
quelle
1

Versuchen Sie, die Klassendiagramme rückzuentwickeln.Sagen Sie, dass es eine Funktionalität gibt, die von A nach B.Set break point bei A geht, debuggen Sie, gehen Sie durch und beobachten Sie die Kommunikation, zeichnen Sie die Links und die Vererbung auf Ihrem Papier Verwenden Sie auch ein Sequenzdiagramm. Dies hat mir geholfen, die spezifische Funktionalität eines Systems zu verstehen.

    
Misgevolution 06.12.2012 13:12
quelle
0

Wenn Sie mit dem Projekt vertraut sind und eine Vorstellung davon haben, was Sie beitragen möchten, rufen Sie die neueste Version des Codes ab und nehmen Sie die Änderung vor, die Sie vornehmen möchten. Versuchen Sie nicht, den gesamten Code gleichzeitig zu verdauen. Suchen Sie nach Mustern und Konventionen, die verwendet werden, und versuchen Sie, diese so gut wie möglich einzuhalten.

    
Aaron Palmer 02.12.2008 14:19
quelle

Tags und Links