Testování je nezbytnou součástí vývoje softwaru, ale jak postupovat, když je potřeba dosáhnout rychlosti vydání a zároveň nezanedbat kvalitu produktu? Jak provádět testování a získávat zpětnou vazbu, aniž by se zpomalil vývojový cyklus? V tomto kontextu je důležité zvážit několik moderních metod, mezi něž patří například "bug bash", crowdsourced testing a testování v produkci. Tyto přístupy se ukázaly jako efektivní, ale vyžadují pečlivé plánování a koordinaci mezi týmy.

Bug bash je příležitost pro tým, aby se soustředil na objevování problémů a zlepšení kvality softwaru v kolektivním rámci. Theresa vidí výhody tohoto přístupu nejen v odhalení chyb, ale také v pozitivním vlivu na morálku týmu a posílení důvěry v produkt. Scott Berkun v článku "How to run a bug bash" doporučuje několik praktických kroků, které pomáhají tuto metodu úspěšně implementovat. Například plánování akce s předstihem, aby se předešlo panice, a zajištění stabilního kódu během testování, aby bylo možné problémy lépe lokalizovat. Důležitým prvkem je i ukázat týmu, jak by měl vypadat kvalitní report o chybě. Cílem není shromáždit co nejvíce drobných problémů, ale identifikovat opravdu významné nesrovnalosti.

V prostředí DevOps může být bug bash užitečný způsob, jak propojit vývojářské a operační týmy a zaměřit se na kvalitu, zejména pokud není k dispozici specializovaný tým testerů. Také může sloužit jako týmová aktivita, která podporuje spolupráci a zábavu, třeba v podobě soutěže, kdo objeví nejpodivnější chybu.

Nicméně v některých případech, například při častém vydávání verzí několikrát denně, může být bug bash nevhodný. Pokud jsou uživatelé testující produkt v reálném čase v produkčním prostředí, může být hodnotu testování v takovém "fixovaném" stavu obtížné najít.

Crowdsourced testing, tedy testování s využitím externích testerů, je metodou, která umožňuje získat širokou zpětnou vazbu od lidí různých geografických oblastí a profesních zkušeností. Tento přístup se často využívá během vývoje produktu, aby se získal pohled na produkt od potenciálních uživatelů ještě před jeho vydáním. Crowdsourced testing může být i po vydání užitečný pro sběr různých názorů. I když tento přístup může být efektivní, může přinášet i určité problémy, jako je těžká koordinace testerů v různých časových pásmech, jazykových bariérách a výzvách spojených s řízením komunikace.

Když organizace zahájí svou cestu s DevOps nebo se soustředí více na kvalitu než na rychlost vydání, crowdsourced testing může být alternativou k beta testování. I když oba tyto přístupy poskytují podobné typy zpětné vazby, mají různé náklady a rizika, a jejich výběr by měl záviset na konkrétních cílech a situaci týmu.

Testování v produkci představuje jiný přístup, kde vývojový tým spíše spoléhá na data získaná přímo z reálného provozu. Tento způsob testování je efektivní, pokud je potřeba urychlit vývoj a zároveň zachovat kvalitu produktu. Testování v produkci zahrnuje praktiky jako A/B testování, beta testování nebo monitorování systému během jeho provozu. Cílem je získat zpětnou vazbu od skutečných uživatelů a rozhodovat na základě dat. Například pokud nevíte, zda by měl design použít tlačítko nebo odkaz pro akci, můžete provést A/B test. Beta testování může být užitečné pro zjištění, jak produkt funguje na různých platformách a prohlížečích.

Úspěch testování v produkci však závisí na efektivním monitorování a schopnosti získávat relevantní data. Monitoring a alerting jsou základními nástroji pro automatizované sledování chování softwaru v produkčním prostředí. Monitoring umožňuje sledovat stav systému a identifikovat problémy, zatímco alerting zajišťuje včasné varování při zjištění neobvyklých událostí. Efektivní monitoring může rychle odhalit problémy a umožnit okamžité reakce, což je zvlášť výhodné v prostředích, kde je kladeno důraz na rychlost vydání.

Při zavádění testování v produkci je nezbytné, aby tým správně nastavil automatizovaný sběr dat a analýzu relevantních metrik. Pokud není monitoring správně nastaven, nebude možné přesně měřit výkon softwaru, což ztíží analýzu výsledků testů. Například sledování využití procesoru, paměti nebo doby odezvy může poskytnout klíčové informace pro rozhodování o dalším vývoji produktu.

Ve zkratce, testování v produkci a sběr zpětné vazby z reálného provozu je efektivní způsob, jak rychle ověřit funkčnost produktu v reálných podmínkách. Tento přístup si žádá silnou spolupráci mezi vývojovými a operačními týmy, kteří musí být schopni rychle reagovat na zjištěné problémy a analyzovat data z produkce. Jen tak může být testování v produkci skutečně užitečné pro zajištění kvality a spokojenosti uživatelů.

