maciek905 - Fotolia

Les avantages et les inconvénients de la génération automatique de code

Découvrez les tenants et les aboutissants, les avantages et les inconvénients, les choses à faire et à ne pas faire de la génération automatique de code.

Les capacités de génération automatique de code continuent d’évoluer au sein des langages de programmation, des IDE et des outils qui interviennent au moment de la compilation. Cette technique prolifère, car elle permet de réduire le nombre de tâches fastidieuses et les développeurs ont constaté qu’elle améliore les délais d’exécution et la précision.

Avantages et maux de tĂŞte

Les dĂ©lais d’exĂ©cution et la prĂ©cision sont les principaux avantages de la gĂ©nĂ©ration automatique de code. La personnalisation est moindre, mais ces instruments permettent aux dĂ©veloppeurs de crĂ©er du code plus rapidement, explique Éric McGee, ingĂ©nieur rĂ©seau senior chez TRG Datacenters. Comme les outils gèrent la gĂ©nĂ©ration de code Ă  partir des descriptions de projet, les programmeurs peuvent se concentrer sur la rĂ©duction des erreurs ou travailler sur d’autres tâches.

« Le code gĂ©nĂ©rĂ© automatiquement devient gĂ©nĂ©ralement un obstacle pour les dĂ©veloppeurs qui veulent le modifier ultĂ©rieurement. Â»
Éric McGeeIngénieur réseau senior chez TRG Datacenters

Ces outils peuvent toutefois provoquer des problèmes. « Le code gĂ©nĂ©rĂ© automatiquement devient gĂ©nĂ©ralement un obstacle pour les dĂ©veloppeurs qui veulent le modifier ultĂ©rieurement Â», avertit Éric McGee. Les Ă©quipes devraient prĂ©voir de limiter ces outils Ă  certaines parties du cycle de dĂ©veloppement, par exemple lorsqu’ils peuvent servir de facilitateurs dans des situations plus simples et moins complexes.

Différents types de génération de code

Avant que les entreprises n’introduisent la gĂ©nĂ©ration automatique de code, les chefs de projet doivent dĂ©finir explicitement ce qu’ils entendent par ce concept. Cela permettra d’amĂ©liorer les discussions entre les Ă©quipes, dĂ©clare Jonathan Bartlett, ingĂ©nieur principal en recherche et dĂ©veloppement chez Specialized Bicycle Components, un dĂ©taillant d’articles de sport dont le siège est Ă  Morgan Hill, en Californie.

Cette technologie signifie probablement l’une des trois choses suivantes pour une organisation :

  • Les rĂ©flexions. Les rĂ©flexions dans les langages dynamiques tels que Ruby peuvent gĂ©nĂ©rer automatiquement du code dans un programme en cours d’exĂ©cution. La prise en charge des rĂ©flexions s’apparente Ă  un processus de recherche et d’automatisation intelligent, qui inspecte le code et agit en consĂ©quence.
  • GĂ©nĂ©ration automatique de code. Les dĂ©veloppeurs peuvent utiliser les outils externes requis pour les langages Ă  typage statique – tel que Go â€“ pour gĂ©nĂ©rer automatiquement le code source.
  • IDEs. Visual Studio et les IDE similaires permettent aux dĂ©veloppeurs de construire une structure logique de manière dĂ©clarative par le biais du mĂ©talangage XML. Celle-ci peut ensuite ĂŞtre traduite en code.

L’apport d’un IDE se situe quelque part entre le support de la réflexion et la génération de code externe. Il est plus propre en raison d’une normalisation du code engendré et de l’environnement de développement entièrement géré. Toutefois, les avantages potentiels de cet angle sont plus limités.

Les cas d’usage

Les équipes doivent examiner les compromis entre les blocs de code réutilisables pour accomplir une tâche et la génération de code automatisée.

