Depuis peu, je me suis intéressé à la qualité du code source et aux outils associés pour aider notre ami le développeur.

En effet, cet animal bizarre est comme l'enfer, pavé de bonnes intentions. C'est sans compter sur le personnage sans qui le développeur n'aurait point sa dose de code journalière, le chef de projet[1].

Ce dernier ne voit qu'une chose, le calendrier et la sacro-sainte deadline. Du coup, il pousse le développeur au c.l et ce qui doit arriver, arrive, le développeur se met à coder directement, sans conception, sans test unitaire, à l'arrache.

Je me suis donc dit qu'il fallait trouver toute une série d'outils qui permettrait de s'assurer qu'on met bien toutes les chances de son côté pour avoir un code robuste et de qualité.


Commençons par le commencement.


La conception!!

Certes, on n'a pas toujours le temps de faire une conception propre mais on peut au moins savoir quelles sont les entrées et les sorties de chaque méthode que l'on code.

Pour cette tâche, j'ai trouvé un outil pour Ada. Il s'agit en fait d'un sous-ensemble d'Ada appelé Spark qui est maintenant téléchargeable chez Adacore. L'outil en question permet de marquer dans les commentaires certaines contraintes liées au code et ainsi d'écrire dans un langage non ambigu comment se comporte le code associé. Le tout est livré avec un outil qui vérifie les contraintes et analyse le code pour y détecter des failles potentielles.

Ayant quand même une arrière-pensée pour le boulot, je me suis donc intéressé à Java Modelling Language qui remplit la même fonction que Spark. Sur le site du JML, on trouve une série de liens vers des outils et plugins pour Eclipse permettant l'utilisation de JML mais aussi fournissant une analyse statique du code.

Les résultats sont d'ailleurs très sympas, notamment pour la détection du code mort et autres joyeusetés.

Mention spéciale aussi pour la série Hammurapi, PMD et FindBugs.


Les tests unitaires!!

Là, je vais faire court vu que j'en ai déjà longuement parlé dans ce billet. Je les trouve important mais le mieux, c'est de les coupler à un autre outil tout aussi intéressant, le soft de test de couverture de code. Dans mon cas, même si je n'ai pas encore testé, j'ai jeté mon dévolu sur Cobertura et Jester.

Pour Ada, les tests unitaires pourront être faits avec AUnit ou Ahven.


Putting it all together!!

Alors comment on fait maintenant ?

Et bien, on claque tout ses petits outils dans un Makefile pour Ada ou un script Ant pour Java[2] et on utilise... BuildBot pour lancer les build la nuit et on regarde si tout ce petit monde est content.

Le tout couplé à Subversion et à Trac et on dispose d'une infrastructure franchement sympa pour pondre du logiciel de qualité... Comme .


Voilà, je crois que j'ai fini.

Dernière remarque quand même, si vous commencez à regarder tout ça, vous allez trouver moultes informations et tutoriaux sur les différents sujets et y passer pas mal de temps.

En espérant que tout ça vous a plu et vous poussera à faire des logiciels de plus en plus bugfree ;-)

Notes

[1] Un comme dans mon boulot qui ne fait que regarder les comptes et dire amen à tous les avenants à coût nul du client :-(

[2] J'aime que moyennement Maven, désolé