Devoxx 2013 FR : Industrialisation Java(script)

Les sessions Devoxx 2013 animées par Guillaume Rams sur l'usine logicielle et par Julien Jakubowski et Romain Linsolas au sujet de Javascript sont l'occasion de s'attarder un peu sur les différents outils qui constituent les usines ou "forges logicielles" Java et Javascript du moment.

Dans cette chronique, je reprends et complète les propos de Guillaume Rams qui, en décrivant les différentes phases de la production de logiciel, nous a proposé une cartographie des différents outils qui permettent l’industrialiser.

Une forge logicielle, de quoi s'agit-il ?

Pour faire simple disons que c’est un ensemble d’outils qui vous assisteront dans la production du produit fini qu’est votre logiciel. Cela va de la prise en charge des demandes, jusqu’à la livraison du produit final et de son exploitation en passant par les tests.
On peut évidement se passer de tout ça, mais le but recherché est d’automatiser au maximum les étapes manuelles qui, 
souvent, sont longues, répétitives et sources d’erreur. Les gains attendus s’expriment en termes de rapidité, reproductibilité et stabilité, on peut dès lors se focaliser sur d’autre aspects comme l’amélioration de la qualité ou l’accompagnement du client.

Tendances du moment en termes d'outils Java/Javascript

Collecte des besoins et documentation

Il s’agit de pouvoir récolter, trier, prioriser les demandes utilisateur, d’établir les spécifications, de fournir à l’équipe de développement les éléments clés pour commencer à travailler sur projet, etc.

  • Gestion des demandes : JIRA, Redmine, trac
  • Documentation : Alfresco, outils Wiki divers

Référentiels

Les référentiels sont les entrepôts de votre usine logicielle. Ils permettent de stocker la matière première de sont le code source, les librairies tierces et la documentation ainsi que le produit fini. 

  • Référentiels de sources : SVN, GIT, Mercurial et autres DCVS
  • Référentiels d’artefacts : Artifactory, Nexus

Chaque ressource stockée sera versionnée et historisée afin de permettre des retours en arrière, des comparaisons, etc.

Conception

Le développeur doit disposer d’outils performants lui permettant de concevoir un logiciel parfois complexe en élaborant les plans du produit à produire : c'est le code source. 

  • IDEs Java populaires : Eclipse, IntellijIDEA
  • IDE Javascript :  IntellijIDEA

Ces outils doivent être adoptés par toute l’équipe et devraient si possible pouvoir fonctionner en mode déconnecté.

Construction

Une fois les plans élaborés il faut construire et assembler les différents composants pour obtenir le produit attendu. Il s’agit par exemple de compiler le jar/war, d’assembler les scripts de migration de base de donnée dans une archive zip, etc.

  • Outils de compilation : Maven, Ant+Ivy, Gradle

Qualimétrie

Au fil de la conception, le logiciel doit être validé et sa qualité mesurée. Il existe une pléthore de plugins d’analyse de code dont l’objectif est de fournir à l’équipe de développement un feedback rapide sur la qualité du logiciel produit.

  • Analyse de code Java : CPD, PMD, CheckStyle, FindBugsCobertura, Jacoco, etc.
  • Analyse de code Javascript : JSLintPMD (5.0), jsTestCoverage, Closure Compiler,
  • Collecte des métriques : Sonar
Sonar devient une référence dans le domaine du fait de sa capacité à agréger et historiser les résultats de différents plugins. Pour en faire bon usage il est indispensable de choisir les les règles de qualité appropriées à votre équipe et à votre projet.

Assemblage

L’assemblage final du travail effectué par l’équipe de développement est délégué à la plate-forme d’Intégration Continue qui se charge aussi de de produire les rapport de tests et de mesure de la qualité du logiciel.

  • Outils les plus populaires : Jenkins, Hudson, TeamCity, Bamboo 

Déploiement et installation 

Une fois le produit assemblé il faut le stocker puis le livrer. Le stockage se fait sur le référentiel d’artefacts puis le produit est installé et validé sur les plateformes de test, de pré-production et de production.

  • Outils de déploiement : Puppet, Chef, CFEngine

Pour conclure

Il existe donc de nombreux outils permettant d'obtenir une chaîne de construction logicielle complète. Cependant, sa mise en oeuvre n'est pas forcément aisée.
Une des difficultés réside dans l'intégration des outils entre eux. Alors que l’écosystème Java est relativement mature sur le sujet, l’univers javascript est beaucoup plus jeune et mouvant. L’intégration d'outils y est donc à ce jour plutôt ardue et pas forcément pérenne. Il existe tout de même des initiatives prometteuses telles que Yeoman.
Certains regretterons de ne pas disposer d’une boite à tout faire façon Visual Studio et ce, d’autant plus que la mise en place d’une telle usine logicielle requière des compétences aussi bien en développement qu’en administration système.
Si vous ne pouvez pas vous appuyer sur une équipe genre DevOps pour la mise en place de votre usine regardez du côté des solutions Cloud de CloudBeesAtlassian ou vers Clinker qui propose des usines logicielles prêtes à télécharger sous forme de 
machines virtuelles.