Les Ă©quipes doivent examiner les compromis entre les blocs de code rĂ©utilisables pour accomplir une tâche et la gĂ©nĂ©ration de code automatisĂ©e. Tout type de programmation rĂ©pĂ©titive peut ralentir la progression du dĂ©veloppement et introduire des erreurs. Les ingĂ©nieurs peuvent attĂ©nuer ces dĂ©fauts Ă  l’aide de fonctions ou par la gĂ©nĂ©ration de code. « Ces deux options sont en fait plus similaires que les gens ne le rĂ©alisent gĂ©nĂ©ralement Â», selon Jonathan Bartlett, car elles Ă©liminent toutes deux une intervention manuelle.

Cette technologie peut automatiser le dĂ©veloppement d’API dans un système pour qu’il corresponde Ă  un autre, explique Jonathan Bartlett. Par exemple, il est souvent plus simple d’utiliser un outil de gĂ©nĂ©ration de code pour Ă©crire un gestionnaire de code que de le faire Ă  la main, car l’outil analyse automatiquement la base de donnĂ©es.

Avec la gĂ©nĂ©ration automatique de code, il est Ă©galement plus facile de maintenir une API en phase avec la base de donnĂ©es, car l’outil peut identifier les erreurs au moment de la compilation â€“ plutĂ´t que dans le cadre d’une Ă©tape de test distincte. Cette automatisation simplifie aussi la migration du code lorsque les entreprises adoptent de nouvelles stacks.

« Notre Ă©quipe de R&D doit rĂ©implĂ©menter le portail utilisateur Bonita tous les deux ans environ pour rester Ă  jour avec les technologies web et continuer Ă  offrir Ă  nos utilisateurs finaux la meilleure expĂ©rience possible Â», explique Nicolas Chabanoles, directeur technique de Bonitasoft, un Ă©diteur d’un logiciel BPM open source.

Il y a quelques années, l’entreprise est passée au développement guidé par le template et à la génération automatique de code pour le portail. En conséquence, Bonitasoft gagne plusieurs mois de développement à chaque fois qu’elle met à jour ce composant.

« Il suffit de changer le gĂ©nĂ©rateur de code, tandis que les informations essentielles sont conservĂ©es dans le modèle Â», prĂ©cise Nicolas Chabanoles.

Les workflows les plus communs en entreprise

Steve Speicher, directeur principal de la gestion des produits chez Red Hat, voit couramment trois types de flux de travail de gĂ©nĂ©ration de code, utilisĂ©s par les dĂ©veloppeurs d’entreprise :

  • la crĂ©ation de templates ;
  • l’identification et la mise Ă  jour des dĂ©pendances ;
  • la gĂ©nĂ©ration d’artefacts de programme.

Au début de nombreux projets, les développeurs peuvent naviguer dans une bibliothèque de modèles ou de schémas, sélectionner ce qui est approprié, remplir quelques champs, et les outils créent automatiquement un modèle d’application (ou template). Si cet exemple est souvent associé aux nouvelles applications, les équipes peuvent également l’utiliser lorsqu’elles souhaitent ajouter des contrôles de santé, une tâche de supervision ou d’autres fonctionnalités. Les plus grands défis consistent à réduire les templates au strict nécessaire pour l’équipe et à les organiser de manière efficace.

Les outils de scans des dépendances automatisent l’identification des dépendances présentant des vulnérabilités connues, ce qui permet de réagir plus facilement lorsqu’une équipe découvre de nouveaux risques de sécurité. Dans ce cas, la génération de code automatise le processus de fourniture d’une solution rapide pour les applications rattachées à la dépendance.

Le code de l’application doit être synchronisé avec les divers artefacts de support, tels que la documentation de l’API, le SDK et les tests. Les outils sujets de cet article peuvent aider à automatiser ce processus afin de garantir que les changements sont propagés dans les artefacts lorsque le code mis à jour est placé en production. Par exemple, les outils de documentation logicielle tels que Doxygen, GhostDoc, Javadoc et Docurium peuvent créer une documentation de base à partir d’un code source annoté.

Étendre la puissance du code

