Les outils efficaces du développeur moderne

Merci pour le partage...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0

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é 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éveloppement 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 ouvriers ont toujours de mauvais outils”. Mais qu’est-ce qu’un 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 Framework que vous pouvez être amenés à choisir.

Tout programme pouvant aidé 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 commit 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 telqs 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 API 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 vrais 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 cote 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 Framework utilisés, moteur de Template ;
  • 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és 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 Framework 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 Framework 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. Celui qui semble le plus prometteur est AngularJS. Le but 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 contrôleurs), et surtout une méthodologie de tests unitaires, basée sur Testacular.

> Tester …

… unitairement

Tester le code produit est fondamental. Les outils de tests dépendent en général de la technologie utilisée, mais ils ont en commun qu’ils doivent être lisibles, et implémentés en continu (idéalement en Test Driven Development). Pour ce faire, il existe des librairies dans différents langages :

  • Java : FestAssert, Mockito ;
  • Groovy : Spock, Geb ;
  • Scala : ScalaTest, Specs2 ;
  • Javascript : Testacular, Qunit.

… en intégration

Les tests unitaires permettent de tester la logique du code, mais qu’en est-il des tests de leurs interactions ? Interviennent ici les tests d’intégration ou encore tests 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

 

Les tests classiques permettent de tester la non-régression d’une fonctionnalité, mais qu’en est-il de sa performance ? Il convient d’utiliser des outils capables de littéralement mitrailler une application sur une rampe et de créer des rapports de performance à partir de ces exécutions.

  • Gatling permet d’exécuter des scénarios avec une API fonctionnelle en Scala de manière performante et programmatique (Gatling peut donc aussi servir en intégration).
  • JMeter est un outil graphique permettant d’enregistrer des scénarios dans des scripts, l’avantage est qu’il peut adresser un bon nombre de protocoles et se connecter à la JVM.

> Livrer

Pour s’assurer en permanence que l’application est livrable, il faut automatiser le build, le passage des tests automatisés et le packaging. Le terme générique est intégration continue ou CI. Les serveurs de CI sont nombreux, le plus populaire étant de loin Jenkins avec de versions en ligne comme Travis et Cloudbees.

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 ASG (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

 

Ca y est, votre application est codée, testée, livrée, mais il y a des soucis en production. Pour vous aider à poser un diagnostic, la boîte à 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 : pour déterminer quels programmes sont lancés et utilisent une ressource dans le système ;
  • ssh, scp : pour 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 cela, 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 l’inconvénient de les maintenir et de rester à jour. Ils peuvent changer complètement la vie d’un projet. L’investissement initial pour atteindre une bonne maîtrise est très vite compensé par les avantages retirés.

Finalement, ces bénéfices permettent de se concentrer sur ce qui est véritablement important : la qualité des livrables qui sont l’aboutissement du travail du développeur. 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. Ce 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 boîte à outils sur mesure, adaptée à vos contraintes. Testez, mesurez les gains, jugez, recommencez.

 

Source : www.programmez.com

 

Christian Kas

Spécialiste de la réussite et du bien-être.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *