Jump to content

Jak efektivně ladit JavaScript přímo v prohlížeči: Difference between revisions

From Babylon SIGNALIS Wiki
Created page with "Další pastí je ignorování testovacích dat a prostředí. I skvěle napsaný test selže, pokud nemá stabilní vstupní data. Proto si vytvořte pomocné funkce pro generování dat, používejte fiktivní objekty a pro integrační testy připravte izolovanou databázi. Když narazíte na test, který vyžaduje ruční zásah, vždy ho upravte: automatizace má být spolehlivá a opakovatelná. A pokud se vám nějaký test stane nečitelným, raději ho přepišt..."
 
mNo edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Další pastí je ignorování testovacích dat a prostředí. I skvěle napsaný test selže, pokud nemá stabilní vstupní data. Proto si vytvořte pomocné funkce pro generování dat, používejte fiktivní objekty a pro integrační testy připravte izolovanou databázi. Když narazíte na test, který vyžaduje ruční zásah, vždy ho upravte: automatizace má být spolehlivá a opakovatelná. A pokud se vám nějaký test stane nečitelným, raději ho přepište, než byste měli později rozplétat změť tvrzení.<br><br>Jak se vyhnout anonymnímu sypání stížností Častou chybou je, že strukturovaná zpětná vazba sklouzne k anonymnímu výpisu problémů bez návrhů řešení. Pokud někdo řekne „nesnáším daily ráno", okamžitě se zeptejte: „Jak bys to chtěl změnit?" nebo „Co by ti pomohlo, abys to vnímal jinak?" Tím donutíte lidi přemýšlet v řešeních, nejen v kritice. Stejně tak si hlídejte, aby se diskuze nerozpadla na osobní útoky. Když zazní „Petr pořád mešká", přeformulujte to na „Proces předávání úkolů mezi námi není jasný – co s tím uděláme?" Tím udržíte zaměření na systém, ne na jednotlivce.<br><br>Pokud přicházíte z čistého JavaScriptu, první setkání s TypeScriptem může působit jako zbytečná byrokracie. Po pár dnech práce si ale začnete všímat, že mnoho chyb, které jste dříve odhalovali až za běhu, se nyní objeví přímo v editoru. TypeScript není samostatný jazyk, ale nadstavba, která do JavaScriptu přidává statické typování. Jeho hlavní přínos spočívá v tom, že umožňuje lépe popsat tvary dat a vztahy mezi nimi, což oceníte zejména u větších projektů nebo týmové spolupráce.<br><br>Retrospektiva týmu často skončí u obecných frází a pocitů, ze kterých nevzejde žádná změna. Místo „bylo to dobré" nebo „nestíháme" potřebujete konkrétní data a podněty. Strukturovaná zpětná vazba není o formalitách, ale o tom, že každý člen týmu ví, na co se má zaměřit a jak svůj postřeh podat tak, aby mu ostatní rozuměli. Základem je předem daná osnova, která zabrání chaosu a zajistí, že se dostane ke slovu každý.<br><br>Práce s breakpointy a krokováním kódu Nejefektivnější způsob, jak pochopit, co se v kódu děje, je zastavit jeho běh v přesně určeném místě. Otevřete DevTools (obvykle klávesou F12 nebo přes kontextovou nabídku) a přejděte do záložky Sources. Zde najdete všechny načtené skripty. Kliknutím na číslo řádku nastavíte breakpoint – červená značka označuje místo, kde se běh zastaví. Poté už jen obnovíte stránku a kód se zastaví přesně tam, kde potřebujete. V tuto chvíli můžete najet myší na proměnnou a zobrazit její aktuální hodnotu, nebo použít panel Scope pro sledování všech lokálních i globálních proměnných. Krokování (Step over, Step into, Step out) vám umožní procházet kód řádek po řádku. Dejte si pozor na to, abyste omylem nekrokovali do externích knihoven to vás jen zdrží. Pomocí pravého tlačítka na breakpointu můžete nastavit podmínku, takže se zastaví pouze tehdy, když je splněna určitá logická podmínka.<br><br>Druhým krokem je vytvoření vlastního portfolia. Nemusíte mít přístup k placeným nástrojům – postačí vám bezplatné aplikace, které dobře znáte, nebo dokonce vlastní malý projekt. Vyberte si jednoduchou webovou stránku nebo mobilní aplikaci a začněte ji systematicky testovat. Zapisujte si každý nález do tabulky: popište krok, jakým jste problém reprodukovali, očekávané chování, skutečné chování a případně i prioritu. Dbejte na to, aby váš popis byl srozumitelný i pro člověka, který aplikaci nezná. Tento dokument pak poslouží jako ukázka vaší práce při pohovoru. Častým omylem je testování pouze „šťastné cesty" tedy že vše funguje, když uživatel postupuje správně. Zkuste se zaměřit na okrajové případy, prázdná pole, nezvyklé vstupy nebo přerušení připojení.<br><br>Čas od času se vyplatí pyramidu přehodnotit. Nejde o statický artefakt, ale o živý nástroj. Jakmile přidáte nový modul, zkontrolujte, zda má odpovídající pokrytí na každé úrovni. Když zjistíte, že se integrační testy opakují, přesuňte část logiky do nižší vrstvy. Tím udržíte náklady na údržbu pod kontrolou a testy vám budou sloužit, ne naopak.<br><br>Testovací pyramida je jedním z nejpraktičtějších konceptů, které můžete při vývoji softwaru využít. Nejde o žádnou formalitu, ale o princip, který výrazně ovlivní stabilitu i rychlost vašeho kódu. Základní myšlenka je jednoduchá: čím nižší úroveň testu, tím rychlejší a levnější by měl být. Proto se doporučuje stavět na široké základně jednotkových testů, uprostřed mít menší vrstvu integračních testů a na vrcholu jen minimum end-to-end testů.<br><br>Automatické rozpoznání podle obsahu souboru Někdy nestačí přípona, zvlášť když máte soubory, které obsahují mix jazyků, například šablony HTML s vestavěným JavaScriptem nebo Pythonem. V takovém případě využijte funkci „associate file with language" nebo si napište vlastní pravidla. V mnoha IDE stačí kliknout na jazyk v pravém dolním rohu a vybrat správnou asociaci. Důležité je také zapnout detekci podle prvního řádku souboru, jako je shebang u skriptů, a nastavit si klávesové zkratky pro rychlé přepínání mezi jazyky.
Kde se nejčastěji ztrácí čas Největším zdrojem nepřesností jsou skryté závislosti a chybějící specifikace. Pokud zadání není jasné, odhadněte čas na vyjasnění a do odhadu zahrňte rezervu na změny rozsahu. Vždy počítejte s tím, že se během vývoje objeví nečekané problémy — zastaralé knihovny, nesoulad verzí nebo chybná data. Přidejte proto k celkovému času rezervu 20–30 % pro neznámé. Tato rezerva není zbytečná, je to investice do reálnosti.<br><br>Kdy už pokrytí přestává být užitečné? Když se pohybuje nad 90 % a další zvyšování vyžaduje psát testy pro triviální gettery, settery nebo chybové větve, které se v praxi nevyskytují. Takové testy jen zvyšují údržbu a zpomalují vývoj. Stejně tak pokrytí ztrácí smysl u jednorázových skriptů nebo prototypů, kde je rychlost důležitější než robustnost. Pokud tým začne hrát na čísla a upravovat kód, aby vyhověl měření (např. spojováním podmínek), je to jasný signál, že metrika škodí. V tu chvíli je lepší se zaměřit na mutační testování nebo na počet nalezených chyb v produkci.<br><br>TypeScript se nejvíc osvědčí ve větších projektech, kde je potřeba udržet přehled o datech a funkcích. I v malých projektech ale pomůže odhalit překlepy a nesmyslné operace. Nezapomeňte, že TypeScript se kompiluje do JavaScriptu, takže výsledný kód poběží všude, kde běží JavaScript. Pokud si osvojíte typové rozhraní a striktní režim, budete efektivnější a váš kód bude mít méně chyb. Začněte dnes – vezměte jeden soubor a přidejte mu typy. Uvidíte, jak rychle se to projeví.<br><br>Automatizace nasazení je jednou z prvních věcí, které byste měli ve svém projektu zavést, pokud chcete ušetřit čas a předejít chybám. GitHub Actions nabízí integrované řešení přímo v repozitáři, takže nemusíte provozovat žádný externí server. Pro menší týmy i středně velké projekty je to obvykle nejpraktičtější volba, protože konfigurace je deklarativní a veškerá historie běhů zůstává přehledně na jednom místě.<br><br>Když se JavaScriptová aplikace chová jinak, než očekáváte, první zastávka by měla být v nástrojích pro vývojáře, které jsou součástí každého moderního prohlížeče. Nemusíte hned instalovat složité externí ladicí nástroje – stačí otevřít konzoli (obvykle klávesou F12 nebo přes nabídku) a začít pátrat. Klíčové je naučit se efektivně používat panel zdrojového kódu, kde můžete procházet soubory, nastavovat přerušení a sledovat hodnoty proměnných v reálném čase.<br><br>Při měření se zaměřte na tři čísla: pokrytí řádků, pokrytí větví (branch) a pokrytí podmínek. Řádky ukazují, kolik kódu se vůbec provedlo, větve odhalují, zda testy procházejí oběma cestami u podmínek, a podmínky kontrolují kombinace logických výrazů. Většinou stačí sledovat pokrytí řádků a větví, protože pokrytí podmínek je už hodně detailní a pro běžné projekty může být zavádějící. Praktický postup: nastavte ve CI minimální hranici pokrytí, ale ne jako tvrdý limit, spíš jako varování. Pokud pokrytí klesne pod 80 % u kritických modulů, build by měl upozornit, ale ne blokovat blokování vede k obcházení testů.<br><br>Jakmile máte Docker v provozu, začněte s jednoduchým projektem. Vytvořte složku, do ní vložte soubor s názvem Dockerfile a do něj napište následující řádky: FROM node:20-alpine, WORKDIR /app, COPY . ., RUN npm install a CMD ["node", "server.js"]. Tento Dockerfile říká Dockeru, aby použil oficiální obraz Node.js, nastavil pracovní složku, zkopíroval soubory, nainstaloval závislosti a spustil server. Poté v terminálu spusťte docker build -t moje-aplikace . (tečka na konci je důležitá označuje aktuální složku). Po úspěšném buildu spustíte kontejner příkazem docker run -p 3000:3000 moje-aplikace. Parametr -p mapuje port z kontejneru na váš počítač, takže aplikaci otevřete v prohlížeči na adrese localhost:3000.<br><br>Základní workflow začíná souborem ve složce .github/workflows. Název souboru si zvolte podle účelu, například ci.yml. Na začátku definujete události, které pipeline spouští – nejčastěji push do větve main a pull requesty. Dále specifikujete Runner, tedy prostředí, na kterém se úlohy vykonávají. Pro JavaScript a Python stačí obvykle ubuntu-latest, ale pokud potřebujete Windows nebo macOS, GitHub nabízí i tyto varianty. Vždy je vhodné pinout verzi runneru, abyste předešli nečekaným změnám ve výchozím prostředí.<br><br>Pokrytí začíná být užitečné, když ho používáte k hledání děr v testech, ne jako cíl sám o sobě. Dobrý postup je analyzovat report po každém větším refaktoringu – pokud pokrytí kleslo, pravděpodobně jste změnili chování, které testy nekontrolovaly. Naopak pokud pokrytí roste, ale počet chyb se nesnižuje, je to známka, že testy nejsou kvalitní. Sledujte také pokrytí u nově přidaných částí kódu – to je nejcennější ukazatel, protože starý kód může mít vysoké pokrytí, ale už netestuje to podstatné.