De nombreuses équipes se tournent vers des outils de compilation pour générer automatiquement du code en complément d’un code source écrit par les développeurs. Par exemple, Google dispose de buffers de protocole pour sérialiser des données structurées avec divers langages et plateformes.

« Chez Google, nous utilisons des buffers de protocole pour presque tout, des schĂ©mas de base de donnĂ©es aux points de terminaison des services API Â», explique Elvis Sun, un ingĂ©nieur de Google qui est Ă©galement directeur technique et cofondateur d’Antaa, une application de liste de souhaits. Son Ă©quipe chez Antaa utilise un outil de valeur construite pour gĂ©nĂ©rer les classes de construction nĂ©cessaires Ă  leur style de programmation prĂ©fĂ©rĂ©.

Selon Elvis Sun, il est important de faire la distinction entre la gĂ©nĂ©ration de code dans l’IDE et la gĂ©nĂ©ration au moment de la compilation Ă  l’aide d’outils tels que les buffers de protocole. Il a constatĂ© qu’une Ă©quipe doit toujours rĂ©viser, tester et maintenir le code gĂ©nĂ©rĂ© par l’IDE. Il recommande d’utiliser la gĂ©nĂ©ration de code dans l’IDE pour les tâches de moindre importance, car il est prĂ©fĂ©rable de gĂ©nĂ©rer du code au moment de la compilation, Ă  chaque exĂ©cution.

En conséquence, le code s’appuie sur des bibliothèques bien testées qui sont automatiquement mises à jour. Cela réduit le travail manuel lorsque des modifications sont nécessaires.

Les défis de l’automatisation

Bien que la génération automatisée de code supprime un grand nombre de tâches fastidieuses des mains des développeurs, il ne faut pas imaginer que tous les problèmes disparaissent d’un claquement de doigts.

Les Ă©quipes doivent ĂŞtre conscientes qu’un pipeline d’intĂ©gration continue (CI) gĂ©nère du code de la mĂŞme manière Ă  chaque fois. Selon Elvis Sun, des problèmes peuvent survenir lorsque les membres de l’équipe disposent de moutures locales des bibliothèques de gĂ©nĂ©ration de code, ce qui entraĂ®ne la production de diffĂ©rentes versions d’un seul point de dĂ©part.

Pour résoudre ce problème, il faut normaliser les versions communes des logiciels de codage automatique et déployer un pipeline qui fait appel à des briques de formatage de code standardisées, à des linters et à de nombreux tests pour fournir une source unique de vérité.

« Des changements mineurs peuvent avoir des consĂ©quences considĂ©rables. Â»
Jonathan BartlettIngénieur principal en recherche et développement, Specialized Bicycle Components

Si la gĂ©nĂ©ration automatique de code peut rendre la programmation plus rapide, il est souvent plus difficile de voir les ramifications potentielles, prĂ©vient Johnatan Bartlett. Les points de rupture des applications peuvent se dĂ©placer de façon spectaculaire. « Ainsi, des changements mineurs peuvent avoir des consĂ©quences considĂ©rables Â», dĂ©clare-t-il. Cela signifie Ă©galement qu’une Ă©quipe devra maintenir, tester et documenter les outils de mĂ©taprogrammation â€“ ce qui implique des outils de programmation dynamique qui gĂ©nèrent le code rĂ©el â€“ y compris les outils de gĂ©nĂ©ration de code au moment de la compilation et les IDE.

L’évolution continue des projets logiciels peut ĂŞtre problĂ©matique dans les outils tels que Visual Studio, qui rendent difficile l’identification du code gĂ©nĂ©rĂ©. Johnatan Barlett trouve utile d’utiliser un schĂ©ma de dĂ©nomination afin que le code gĂ©nĂ©rĂ© automatiquement soit facilement reconnaissable, mĂŞme dans une liste de fichiers. Cependant, il y a parfois des croisements. Le code gĂ©nĂ©rĂ© doit parfois ĂŞtre modifiĂ© manuellement, auquel cas il change de statut et implique une supervision active.

Pour approfondir sur Outils de développement