Seite wählen

I hate reading other peoples code

von | Apr 30, 2015 | Linux, Technology, Development, Betriebssysteme

Machen wir uns nichts vor, als Entwickler verbringt man oft mehr Zeit damit sich vorhandenen Quellcode durchzulesen, als tatsächlich Neuen zu schreiben. Beim lesen so mancher unbekannter Codebasis mit mangelhafter Dokumentation hat man natürlich noch Glück, wenn man sich dabei nicht wie in diesem Webcomic vorkommt. Umso wichtiger ist, dass man gute Mittel kennt um sich schnell mit einer großen Codebasis vertraut machen zu können und um einem diese mühselige Arbeit wenn möglich zu ersparen.

Überblick verschaffen

Ein klassicher Ansatz ein unbekanntes Programm zu verstehen, ist es einfach dieses auszuführen und sich dabei den Quellcode anzusehen. Oft hilft das jedoch nicht wirklich den größeren Zusammenhang und die Struktur des Programmes zu ergründen, da man immer nur eine Funktion / Klasse auf einmal betrachten kann. Zum Glück bieten viele IDEs wie NetBeans oder PHPStorm die Möglichkeit Diagramme für genau diesen Zweck zu generieren.

UML-Klassendiagramme

Wenn man in PHPStorm beispielsweise eine Klasse selektiert und auf „Show Diagram“ drückt, wird automatisch ein Klassendiagramm generiert, mit dem man sich einen schnellen Überblick über vorhandene Datentypen und Vererbungshierarchien verschaffen kann.

PHPStorm-UML-Klassendiagramm

Ein UML-Klassendiagramm der Icingaweb2-Charting-Library

Zustands- und Sequenzdiagramme

Besonders bei Webanwendungen kann es aber sinnvoll sein Teile der Funktionen als Sequenz- oder Zustandsdiagramm darzustellen. Solche Diagramme lassen sich leider meistens nicht so einfach aus Quellcode generieren, bieten aber besonders deswegen oft eine Neue/Alternative Sicht auf das was im Programm passiert und können deshalb das Verständnis des Codes erleichtern. Zum modellieren dieser Diagrammtypen gibt es eine Reiher kostenloser Webtools wie Gliffy oder draw.io.

Ausprobieren

Wenn man einfach nur herausfinden will was ein Programm in einer bestimmten Situation macht, geht Probieren oft über Studieren.

strace

Strace listet auf, welche Systemcalls ein Programm aufruft. Mit strace -c <app>  kann man sich eine Zusammenfassung aller Systemaufrufe ausgeben lassen. Wenn man z.B. einfach wissen will welche Dateien ein Programm öffnet, kann man Strace mit dem Parameter -e trace=open starten, und bekommt alle Aufrufe des Linux-Systemcalls open aufgelistet.

Prozesse mit strace untersuchen

Prozesse mit strace untersuchen

Profiling

Ein Profiler verrät einem bekanntermaßen womit ein Programm die meiste Zeit verbringt. Das ist nicht nur hilfreich um Performance-Bottlenecks zu finden, sondern auch um herauszufinden welche Funktion wie oft aufgerufen wird. Für Webanwendung mit PHP lassen sich mit XDebug profilen und können in IDEs wie PHPStorm dargestellt werden.

Sonstige Möglichkeiten

In einem älteren Blogpost, hatte ich die D3 JavaScript-Library „Code-Flower“ vorgestellt, die einem eine Übersicht über die Größe (LOCs) einzelner Klassen im Quellcode gibt. Auch wenn das Ergebnis vor allem optisch eindrucksvoll ist, kann die Library in Verbindung mit Versionskontrollen genutzt werden um eine Historie über die zeitliche Entwicklung des Quellcodes zu generieren.
Die verschiedenen Möglichkeiten Programme zu untersuchen sind eigentlich fast nur durch die eigene Kreativität eingeschränkt. Es gibt unzählige Debugging und Analysetools, die sich mit ein wenig Einfallsreichtum dazu verwenden lassen können um ein Programm zu untersuchen auch ohne sich jede Codezeile durchzulesen.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Linux | Technology | Development | Betriebssysteme

Kibana Sicherheits-Updates: CVSS:Critical

Und täglich grüßt das Murmeltier. Nein nicht ganz. Heute ist es  aus der Elastic Stack Werkzeugkiste Kibana, für das es ein wichtiges Sicherheits-Update gibt. Es besteht auf jeden Fall Handlungsbedarf! IMHO auch wenn ihr die "Reporting" Funktion deaktiviert habt. Der...