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.
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, FindBugs, Cobertura, Jacoco, etc.
- Analyse de code Javascript : JSLint, PMD (5.0), jsTestCoverage, Closure Compiler,
- Collecte des métriques : Sonar
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 CloudBees, Atlassian ou vers Clinker qui propose des usines logicielles prêtes
à télécharger sous forme de machines virtuelles.