Regresní testování v mobilním vývoji — co to je, typy a jak se provádí

Autor: IT Sectr Publikováno: 2026-04-07 Doba čtení: 8 min

Regresní testování je proces opětovné kontroly aplikace po provedení změn za účelem odhalení defektů v dříve fungující funkcionalitě. Každá změna kódu — nová funkcionalita, oprava chyby nebo refaktoring — může neúmyslně narušit stávající možnosti aplikace. Regresní testy automatizují ověření, že stará funkcionalita zůstala funkční. Podle studie IBM, 2023 pokrývá regresní testování 30 až 70 % všech prováděných testů v komerčních produktových týmech, což zdůrazňuje jeho roli jako hlavní bariéry proti produkčním incidentům.

Hlavní body

  • Regresní testování — kontrola aplikace po změnách zaručující, že stávající funkcionalita nadále pracuje správně.
  • Úplný regresní běh spouští všechny existující testy projektu a trvá od 30 minut po několik hodin v závislosti na velikosti sady.
  • Selektivní regresní testování spouští pouze testy související se změněným kódem a zkracuje dobu běhu o 60–80 %.
  • Integrace CI/CD je povinná: regresní testy se provádějí automaticky při každém pull request a před vydáním.
  • Testovací pyramida doporučuje 70 % unit testů v regresní sadě pro rovnováhu mezi rychlostí a hloubkou pokrytí.

Co je regresní testování?

Regresní testování je typ testování zaměřený na potvrzení, že změny v kódu nenarušily stávající funkcionalitu. Termín „regrese” znamená návrat k horšímu stavu — když funkce, která fungovala v předchozí verzi, přestane fungovat v nové. Regresní testy se provádějí opakovaně v každém vývojovém cyklu, což je odlišuje od testů nové funkcionality, které se píší jednorázově.

Potřeba regresního testování vyplývá z efektu kaskádových změn: oprava chyby v jednom modulu může vyřešit problém, ale narušit sousední funkcionalitu, která na něm závisela. Například změna SQL dotazu v úložišti uživatelů může urychlit přihlášení, ale narušit export dat, který používal stejný dotaz. Regresní test exportu dat odhalí toto narušení před vydáním.

Podle zprávy CISQ 2023 jsou náklady na opravu regresního defektu odhaleného v produkci 15krát vyšší než ve fázi automatizovaného regresního běhu. Společnosti investující do automatizovaného regresního testování snižují podíl regresních defektů ve vydáních z 25 % na 5 % do jednoho roku po implementaci, podle Capgemini World Quality Report.

Typy regresního testování

Existuje několik přístupů k regresnímu testování, které se liší rozsahem a kritérii výběru testů. Výběr přístupu závisí na velikosti projektu, frekvenci změn a dostupném čase v CI pipeline. Níže jsou uvedeny hlavní typy regresního testování s jejich charakteristikami.

Úplné regresní testování

Úplný regresní běh provádí všechny automatizované testy projektu bez výjimky. Tento přístup poskytuje maximální jistotu, ale vyžaduje značné výpočetní zdroje a čas. Úplný běh se provádí před velkými vydáními — jednou za 2–4 týdny. Pro aplikaci s 5000 testy trvá úplný běh 2 až 6 hodin v závislosti na infrastruktuře.

Selektivní regresní testování

Selektivní přístup spouští pouze testy související se změněnými moduly. Pro určení souvislosti se používá analýza závislostí na úrovni kódu: pokud byla změněna třída UserRepository, spouštějí se testy závislé na UserRepository přímo nebo tranzitivně. Nástroje Jacoco, Android Test Coverage a Xcode Code Coverage poskytují mapy pokrytí pro přesný výběr. Selektivní běh se provádí při každém pull request a trvá 5–15 minut.

Regrese založená na riziku

Risk-based regrese řadí testy podle kritičnosti funkcionality a pravděpodobnosti rozbití. Kritické funkce — platba, autorizace, synchronizace — jsou testovány při každé změně kódu. Pomocné funkce — obrazovka „O aplikaci”, animace — jsou testovány pouze před vydáním. Pořadí je přezkoumáváno čtvrtletně na základě údajů o produkčních incidentech.

Jak se regresní testování liší od retestu

