/ 18.11.2024
Sommaire
Qu’est-ce qu’un indicateur de fonction ?
Les “feature toggles”, également connus sous le nom de “feature flags”, sont une technique qui permet aux développeurs d’activer ou de désactiver certaines fonctionnalités dans les applications sans avoir à implémenter un nouveau code. Cela peut être illustré par un exemple : lorsque vous allumez une lumière dans votre maison, vous n’avez pas besoin de modifier le câblage chaque fois, il vous suffit d’utiliser l’interrupteur, et vous avez terminé. Il en va de même pour les drapeaux de fonctionnalité : ils vous permettent de lancer une nouvelle fonctionnalité dans votre logiciel ou votre plateforme sans interruption de service, et ce, à tout moment, y compris pendant les heures de bureau. Cela signifie qu’une telle bascule vous permet de choisir un chemin dans votre code de manière dynamique, que ce soit au moment de la construction ou de l’exécution du produit ou dans l’environnement d’exécution. C’est l’utilisation du “i ” dans le code, qui permet de changer le comportement du code, sans le réécrire et sans tout traiter dans le pipeline de déploiement. En même temps, cette technique vous permet d’intégrer votre code beaucoup plus fréquemment parce qu’elle ne vous oblige pas à rester bloqué sur votre branche de fonctionnalité pendant des semaines et à attendre que la fonctionnalité soit terminée avant de l’intégrer au reste de votre code. Vous pouvez fusionner une fonctionnalité inachevée avec le reste du code, la déposer dans la “MAIN” – branche principale du contrôle de version -, et mettre ce code inachevé en production (bien sûr, pour ne pas gâcher cette production?).Avantages des drapeaux de caractéristiques
Les “feature flags” permettent aux équipes de contrôler les versions des fonctionnalités, d’effectuer des tests A/B, de gérer la dette technique et d’assurer un déploiement plus fluide. Voici les principaux avantages des “feature flags” dans le code : 1. Risque de mise en œuvre réduit Les drapeaux de fonction donnent un sentiment de sécurité psychologique, car nous savons que nous pouvons désactiver ce drapeau à tout moment et que cette fonctionnalité ne sera pas vue. Nous avons le courage d’intégrer ce code beaucoup plus souvent ainsi que de mettre en œuvre et d’expérimenter progressivement différentes versions de la fonction. 2. Livraison plus rapide des logiciels Les bascules permettent de tester de nouvelles fonctionnalités dans un environnement de production sans les mettre à la disposition de tous les utilisateurs, quelle que soit la base de code principale. 3. Obtenir un retour d’information plus rapidement Grâce aux drapeaux de fonctionnalités, il est possible de recueillir les commentaires internes des utilisateurs de mon entreprise et d’apporter des modifications aux fonctionnalités inachevées. 4. Amélioration du processus de développement Les indicateurs de fonctionnalités permettent de segmenter les utilisateurs en fonction de différents attributs, de créer et de comparer différentes variantes de fonctionnalités et de mesurer leurs performances, ce qui contribue à optimiser l’expérience de l’utilisateur et les objectifs de l’entreprise. 5. Contrôle et suivi Les drapeaux déterminent qui peut accéder aux fonctionnalités et recueillent des commentaires et des données avant de les mettre à la disposition de tous. Ils peuvent également être utilisés pour mettre progressivement des fonctionnalités à la disposition d’un sous-ensemble d’utilisateurs et surveiller leurs performances et leur impact. 6. Changements de comportement plus rapides sans modification du code source Les bascules de fonctionnalités vous permettent de modifier le comportement du système à tout moment. Elles peuvent ne nécessiter qu’un redéploiement, et même cette étape peut être sautée si, par exemple, vous utilisez Spring Cloud Config, qui vous permettra de modifier la configuration de l’application sans affecter négativement sa disponibilité.Types de drapeaux et leur utilité
Selon Martin Fowler, les “feature flags” peuvent être classés comme suit :- Les boutons de validation — Ils vous permettent de déployer du code qui n’a pas encore été achevé et de masquer les fonctionnalités incomplètes aux utilisateurs.
- Bascules d’expérience — Ce type de bascule est utilisé dans les tests A/B. Le plus souvent, ce type d’indicateur reste en place aussi longtemps qu’il est nécessaire de tirer des conclusions à partir des résultats de l’expérience.
- Toggles Ops – Principalement utilisés pour contrôler les aspects opérationnels du système par les personnes qui gèrent l’application. Ils peuvent être utilisés pour désactiver des bascules spécifiques qui ne sont pas nécessaires au bon fonctionnement de l’application, par exemple en cas de forte charge du serveur.
- Bascules de permission — Ce type de bascule permet de gérer les fonctionnalités disponibles pour différents groupes d’utilisateurs. Ils sont souvent utilisés pour gérer les fonctionnalités “premium” et “early access”.
Moyens de mettre en œuvre les drapeaux de caractéristiques
En Java, il existe différentes approches pour mettre en œuvre la commutation de fonctions, y compris les commutateurs qui existent dans un fichier de configuration basé sur une base de données ou l’utilisation de services externes pour les gérer. Parfois, il existe une application d’interface utilisateur supplémentaire avec une liste de fonctions et un “interrupteur” à côté d’elles. Si l’interrupteur est en position “on”, la fonction sera disponible dans l’application cible. Nous allons maintenant examiner les avantages et les inconvénients de ces approches et déterminer quand les utiliser.Drapeaux basés sur la configuration :
Cette approche définit les bascules de fonctions dans des fichiers de configuration, tels que les propriétés, YAML ou JSON. L’application lit ces fichiers de configuration au moment de l’exécution et active ou désactive les fonctions selon des valeurs des commutateurs. Avantages :- Les commutateurs qui existent dans le fichier de configuration sont faciles à mettre en œuvre et à comprendre.
- Vous pouvez changer les drapeaux sans modifier le code ou implémenter l’application de nouveau.
- Les fichiers de configuration peuvent être gérés à l’aide de systèmes de contrôle des versions, ce qui permet d’en assurer le suivi et l’audit.
- Prise en compte limitée du contexte : Les commutateurs basés sur la configuration ne prennent généralement pas en charge l’activation dynamique des fonctions selon des rôles et des autorisations des utilisateurs ou d’autres facteurs contextuels.
- Au fur et à mesure que le nombre de fonctions et de commutateurs augmente, la gestion des fichiers de configuration peut devenir un véritable défi.
Indicateurs de caractéristiques basés sur une base de données
Dans cette approche, les bascules de fonctionnalités sont stockées et gérées dans une base de données ou dans un système centralisé de gestion de la configuration. L’application interroge la base de données ou lit la configuration au moment de l’exécution pour déterminer quelles fonctionnalités doivent être activées ou désactivées. Avantages :- Vous pouvez modifier les bascules au moment de l’exécution sans redémarrer l’application ni modifier le code.
- Prise en compte du contexte : Les bascules peuvent être associées aux rôles des utilisateurs, aux autorisations ou à d’autres informations contextuelles stockées dans la base de données.
- Évolutivité : le stockage centralisé permet de gérer les drapeaux des fonctionnalités dans plusieurs instances ou environnements.
- La mise en œuvre des indicateurs de fonctionnalité nécessite une infrastructure supplémentaire, telle qu’une base de données ou un système de gestion de la configuration.
- Les interrogations fréquentes de la base de données peuvent dégrader les performances, en particulier lors de l’évaluation des bascules pour chaque demande de l’utilisateur.
Outils externes pour la gestion des indicateurs de caractéristiques
Plusieurs solutions sont disponibles pour gérer les drapeaux de fonctionnalités. Il existe plusieurs bibliothèques SDK disponibles en Java qui peuvent être utilisées pour mettre en œuvre des bascules de fonctionnalités. Ces bibliothèques offrent différentes fonctionnalités, options d’intégration et capacités de gestion. Lorsque vous choisissez une bibliothèque SDK pour votre projet Java, tenez compte de facteurs tels que compatibilité du cadre, exigences en matière de gestion des fonctions, facilité d’utilisation et,, soutien communautaire pour choisir celui qui répond le mieux à vos besoins. Parmi les outils les plus répandus, on peut citer Togglz Avantages :- Léger et facile à utiliser.
- Il s’intègre bien aux cadres Java EE et Spring.
- Fournit différentes stratégies pour activer les bascules de fonction.
- Prise en charge des options de configuration personnalisées
- Il bénéficie d’un soutien actif de la communauté et de mises à jour régulières.
- Par rapport à d’autres bibliothèques, elle ne dispose que de capacités limitées de gestion des fonctionnalités avancées.
- Prise en charge limitée de la gestion et de la configuration à distance des indicateurs de fonctionnalités.
- Fonctions avancées de gestion des fonctionnalités, y compris la commutation basée sur les autorisations.
- Intégration transparente avec des cadres Java tels que Spring, CDI et JAX-RS.
- Fournit une console web pour gérer les drapeaux des fonctionnalités.
- Il offre différentes règles d’activation et de désactivation pour les fonctions de commutation.
- Logiciel libre avec une communauté active et des mises à jour régulières.
- Documentation assez compliquée
- Les options de configuration ne sont pas très flexibles par rapport à d’autres bibliothèques.
- Les fonctions avancées basculent.
- Plusieurs stratégies d’activation et options de ciblage.
- Serveur et tableau de bord centralisés de gestion des fonctionnalités.
- Prise en charge des mises à jour de la configuration en temps réel.
- Bonnes options d’intégration et prise en charge du SDK pour Java.
- Il nécessite une infrastructure ou un service externe pour exploiter pleinement ses capacités.
- Plateforme complète de gestion des fonctions avec de puissantes fonctions de commutation.
- Il prend en charge le ciblage basé sur l’utilisateur, les tests A/B et les règles d’activation personnalisées.
- Il dispose d’une interface web pour gérer les drapeaux et les configurations des fonctionnalités.
- Intégration transparente avec divers cadres et services de développement.
- Il fournit une documentation et des ressources étendues.
- Un abonnement est nécessaire pour accéder aux fonctions avancées et à l’ensemble des fonctionnalités.
- Le prix peut être important pour les petits projets ou les startups.
- Dépendance à l’égard d’un service tiers pour la gestion des bascules.
- Centraliser les emplacements pour gérer les propriétés de configuration, y compris les commutateurs de fonctionnalités. Cela facilite la mise à jour et la maintenance des indicateurs de fonctionnalités dans plusieurs services ou instances.
- Mises à jour dynamiques – Elles permettent de modifier en temps réel les valeurs des indicateurs de fonctionnalités sans redémarrer ou redéployer l’application. Cette flexibilité permet d’expérimenter et de déployer rapidement de nouvelles fonctionnalités.
- Contrôle des versions – Dans le SCC, les modifications peuvent être suivies et les versions précédentes peuvent être restaurées, si nécessaire, ce qui permet de mieux contrôler l’historique de la configuration.
- Sécurité – Spring Cloud Config propose des options pour sécuriser les propriétés de basculement des fonctionnalités par le biais de mécanismes de cryptage et de contrôle d’accès. Cela garantit une protection contre les accès non autorisés.
- Dépendance vis-à-vis du réseau : Si le serveur de configuration n’est pas disponible, l’application peut être incapable de télécharger les bascules de fonctionnalités mises à jour, ce qui peut affecter le comportement du système.
- Complexité accrue : L’intégration de Spring Cloud Config pour les drapeaux de fonctionnalités ajoute une couche de complexité à l’architecture du système. Elle nécessite de gérer le serveur de configuration, de gérer la communication entre le serveur et l’application et d’assurer la cohérence entre les services.
Pourquoi séparer le déploiement de la mise en circulation ?
L’option conditionnelle “if” permet de séparer le déploiement de la diffusion, car derrière ce “if” se trouvent des informations sur les personnes qui verront réellement la fonctionnalité et celles à qui nous la cacherons.Pourquoi est-il important de comprendre la différence entre le déploiement et la mise en production d’un projet ?
Les deux concepts ci-dessus diffèrent. Le déploiement ou la mise en œuvre est un évènement technique au cours duquel nous apportons des modifications au logiciel et transférons le code dans l’environnement de production. La version est excitante lorsque ces nouvelles fonctionnalités sont mises à la disposition des utilisateurs finaux. Ici, les indicateurs de fonctionnalité nous permettent de contrôler la diffusion de cette nouvelle fonctionnalité sur la plateforme de déploiement ; en d’autres termes, nous choisissons qui peut voir les nouvelles versions du logiciel.En résumé, les commutateurs de fonctionnalités séparent les deux fonctions, nous pouvons déployer de nouveaux logiciels tous les jours, mais nous pouvons maintenant décider à qui et quand nous montrons les nouvelles versions.
Pourquoi les indicateurs de fonctionnalités sont-ils importants dans un mécanisme de livraison et de déploiement continus ?
Le marquage des fonctionnalités permet un processus CI/CD efficace, permettant aux développeurs de fusionner fréquemment leur travail dans un référentiel partagé sans s’inquiéter de casser quoi que ce soit ou de faire en sorte que les utilisateurs finaux accèdent à des fonctionnalités inachevées. Les drapeaux vous permettent de contrôler le comportement de l’application ou de la plateforme, ce qui signifie que tout le code est toujours déployé, mais que certaines branches du code peuvent être testées pour les nouvelles fonctionnalités du comportement modifié, ou que vous pouvez les désactiver jusqu’à ce que le drapeau soit activé. À son tour, chaque fois que vous activez une bascule, ce code est disponible pour les utilisateurs.Tester le code équipé de drapeaux de fonctionnalité
Cela dépend de votre stratégie de test, qu’il s’agisse de tests unitaires, de tests manuels, etc. Il est important de ne pas tester toutes les combinaisons possibles de drapeaux de fonction, mais d’exécuter des tests lorsqu’il y a une probabilité que quelque chose se produise. Le test échouera également si la fonction est actuellement désactivée. Par conséquent, il est préférable de retirer les tests du processus principal jusqu’à ce que la fonction soit officiellement libérée. En attendant, il est préférable d’exécuter les tests uniquement lorsque cela est nécessaire et si la fonction a été activée. Une fois que la fonction est définitivement validée, les tests peuvent être ajoutés à l’exécution du test principal.Quels sont les problèmes qui se posent lorsque nous ne retirons pas les drapeaux ?
La façon dont les commutateurs de fonction sont gérés témoigne de la qualité de l’organisation. Le fait de ne pas retirer les drapeaux de fonction après leur utilisation prévue peut entrainer plusieurs problèmes :- Dette technique – Les caractéristiques laissées dans la base de code peuvent s’accumuler au fil du temps, rendant la base de code plus complexe et difficile à maintenir, à comprendre et à déboguer.
- Augmentation des efforts de test et de maintenance – Lorsque les indicateurs de fonctionnalité ne sont pas supprimés, ils font toujours partie du processus de test, ce qui signifie que les testeurs doivent tester les chemins de code associés même s’ils ne sont plus pertinents.
- Risques pour la sécurité – Si des indicateurs de fonctionnalités inutilisés et oubliés contrôlent l’accès à des fonctions sensibles ou révèlent des fonctionnalités non sécurisées, ils peuvent être pris pour cibles s’ils ne sont pas correctement sécurisés.
- Dégradation des performances – Les bascules de fonctionnalités impliquent souvent des contrôles conditionnels supplémentaires dans le code. Si ces contrôles ne sont pas supprimés une fois que la fonction n’est plus nécessaire, ils peuvent ralentir l’application.
- Problèmes de compatibilité – Les indicateurs de fonctionnalité peuvent interagir avec d’autres parties de la base de code, des dépendances ou des intégrations. La présence d’indicateurs de fonction inutilisés peut entrainer des conflits avec d’autres codes ou introduire des comportements non souhaités.