Hlavní obsah
Internet, technologie a elektronika

AI zrychluje vývoj. Bez testů ale zrychluje i chaos

Foto: Google Gemini

Vývojář sleduje síť testů nad komplexním systémem

AI umí vývoj výrazně zrychlit. Bez pevné sítě testů, kontraktů a validací ale stejně rychle roste technický dluh a systém se začne rozpadat.

Článek

AI mění vývoj softwaru velmi prakticky: snižuje odpor ke změně. Úprava rozhraní, refactoring, doplnění testů, migrace části systému nebo změna konfigurace může být hotová výrazně rychleji než dřív. Ne u každého projektu a ne v každém týmu. Aby AI opravdu pomáhala, musí na ni být připraveni nejen vývojáři, ale i analytici, testeři a produktoví manažeři. Tam, kde se to podaří, posouvá tempo vývoje o kus dál.

Stejná síla, která urychlí dodání nové funkce, může urychlit i vznik chyb, polovičatých řešení a technického dluhu. Kód může přibývat rychleji, než ho tým stíhá chápat. Testy mohou přibývat rychleji, než někdo ověří, jestli opravdu chrání důležité chování. Konfigurace se mohou měnit rychleji, než kdokoliv domyslí jejich dopady.

Po několika měsících pak tým může zjistit nepříjemnou věc: systém se sice vyvíjel rychleji, ale zároveň ztratil soudržnost. Ne jedním velkým výbuchem. Spíš plíživě. Přibývají výjimky, workaroundy, nejasná rozhraní, dokumentace a komentáře, kterým už nikdo moc nevěří.

Z toho plyne jednoduché pravidlo: levná změna bez pevné kontroly není výhoda, ale riziko.

Pár unit testů už nestačí

Dlouho se o kvalitě mluvilo hlavně přes unit testy a o pokrytí kódu testy. Máme testy? Máme. Jaké máme pokrytí? Vysoké. Hotovo.

Jenže coverage je slabý důkaz kvality. Říká, že se určitý kód během testu spustil. Neprokazuje, že test ověřil správné chování. Už vůbec nedokazuje, že by selhal při rozbité byznysové logice nebo že chrání kompatibilitu rozhraní, bezpečnost, konfiguraci či chování systému v produkci.

Unit testy jsou pořád důležité. Jsou rychlé, levné a výborné pro lokální logiku: výpočty, validace, rozhodování, transformace dat. Problém začíná ve chvíli, kdy se z nich stane celá testovací strategie.

Typický scénář je známý. Někdo napíše funkci, přidá pár testů a všechno projde. Později přijde refactoring. Testy začnou překážet, protože jsou příliš navázané na implementaci. Někdo je upraví, aby prošly, někdo ne. Pak znovu. Nakonec zůstanou v repozitáři, ale jejich význam se vytratí. Část z nich hlásí chybu, když se je někdo pokusí spustit, i když kód dělá, co má. Jen dělá něco jiného, než na co byly původní unit testy napsány.

AI tenhle problém neřeší automaticky. Umí vytvořit test, který vypadá dobře, má rozumný název, správnou syntaxi a zelený výsledek. Jenže může testovat jen šťastnou cestu, opisovat implementaci nebo mít tak slabé kontroly, že by prošel i při chybné logice.

Nestačí tedy generovat víc testů. Klíčová otázka zní: jak poznáme, že naše testy mají skutečnou sílu?

Moderní systém potřebuje víc než pyramidu

Testovací pyramida je pořád užitečný mentální model: hodně rychlých nízkoúrovňových testů, méně integračních a ještě méně širokých end-to-end scénářů. Jenže dnešní systémy jsou širší než tahle jednoduchá kresba.

Moderní aplikace často není jedna aplikace. Je to složenina služeb, knihoven, pluginů, Docker image, Kubernetes manifestů, databázových schémat, front, API kontraktů, feature flagů a provozních pravidel.

