Accueil > Code > Quelques outils

Quelques outils

mardi 2 août 2011, par Nicolas

Introduction

En tant que développeur, j’utilise de nombreux outils. Voici une petite sélection arbitraire et partiale.

NetBeans

URL : http://www.netbeans.org/

Mon éditeur préféré [1], il est capable de gérer les projets Java standard, Android, GWT, C et C++, PHP, Python [2], et d’autres encore.

Il offre toutes les fonctions classiques, comme accès à la définition de fonction, utilisation des variables dans le code (global ou dans une fonction), renommage rapide, auto-complétion avec affichage de documentation et choix prioritaire de variables ou fonctions du type approprié selon le contexte [3], etc. Cerise sur le gâteau, il arrive dans une certaine mesure à faire de l’auto-complétion typée en PHP.

Il a l’inconvénient de demander une machine assez puissante, à la fois en CPU et en mémoire. Et parfois le parsing part un peu en vrille, et il faut effacer manuellement des caches...

Git

URL : http://git-scm.com/

Contrôle de source distribué, il convient parfaitement à ma façon de travailler, avec gestion simplifiée de branches, opérations rapides, etc.

Voir aussi mon article plus détaillé.

Jenkins

URL : http://jenkins-ci.org/

Outil d’intégration continue (fork de Hudson), il offre une interface simple via navigateur web.

Tous les projets comportent un ou plusieurs builds. Jenkins gère l’historique complet, avec l’état de succès ou d’échec, éventuellement les sources exactes compilées. Utilisé avec jUnit [4], il est capable de montrer l’historique des tests échouant entre les builds, indiquant les changements d’un build à un autre. Enfin il peut publier de la documentation Javadoc.

Il est possible de définir simplement des projets, qui peuvent être de tous types et faire à peu près n’importe quoi. Je l’utilise par exemple pour :

  • sauvegarder une base de données distante
  • télécharger des données pour générer des statistiques
  • vérifier que du code compile et passe les tests unitaires à chaque modification
  • générer journalièrement une capture d’une page web
  • lancer des tests unitaires vérifiant la validité XHTML de pages ou flux XML

Des plugins existent pour différents outils, comme Git [5] ou Mantis.

Qt

URL : http://qt.nokia.com/

Librairie C++, au cœur du projet KDE, elle fournit à la fois des fonctions de base (multi-plateforme, manipulation de chaînes de caractères et fichiers) et des fonctions d’interface graphique.

Le système de signal et slot est intéressant, et permet des interactions modulables entre blocs de code.

Le support NetBeans n’est pas le plus abouti, notamment sur la gestion des signaux et slots.

Voir aussi mon article sur les méthodes d’entrée.

Doxygen

URL : http://www.doxygen.org/

Générateur de documentation, c’est mon outil de prédilection pour générer les références de code.

Acceptant Java, C et C++, PHP et autres langages, il offre l’avantage de rendre homogène la documentation finale.

Il est capable de repérer les appels de fonctions et de générer un graphe, ce qui permet de voir quelle fonction utilise quelle classe ou autre fonction.

Inconvénient, le parseur a parfois du mal sur du code PHP, notamment celui utilisant l’opérateur <<<

Validateur W3C

URL : http://validator.w3.org/

Outil de validation du code HTML ou XHTML de sites web, je m’en sers pour vérifier que je ne fais pas trop d’erreurs dans ce que je génère.

Dans l’absolu la validation est plus un bonus qu’une vraie nécessité pour la plupart des navigateurs. Cependant je considère que si une page prétend être d’un certain format, il est normal qu’elle soit valide par rapport à sa définition.

À noter qu’il est assez simple à installer localement (il y a un paquet Debian pour ça d’ailleurs).

GWT

URL : http://code.google.com/webtoolkit/

Une bonne façon de faire du JavaScript : le développeur écrit du code Java, qui est ensuite converti en JavaScript.

Ceci permet d’utiliser toute la puissance de Java, et donc des éditeurs associés, comme typage fort, définition obligatoire des fonctions et variables [6], refactorisation rapide, etc.

Le code est généré en différentes versions optimisées pour différents navigateurs, avec une routine « principale » qui sélectionne la bonne version selon l’utilisateur.

En revanche, le code HTML généré dynamiquement est compliqué à correctement habiller avec du CSS, mais on y arrive.

À noter qu’il est possible de s’intégrer dans du HTML existant. Il existe ainsi la librairie gwtquery qui permet de sélectionner rapidement des éléments d’une page.

Voir aussi mon article sur la gestion de l’historique et les marque-pages.

Google Data Java Client Library

URL : http://code.google.com/p/gdata-java-client/

Ayant besoin d’accéder à des données notamment Analytics, cette librairie me fournit tout ce dont j’ai besoin pour cela.

Les exemples sont plutôt bien faits, et la documentation est suffisante pour comprendre comment cela fonctionne.

Voir aussi mon article sur OAuth pour Google Data.

Jackson

URL : http://jackson.codehaus.org/

J’ai eu besoin de traiter du JSON en Java, et suis tombé par hasard sur cette librairie.

Elle rend le traitement du JSON extrêmement simple [7] : après avoir défini une classe de base (par exemple Root) avec des « setters » répondant aux conventions Java (void setVariable(int value)), y compris des types complexes (void setSubItems(List<OtherObject> list)), un simple appel retourne une instance de type Root avec les champs remplis. L’accès aux données est donc aussi simple que d’accéder aux champs des objets.

Page Speed Online

URL : http://pagespeed.googlelabs.com/

Un peu un gadget j’admets, mais un outil pas mal pour aider à optimiser les sites Web [8].

Par contre il semble compliqué à installer en local, la liste des dépendances fait peur...

Mantis

URL : http://www.mantisbt.org/

Outil de suivi de bugs ou de tâches, il permet de suivre le développement d’un projet.

Jenkins a un plugin qui permet notamment de rajouter des notes à des bugs lors de compilation, à partir de l’historique du contrôle de sources.


[1Je ne dis pas qu’il s’agit du meilleur, loin de là — je ne rentre pas dans les guerres de religion :)

[2La dernière version, 7.0, oblige malheureusement à installer une extension supplémentaire, qui n’est pas encore en production semble-t-il.

[3Par exemple, si l’on écrit int weight = myObject., les fonctions de myObject qui apparaîtront en premier sont celles retournant un int.

[4Framework de tests unitaires pour Java.

[5Une fonction pratique est celle de « fusion sur master en cas de succès ». Le principe est que les développeurs font des modifications sur des branches, et Jenkins fusionne vers la branche « master » en cas de succès de la compilation et des tests associés. Ainsi « master » est supposé être toujours une branche valide.

[6Qui n’a jamais fait d’erreur sur une variable en PHP ou JavaScript lève la main :)

[7Il y a plusieurs façons, je présente celle que je trouve pratique dans mon cas d’utilisation.

[8Je ne suis pas administrateur système à temps plein, mais à force j’ai quelques notions et expériences. Bien évidemment je ne peux préjuger de la pertinence des conseils fournis.