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]
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]
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.
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 :)
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.
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.