Il y a 10 ans -
Temps de lecture 11 minutes
Les outils du développeur moderne
L’âge de pierre du développement logiciel a été dominé par la répétition de tâches : coder, compiler, livrer. Au fil des ans, les développeurs des différentes tribus ont développés leurs “bifaces” pour s’améliorer : outils de build, de packaging et autres. Les développeurs ont gagné en efficacité et se sont libérés du temps pour des tâches plus nobles, telles que les tests automatisés, l’optimisation, l’architecture logicielle ou plus simplement le métier de l’application. De nos jours, les outils de développements sont légion, et il en apparaît de nouveaux régulièrement. Ainsi, il devient parfois difficile de s’y retrouver.
Evaluer un outil
Comme le dit un proverbe Français : “Les mauvais ouvrier ont toujours de mauvais outils”. Mais qu’est-ce qu’on bon outil, et plus particulièrement, un bon outil de développement logiciel ? Quel intérêt d’investir du temps et de chercher de meilleurs outils que ceux qui sont en place ? Quel gain pour mon projet, mon équipe ? Et ces nouveaux outils, quels sont-ils ?
Les outils de développement recouvrent à la fois, les capacités du système d’exploitation, du langage de programmation utilisé, mais aussi de l’IDE et des différents frameworks que vous pouvez être amenés à choisir. Tout programme pouvant aider le développeur à travailler de façon plus efficace est un outil de développement. Voici les qualités que nous sommes en droit d’attendre d’eux :
- Productivité : Un outil doit permettre d’effectuer une tâche plus rapidement, ou plus efficacement, et avec une qualité au moins égale à la procédure qui le précède.
- Intégrabilité : Être opérable dans mon environnement, sans perturber ma chaîne d’outil, si possible être en synergie avec les autres outils et fonctionner sur plusieurs OS.
- Fiabilité : Être fiable, fonctionner en adéquation avec la documentation, et de façon homogène en fonction des environnements.
- Simplicité : Être facile à prendre en main et ne pas devenir un obstacle dans mon workflow.
Nous allons passer en revue les outils qui peuvent vous changer la vie au cours du cycle de vie d’un projet.
Concevoir
La conception est le départ des idées et la définition sur laquelle se basera le développement. Avant d’être avancée ou technique, elle doit être claire. Les outils d’aide à la conception vous permettront de produire une représentation compréhensible par tous les intervenants sur un projet, de partager une vision. Il faut privilégier les outils simples et schématiques :
- FreeMind est un outil open source pour faire des "Mind Maps", c’est à dire des diagrammes à idées avec des liens entre elles.
- Google Docs propose des outils "office" classiques gratuits et concis et qui vont droit au but, de plus il est très simple de faire de l’édition concurrente.
- yEd est un outil de modélisation utilisé notamment par le projet Apache Ivy, on peut y faire de l’UML, du BPMN ou tout autre type de représentation populaire, l’outil est gratuit et très simple à prendre en main.
Partager…
… la base de code
Partager des fichiers et la base de code est essentiel dans un projet. La meilleure façon de le faire est d’utiliser un outil de gestion des sources. Subversion a été longtemps populaire, mais depuis quelques années, l’outil montant est Git, créé par Linus Torvald pour gérer les sources du projet Linux.
Le principal avantage de Git sur Subversion est que chaque développeur peut faire des commits sur sa machine sans impacter directement le dépôt commun. Cela permet donc aux développeurs :
- de faire des commits plus petits, ce qui facilite les merge par Git ;
- de réduire l’effort de merge manuel quand il y a malgré tout des conflits.
Git possède également des algorithmes de merge de fichier beaucoup plus performants que Subversion. Le travail en local sur chaque poste facilite les manipulations de branches et les développeurs acquièrent rapidement plus de maîtrise sur leur base de code.
De nombreux outils permettent de gérer ces dépôts de manière distribuée, en proposant des batteries d’outils de gestion de projet et d’interaction avec les autres développeurs autour de votre base de code.
Le plus populaire est de loin Github, gratuit pour les projets open source. Gitlab est une version open source à installer soi-même.
Il existe aussi des outils graphiques tels que gitk, SourceTree d’Atlassian, qui lui est payant. Enfin, Git s’intègre aussi très bien à Eclipse via EGit et IntelliJ.
… le travail
Il est également appréciable d’avoir un outil de gestion des tâches qui intègre la méthodologie Agile et le cycle de vie d’une tâche dans un backlog (journal de bord) Kanban ou Scrum par exemple.
Pour ce faire les principaux sont JIRA d’Atlassian (payant), Redmine (open source), Mantis (open source) et Trello (en ligne, gratuit), mais les plateformes de gestion des sources comme Github possèdent leur propre système.
Ces outils possèdent tous des APIs qui permettent de les intégrer à des SI et des outils de reporting existants. Grâce à cette trace gardée dans ces outils, on peut facilement retrouver les spécifications d’une implémentation et éventuellement le code associé, ce qui réduit dramatiquement le temps de résolution des erreurs et améliore la maintenabilité des projets, permettant d’allouer des ressources à l’avancement de celui-ci.
Coder avec …
… un langage
Malheureusement le cadre de cet article ne nous permet pas de traiter de tous les langages de programmation prêts pour de vrai projets de production. Il faudrait un livre entier pour traiter des différents points forts et faibles de chacun. Nous allons nous limiter à quatre langages qui ont la côte ces derniers temps :
- Java : Le leader, très grosse communauté, beaucoup d’outils ;
- Groovy : Présent dans beaucoup de projets sous forme de scripting, d’outils de monitoring ;
- Scala : Le langage fonctionnel qui monte ;
- JavaScript : L’assembleur du web, qui passe maintenant côté serveur.
… un IDE
Les environnements de développement les plus populaires sont IntelliJ et Eclipse. Ces deux IDE permettent de développer dans à peu près n’importe quel langage. Pour choisir votre IDE de rêve, penser à soupeser :
- L’intégration des technologies que vous utilisez : compilation automatique, complétion de code, formatage, plugins dédiés aux frameworks utilisés, moteur de templates ;
- Un contrôle complet à partir du clavier pour une productivité maximale ;
- Zero Turn Around : mon IDE doit être capable de minimiser le temps entre l’écriture de mon code et le feedback (tests ou redéploiement) ;
- Build incrémental : les classes modifiées doivent être recompilées rapidement, sans déclencher un build complet ;
- Les capacité de refactoring.
Il arrive parfois que ces deux IDE phares soient tout simplement trop gros pour votre projet. Parmi les éditeurs de texte à fort potentiel pour les développeurs, je vous conseille SublimeText. Pour les puristes, Emacs, Vi ou TextMate remplissent toujours leur rôle avec brio.
… un Framework
Le Framework, comme son nom l’indique, offre un cadre de travail pour des technologies à travers un certain nombre de concepts. La problématique du Web est riche, et il est intéressant de voir comment les nouveaux frameworks tentent de répondre à la fois à ses impératifs, et de satisfaire les besoins d’industrialisation des SI d’entreprise.
Il existe aujourd’hui deux Frameworks Web en vogue pour la JVM intégrant de nombreuses JSR :
- Grails, grâce à son moteur de plugins, et aux principes Convention Over Configuration et Don’t Repeat Yourself (Groovy, Spring), permet de démarrer des projets en un temps record et d’intégrer toutes sortes de technologies externes. Il permet de faire du Domain Driven Development et de générer une application entière à partir d’un simple modèle de données.
- Play, grâce à la forte optimisation du langage Scala par la compilation statique et à son footprint mémoire faible, est un framework à haute performance. De plus, son modèle d’IO itératif, permet d’être directement asynchrone, ce qui est nécessaire pour des applications web utilisées à grande échelle.
Pour rester dans le Web, depuis la montée en puissance de HTML5, un nouveau framework Javascript naît chaque mois. L’un des plus prometteurs est AngularJS. Le but de ces frameworks est de créer des applications Web performantes tout en respectant les standards W3C. AngularJS est un MVC côté client. Il embarque des directives (mise à jour du DOM), de l’injection de dépendances entre composants, des intercepteurs pour les requêtes http, et des services (injectables et réutilisables dans les controleurs), et surtout une méthodologie de tests unitaires, basée sur Testacular.
Tester …
… unitairement
Tester le code est fondamental. Les tests unitaires sont là pour tester la logique interne de chaque méthode. Idéalement on appliquera le Test Driven Development qui permet d’avoir un code plus proche des spécifications.
Quelques librairies disponibles :
- Java : FestAssert, Mockito ;
- Groovy : Spock, Geb ;
- Scala : ScalaTest, Specs2 ;
- Javascript : Testacular, Qunit.
… en intégration
La dynamique entre les composants doit également être testée à travers les tests d’intégration et fonctionnels.
Pour tester des pages web, PhantomJS ou son spin-off CasperJS permettent d’émuler un navigateur et exécuter des scénarios sous forme de script Javascript.
Dans le cas d’une API REST écrite avec la JSR 311 (JAX-RS), Apache CXF permet de générer automatiquement des clients de test.
… sous pression
Souvent délaissés par manque de temps ou délégués à des équipes dédiées, les tests de performance doivent être intégrés au plut tôt dans le cycle de développement pour évacuer des problèmes structurants pour l’application. Pour nous aider, il existe un certain nombre d’injecteurs, citons :
- Gatling permet d’exécuter des scénarios à l’aide d’une DSL écrite en Scala, consomme peu de ressources et s’intègre bien avec Maven et Jenkins.
- JMeter a une interface graphique plus complète et peut adresser un large panel de protocoles
Livrer
Pour s’assurer en permanence que l’application est livrable, il faut automatiser le build, les tests automatisés et le packaging. Il existe un certain nombre de serveurs d’intégration continu (CI) qui permettent d’ordonnancer ces étapes. Le plus populaire est sans doute Jenkins, dont Cloudbees propose un hébergement en ligne, ainsi que Travis, plus ouvert sur les autres langage que Java.
Pour automatiser le déploiement de machines dans un environnement Cloud, il existe Chef, Capistrano et Puppet, ainsi que des outils en ligne tels qu’Amazon Web Services. Ce sont généralement des scripts qui déploient des machines ou des ASGs (Auto Scaling Group) dans le Cloud puis activent des services tels que les connecteurs à des bases de données ou l’installation de serveurs.
Monitorer et debugger
Votre application est enfin codée, testée, livrée, mais il y a des soucis en production. Pour vous aider à poser un diagnostic, la boite à outils s’alourdit encore un peu. Tout d’abord, il y a des outils de console essentiels pour démarrer l’analyse :
- nmap : scanner de ports, vous permettra de vite trouver les erreurs de visibilité réseau ou de configuration de firewall ;
- lsof, ps, top : déterminer quels programmes sont lancés et utilisent une ressource dans le système ;
- ssh, scp : se connecter à une machine distante et y copier des fichiers, créer des tunnels pour connecter des programmes à travers une machine.
Si les problèmes se trouvent dans une page Web, tournez vous alors vers Firebug, Chrome Dev Tools ou modern.ie, suivant votre navigateur. Il y a là tout le nécessaire pour faire de l’introspection de page.
Pour pouvoir tirer de l’information des entrailles de votre application, il reste les logs et le monitoring. Pour ça, penchez vous sur :
- Graphite : pour effectuer des graphes de toutes les métriques de votre application ;
- JavaMelody : Pour vérifier l’activité du réseau et des requêtes ;
- VisualVM : pour observer vos Thread applicatifs et l’utilisation de la mémoire en direct ;
- Nagios ou Ganglia : Plateforme de monitoring et de lancement d’alerte pour être prévenu au plus tôt des pannes ;
- Logstash ou Graylog2 : si la gestion et l’analyse de vos log est complexe.
Conclusion
Les bénéfices cumulés des outils de développement contrebalancent largement le coût initial et leur support. Ils peuvent changer complètement la vie d’un projet, les développeurs pouvant se concentrer sur de la vraie valeur ajoutée : la qualité des livrables.
Nous n’avons traité ici que quatre langages, mais n’allez pas vous imaginer qu’ils sont les seuls à être outillés, C#, Ruby, Clojure, et les autres, recèlent aussi de nombreuses pépites, comme Cucumber ou Luminus par exemple. Cela sera peut-être le sujet d’un prochain chapitre.
Gardez à l’esprit que le meilleur outil est celui qui vous va et qui vous facilite la vie. A vous maintenant de vous forger votre boite à outil sur mesure, adaptée à vos contraintes. Testez, mesurez les gains, jugez, recommencez.
Commentaire
9 réponses pour " Les outils du développeur moderne "
Published by Olivier Guillet , Il y a 10 ans
Article à mettre entre toutes les mains :)
Petite précision : SourceTree (pour Git/Mercurial) est gratuit.
Published by Richard Mathis , Il y a 10 ans
Et j’ajouterais que la solution « Deployit » complète très bien les différents outils d’une « Software Factory » pour toutes les tâches de déploiement applicatif et de configuration sur les environnements de tests, recette, performance…tout en s’intégrant aux outils de build et d’intégration continue que sont Maven, Hudson/Jenkins, Bamboo…Pour plus d’informations sur l’intégration avec ces outils : http://www.xebialabs.com/platform_support.
Published by Joel Costigliola , Il y a 10 ans
Pour le coté assertions, il existe AssertJ un fork de Fest Assert qui propose plus d’assertions que Fest.
Détail ici : https://github.com/joel-costigliola/assertj-core#readme
Joel (cr��ateur d’AssertJ)
Published by oaz , Il y a 10 ans
Le paragraphe « Tester unitairement » me pique un peu les yeux.
Le TDD n’est pas une pratique de test mais de conception.
Published by nby625 , Il y a 10 ans
Super article.5/5
Published by Olivier , Il y a 10 ans
Arf. De nos jours ça me fait vraiment mal de ne pas voir Netbeans apparaître dans un article comme celui-ci.
J’ai l’impression qu’il est délaissé, alors que c’est un super IDE, gratuit.
Quand on parle d’intégration avec Git (ou Maven) il fait largement mieux qu’Eclipse puisse qu’il se contente d’exécuter des lignes de commandes plutôt qu’ajouter une surcouche.
Quand on parle de « Zero Turn Around », il est aujourd’hui le seul IDE capable de déployer en temps réel des projets HTML5 (tu codes dans l’IDE, et Chrome se met à jour en live, sans refresh ni rien du tout. C’est juste extraordinaire quand on fait du TDD par exemple !
Published by Guillaume Balaine , Il y a 10 ans
Salut Olivier,
Je repasse juste pour dire que pour le Live REPL ou ZTA en HTML5 on peut le faire facilement avec Livereload.
Ca se fait facilement avec grunt, matchdep et les grunt-contrib comme connect, compass, watch, concurrent.
Quand je fais du Rails j’utilise aussi Livereload pour rafraichir le navigateur après la recompilation de l’asset pipeline, c’est plus difficile pour la JVM par contre, sauf si vous faites du Clojure ou du Groovy, Scala et Java étant un peu trop lents à recompiler.
Comme IDE HTML5 il y a WebStorm, version un peu allegée de IntelliJ, Netbeans fait le boulot mais mon préféré reste Sublime Text (codé en python).
Published by Mise en production MVS , Il y a 10 ans
Bonjour!
Personnellement, moi je trouve aussi que Netbeans est le meilleur IDE que ce soit pour des projets en HTML5, java et bien d’autres encore.
Published by Cyril , Il y a 5 ans
Bonjour,
Ah bien vu pour AngularJS, effectivement il était prometteur il y a 5 ans, de nos jours c’est un succès!