Jaké testovací praktiky jsou efektivní pro testování v produkci?

Testování v produkčním prostředí je téma, které vyvolává mnoho diskuzí, přičemž existuje celá řada přístupů, které mohou být aplikovány na zajištění bezchybného chodu systému. Pokud je cílem rychlý vývoj a minimální přerušení služby, může být výhodné vynechat tradiční testovací prostředí a zaměřit se na konkrétní praktiky, které umožní testování přímo v produkci. Tento přístup se stále více objevuje v moderním vývoji, přičemž jeho hlavním záměrem je zrychlení procesu nasazení a snížení složitosti správy testovacích prostředí.

Jedním z nejzásadnějších přístupů je použití funkčních vlajek (feature flags). Tato metoda spočívá v implementaci nových funkcí za tzv. "vlajkami", které umožňují testování nových vlastností přímo v produkci, aniž by byla ovlivněna celková stabilita systému. Tímto způsobem lze otestovat nové změny v reálném provozu a odhalit případné problémy dříve, než se funkce oficiálně zpřístupní všem uživatelům. Mnozí odborníci doporučují nejen implementaci těchto vlajek, ale i zvýšení monitorování a logování v produkčním prostředí, aby bylo možné okamžitě detekovat případné chyby a anomálie.

Další důležitou praktikou je zachování integrity dat. Při testování v produkci je klíčové zajistit, že testovací data nebudou ovlivňovat skutečné uživatelské prostředí. K tomu lze využít různé skripty, které slouží k čištění a filtrování produkčních dat. Tento přístup má význam nejen pro ochranu uživatelských informací, ale také pro zajištění, že testování neovlivní chod reálné aplikace a nezpůsobí nežádoucí chyby v reálných operacích.

Zároveň je nezbytné mít opatření pro kontrolu integrace. Zavedení změn do produkčního prostředí by mělo být prováděno s ohledem na minimální riziko. Kontrola expozice těchto změn může zahrnovat například postupné zavádění nových funkcí pro malé procento uživatelů nebo omezení přístupu k novým funkcím, dokud není plně ověřena jejich stabilita. Tento proces pomáhá minimalizovat případné negativní dopady na uživatelskou zkušenost.

Důležitým aspektem je i destruktivní testování, které se stává efektivnějším v prostředí, kde není nutné chránit každý jednotlivý prvek. Takové testování může zahrnovat například náhodné vypnutí síťového rozhraní, simulaci výpadku databáze nebo přetížení portů webových služeb. Tento přístup je užitečný pro testování odolnosti systému vůči neočekávaným výpadkům a pomáhá zvýšit jeho odolnost. Tento typ testování je běžně využíván u systémů, které mají redundantní architekturu, a může být doplněn o simulační nástroje jako je Chaos Monkey, který náhodně vypíná produkční instance, čímž simuluje skutečné výpadky.

V souvislosti s výše zmíněným testováním infrastruktury se v posledních letech stal stále populárnější nástroj Test Kitchen, který automatizuje testování správy konfigurace. Tento nástroj umožňuje spouštět virtuální stroje, provádět na nich konfigurace a ověřovat, zda všechny komponenty systému fungují správně. Podporuje různé nástroje pro konfiguraci jako jsou Chef, Puppet, Ansible, a také různé testovací enginy jako RSpec nebo ServerSpec, které pomáhají provádět integraci a funkční testy.

Přestože testování infrastruktury může být velmi užitečné, vyvstává otázka, zda je skutečně nutné testovat všechno. V mnoha případech mohou existovat efektivnější způsoby, jak sledovat zdraví systému pomocí monitorování v reálném čase, než opakovat stejné kontroly v testech. Integrace monitorovacích nástrojů do procesu testování umožňuje zajistit, že infrastruktura je v pořádku, aniž by bylo nutné provádět redundantní testy.

Zásadním faktorem, který je třeba mít na paměti při aplikaci těchto přístupů, je soustředění na resilience (odolnost) systému. Mnohé společnosti, jako například Netflix, se rozhodly implementovat nástroje pro simulaci různých selhání v infrastruktuře, aby otestovaly, jak systém reaguje na neplánované výpadky. Tento přístup může být klíčový pro zajištění vysoké dostupnosti a minimalizaci negativních důsledků, které mohou nastat v případě neočekávaných poruch.

Pro organizace, které přecházejí na model neustálého nasazování a testování v produkci, je důležité mít dobře definované postupy pro kontrolu kvality, které zahrnují všechny zmíněné praktiky. Ačkoliv se může zdát, že testování v produkčním prostředí zvyšuje riziko, správná implementace nástrojů pro testování, monitorování a kontrolu může zajistit bezpečné a efektivní zavádění změn bez negativního dopadu na uživatelskou zkušenost.