Takový systém se nechová jen podle zdrojového kódu. Chová se podle toho, jak je složený a nastavený konfiguračními soubory.

Proto nestačí testovat izolované funkce. Potřebujeme ověřovat i kompozici: jestli rozšíření splňuje kontrakt, služba načte konfiguraci, dvě služby si rozumějí, změna schématu nerozbije konzumenty, kontejner nastartuje, manifest odpovídá pravidlům platformy, release obsahuje kompatibilní verze a produkce po nasazení ukazuje zdravé metriky.

Tohle už není jen pyramida. Je to propojená síť kontrol.

Každá vrstva hlídá jiné riziko

V kódu dávají smysl unit testy, property-based testing, statická analýza a mutation testing. Tady se chrání lokální logika.

U komponent řešíme rozhraní, lifecycle a konfiguraci. Pokud se komponenta chová podle konfiguračního souboru, pak konfigurace není vedlejší poznámka. Je součástí jejího veřejného kontraktu.

Služba se musí ověřovat jako celek se závislostmi: databází, frontou, cache, externím API, rozšířeními a runtime prostředím.

Na hranicích mezi službami přichází ke slovu contract testy. Microservices bez nich nejsou automaticky špatně, ale riziko roste. Každá služba může mít perfektně zelené lokální testy a přesto rozbít jinou službu změnou pole, eventu, chybového kódu nebo významu hodnoty.

Na úrovni deploymentu se už netestuje jen aplikace, ale nasaditelný celek: image, manifesty, oprávnění, health checky, resource limity, secrets a síťová pravidla.

A v produkci nastupuje realita. Canary, observability, tracing, alerty, SLO, rollback a byznysové metriky nejsou provozní luxus. Jsou poslední pojistka, která ukáže, co se děje pod skutečnou zátěží.

Konfigurace je kód, i když tak nevypadá

Velké systémy se často nerozbijí jednou špatnou funkcí. Rozbijí se špatnou kombinací správných částí.

Jeden plugin je v pořádku. Druhý také. Každá služba projde svými lokálními kontrolami. Ale dohromady vznikne stav, se kterým nikdo nepočítal. Změní se default. V jednom prostředí se zapne jiný režim než v druhém. Nová verze služby se potká se starým nastavením.

Proto konfigurace potřebuje vlastní testovací strategii. Nezáleží na tom, jestli jde o YAML, JSON, INI, .conf, vlastní DSL nebo historický textový formát. Důležité je, aby šla parsovat, převést do srozumitelného modelu, validovat a automaticky ověřovat.

Každá komponenta s vlastním nastavením by měla jasně říkat, co přijímá, co vyžaduje, co zakazuje, jaké má defaulty, co je kompatibilní, co je deprecated a co má skončit chybou.

Nemá to být sada ad hoc skriptů, které zná jeden člověk. Lepší je společný rámec, do kterého jednotlivé části systému dodají vlastní pravidla. Pak se z konfigurace stane ověřitelná součást produktu, ne ruční magie.

Špatná konfigurace má selhat před runtime. Ne až v produkci.

Potřebujeme testy testů

V době AI je snadné napsat test. A testů může vzniknout opravdu hodně. Těžší je poznat, které z nich mají hodnotu.

Test může existovat a přitom nic podstatného nehlídat. Může projít kódem bez užitečné kontroly. Může ověřovat detail, který nikoho nezajímá. Může být tak křehký, že ho vývojáři při každé změně přepíšou. Nebo tak obecný, že nikdy neselže.

Proto potřebujeme ověřovat i testovací sadu.

Mutation testing je v tomhle směru jeden z nejpřísnějších nástrojů. Do produkčního kódu se uměle zavede malá chyba a sleduje se, jestli ji testy odhalí. Když projdou i po rozbití logiky, problém není v aplikaci, ale v testech.

