web-dev-qa-db-fra.com

Qu'est-ce qu'un "indicateur de fonctionnalité"?

La mention Highscalability mentionne les drapeaux ici:

http://www.iheavy.com/2011/08/26/5-things-are-toxic-to-scalability/

Que sont exactement les drapeaux de fonctionnalité?

Merci

75
dotnetdev

Un 'indicateur de fonctionnalité' (ou Feature Toggle ) est la possibilité d'activer/désactiver les fonctionnalités (sous-sections) de votre application à tout moment: 

  • peut-être via un redéploiement, ou
  • certaines pages internes où les pages/fonctionnalités peuvent être basculées en direct.

Je suppose que dans l'exemple cité, il est pratique de disposer du contrôle permettant de réduire quelque peu l'ensemble de fonctionnalités si vous devez, par exemple, réduire le nombre de requêtes de base de données si la charge est trop élevée. 

Il y a une foule d'autres raisons que vous voudriez utiliser comme l'un des principaux moyens d'activer la diffusion continue : mettre des choses en production/en direct tout en maintenant la fonctionnalité désactivée/basculée jusqu'à ce qu'elle soit terminé. Nous utilisons souvent ce que nous appelons un «cookie de développement» pour montrer des fonctionnalités incomplètes à l'équipe de développeurs. De cette façon, nous pouvons tester des travaux partiellement terminés en production (ah oui! Y a-t-il une meilleure intégration?) Sur plusieurs versions/déploiements avant de les «désorganiser» (terminés) et de les rendre visibles par le public.

Voici un package simple qui vous aide à y parvenir dans ASP.NET MVC Land: https://github.com/cottsak/DevCookie (divulgation complète: je suis l'auteur).

Fowler a aussi un article beaucoup plus long que celui lié ci-dessus avec beaucoup plus de détails .

_ { Ce message (sur le site de Fowler également) explique les différents types de stratégies de bascule) . DevCookie prend en charge la stratégie basée sur la ligne principale/le tronc et est appelé " Release Toggle " dans l'article. 

_ { Réponse d'Adil } _ souligne qu'il existe de nombreux termes et raisons pour lesquels vous pourriez souhaiter utiliser certaines de ces infrastructures. N'oubliez pas que vous n'aurez besoin que de certaines de ces choses. Par exemple, il se peut que je veuille seulement activer un flux de travail de déploiement/livraison simple et agile. Une infrastructure simple suffit donc. Si vous choisissez ensuite de passer à la #leanstartup expérimentation avec A/B, aux tests de cohortes et à des opérations telles que le déploiement contrôlé, vous devez envisager un outil d'analyse (par exemple. Heap ). ce qui facilite les méthodologies de développement basées sur les données en tant que solution distincte. Une infrastructure à bascule qui remplit toutes les conditions susmentionnées entraînera une complexité excessive et excessive. 

72
Matt Kocaj

Feature Flag est une technique permettant de désactiver certaines fonctionnalités de votre application, via la configuration, sans déployer de nouveau code.

Les drapeaux de caractéristiques jouent un rôle clé dans le schéma de CI où des fonctionnalités sont constamment déployées mais pas nécessairement "publiées" en production.

Plus d'infos ici:

-- MODIFIER:

Drapeaux de fonctionnalités implémentation Java .

22
Maxim Veksler

Les drapeaux de fonctionnalités, les basculements de fonctionnalités, les expériences et les déploiements contrôlés sont synonymes d'une idée simple mais puissante: le code séparé se déploie à partir des déploiements de fonctionnalités. En clair, c’est la possibilité de faire passer la production de votre fonctionnalité à la production tout en choisissant qui parmi vos clients - le cas échéant, verra cette fonctionnalité.

Ils ont été popularisés en partie par le portier de Facebook . Le LiX de LinkedIn est un autre bon exemple.

Adopter cette idée simple jette les bases de nombreuses pratiques exemplaires, notamment:

Déploiement continu/Livraison - plusieurs codes poussent en production en une journée.

Trunk/Mainline Development - les branches de fonctionnalité ne doivent être créées que pour les demandes d'extraction, et non pour le développement de fonctionnalités de longue durée. 

No More Release Trains pour cogner des choses.

QA/Tests de performances en production - les tests réels de QA et de performance concernent l'infrastructure de production avec un trafic de production. Ne perdez pas de temps à créer de vastes laboratoires de performances et des environnements de stockage intermédiaire.

Expérimentation - savoir comment une nouvelle fonctionnalité déplace l'aiguille sur vos KPI.

Éviter les correctifs logiciels ou les restaurations de code lorsque des problèmes surviennent - les correctifs logiciels et les restaurations de code sont stressants, prennent beaucoup de temps et génèrent davantage de problèmes que nécessaire. Au lieu de cela, désactivez la fonctionnalité ou diminuez-la.

D'autres ont mentionné des bibliothèques open source. Un bon exemple de solution complète - telle que Gatekeeper et LiX - est Split . Je travaille pour Split.

15
Adil Aijaz

Un indicateur de fonctionnalité (également appelé basculement de fonctionnalité ou fonctionnalité bascule ) est un commutateur permettant d'activer ou de désactiver une fonctionnalité potentiellement coûteuse selon les besoins (par exemple, lorsqu'un site subit un trafic inattendu). Cela vous fera gagner un peu de temps jusqu'à la mise à l'échelle ou jusqu'à ce que le pic de charge disparaisse.

