Naviguer avec 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]

Photo de Gerrit

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

original in en Gerrit Renker

en to fr Laurent Richard

AboutTheAuthor:[A small biography about the author]

Gerrit avait horreur des ordinateurs avant qu'il ne connaisse le C et Linux.

Abstract:[Here you write a little summary]

Cet article va vous présenter snavigator, un puissant outil d'analyse de code, de référencement croisé et de re-engineering qui se trouve être vraiment indispensable pour gérer la complexité de la maintenance de logiciels d'une certaine taille ainsi que la gestion des paquets d'une manière efficace.

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

[Illustration]

ArticleBody:[The main part of the article]

Motivation

Un vieux proverbe dit qu'il ne faut pas juger un livre à sa couverture. Un parallèle peut être fait avec le code ouvert. Néanmoins, on ne peut pas comparer du code ouvert à de la documentation libre. La lecture devient de plus en plus complexe à mesure que la taille des fichiers sources s'agrandissent. J'ai récemment dû programmer à l'aide d'un programme qui avait une demi page html en guise de documentation. En comparaison au plus de 348.000 lignes de code ouvert écrit en Java et divisé en pas moins de 2060 fichiers (voir figure). Quand on arrive à de telles chiffres, l'orientation électronique, le reverse engineering et les outils d'analyse deviennent indispensable comme le navigateur de code source Red Hat présenté dans cet article.
Cet outil automatise beaucoup de tâches que l'on devrait réaliser en utilisant des (c)tags, grep, search ou replace. Mais il réalisera cela de manière plus précise et plus conviviale dans une interface graphique facile d'utilisation. Jetez un coup d'oeil aux captures d'écran pour vous en convaincre.

Installation sous Debian

