Pokrytie testami (test coverage) hovorí, ktorý kód sa vykoná pri behu automatizovanej testovacej sady. Podľa jazyka a nástroja vie zaznamenať riadky, vetvy, príkazy alebo funkcie. V legacy codebase poskytuje coverage dôkaz o tom, kde existujú automatizované kontroly, no nedokazuje, že tieto kontroly overujú správne správanie.
Čo coverage meria
Nástroj na meranie coverage sleduje vykonávanie kódu. Ak test zavolá funkciu, jej riadky sa môžu započítať ako pokryté. Ak test prejde len jednou stranou podmienky, druhá vetva zostane nepokrytá. Rôzne merania preto odpovedajú na rôzne otázky o tej istej testovacej sade.
| Typ coverage | Čo zaznamenáva | Čo nedokazuje |
|---|---|---|
| Pokrytie riadkov | Riadky vykonané testami | Správne výstupy ani prítomnosť asercií |
| Pokrytie vetiev | Prejdené výsledky rozhodovaní | Kompletné biznis scenáre |
| Pokrytie funkcií | Zavolané funkcie | Že sa kontroluje zmysluplné správanie |
| Pokrytie príkazov | Vykonané príkazy | Bezpečnú interakciu medzi komponentmi |
Dáta o coverage treba čítať spolu s testami. Sada vie kód vykonať bez toho, aby kontrolovala jeho výsledok. Rovnako vie chrániť kritické správanie malým počtom cielených testov a rutinný kód nechať nepokrytý.
Prečo je legacy coverage nerovnomerné
Staršie systémy často obsahujú kód z rôznych období, od rôznych tímov a s odlišnými zvyklosťami v testovaní. Jadrové moduly môžu mať rozsiahle unit testy, kým plánované úlohy, integračné body alebo toky v používateľskom rozhraní stoja na manuálnych kontrolách. Niektoré testy už v aktuálnom builde nemusia bežať alebo môžu závisieť od prostredí, ktoré sa ťažko obnovujú.
Audit legacy codebase overuje, či sa testovacia sada dá spustiť, čo pokrýva a čo jej asercie skutočne chránia. Zároveň identifikuje biznisovo kritické cesty, ktorým chýba spoľahlivé overenie aj vtedy, keď celkový report vyzerá zdravo.
Ako coverage ovplyvňuje refactoring
Coverage pomáha tímu rozhodnúť, kde si pred zmenou správania rozprestrieť záchrannú sieť. Cieľom je zachytiť, čo systém aktuálne robí na hranici, ktorá sa presúva alebo prepisuje.
Praktický postup vyzerá takto:
- Spustite existujúcu sadu. Zistite, ktoré testy sú v aktuálnom prostredí spoľahlivé.
- Zmapujte kritické správanie. Prepojte biznis toky s kódom, ktorý ich implementuje.
- Nájdite nepokryté cesty. Sústreďte sa na cesty, ktorých sa plánovaná zmena dotkne.
- Doplňte overenie. Použite unit, integračné alebo end-to-end testy na vhodnej hranici.
- Meňte po malých krokoch. Kontroly spúšťajte pri presune každej časti.
Čo coverage nenahradí
Coverage neodhalí, či sú požiadavky správne, či produkčné dáta neobsahujú neočakávané prípady, ani či dva komponenty nezdieľajú nezdokumentovaný predpoklad. Tieto otázky si vyžadujú doménovú znalosť, dôkazy z reálneho behu systému a architektonickú analýzu.
Chýbajúce alebo nespoľahlivé testy môžu tvoriť časť technického dlhu, najmä tam, kde sa tímy vyhýbajú zmenám v dôležitom kóde, pretože si výsledok nevedia overiť. Analýza coverage pomáha tento dlh ohraničiť a podporuje prevzatie neznámej codebase tým, že ukáže, kde automatizované dôkazy existujú a kde ich musí dodať review.