Kreuzfahrt mit dem snavigator

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

SoftwareDevelopment

AuthorImage:[Here we need a little image from you]

Gerrit photo

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Gerrit Renker

en to de Viktor Horvath

AboutTheAuthor:[A small biography about the author]

Gerrit mochte Computer �berhaupt nicht, bis er es mit C und Linux versuchte.

Abstract:[Here you write a little summary]

Dieser Artikel stellt den snavigator vor, ein m�chtiges Werkzeug f�r Code-Analyse, Querverweise und Re-Engineering, das unverzichtbar ist, um der Komplexit�t der Pflege von gr��eren Softwareprodukten und -paketen effizient zu begegnen.

ArticleIllustration:[One image that will end up at the top of the article]

[Illustration]

ArticleBody:[The main part of the article]

Motivation

Ein altes Sprichwort sagt, da� ein Buch nicht nach seinem Umschlag beurteilt werden sollte. Etwas �hnliches gilt f�r Open Source-Code. Open Source ist jedoch nicht dasselbe wie Open Documentation, und das Lesen wird immer schwieriger mit der wachsenden Anzahl und L�nge der Quelldateien. Ich mu�te k�rzlich mit einer Software programmieren, die mit einer halben HTML-Seite Dokumentation aufwartete sowie mit �ber 348.000 Zeilen Open Source Java-Code, verteilt auf mehr als 2.060 Dateien (siehe Graphik). Angesichts solcher Dimensionen werden Werkzeuge f�r elektronische Orientierung, Reverse Engineering und Analyse unverzichtbar. Ein solches ist der Red Hat source code navigator, der in diesem Artikel vorgestellt wird.
Er automatisiert viele Aufgaben, die man normalerweise mit (c)tags, grep, search und replace erledigte, aber viel pr�ziser und bequemer, in einer einfach zu benutzenden graphischen Oberfl�che integriert, siehe die Screenshots unten.

Installation in Debian

Unter Debian kannst du das ganze Paket mit folgendem Einzeiler bekommen:
apt-get install sourcenav sourcenav-doc 
Das besorgt gleichzeitig auch die Dokumentation. Der source navigator befindet sich dann in /usr/lib/sourcenav/, du kannst das Hauptprogramm mittels /usr/lib/sourcenav/bin/snavigator starten (siehe den Tip bez�glich eines Symlinks unten). Die Dokumentation kann unter /usr/share/doc/sourcenav/html/ gefunden werden.

Installation aus den Quellen

Die Homepage von source navigator ist http://sourcenav.sourceforge.net/, die Downloads liegen hier (sourceforge.net/project/showfiles.php?group_id=51180). Hole den neuesten Tarball sourcenav-xx.xx.tar.gz. W�hrend des Downloads kannst du dich mit etwas anderem besch�ftigen - die Quellen sind 55 Megabytes gro�. Das hat auch seine guten Seiten, das Paket braucht kaum etwas anderes. Obwohl es stark auf andere Bibliotheken wie Tcl/Tk, Tix und Berkeley DB zur�ckgreift, sind deren richtige Versionen alle mitgeliefert. Um Konflikte mit anderen Versionen von Tcl/Tk auf deinem System zu vermeiden, ist es eine gute Idee, die Installation in einem separaten Verzeichnis vorzunehmen, z.B. /opt/sourcenav. Die Anweisungen empfehlen des weiteren die Benutzung eines separaten Kompilier-Verzeichnis (build directory), was wie folgt funktioniert. Im Verzeichnis, wo die entpackten Dateien liegen, mache dies:
mkdir snbuild; cd snbuild 
../sourcenav-*/configure --prefix=/opt/sourcenav 
make                               ## takes a while ...
make install                       ## might have to become root first
Die Option --prefix spezifiziert das Installations-Verzeichnis. W�hrend configure l�uft, bekommt man bereits eine Vorstellung von den vielen Sprachen, mit denen snavigator umgehen kann. Es ist ebenfalls m�glich, weitere Parser f�r Sprachen deiner Wahl oder auch selbstgeschriebene hinzuzuf�gen. Ist die Installation via make install einmal beendet, ist der snavigator bereit zur Arbeit und kann als /opt/sourcenav/bin/snavigator aufgerufen werden. Anstatt die Umgebungsvariable PATH zu erweitern, schlage ich einen symbolischen Link vor, z.B. in /usr/local/bin.
ln -s /opt/sourcenav/bin/snavigator    /usr/local/bin
Das Hauptprogramm ist ein Shellscript, das sein Verzeichnis kennen mu�. Daher wird es �ber einen Symlink-Aufruf verwirrt. Das kann mit der �nderung folgender Zeilen in /opt/sourcenav/bin/snavigator behoben werden: Ersetze
snbindir=`dirname $0`
durch
prog=`readlink -f $0`
snbindir=`dirname $prog`
Die Option -f von readlink(1) erzeugt eine kanonische Darstellung des Pfades, d.h. es funktioniert sogar, wenn auf die Datei �ber einen sehr langen Pfad von verschachtelten Symlinks zugegriffen wird.

Benutzung des snavigator