Sous Debian, vous pouvez obtenir le tout via un simple
apt-get install sourcenav sourcenav-doc 
Cela récupérera en même temps la documentation. Le navigateur de sources résidera dans /usr/lib/sourcenav/. Vous pouvez appeler le programme principal via /usr/lib/sourcenav/bin/snavigator (voir l'astuce à propos des liens symboliques ci-dessous). La documentation peut être trouvée dans /usr/share/doc/sourcenav/html/.

Installation à partir des sources

L'URL de la page d'accueil du navigateur de source est http://sourcenav.sourceforge.net/, les téléchargements se font en fait depuis ici (sourceforge.net/project/showfiles.php?group_id=51180). Obtenez le dernier tarball sourcenav-xx.xx.tar.gz. Lors du téléchargement, essayez de faire autre chose, en attendant, vu que les sources font environs 55 Mo. Cela a quand même un coté positif car après cela, le paquet n'a besoin de rien d'autre pour être utilisé. Même s'il fait un grand usage d'autres bibliothèques comme Tcl/Tk, Tix et Berkeley DB, les versions correctes de ces paquets sont également incluses. Afin d'éviter des conflits avec d'autres versions de Tcl/Tk, etc. sur votre système, cela me semble une bonne idée de faire l'installation dans un répertoire séparé, par ex. /opt/sourcenav. Les instructions suggèrent en plus d'utiliser un répertoire de construction séparé; cela se déroule comme suit. Après avoir décompressé, exécutez les commandes suivantes dans le répertoire contenant les sources décompressées :
mkdir snbuild; cd snbuild 
../sourcenav-*/configure --prefix=/opt/sourcenav 
make                               ## cela prend un peu de temps ...
make install                       ## vous devez devenir surper-utilisateur d'abord
L'option --prefix est là pour spécifier le répertoire d'installation. Lorsque le « configure » tourne, on a déjà une idée sur l'étendue des langages que snavigator peut gérer. Il est également possible d'ajouter des parsers supplémentaires pour les langages de votre choix ou d'en créer. Une fois que l'installation est terminé via make install, snavigator est prêt à focntionner et il peut être lancé par /opt/sourcenav/bin/snavigator. Au lieu d'étendre votre PATH à ce nouveau répertoire, vous pouvez comme je vous le suggère plutôt de créer un lien symbolique, par ex. vers /usr/local/bin.
ln -s /opt/sourcenav/bin/snavigator    /usr/local/bin

L'exécutable principal est un script shell qui a besoin de connaître son répertoire. Donc, il est un peu perdu si on l'appelle via un lien symbolique. Cela peut être résolu en changeant les lignes suivantes dans /opt/sourcenav/bin/snavigator; au lieu de
snbindir=`dirname $0
utilisez
prog=`readlink -f $0`
snbindir=`dirname $prog`
L'option -f de readlink(1) crée une représentation du nom de chemin canonique. Cela signifie que cela va fonctionner même si on accède au fichier via une longue suite de liens symboliques consécutifs. 

Utiliser snavigator

La première fois que snavigator est lancé, il va demander à connaître les répertoires contenant les fichiers sources comme le montre la capture d'écran suivante. Les langages qui sont inclus mais qui ne sont pas limitatifs sont Java, C, C++, Tcl, Fortran, COBOL et l'assembleur. Une fois les détails sur la localisation du code source donné, il va construire, indépendamment, une base de donnée du projet en incluant l'information de référencement, les hiérarchies de classes, les inter-dépendances entre les fichier et bien plus encore. La construction prend un certain temps dépendant bien sûr de la taille de votre projet. Une fois réalisé, la base de donnée peut être consultée et des informations supplémentaires peuvent être demandées à propos du code. Je ne fais que mettre en avant quelques possibilités du programme pour vous donner une idée globale. Un guide de l'utilisateur illustré de même qu'un manuel de référence sont inclus dans le répertoire html de l'installation.

Gestion du projet

Une partie du programme est un éditeur avec colorisation de la syntaxe pouvant être aussi utilisé pour des fichiers à imprimer. La capture d'écran suivante montre la fenêtre principale de l'éditeur. Elle ressemble vraiment à un environnement de développement et fournit des outils comme une usine à déboguer, des commandes de construction de projet, un contrôle de version et ainsi de suite.


En particulier, les grandes flèches vertes sur le menu fonctionnent de la même manière qu'un navigateur web. L'éditeur de projet permet de contrôler l'information de la base de données. Par ex : si un fichier vient d'être mis-à-jour, l'ajout ou la suppression de fichiers de la liste ainsi que d'autres tâches de gestion. Tous les fichier sont traités comme un grand projet. Dès lors, si des modifications sont effectuées, vous pouvez mettre à jour l'information de la base de données via Refresh Project ou Reparse Project.
Lorsque la fenêtre de l'éditeur met en évidence quelque chose comme le nom d'une fonction comme celle qui est représentée ici en jaune, vous pouvez faire un clic-droit avec votre souris afin de pouvoir choisir de faire une déclaration de ce qui a été mis en évidence (comme un fichier d'en-tête), d'implémenter le symbole mis en évidence (ex : un fichier .cpp) ainsi que quelques autres options utiles.

Navigateur de symboles

Voici la première fenêtre qui s'ouvre après avoir constitué la base de données du projet. Généralement, elle contient les noms de fichiers mais peut également afficher les méthodes de classe, les symboles de fonctions et ainsi de suite. Lorsque on clique sur un nom de fichier, l'éditeur sera ouvert avec ce fichier.

La fenêtre grep

Cela ouvre, comme le dit si bien le titre, une interface graphique conviviale pour « grepper » dans l'ensemble des fichiers de code source concernés. Les entrées correspondantes seront mises en évidences et cliquables. Le code source peut dès lors faire l'objet d'une navigation comme si vous étiez sur une page web. Comme le montre la capture d'écran, le fichier ainsi que sa localisation respective peuvent être sélectionnés et par simple clic, vous entrez dans l'éditeur qui sera positionné à l'endroit exact dans le code. (Cette recherche sur la base d'un terme a donné des résultats positifs dans beaucoup de fichiers Java :)
grepper

Fenêtre Xref

Ici, nous avons une liste de références croisées de tous les symboles. En particulier, on peut constater quelles méthodes lisent (r), écrivent (w), ... et sur quelles données et voir les relations entre les symboles représentées de manière hiérarchique. Les entrées sont cliquables. xref

Fenêtre Class

Cette interface regroupe toutes les informations utiles que l'on désire connaître sur les classes dans un langage orienté objet. En particulier, les super- et les sous-classes sont affichées ainsi que les noms des attributs et des méthodes accompagnées de leurs paramètres. Pour changer, la fenêtre en dessous montre une classe ClientSocket en C++ qui hérite de Socket et qui a quelques méthodes. Encore une fois, en cliquant sur une des entrées, vous pouvez ouvrir une fenêtre d'édition positionnée à l'endroit adéquat.

Autres alternatives

cscope est un navigateur interactif, basé sur la console de code source C (il peut faire également du C++). Il a certaines fonctionnalités de snavigator. Une capture d'écran se trouve ici. En fait, il est beaucoup plus vieux et a été utilisé dans pas mal de très gros projets. Sa page d'accueil est http://cscope.sourceforge.net/. Mais vous n'avez pas besoin de vous y rendre car il est incorporé directement dans vim et peut être utilisé de la même manière que (g)vim en combinaison avec les tags. Tapez simplement
:help cscope
dans votre session vim pour vérifier les options disponibles. Il existe certains dérivés de cscope. Freescope est un clône de cscope qui a quelques fonctionnalités supplémentaires telles que la complétion de symboles. Il y a maintenant également une interface graphique sous KDE pour cscope qui s'appelle kscope et qui peut être trouvée sur http://kscope.sourceforge.net/.

Conclusions

Pour quiconque impliqué au moins en partie dans du re-engineering ou de l'intégration de code source, snavigator est un outil puissant et très utile. J'avais avant une vieille application Qt qui ne fonctionne malheureusement plus avec la version actuelle de la bibliothèque Qt. En regardant les messages d'erreurs et en naviguant un peu avec snavigator, j'ai trouvé rapidement que seule la liste de paramètre d'une des fonctions devait être changées. En utilisant la fonctionnalité de localisation par clic, il fut possible de rendre le logiciel complet à jour en à peine quelques minutes.