Latest revision as of 19:04, 21 August 2026

Kde se nejčastěji ztrácí čas Největším zdrojem nepřesností jsou skryté závislosti a chybějící specifikace. Pokud zadání není jasné, odhadněte čas na vyjasnění a do odhadu zahrňte rezervu na změny rozsahu. Vždy počítejte s tím, že se během vývoje objeví nečekané problémy — zastaralé knihovny, nesoulad verzí nebo chybná data. Přidejte proto k celkovému času rezervu 20–30 % pro neznámé. Tato rezerva není zbytečná, je to investice do reálnosti.

Kdy už pokrytí přestává být užitečné? Když se pohybuje nad 90 % a další zvyšování vyžaduje psát testy pro triviální gettery, settery nebo chybové větve, které se v praxi nevyskytují. Takové testy jen zvyšují údržbu a zpomalují vývoj. Stejně tak pokrytí ztrácí smysl u jednorázových skriptů nebo prototypů, kde je rychlost důležitější než robustnost. Pokud tým začne hrát na čísla a upravovat kód, aby vyhověl měření (např. spojováním podmínek), je to jasný signál, že metrika škodí. V tu chvíli je lepší se zaměřit na mutační testování nebo na počet nalezených chyb v produkci.

TypeScript se nejvíc osvědčí ve větších projektech, kde je potřeba udržet přehled o datech a funkcích. I v malých projektech ale pomůže odhalit překlepy a nesmyslné operace. Nezapomeňte, že TypeScript se kompiluje do JavaScriptu, takže výsledný kód poběží všude, kde běží JavaScript. Pokud si osvojíte typové rozhraní a striktní režim, budete efektivnější a váš kód bude mít méně chyb. Začněte dnes – vezměte jeden soubor a přidejte mu typy. Uvidíte, jak rychle se to projeví.