Voici un exemple tiré de la documentation SWIG .

8
Michael Petrotta

Il y a beaucoup de bonnes réponses ici, toutes conduisant à l'importante définition de base popularisée dans le Martin Fowler post:

Ce sont des morceaux de code que "[permettent] aux équipes de modifier le comportement du système sans changer de code." 

Nous avons donc historiquement pensé à eux comme représentés par le pseudo-code:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();

C’est une façon tout à fait juste d’y penser, et Matt et Adil l’étendent bien avec une variété de cas d’utilisation tactiques pour le drapeau de fonction.

Mais j'aimerais proposer une définition révisée qui reflète l'évolution de la réalité au cours des six années écoulées depuis que dotnetdev a posé la question initiale. Je travaille pour Rollout.io , une plate-forme de fanions, et j’ai donc une place au premier rang pour cette évolution.

En bref, les indicateurs de fonctionnalité ne sont plus simplement un moyen d'activer et de désactiver des fonctionnalités dans votre application. C'est comme si vous répondiez à "ce qui est un élément de ligne de facture" en disant "c'est une description et un montant en devise". C'est vrai, mais cela ne se fait pas au point le plus large de la facture.

Les indicateurs de fonctionnalités sont les éléments tactiques d’une solution stratégique globale dans les logiciels modernes. Ce sont les moyens par lesquels vous reportez une logique décisionnelle importante dans votre code au moment de l'exécution lorsque vous avez plus d'informations. Et, ce qui est peut-être le plus important, ils ne se produisent plus de manière isolée, avec une simple vérification pour déterminer si le numéro de version est supérieur à 2.7 ou non; les organisations qui les utilisent les incluent généralement dans le cadre d'une approche produit globale et globale.

Comme d'autres l'ont mentionné, Facebook et LinkedIn ont été les pionniers dans ce domaine, mais en 2018, de nombreuses organisations le font. Ils reportent les questions de logique de décision pour l'exécution dans le cadre de la stratégie de développement, de la stratégie d'exploitation (ou de la stratégie DevOps, si vous le souhaitez) et de la stratégie produit. Voici des exemples de telles questions.

  • Qui devrait voir le nouvel écran d'administration que nous déployons et quand?
  • Quel niveau d'adhésion est requis pour débloquer cet oeuf de Pâques?
  • Quand devrions-nous passer à la nouvelle base de données?
  • Faut-il mettre une photo d'un guépard ou d'un aigle sur le bouton de paiement pour améliorer les conversions?

Pour avoir une application qui reporte un nombre important de ces décisions jusqu'au moment de l'exécution, vous ne pouvez pas ajouter d'indicateur de fonctionnalité à votre application de manière ad-hoc, sinon vous vous enterrez dans une dette technique. De nos jours, vous devez avoir une stratégie complète de gestion des indicateurs de caractéristiques, qui comprend quelques composants différents.

  • Les points de basculement permettent de modifier le comportement des nouvelles fonctionnalités.
  • Plusieurs points de basculement se rejoignent pour former un routeur de basculement . Un routeur à bascule détermine l'état d'une fonctionnalité.
  • Toggle context fournit au routeur à bascule les informations contextuelles nécessaires (par exemple, un utilisateur spécifique).
  • Toggle configuration fournit les informations relatives à l'environnement du routeur bascule.

Donc, à la fin, quels sont les drapeaux de fonctionnalité?

Eh bien, ils constituent un élément important d’une stratégie plus large visant à disposer d’une application adaptable aux besoins techniques et aux besoins du marché. 

7
Erez Rosovsky

Dans mon entreprise, nous avions une solution propre à cela. Nous avons créé un service fournissant un fichier de configuration (.json) téléchargeable pour chaque application. Dans cette configuration, nous avons stocké les drapeaux pour les fonctionnalités. Sur la base de cette configuration, l'application peut afficher ou masquer la fonctionnalité actuelle. (Par exemple, afficher ou masquer un élément de menu dans la barre latérale).

Nous avons également créé une page d'administration interne sur laquelle nous pouvons configurer les indicateurs de fonctionnalité. Cela a fonctionné assez bien pendant un certain temps, mais après cela, nous aurions aimé faire du ciblage des utilisateurs et des tests A/B. Développer par soi-même Cela semblait trop d'effort, nous avons donc choisi une solution tierce. Comme déjà mentionné ici, il existe de nombreuses solutions pour cela.