Stejný princip se dá použít i u konfigurace. Vypnout plugin, změnit timeout, odebrat povinné pole, přehodit pořadí, rozbít povolenou kombinaci. A pak se ptát: zachytila to validace, automatický test nebo policy?

Jestli ne, systém má slepé místo.

AI má pomáhat, ale nesmí být zdrojem pravdy

AI může testování výrazně posílit. Ne tím, že „napíše nějaké testy“, ale tím, že pomůže udržet přehled v systému, který je pro člověka příliš rozsáhlý.

Může číst diff, kontrakty, konfigurace, katalog služeb i historii incidentů. Může navrhovat testovací scénáře, hledat edge cases, generovat negativní vstupy, vysvětlovat selhání pipeline, pomáhat s flaky testy nebo navrhnout test pro mutanta, který přežil.

To je reálná hodnota. Ale AI nesmí být finální gatekeeper.

O tom, jestli změna projde, mají rozhodovat opakovatelné a deterministické mechanismy: testy, validátory, kontrakty, policies, statická analýza, CI/CD a produkční sledovatelnost. Jinak se z AI stane jen další vrstva nepředvídatelnosti.

Kvalitu musí někdo vlastnit

Testy nejsou jednorázová investice. Jsou živá infrastruktura. Bez vlastníka začnou hnít.

Flaky testy se začnou tolerovat. Staré scénáře přestanou odpovídat realitě. Nové kontroly se budou psát formálně. Pokrytí poroste, ale důvěra klesne. Pipeline zpomalí a vývojáři ji začnou obcházet.

To není technická drobnost. To je organizační problém.

Zdravý systém potřebuje jasné vlastnictví komponent, kontraktů, konfigurací a testů. Platforma má poskytovat společné rámce, pravidla a automatizaci. Produktové týmy musí nést odpovědnost za kvalitu svých částí. Bez toho se kontrolní infrastruktura rozpadne stejně jako špatně udržovaná architektura.

AI na tom nic nemění. Jen rychleji ukáže, jestli tým disciplínu má, nebo nemá.

Pointa

Vývoj s AI není jen rychlejší psaní kódu. Je to změna tempa celého systému. Vyšší tempo proto vyžaduje kratší, spolehlivější a tvrdší zpětnou vazbu.

Týmy, které budou s AI jen rychleji generovat kód, narazí. Ne hned, ale brzy. Systém se začne plnit neudržovanými testy, nejasnými kontrakty, křehkou konfigurací a změnami, jejichž dopad nikdo neumí přesně odhadnout.

Týmy, které k AI přidají pevnou síť automatických kontrol, získají skutečnou výhodu. Budou schopné měnit systém rychleji, ale pořád pod kontrolou. Testy pro ně nebudou povinnost do checklistu, nýbrž infrastruktura důvěry.

Bez takové infrastruktury AI zrychlí entropii.

S ní může zrychlit vývoj, aniž by se systém začal rozpadat pod rukama.

Transparentnost tvorby:

Koncepce, struktura a redakční linie článku jsou dílem autora, který připravil obsahovou skicu, stanovil klíčové teze a řídil celý proces tvorby. Generativní AI - ChatGPT od OpenAI - byla využita jako pracovní nástroj pro rešerši, dohledávání zdrojů, kontrolu formulací a rozpracování autorovy skici.

Autor výstupy průběžně redigoval, ověřil klíčová zjištění a schválil finální znění. Žádná část textu nebyla publikována bez lidské kontroly. Faktické údaje byly ověřovány proti veřejně dostupným zdrojům.

Tento postup odpovídá principu transparentnosti při využití generativní AI a směřuje k požadavkům čl. 50 Nařízení EU 2024/1689 (AI Act) na označování obsahu generovaného či upravovaného AI. #poweredByAI

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Související témata:

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít publikovat svůj obsah. To nejlepší se může zobrazit i na hlavní stránce Seznam.cz