Pojmy regresního testování a retestu jsou často zaměňovány, i když jde o odlišné procesy. Retest je opětovné spuštění konkrétního testu, který dříve selhal, po opravě defektu. Cílem retestu je ujistit se, že oprava funguje: chyba se již nereprodukuje. Retest se provádí jednorázově, ihned po opravě a potvrzení opravy vývojářem.

Regresní testování je spouštění testů na stávající funkcionalitu, která NEBYLA změněna. Cílem je ujistit se, že oprava jednoho defektu nevytvořila nový defekt na jiném místě. Regresní testy se spouštějí opakovaně v každém vývojovém cyklu, bez ohledu na to, jaké konkrétní chyby byly opravovány. Hlavní rozdíl: retest kontroluje samotnou opravu, regrese kontroluje důsledky opravy.

V CI/CD pipeline se oba procesy provádějí sekvenčně. Po sloučení pull request se spustí retest konkrétní chyby a poté úplný nebo selektivní regresní běh. Podle SmartBear (2022) zkracuje oddělení těchto procesů dobu diagnostiky neúspěšných CI běhů o 30 %, protože tým okamžitě vidí, která část defektů souvisí s regresí a která s nefunkčními opravami.

Automatizace regresního testování

Automatizace regresního testování je kritickým faktorem úspěchu pro moderní mobilní projekty. Ruční regresní testování není škálovatelné: při sadě 200 testů vyžaduje jeden běh 2–3 pracovní dny QA inženýra, což znemožňuje každodenní běhy. Automatizované regresní testy se provádějí za 10–60 minut bez lidského zásahu, což umožňuje jejich spouštění při každém commitu nebo pull request.

  • Unit testy — základ regresní sady (70 %). Provádějí se v sekundách, nevyžadují emulátor, přesně ukazují na rozbitou třídu.
  • Integrační testy — druhá úroveň (20 %). Kontrolují síťovou vrstvu, databázi a systémové služby s řízenými závislostmi.
  • UI a E2E testy — vrchol pyramidy (10 %). Pokrývají kritické uživatelské scénáře: registraci, platbu, synchronizaci.

Pro udržování regresní sady v aktuálním stavu se používá testovací analytika: nástroje jako Allure, ReportPortal a Xray sledují procenta úspěšnosti, dobu trvání a stabilitu každého testu. Testy, jejichž stabilita klesne pod 90 % (často se rozbijí kvůli změnám v požadavcích), jsou označeny jako legacy a odeslány k přezkoumání vlastníkovi.

Příklad konfigurace regresního testu

Podívejme se na konfiguraci automatizovaného regresního testu na Androidu s použitím knihovny JUnit 5 a Espresso. Příklad demonstruje selektivní regresi — test kontroluje, že po refaktoringu úložiště uživatelů nebyla rozbita obrazovka profilu. Pro iOS se používá XCTest s analogickou logikou — opakující se test klíčového scénáře.

Android: regresní test profilu

Test používá MockWebServer pro emulaci serveru a kontroluje celou cestu: načtení dat uživatele, zobrazení na obrazovce profilu a zpracování chyby při nedostupném serveru. Takové testy jsou zahrnuty do regresní sady a provádějí se při každé změně v module-profile.

kotlin
@RunWith(AndroidJUnit4::class)
class ProfileRegressionTest {

    @get:Rule
    val composeRule = createComposeRule()

    @Test
    fun profileScreen_rendersCorrectly() {
        val user = User(id = 1, name = "Alice", email = "alice@test.com")
        composeRule.setContent {
            ProfileScreen(user)
        }
        composeRule.onNodeWithText("Alice").assertIsDisplayed()
        composeRule.onNodeWithText("alice@test.com").assertIsDisplayed()
    }

    @Test
    fun profileScreen_handlesNetworkError() {
        setNetworkError()
        composeRule.onNodeWithText("Chyba načítání").assertIsDisplayed()
    }
}

iOS: regresní test s XCTest

Pro iOS používá regresní test XCTestExpectation pro asynchronní kontrolu aktualizace UI po obdržení dat z API. Test emuluje síťovou odpověď a kontroluje, zda se prvky UI správně aktualizovaly.

swift
class ProfileRegressionTests: XCTestCase {
    func testProfileScreen_rendersCorrectly() {
        let viewModel = ProfileViewModel(userId: 1)
        let view = ProfileView(viewModel: viewModel)
        viewModel.loadProfile()

        let expectation = expectation(description: "profile loaded")
        viewModel.onProfileLoaded = {
            XCTAssertEqual(viewModel.userName, "Alice")
            XCTAssertEqual(viewModel.userEmail, "alice@test.com")
            expectation.fulfill()
        }
        waitForExpectations(timeout: 3.0)
    }
}