Wird der snavigator zum ersten Mal aufgerufen, fragt er nach Verzeichnissen, die Quelldateien enthalten, wie der folgende Screenshot zeigt. Die unterst�tzen Sprachen umfassen unter anderem Java, C, C++, Tcl, Fortran, COBOL und Assemblerprogramme. Wenn der Quellcode angegeben wurde, baut er selber eine Projekt-Datenbank, die Verweis-Informationen, Klassenhierarchien, Datei-Abh�ngigkeiten und noch viel mehr umfa�t. Je nach Gr��e von deinem Projekt kann das ein bi�chen dauern. Anschlie�end kannst du Anfragen an die Datenbank stellen und zus�tzliche Informationen �ber den Code erfragen. Das Folgende pr�sentiert nur ein paar der Features, um dir eine Vorstellung zu geben. Eine illustrierte Einleitung und ein Referenzhandbuch befinden sich im Unterverzeichnis html deiner Installation.

Projekt-Management

Zum Paket geh�rt ein Editor mit Syntax-Highlighting, der auch zum ansprechenden Drucken genutzt werden kann. Der folgende Screenshot bildet das Hauptfenster des Editors ab. Er ist fast wie eine Entwicklungsumgebung, denn er wartet mit Sachen wie einer Debug-M�glichkeit, Projekt-Kompilierbefehlen, Versionskontrolle und �hnlichem auf.


Insbesondere die gro�en gr�nen Pfeile in der Toolbar funktionieren genau wie in einem Web-Browser. Der Projekt-Editor erlaubt einem, die Datenbankinformationen zu kontrollieren (z.B. falls eine Datei gerade ver�ndert wurde), Dateien von der Liste hinzuzuf�gen oder zu l�schen und andere Verwaltungsaufgaben. Alle Dateien werden als ein gro�es Projekt behandelt. Wenn also Ver�nderungen geschehen, kannst du die Datenbankinformationen mit Refresh Project oder Reparse Project aktualisieren.
Im Editorfenster markiere etwas, etwa den Namen einer Funktion, so da� die markierte Region in gelb erscheint. Dann klicke mit der rechten Maustaste - du kannst entscheiden, ob du (a) die Deklaration von dem, was du markiert hast, sehen willst (z.B. eine Header-Datei) oder (b) die Implementation des markierten Symbols (z.B. eine .cpp-Datei) - und es gibt noch ein paar weitere n�tzliche Optionen.

browse files

Der Symbolbrowser

Das ist das erste Fenster, das nach dem F�llen der Projektdatenbank erscheint. Normalerweise enth�lt es Dateinamen, aber es kann auch Klassenmethoden, Funktionssymbole und �hnliches darstellen. Wenn auf einen Dateinamen geklickt wird, �ffnet sich der Editor mit dieser Datei.

Das grep-Fenster

Das tut, was der Name sagt: Es bietet eine komfortable GUI, um durch alle beteiligten Quelldateien zu greppen. Passende Eintr�ge sind markiert und verlinkt, der Quellcode kann so wie ein Haufen Webseiten betrachtet werden. Wie der Screenshot zeigt, kann die entsprechende Datei ausgew�hlt werden, und durch simples Klicken wird der Editor an der richtigen Stelle ge�ffnet. (Die gezeigte Suche erzeugt Treffer in vielen Java-Dateien :)
grepper

Das Xref-Fenster

Hier haben wir eine Liste mit Querverweisen zu allen Symbolen, insbesondere kann man sehen, welche Methoden lesen (r), schreiben (w), usw. auf welchen Daten, und man kann die Beziehungen zwischen Symbolen sehen, hierarchisch dargestellt. Auf die Eintr�ge kann man klicken. xref

Das Klassenfenster

Dieses Interface sammelt alle n�tzliche Informationen, die man �ber Klassen in einer objektorientierten Sprache wissen will. Vor allem werden die Super- und Subklassen gezeigt sowie Attribut- und Methodennamen mit ihren Parametern. Zur Abwechslung zeigt das Fenster unten eine C++-Klasse ClientSocket, die von Socket erbt und ziemlich viele Methoden aufweist. Wieder gilt, da� du per Klick auf einen Eintrag ein Editorfenster an der entsprechenden Position �ffnen kannst.

Alternativen

cscope ist ein interaktiver C-Quellcode-Browser f�r die Kommandozeile (er kann auch mit C++ umgehen). Er hat einiges von der Funktionalit�t des snavigator, ein Screenshot ist hier. Tats�chlich ist er viel �lter und ist in vielen sehr gro�en Projekten benutzt worden. Seine Homepage ist http://cscope.sourceforge.net. Aber du brauchst nicht einmal dorthin zu gehen - er ist in vim eingebaut und kann sehr �hnlich benutzt werden wie (g)vim in Kombination mit tags. Tippe einfach
:help cscope
in deiner vim-Sitzung, um die verf�gbaren Optionen zu sehen. Es gibt noch ein paar von cscope abgeleitete Programme. Freescope ist ein cscope-Clone, dem etwas Funktionalit�t wie Symbol-Vervollst�ndigung hinzugef�gt wurde. Es gibt jetzt auch ein KDE-Frontend zu cscope namens kscope, das unter http://kscope.sourceforge.net liegt.

Zusammenfassung

F�r jeden, der wenigstens zum Teil mit dem Re-Engineering oder der Integration von Quellcode besch�ftigt ist, ist der snavigator ein sehr n�tzliches und m�chtiges Werkzeug. Ich hatte einmal eine �ltere Qt-Applikation, die leider nicht mit der aktuellen Version der Qt-Bibliothek lief. Indem ich die Fehlermeldungen las und ein bi�chen mit dem snavigator arbeitete, fand ich bald heraus, da� nur die Parameterliste einer Funktion ge�ndert werden mu�te. Mit der klick-und-finde-Funktionalit�t (click-and-locate) war es m�glich, das gesamte Softwarepaket in nur ein paar Minuten auf den aktuellen Stand zu bringen.