Une usine logicielle pour mes applications Web J2EE

Développeur Java depuis quelques années, je développe des applications J2EE basées sur le serveur d’application Tomcat. Au fur et à mesure que mes projets grossissent (qui a dit usine à gaz? ;-)), je suis de plus en plus souvent confronté aux mêmes tâches répétitives de livraison de mes archives WAR et je passe de plus en plus de temps à réaliser différents tests de non-régression de chacune  de mes versions.  Depuis quelques temps, je cherche donc à rationaliser et simplifier le développement et le déploiement de mes applications Web Java en automatisant les différents étapes nécessaires à la mise en production.

La problématique

La plupart de mes applications J2EE sont développées avec le Framework Spring depuis l’IDE Eclipse et repose sur des interfaces web dynamique développés à l’aide de javascript et des interactions Ajax.

Voici quelques-uns des problèmes récurrent à ce type de projet:

  • Automatisation des tests unitaires sur un serveur d’intégration continue. Jusqu’à maintenant, j’utilise l’outil Jenkins (Anciennement Hudson) et quelques tâches Ant mais il n’existe pas de solution clé en main pour effectuer ces tests de manière automatique.
  • Initialisation automatique d’une base de test pour avoir un jeu de données cohérent. Il existe déjà des outils (DBUnit) mais là encore, pas de solution établie dans Jenkins pour initialiser cette base automatiquement avant les tests (avec Ant du moins)
  • Modularisation d’une application pour limiter les éventuels effets de bord
  • Tester l’interface web et le code javascript sur les différents navigateurs
  • Couverture de code pour aider et orienter l’écriture des tests unitaires
  • Gestion des configurations pour les différents environnements cible (Test, Pré-production, Production, etc)
  • Déploiement automatique d’une application sur ces différents environnement. A l’aide de tâches Ant, je génère actuellement  les différents WAR correspondant chacun à un environnement cible

Ces différents points sont en fait des problématiques récurrents pour les équipes de développeurs qui souhaitent mettre en place une usine logicielle (Software Factory). Un software Factory est l’ensemble des outils et technologies mise en place pour standardiser et automatiser les différentes phases récurrentes dans le développement, le déploiement, la maintenance et l’évolution d’une solution applicative.

Aujourd’hui, je suis décidé à trouver une solution à cette problématique et à vous faire partager mes différentes découvertes utiles pour y parvenir. J’inaugure donc une série d’articles sur ce thème alors n’hésitez pas à m’envoyer vos pistes de réflexion à ce sujet.

Suite à un commentaire, voici un retour de 3 ans sur la mise en place de notre Software Factory