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.
É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. 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é.
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.