Automatiser avec son IDE

28.07.2021
Afin d'éviter la réalisation de tâches répétitives pour son équipe, Alban, développeur au sein de notre agence de Bordeaux, a trouvé la solution d'automatisation adaptée. De sa création aux bénéfices apportés au projet, il nous explique :
Dev

Contexte projet

Lors de notre mission auprès de notre client, de nombreuses tâches répétitives m'ont amené à rechercher une solution afin de gagner du temps et pouvoir me consacrer à d'autres actions plus importantes. J'ai donc pris l'initiative de développer un outil de migration pour automatiser ces parties.

Une mission de dette technique nous a été confiée. Notre action consiste à migrer un grand nombre de projets de Java 4 vers Java 11, de mettre à niveau les dépendances afin de bénéficier des dernières technologies et de combler d'éventuelles failles de sécurité.


Pour chacun des projets, nous créons un nouveau projet cible, vide, configuré et structuré avec les paramètres cibles. Puis nous migrons petit à petit en découpant « en morceaux » le code afin de tester facilement la non-régression.


Pour cela, chaque développeur est assigné à une fonctionnalité et doit y effectuer une série de tâches telles que :

  • Copier la classe Java vers le projet cible
  • Trouver les dépendances qui vont avec la classe et les migrer ensemble
  • Faire évoluer les parties de codes obsolètes
  • Nettoyer le code (format, commentaire, refactoriser)
  • Migrer les tests de la classe et vérifier qu'ils passent toujours


Seulement, réaliser ces taches devient rapidement répétitif et peu gratifiant…

Une solution : l'automatisation

En automatisant la plupart de ces tâches, les avantages sont nombreux :

  • Gain de temps pour l'équipe projet et pour l'entreprise
  • Diminution de la possibilité d'erreur humaine
  • Concentration des développeurs sur des tâches plus valorisantes pour eux

Dans un premier temps, je me suis penché sur la faisabilité de cette automatisation. J'ai commencé par utiliser une librairie Java comme JavaParser, permettant de gérer du code Java plus facilement. Elle reste toutefois limitée puisque nous ne pouvons pas gérer les imports et les dépendances avec celle-ci, ni se déplacer dans le code à partir d'une référence à une autre classe.


J'ai finalement préféré me tourner vers l'IntelliJ Platform SDK¸ qui permet de développer des plugins pour IntelliJ, l'IDE utilisé au sein de notre équipe, afin de créer un outil d'automatisation sous la forme d'un plugin. En créant un plugin avec IntelliJ, nous bénéficions de « l'intelligence » de l'IDE, car la majorité des fonctions intéressantes pour l'automatisation y sont déjà intégrées.


IDE : Integrated Development Environment est un environnement de développement regroupant un éditeur, un compilateur, un débuggeur ainsi que d'autres outils aidant le développeur dans la programmation.

Dans notre cas, ces fonctionnalités principales sont :

  • Reconnaître et manipuler la structure du code (Java principalement, mais ce n'est pas uniquement limité à cela)
  • Copier des classes d'un module à un autre
  • Gérer des imports
  • Reconnaître des dépendances
  • Trouver les utilisations d'une méthode ou d'une classe dans le projet

Les autres avantages d'utiliser un IDE :

  • Facile à utiliser (1 clic depuis l'interface de l'IDE)
  • Facile à installer (depuis la gestion des plugins IntelliJ)
  • Code Style de l'utilisateur automatiquement pris en charge
  • Paramétrage simplifié (depuis les paramètres d'IntelliJ)

Pour lancer l'automatisation, il suffit de faire un clic droit sur la classe à migrer et de choisir son profil de migration.

Exemple concret

La gestion des FQN (Fully Qualified Name) et des imports.

FQN : Fully Qualified Name est une façon de qualifier/référencer une classe ou interface
Ex : fr.neosoft.exemple.ClasseExemple


Imaginons que nous voulons migrer une classe qui se trouve dans le package old.fr.neosoft.action, mais que sa destination se trouve dans un autre package : destination.fr.neosoft.exemple.controller

Profile


Conversion du package

                 old.fr.neosoft.action --> destination.fr.neosoft.exemple.controller

Changement du suffixe du fichier

                  Action --> Controller


Nous avons créé un système de profile pour savoir.

Démonstration d'une partie de la migration

Étape 1

La qualification des références simplifie la manipulation des dépendances pour la suite des étapes, en utilisant la méthode d'IntelliJ JavaCodeStyleManager#qualifyClassReferences

Étape 2


La seconde étape consiste à copier la classe à sa destination. IntelliJ change automatiquement le nom du package comme vous pouvez le voir ci-dessous.

Nous réalisons la modification des qualifications des références de ExempleBean et nous en profitons pour modifier le nom de la classe.

Étape 3

Si nous souhaitons altérer la classe, nous le réalisons ici. Par exemple, nous décidons d'ajouter un Logger.

Étape 4

Enfin, ici nous réutilisons la classe JavaCodeStyleManager. Cette fois nous utilisons la méthode shortenClassReferences pour changer les qualifications en imports.

Réduction du temps de développement

Dans le cadre de notre mission, développer avec l'IntelliJ Plateform SDK nous a permis de gagner du temps. Grâce aux fonctionnalités proposées dans ce SDK, nous avons pu réduire par 2 ou 3 le temps de développement.


En utilisant le plugin d'automatisation de la migration, nous gagnons environ 1 heure par tâche. Nous avons pu calculer un gain total d'environ 30 jours/homme sur nos projets. Ce montant économisé nous permet de nous concentrer sur la qualité de code ainsi que de gagner en flexibilité en prévision d'un possible retard sur d'autres parties du projet.


Pour le développeur, cela signifie également :

  • Une diminution des tâches répétitives ayant peu de valeur ajoutée
  • Une diminution du nombre d'erreurs
  • Une augmentation du niveau d'exigence sur ses autres actions et une meilleure qualité de développement

En prenant le réflexe d'automatiser, nous sommes aujourd'hui plus compétitifs et développons une culture d'optimisation de notre travail au sein de l'équipe. Ces expériences nous permettent d'avancer ensemble vers plus d'efficience et la recherche de solution pour améliorer la réalisation de notre projet.

Pour aller plus loin...

Si suite à cette lecture, vous vous laissez tenter par l'automatisation avec votre IDE, voici quelques liens qui vous aideront dans votre travail : 

  • Documentation pour réaliser son plugin sur un IDE Jetbrains (IntelliJ, Android Studio, PyCharm WebStorm, PhpStorm…)

Les plateformes autres que Jetbrains proposent aussi le développement de plugins :


Alban, 
Ingénieur développeur au sein de l'agence de Bordeaux

ENVIE D'APPORTER VOTRE EXPERTISE AUPRÈS DE NOS CLIENTS ?
Découvrez nos offres
117
Offres à pourvoir
nous rejoindre