Shift-Left vs. Shift-Right – Ako skombinovať dva základné prístupy k testovaniu? 

V závere blogu o TestCrunch som sa lúčil s QA tímom a vítal svoju novú pozíciu DevOps inžiniera. Crossuite je v bart-e prvým projektom, ktorý takúto funkciu má. Vznikla najmä z potreby neustáleho vylepšovania už existujúcich CI/CD procesov a navrhovania nových automatizácií. Jedna z otázok, ktorá ma v poslednej dobe zamestnáva, je aj to, ako správne skombinovať Shift-Left a Shift-Right prístup k vývoju.

Ako som uviedol aj v spomínanom blogu, pevnou súčasťou nášho vývoja je proces testovania kvality projektu. Vo všeobecnosti existujú dva základné prístupy k otázke, v ktorej fáze vývoja by malo byť testovanie intenzívnejšie.

Zdroj: https://www.dynatrace.com/news/blog/what-is-shift-left-and-what-is-shift-right/

Doľava je to lacnejšie

Prístup Shift-Left vo všeobecnosti znamená presúvanie testovania a zabezpečovania kvality do skorších fáz vývojového procesu, často až pred začiatok písania kódu. “Ľavé testovanie” obyčajne zahŕňa najmä písanie unit testov počas implementácie funkcií, ale nezriedka sa používajú aj testy funkčné či integračné. Testuje sa na začiatku Scrum iterácie, aby boli odhalené problémy adresované čo najskôr.   

Tento prístup je kľúčový najmä pre agilný vývoj, ako je ten náš, pretože podporuje spoluprácu medzi developermi a testermi už od začiatku. Tím má vďaka tomu väčšiu kontrolu nad kvalitou svojho kódu a výsledky testov sú následne zahrnuté do priebehu celého ďalšieho vývoja. To môže viesť k rýchlejšiemu odhaľovaniu a opravovaniu chýb a zlepšeniu celkovej kvality softvéru.

Medzi hlavné výhody Shift-Left prístupu teda patrí:

  • lepšie a jasnejšie definované požiadavky  používateľských scenárov, 
  • časová a finančná úspora pri opravách chýb 
  • a zabezpečenie kvality od samého začiatku vývoja. 

Naopak, nevýhodou je absencia overenia UI, end-to-end validácie, a celkovo chýbajúca spätná väzba od používateľov. A práve tu vstupuje do hry prístup Shift-Right.

Vpravo ide o kvalitu

Shift-Right, naopak, označuje posun testovania v procese vývoja na neskôr, často až do fázy nasadenia. Zameriava sa hlavne na získavanie spätnej väzby od reálnych používateľov, zvyčajne po ukončení vývoja. Využívajú sa techniky ako end-to-end testovanie či A/B testy.

Tento prístup umožňuje kontrolovať funkcionality v skutočnom prostredí a vyhodnocovať ich výkon, stabilitu a bezpečnosť. Poskytuje tak možnosť detekovať chyby v reálnom fungovaní a odhaľovať menej známe scénare použitia. Nevýhodou tohto prístupu sú však vyššie náklady na opravy chýb.

Tá správna kombinácia

Prax nám ukazuje, že tieto dva prístupy nie sú protichodné, ale vzájomne sa dopĺňajú. Vývoj softvéru je predsa len komplexný proces a práve kombinácia Shift-Left a Shift-Right prístupov nám umožňuje získať celý balík vylepšení – vyššiu kvalitu, rýchlejšie dodanie a lepšiu spätnú väzbu od používateľov.  

A teda hoci agilné tímy by mali preferovať Shift-Left Testing pre jasnejšie špecifikácie, plynulejšie implementácie, skoršie testovanie a nižšie náklady, nemali by zabúdať ani na výhody, ktoré prináša Shift-Right Testing – spätnú väzbu od používateľov založenú na skutočných scenároch použitia.

Ako to robíme teraz a čo sa chystáme zlepšiť?

Na projekte Crossuite zapájame náš QA tím do každej fázy vývoja – od plánovania až po finálne odovzdanie hotovej súčasti projektu. A hoci testeri začali pracovať skôr v smere Shift-Right, dnes sa ich snažíme viac tlačiť do Shift-Left priestoru, a to hlavne v podobe zbierania ich spätnej väzby už v začiatkoch návrhu nových funkcionalít. Konkrétne ide napríklad aj o tieto kroky:

End-to-end aj v rámci Shift-Left

End-to-end testy, ktoré sú bežne súčasťou Shift-Right prístupu, už aktuálne implementujeme ešte vo fáze plánovania, na základe pripravenej grafiky, podľa identifikátorov. Vývojár, ktorý pri programovaní postupuje podľa stanovených pravidiel, vďaka tomu dokáže priebežne kontrolovať aj používateľskú end-to-end stránku pripravovanej funkcionality. 

Performance a security testing

Vo fáze Shift-Left sa pre nás momentálne stáva vysokou prioritou tiež testovanie výkonu (performance testingu), aby sme čo najskôr odhalili prípadné výkonnostné chyby. V súčasných testoch síce obmedzujeme maximálny čas, v rámci ktorého by mala aplikácia poskytnúť odpoveď používateľovi, ale stále to nie je postačujúce. Aktuálne preto pracujeme na vytvorení set-up-u na to, aby sme novú časť kódu vedeli testovať s veľkým objemom dát už počas vývoja. Tým predídeme prípadným problémom s narastajúcou databázou informácií, s ktorými bude musieť aplikácia v budúcnosti pracovať. Rovnako sa chystáme posilniť aj testovanie z hľadiska bezpečnosti (security testing). 

Shift-Left prístup je pre nás veľmi dôležitý, pretože keď sa niečo pokazí v „left“ fáze, opraviť to v „right“ fáze je náročnejšie, nákladnejšie a neefektívnejšie. Tento prístup teda prináša pozitívne výsledky pre používateľov, zákazníka aj vývojárov. Veríme, že práve vďaka nemu budeme zaznamenávať menej závažných chýb a zrýchlime publikovanie nových verzií. 

Koniec koncov, to je pre mňa, ako DevOps inžiniera, najdôležitejšie – zrýchľovať vývoj a pomáhať QA tímu minimalizovať chyby tým, že ich odhalíme už v ranných fázach vývoja nových funkcií. Po zavedení plánovaných zmien sa s vami preto rád podelím o novozískané poznatky v ďalšom blogovom príspevku.