Strategie budování regresní sady

Budování efektivní regresní sady je iterativní proces založený na datech o defektech a změnách kódu. Primární strategie je zahrnout všechny existující testy do regresní sady a spouštět úplný běh před každým vydáním. S růstem testovací základny (nad 2000 testů) se úplný běh stává příliš dlouhým a je vyžadován selektivní přístup.

Druhá fáze — zavedení nástrojů pro analýzu závislostí: Jacoco pro Android, Xcode Test Plan pro iOS. Tyto nástroje vytvářejí mapu „test — třída — metoda” a umožňují určit, které testy jsou ovlivněny konkrétní změnou. Selektivní běh založený na analýze pokrytí zkracuje dobu provádění o 60–80 % při zachování 95% účinnosti detekce regresí, podle Spotify Engineering (2022).

Třetí fáze — nepřetržitý monitoring a optimalizace. Testy, které neselhaly po dobu 6 měsíců, jsou přesunuty do nízko-prioritní sady. Testy selhávající častěji než jednou měsíčně jsou kandidáty na přezkoumání: buď zachycují skutečné problémy (vyžadují opravu), nebo jsou příliš křehké (vyžadují stabilizaci). Čtvrtletní revize regresní sady je standardní praxí pro udržení její účinnosti a rychlosti provádění.

Často kladené otázky

Jak často by se měly spouštět regresní testy?

Selektivní regresní běh — při každém pull request. Úplný regresní běh — před každým vydáním a týdně (nightly build). Klíčové pravidlo: čím častější spouštění, tím rychleji jsou regrese odhaleny a tím nižší jsou náklady na jejich opravu. Pro kritické projekty je možná plná regrese při každém sloučení.

Které testy zahrnout do regresní sady?

Všechny unit testy (základní regrese), integrační testy na klíčové komponenty a UI testy na kritické uživatelské scénáře. Nezahrnujte testy experimentální funkcionality, testy s flakiness nad 10 % a testy vyžadující ruční prostředí.

Jak udržovat regresní sadu v aktuálním stavu?

Odstraňte testy odstraněné funkcionality, aktualizujte testy při změně požadavků, provádějte čtvrtletní audit sady. CI analytika — Allure, ReportPortal — pomáhá identifikovat testy, které ztratily aktuálnost: pokud se test 3 měsíce nezměnil a neselhal, je kandidátem na odstranění z denního běhu.

Jak zkrátit dobu regresního běhu?

Používejte paralelní spouštění testů na více zařízeních, zaveďte selektivní regresi založenou na analýze pokrytí změněného kódu, vypněte vizuální snímky pro irelevantní obrazovky. Cílový čas selektivního běhu — 5–10 minut, úplného — ne více než 2 hodiny.

Je regresní testování pouze automatizace?

Ne, regresní testování zahrnuje také ruční kontroly: průzkumné testování po vydání, UX regresi a kontrolu přístupnosti po změně rozhraní. Automatizace pokrývá 70–80 % regresních kontrol; zbývajících 20–30 % tvoří ruční testy zaměřené na scénáře, které nelze nebo je příliš nákladné automatizovat.

Shrnutí

  • Regresní testování — opakovaná kontrola stávající funkcionality po každé změně kódu k odhalení neúmyslných rozbití.
  • Úplný regresní běh poskytuje maximální jistotu před vydáním; selektivní — provádí se při každém pull request, šetří 60–80 % času.
  • Retest kontroluje konkrétní opravu; regrese kontroluje, že oprava nerozbila nic okolo — jedná se o odlišné procesy v CI/CD pipeline.
  • Testovací pyramida pro regresi: 70 % unit, 20 % integračních, 10 % UI a E2E testů.
  • Selektivní regrese založená na analýze pokrytí (Jacoco, Xcode Test Plan) zkracuje dobu běhu bez ztráty kvality.
  • Čtvrtletní revize testovací sady a CI analytika udržují účinnost regresního testování.
  • Automatizace pokrývá 70–80 % regresních kontrol; ruční testy doplňují automatizaci pro průzkumné a UX testování.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také