Přepínače funkcí, neboli feature toggles, jsou často nezbytným nástrojem v moderním vývoji software. Tyto přepínače umožňují vývojářům a týmům řídit, kdy a jak se nové funkce v softwaru aktivují pro uživatele. Správné používání a testování těchto přepínačů je klíčové pro stabilitu aplikace a její kvalitní nasazení. Ačkoliv je přepínače možné používat různými způsoby, existují určité principy, které by měly být dodrženy pro jejich efektivní testování a údržbu.
Prvním krokem k správnému testování přepínačů je definování jejich počátečního nastavení. Pokud jsou přepínače určeny pro spuštění nebo vypnutí funkcí, je důležité mít jasně stanovené testovací případy, které zahrnují všechny možné stavy přepínačů, tedy nastavení „ON“ a „OFF“. Tento proces je obzvláště důležitý pro statické přepínače a pro přepínače, které jsou vzájemně nezávislé na jiných funkcích vyvinutých týmy. Pokud však situace vyžaduje flexibilitu, je nezbytné přemýšlet o konkrétní testovací strategii.
U dynamických přepínačů, které jsou nastavovány na základě určitých pravidel, může být nezbytné testovat uživatele, kteří se pohybují do nebo z cílové skupiny. Při testování experimentálních přepínačů se zase doporučuje ověřit konzistenci napříč uživatelskými sezeními, aby každý uživatel dostal správnou verzi při každém přihlášení. V případě přepínačů, které slouží pro operační účely nebo pro řízení oprávnění, je potřeba provést testy kombinací přepínačů a zjistit, jak nová konfigurace interaguje s již existujícími možnostmi.
Testování přepínačů může být poměrně náročné, protože zahrnuje mnoho různých scénářů a kombinací. Je důležité přemýšlet nezávisle a sdílet své nápady s týmem, abyste mohli odstranit případné mezery v testovacích scénářích. Důležité je také nezapomínat, že pokud něco selže, přepínač je vždy možné vypnout, což poskytuje určitou bezpečnostní záruku při plánování testů. Pro přepínače určené pro nasazení (release toggles) to platí zvláště, protože uživatelé mají často omezený přístup k nové funkčnosti. Pokud se problém objeví v části, kterou vidělo jen několik málo uživatelů, bude jeho vliv minimální. Na druhou stranu, u přepínačů, které byly aktivní po delší dobu, může jejich vypnutí představovat riziko, například v případě, že dojde k nechtěnému zmizení prémiových funkcí pro loajální uživatele.
Kromě testování chování softwaru je důležité také otestovat samotné přepínače. Můžete snadno zjistit aktuální konfiguraci přepínačů? Existuje nějaký příkaz pro načtení těchto údajů z živého systému? Pokud se spolehnete na konfiguraci souboru, jak si můžete být jisti, že odráží aktuální stav? Je k dispozici auditní informace, které by ukazovaly, kdo změnil stav přepínače a kdy? Existuje historický záznam o všech změnách stavu? Jaké další informace jsou s těmito záznamy spojeny a co by mělo být přidáno? Pokud existují aktivní přepínače, které by měly být odstraněny, stojí za to se ptát, zda je přepínač, který nikdy nezmění svůj stav, stále potřebný.
Testování přepínačů by mělo zahrnovat také analýzu jejich potřeby samotné. Pokud vývoj nových funkcí může být rozdělen na malé části, kde změny uživatelského rozhraní přicházejí až na závěr, pak může být přepínač zbytečný jako nástroj pro skrývání funkcionality. Testování přepínačů tedy zahrnuje i otázku, zda je implementace přepínače vůbec nezbytná.
Pokud se soustředíme na dlouhodobější údržbu a kvalitu systému, můžeme se setkat s názorem, že přepínače funkcí představují jednu z nejhorších podob technického dluhu. Podle Jima Birda mohou přepínače funkcí významně ztížit podporu a ladění systému, protože s rostoucím počtem konfigurací se stává obtížné porozumět a replikovat problémy z produkčního prostředí.
Další metodou, jak se vypořádat s testováním softwaru, je takzvaný bug bash. Tato aktivita spočívá v tom, že se všichni členové týmu soustředí na testování produktu, obvykle v určitém časovém rámci, a hledají chyby před jeho vydáním. Bug bash může být využit nejen jako závěrečná fáze před nasazením, ale také jako náhrada za testování prováděné specialisty. Může být také užitečným nástrojem pro zvýšení kvality produktu nebo jako způsob provedení in-house prozkoumání platformy, která je již v produkci u zákazníků.
Testovací soutěže v rámci bug bash, kde účastníci získávají body za nalezené chyby, mohou sloužit k povzbuzení týmového ducha a zábavné atmosféry při hledání problémů v softwaru. Tento přístup podporuje spolupráci a může pomoci odhalit problémy, které by jinak zůstaly nepovšimnuty. Takový přístup pomáhá týmům k efektivnímu testování a vytváření kvalitního softwaru, který je připraven na nasazení.
Jak testování v produkci mění tradiční nasazovací pipeline
V dnešním světě vývoje softwaru je tradiční přístup k testování a nasazování aplikací často považován za omezený. Dlouho se věřilo, že aplikace by měly být důkladně testovány v izolovaných, kontrolovaných podmínkách před tím, než se dostanou do produkce. Tento přístup ovšem nezaručuje, že kód skutečně funguje v reálném světě, kde interaguje s reálnými daty a uživatelským chováním. Novější trend, který získává na popularitě, je testování přímo v produkčním prostředí, což poskytuje vývojářům mnohem cennější a realističtější zpětnou vazbu.
Společnost The Guardian, známá britská mediální organizace, představila koncept testování v produkci, kdy se do jejich nasazovací pipeline přidaly testy, které běžely přímo na produkčním systému. Tento přístup zaručuje, že vývojáři obdrží zpětnou vazbu téměř okamžitě poté, co jejich změny byly nasazeny do produkce, což poskytuje mnohem větší jistotu o jejich funkčnosti v reálném světě. Využívají nástroj nazvaný Prout, který sleduje, zda pull requesty byly skutečně implementovány a zda fungují tak, jak mají. Tento nástroj je integrovaný s verzovacím systémem, což umožňuje vývojářům vidět výsledky testů na produkci v řádu minut po sloučení kódu do hlavní větve.
Testování v produkci poskytuje cennou zpětnou vazbu prostřednictvím různých mechanismů, jako jsou analytické události, monitoring, výstrahy, logy a zpětná vazba od zákazníků. Kromě toho, že se testuje nově nasazený kód, firmy se zaměřují na dlouhodobé sledování chování aplikace. Tým QA ve společnosti The Guardian například rozšířil testování o dlouhodobé monitorování systémů, aby mohli odhalit problémy, které se objeví až po nějaké době používání aplikace v produkci. Tento přístup reaguje na potřebu detekovat problémy, které nejsou vždy viditelné okamžitě po nasazení, ale mohou se projevit až při delším používání aplikace, nebo v případě občasných chyb.
Jedním z příkladů, jak testování v produkci může vypadat, je nástroj Prodmon, vyvinutý ve společnosti The Guardian. Tento nástroj spouští testy na produkčních systémech nepřetržitě, 24 hodin denně, 7 dní v týdnu. Prodmon provádí testy na dvou různých úrovních – API a uživatelském rozhraní – a používá standardní techniky automatických testů, ale místo běžných testovacích zpráv generuje výstrahy, které okamžitě upozorní tým na jakýkoli problém.
Tento přístup k testování v produkci je založen na principu, že problémy se mohou projevit až při skutečném užívání aplikace. Standardní testy, které jsou prováděny před nasazením do produkce, nemusí odhalit chyby, které vzniknou až v prostředí s reálnými daty a zatížením. Proto je důležité, aby organizace implementovaly mechanismy, které umožní monitorování a testování aplikace i po jejím nasazení do produkce.
Příklad Bank of New Zealand ukazuje, jak A/B testování může být použito přímo v produkčním prostředí k experimentování s různými variantami uživatelského rozhraní. Tento přístup pomáhá získat data o skutečném chování uživatelů a rozhodovat se na základě těchto údajů, nikoliv pouze na základě předchozích předpokladů. V případě BNZ byla provedena analýza různých variant výzev pro zákazníky při používání internetového bankovnictví, což vedlo k rozhodnutí, že přímé a jasné výzvy jsou efektivnější než složité a zaměřené na konkrétní vlastnosti.
V podobném duchu pracuje i Etsy, které považuje monitoring za klíčový nástroj pro testování a zlepšování svého systému. Etsy každý den nasazuje nové verze své aplikace a používá monitoring jako součást testování v produkci, což jim umožňuje získávat okamžitou zpětnou vazbu o chování aplikace a uživatelských interakcích.
Testování v produkci znamená, že organizace musí být připraveny na rychlé reakce a opravy. V případě problému, který se projeví až po nasazení, je nezbytné mít připravené mechanismy pro rychlé opravy a nasazení opravených verzí. Tento přístup klade důraz na schopnost rychlé detekce problémů a okamžité opravy, což je klíčové pro udržení vysoké kvality a spolehlivosti systému.
Je však třeba si uvědomit, že testování v produkci není všelék. I když umožňuje získat cenné informace o chování aplikace v reálném světě, může také přinášet určité riziko, zejména pokud se chyby projeví u širokého okruhu uživatelů. Proto je důležité mít správně nastavený monitoring, výstrahy a mechanismy pro rychlou detekci problémů, aby se minimalizoval dopad případných chyb na uživatele.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский