Manchmal ist es in meiner Arbeit nützlich, den Open-Source-Code eines anderen zu ändern oder herauszufinden, wie Sie bestimmte Dinge für Ihre eigene Anwendung entwickeln können. Allerdings verfügen nicht alle Softwareprogramme über eine gute Dokumentation.
Was ist ein guter Weg, um die Gesamtstruktur einer Codebasis zu verstehen?
Welche Routinen rufen beispielsweise welche Routinen usw. auf? Ich könnte zu diesem Zweck selbst ein Dokumentationstool wie Doxygen verwenden. Ich habe mich jedoch gefragt, ob es eine bessere Strategie gibt.
software
documentation
Allan P. Engsig-Karup
quelle
quelle
Antworten:
Die folgenden Themen sind tangential miteinander verbunden:
Im ersten Teil meiner Arbeit habe ich 18 Monate damit verbracht, undokumentierten Fortran-Code zu ändern. Eine der ersten Aufgaben bestand darin, die Gesamtstruktur einer Codebasis zu verstehen. Das Wichtigste, was Sie vorschlagen, ist, sich jedes Mal Notizen in einer Textdatei zu machen, wenn Sie etwas herausfinden. Sie möchten während dieses zeitaufwändigen und frustrierenden Prozesses keine Dinge neu lernen oder neu entdecken müssen.
In meinem Fall gab es keine nennenswerte "API", da die Argumente der Funktionen nicht selbstdokumentierend waren, da der vorherige Programmierer den Fortran 77-ähnlichen Stil und damit kurze Bezeichner mit wenig bis gar keinem Hinweis darauf verwendete Sie meinten. Es gab keine Tests und da es Fortran ist, keine Überschriften. Um dem Mix noch mehr Spaß zu machen, wurden hier und da einige Funktionen in C oder C ++ geschrieben.
Dinge, die für mich funktioniert haben (vorausgesetzt, Sie arbeiten unter Linux):
grep
. Lerne zu liebengrep
; Sie werden es in der Shell verwenden, um herauszufinden, wo Funktionen deklariert und aufgerufen werden, und die Ausgabe gibt an, in welchen Dateien gesucht werden soll.nm
. Dies kann für Bibliotheken hilfreich sein, wenn Sie keinen Quellcode für sie haben, aber wissen möchten, ob sich eine Funktion in dieser Bibliothek befindet, auf die Sie gestoßen sind. Dies funktioniert jedoch nur, wenn die Symbole der Bibliothek nicht entfernt wurden.print
Anweisungen.ddd
undgdb
sind großartig und auf praktisch jedem Linux-System da draußen. Fühlen Sie sich frei, Ihren Lieblings-Debugger zu verwenden.Dinge, an die ich gerne früher gedacht hätte oder die für mich einfach keine Optionen waren:
gcov
undlcov
, um eine Abdeckungsanalyse für typische Codeläufe durchzuführen, wenn Sie Beispiele oder ausführbare Dateien haben, mit denen Sie arbeiten können. Wenn es Beispiele gibt, die große Teile der Codebasis ausführen sollen, zeigen diese beiden Tools zusammen an, wie oft jede Codezeile besucht wird. Dies ist am nützlichsten, wenn Debugging-Flags aktiviert sind. Wenn ein Teil des Codes überhaupt nicht besucht wird, ist es wahrscheinlich weniger wichtig, ihn sofort zu verstehen. Wenn ein Teil des Codes häufig besucht wird, lohnt es sich wahrscheinlich zu verstehen, was es ist. Möglicherweise wird der Code häufig ausgeführt, weil es sich um eine unwichtige Schleife handelt, oder es könnte sich um eine Schlüsselfunktion handeln, auf die sich viele andere Funktionen stützen. Sie können nicht nur anhand der Abdeckungsanalyse feststellen, aber die Abdeckungsanalyse gibt Ihnen eine Vorstellung davon, wo Sie Ihre Zeit konzentrieren müssen.splint
können Ihnen sagen, ob im Code etwas faul ist, da einige Variablen niemals verwendet werden.dot
und verwendengraphviz
, um Anrufdiagramme zu erstellen und zu sehen, wie oft Funktionen aufgerufen werden, z. B. die Abdeckungsanalyse. Bei komplexen Codes kann eine grafische Analyse viel hilfreicher sein.quelle
Ich fordere meine Schüler immer auf, einen Code von unten nach oben zu lesen: Sie beginnen in main () und sehen, wie er aufgerufen wird. In der Regel ist dies nur eine kleine Anzahl von Funktionen. Anschließend sehen Sie sich die von main () aufgerufenen Funktionen an, die normalerweise den Gesamtfluss des Algorithmus definieren (Zeitschrittschleife, Assembly, Solver, Ausgabe usw.). Gehen Sie zwei oder mehr Ebenen tief, um einen Überblick über den Algorithmus aus einer Entfernung von 30.000 Fuß zu erhalten. Der Rest kann häufig aus der Sauerstoffdokumentation usw. entnommen werden.
Aber wie gesagt, die Nachricht lautet: Lesen Sie den Code von unten nach oben.
quelle