Automatizace nasazení je jednou z prvních věcí, které byste měli ve svém projektu zavést, pokud chcete ušetřit čas a předejít chybám. GitHub Actions nabízí integrované řešení přímo v repozitáři, takže nemusíte provozovat žádný externí server. Pro menší týmy i středně velké projekty je to obvykle nejpraktičtější volba, protože konfigurace je deklarativní a veškerá historie běhů zůstává přehledně na jednom místě.

Když se JavaScriptová aplikace chová jinak, než očekáváte, první zastávka by měla být v nástrojích pro vývojáře, které jsou součástí každého moderního prohlížeče. Nemusíte hned instalovat složité externí ladicí nástroje – stačí otevřít konzoli (obvykle klávesou F12 nebo přes nabídku) a začít pátrat. Klíčové je naučit se efektivně používat panel zdrojového kódu, kde můžete procházet soubory, nastavovat přerušení a sledovat hodnoty proměnných v reálném čase.

Při měření se zaměřte na tři čísla: pokrytí řádků, pokrytí větví (branch) a pokrytí podmínek. Řádky ukazují, kolik kódu se vůbec provedlo, větve odhalují, zda testy procházejí oběma cestami u podmínek, a podmínky kontrolují kombinace logických výrazů. Většinou stačí sledovat pokrytí řádků a větví, protože pokrytí podmínek je už hodně detailní a pro běžné projekty může být zavádějící. Praktický postup: nastavte ve CI minimální hranici pokrytí, ale ne jako tvrdý limit, spíš jako varování. Pokud pokrytí klesne pod 80 % u kritických modulů, build by měl upozornit, ale ne blokovat – blokování vede k obcházení testů.