Nous avons choisi ConfigCat car il prend en charge à la fois les groupes cibles personnalisés et le déploiement en pourcentage. Vous pouvez vérifier les sdks Open Source pris en charge sur github .

5
mon

Les drapeaux de fonctionnalités (ou les basculements de fonctionnalités) vous permettent d'activer des fonctionnalités à distance sur une application sans avoir à reconstruire/redéployer l'application . Cela vous permet de déployer le code en production sans la libérer avant d'être prêt . Vous pouvez cibler des utilisateurs spécifiques et activer ainsi une nouvelle fonctionnalité à tester pour les utilisateurs de la version bêta.

Chez nous, nous avons déjà utilisé LaunchDarkly et d’autres suggestions de FeatureFlags.io . Nous avons également essayé d'utiliser la configuration à distance de Firebase pour essayer de faire fonctionner ce logiciel, mais nous avons constaté que ce n'était pas vraiment fait pour cela.

Nous avons fini par développer notre propre version appelée Bullet Train , que nous avons en open source. Il combine à la fois les drapeaux de fonctions/bascules et la configuration à distance.

3
TStu

Les drapeaux sont utilisés à plusieurs fins. L’idée générale est de déléguer le contrôle sur l’utilisateur qui voit telle ou telle fonctionnalité à un tableau de bord distant ou à un back-office quelconque.

Une fois qu'une fonctionnalité est marquée dans le code, vous pouvez maintenant utiliser plusieurs méthodes pour déterminer quel utilisateur la voit dans votre application: 1. On/Off - affiche la fonctionnalité à tous ou à aucun de vos utilisateurs . 2. Libération progressive - affichez la fonctionnalité uniquement à un pourcentage de vos utilisateurs, puis montrez-la progressivement à tous les utilisateurs . 3. Ciblage - affiche la fonctionnalité à des utilisateurs spécifiques en fonction des propriétés ou des caractéristiques de cet utilisateur.

Les outils permettant de contrôler les fanions de caractéristiques (booleans) et les configurations de fonctionnalités (chaînes, nombres, etc.) sont généralement appelés Plateformes de gestion des fonctionnalités Il existe un excellent service de gestion des fonctionnalités appelé Configz.io

3
Monads are like...

D'après ce que je comprends, les indicateurs de fonctionnalité vous aident à utiliser la fonctionnalité de portail en déterminant quels utilisateurs reçoivent certaines fonctionnalités.

Par exemple, supposons que vous souhaitiez uniquement que les utilisateurs de la version bêta voient une nouvelle fonctionnalité. Vous pouvez "activer" cette fonctionnalité pour les utilisateurs de la version bêta et le reste de vos utilisateurs ne la verrait pas.

LDUser user = new LDUser("[email protected]");

boolean showFeature = ldClient.toggle("your.feature.key", user, false);

if (showFeature) {
     // application code to show the feature 
 }
else {
     // the code to run if the feature is off
 }

Je teste Les options de LaunchDarkly pour certains tests JS A/B frontaux - semblent bien fonctionner. Vous pouvez également consulter ce site pour les bascules de fonctionnalités et les bibliothèques d'indicateurs de fonctionnalités .

1
Hbitspark

Les drapeaux de fonctionnalités vous permettent en principe d'activer et de désactiver une fonctionnalité sans apporter de modifications au code ni publier de nouvelle version. C'est une solution importante, en particulier pour les développeurs d'applications mobiles, car ils n'ont aucun contrôle sur les utilisateurs pour mettre à jour leur application vers une nouvelle version.

Plusieurs entreprises proposent ce service aux développeurs d’applications mobiles.

0
OFK

Dans mon entreprise, nous utilisons des indicateurs de fonctionnalité pour chaque nouvelle fonctionnalité introduite dans notre application SaaS. Outre les avantages en termes de performances, cela nous permet également de déployer progressivement de nouvelles fonctionnalités - en introduisant d’abord de nouvelles fonctionnalités pour les utilisateurs expérimentés, en obtenant leurs retours et en les improvisant avant de pouvoir les proposer à tous les utilisateurs. 

Cela nous permet également de personnaliser l'offre aux utilisateurs individuels - les utilisateurs expérimentés veulent toutes les fonctionnalités; les utilisateurs simples peuvent simplement vouloir les éléments de base et être déroutés par toutes les puissantes fonctionnalités complexes. Cela permet également à notre équipe de vente de faire de la vente.

Et bien sûr, comme d'autres l'ont souligné, si nous trouvons une fonctionnalité causant une dégradation des performances, nous pouvons simplement désactiver cette fonctionnalité (que ce soit pour tous les clients ou pour le client à l'origine du problème).

0