Jak se připravit na DevOps: Základy agilisního testování a spolupráce napříč týmy

Přechod na kulturu DevOps může být pro některé týmy výzvou, zejména pokud nejsou zvyklí na agilní přístupy v testování. V agilním prostředí je totiž kladeno důraz na spolupráci, což zahrnuje i samotné testování. Všechny role v týmu, od vývojářů po testery, se podílejí na definování požadavků a testovacích kritérií. Společně reagují na problémy, které mohou nastat, a to jak při manuálním testování, tak při automatizovaných testech. Pokud tento přístup není vašemu týmu známý, bude vhodné zvážit přechodný krok k plně implementované DevOps kultuře.

Agilní testování a jeho role v týmu

V agilních týmech je testování kolektivní aktivitou. Úkolem testera není izolovaná práce na hledání chyb, ale aktivní účast na definování testovacích případů, příprava automatizovaných testů a okamžité řešení problémů. Tento způsob spolupráce se stává nedílnou součástí vývojového cyklu. Pokud tým není v těchto praktikách silný, může to být signál, že přechod na DevOps bude problematický.

Existuje několik základních principů, podle kterých můžete posoudit, jak dobře váš tým testuje v agilním prostředí:

  1. Má váš tým jasnou představu o tom, co je třeba testovat pro každou funkci, než začne vývoj?

  2. Zajišťujete, že každý člen týmu chápe požadavky a otázky týkající se testování ještě před zahájením kódování?

  3. Testování je součástí každé fáze vývoje – od manuálních až po automatizované testy.

  4. Tým má stanovený proces pro kontrolu kvality a měření úspěšnosti testování.

Pokud vaše skóre v této oblasti není příliš vysoké, může být užitečné se zaměřit na zdokonalení těchto procesů. K tomu mohou pomoci knihy jako Agile Testing od Lisy Crispin a Janet Gregory nebo More Agile Testing.

Pochopení DevOps v kontextu vaší organizace

Před přechodem na DevOps je důležité porozumět tomu, co DevOps znamená v konkrétním prostředí vaší organizace. Každá organizace má jiný přístup k implementaci DevOps. Základní krok je tedy vyjasnit si, co tento přístup znamená pro všechny role zapojené do dodávání produktu – nejen pro vývojáře, ale i pro business analytiky, produktové manažery, operátory nebo agile kouče.

DevOps ovlivňuje všechny tyto role, a proto je důležité zjistit, co to pro ně znamená. Management bude mít na DevOps jiný pohled než vývojáři, což může ovlivnit zaměření na konkrétní cíle – rychlost dodání na trh, kvalitu produktu nebo stabilitu produkčního prostředí. Tyto rozdílné perspektivy pomohou zformulovat jasnou vizi, která bude vycházet z konkrétních cílů.

Spolupráce za hranicemi vývoje

Agilní týmy bývají menší, což zjednodušuje komunikaci a umožňuje efektivní spolupráci. Tento model ale nemusí vždy stačit, pokud přecházíte na DevOps. Je nezbytné začít navazovat vztahy s lidmi z dalších oblastí organizace, zejména s těmi, kteří se podílejí na nasazování a podpoře produktu. Spolupráce mimo vývojový tým je klíčová pro úspěšnou implementaci DevOps, protože zahrnuje nejen vývoj, ale i provoz, podporu a nasazení produktu do produkčního prostředí.

Prvním krokem v tomto směru je „přesvědčit“ lidi mimo tým o hodnotě této spolupráce. To může zahrnovat přímé navázání kontaktu, což je první krok k vytvoření komunikačních cest. Začněte sdílet informace a navazovat vztahy, které mohou pomoci nejen vývojovému týmu, ale i ostatním, kteří se podílejí na podpoře a provozu softwaru. Jakmile vytvoříte kontakt, důležité je neignorovat jejich názor a vždy se zajímat o jejich práci, aby spolupráce probíhala oboustranně.

Vytváření komunikace mezi týmy

Základem úspěšné spolupráce mezi týmy je vytváření komunikačních cest a vztahů. K tomu je potřeba aktivně hledat nové cesty a být otevřený novým nápadům. Můžete začít tak, že se spojíte s jednotlivci mimo svůj tým, představíte jim svou roli a zjistíte, jak může být užitečné budovat společnou komunikaci. Tento proces by měl být vyvážený – nesmí se stát, že budete jen propagovat svou agendu. Komunikace by měla být dvousměrná, kde se vzájemně podporujete a navzájem sdílíte informace.

Tento přístup nejen že usnadňuje přechod na DevOps, ale zároveň přispívá k větší flexibilitě a rychlejšímu vyřešení problémů v rámci celé organizace.