Jakmile máte Docker v provozu, začněte s jednoduchým projektem. Vytvořte složku, do ní vložte soubor s názvem Dockerfile a do něj napište následující řádky: FROM node:20-alpine, WORKDIR /app, COPY . ., RUN npm install a CMD ["node", "server.js"]. Tento Dockerfile říká Dockeru, aby použil oficiální obraz Node.js, nastavil pracovní složku, zkopíroval soubory, nainstaloval závislosti a spustil server. Poté v terminálu spusťte docker build -t moje-aplikace . (tečka na konci je důležitá – označuje aktuální složku). Po úspěšném buildu spustíte kontejner příkazem docker run -p 3000:3000 moje-aplikace. Parametr -p mapuje port z kontejneru na váš počítač, takže aplikaci otevřete v prohlížeči na adrese localhost:3000.

Základní workflow začíná souborem ve složce .github/workflows. Název souboru si zvolte podle účelu, například ci.yml. Na začátku definujete události, které pipeline spouští – nejčastěji push do větve main a pull requesty. Dále specifikujete Runner, tedy prostředí, na kterém se úlohy vykonávají. Pro JavaScript a Python stačí obvykle ubuntu-latest, ale pokud potřebujete Windows nebo macOS, GitHub nabízí i tyto varianty. Vždy je vhodné pinout verzi runneru, abyste předešli nečekaným změnám ve výchozím prostředí.

Pokrytí začíná být užitečné, když ho používáte k hledání děr v testech, ne jako cíl sám o sobě. Dobrý postup je analyzovat report po každém větším refaktoringu – pokud pokrytí kleslo, pravděpodobně jste změnili chování, které testy nekontrolovaly. Naopak pokud pokrytí roste, ale počet chyb se nesnižuje, je to známka, že testy nejsou kvalitní. Sledujte také pokrytí u nově přidaných částí kódu – to je nejcennější ukazatel, protože starý kód může mít vysoké pokrytí, ale už netestuje to podstatné.