<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://crabcodex.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ElmoZimmerman</id>
	<title>CrabCodex - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://crabcodex.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ElmoZimmerman"/>
	<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php/Special:Contributions/ElmoZimmerman"/>
	<updated>2026-10-03T20:22:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://crabcodex.com/index.php?title=Kdy%C5%BE_se_testy_mno%C5%BE%C3%AD,_rozhoduje_jejich_uspo%C5%99%C3%A1d%C3%A1n%C3%AD&amp;diff=186354</id>
		<title>Když se testy množí, rozhoduje jejich uspořádání</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Kdy%C5%BE_se_testy_mno%C5%BE%C3%AD,_rozhoduje_jejich_uspo%C5%99%C3%A1d%C3%A1n%C3%AD&amp;diff=186354"/>
		<updated>2026-10-01T16:20:26Z</updated>

		<summary type="html">&lt;p&gt;ElmoZimmerman: Created page with &amp;quot;Vyhněte se dvěma častým omylům. Prvním je snaha mít „test na všechno&amp;quot; a měřit kvalitu procentem pokrytí. Pokrytí říká, co je spuštěno, ne co je ověřeno. Druhým je ignorování rychlosti. Test, který běží deset minut, vývojáři přestanou pouštět. Rozdělte sadu na rychlou, která běží při každém commitu, a pomalou, která se spouští před vydáním. Každý test musí mít jasný důvod, [http://www.supergame.one/home.php?mod=space&amp;amp;u...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vyhněte se dvěma častým omylům. Prvním je snaha mít „test na všechno&amp;quot; a měřit kvalitu procentem pokrytí. Pokrytí říká, co je spuštěno, ne co je ověřeno. Druhým je ignorování rychlosti. Test, který běží deset minut, vývojáři přestanou pouštět. Rozdělte sadu na rychlou, která běží při každém commitu, a pomalou, která se spouští před vydáním. Každý test musí mít jasný důvod, [http://www.supergame.one/home.php?mod=space&amp;amp;uid=2521685 rady pro rekonstrukci]č existuje. Když ho neumíte pojmenovat, pravděpodobně jen zdržuje.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Zaveďte oddělené spouštění: jednotkové testy při každém uložení souboru, integrační před commitem nebo v CI. Nikdy nemíchejte obě vrstvy v jednom cíli, jinak přijdete o rychlou zpětnou vazbu. Sdílená fixtures a pomocné buildery držte v samostatném modulu, ať se nekopírují mezi vrstvami. Pozor na globální stav – statické proměnné, mezipaměti a časovače způsobují, že integrační testy procházejí jen v určitém pořadí.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Konflikty řešte hned, ne odkladem. Pokud při rebase narazíte na konflikt, přečtěte si obě strany a rozhodněte, která verze je správná. Nikdy nenechávejte v souboru značky konfliktu ani „obě varianty&amp;quot; [http://bbs.wj10001.com/home.php?mod=space&amp;amp;uid=3069509 rady pro rekonstrukci] jistotu — [https://www.Reddit.com/r/howto/search?q=t%C3%ADm%20vznik%C3%A1 tím vzniká] kód, kterému nikdo nerozumí. Po vyřešení spusťte testy znovu, protože sloučení mohlo změnit chování i tam, kde konflikt nebyl.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktický postup je jednoduchý. Nejdřív napište unit testy pro novou logiku. Potom přidejte integrační test pro každé nové propojení, které může selhat. A e2e test doplňte jen tam, kde by chyba znamenala, že uživatel nemůže dokončit klíčovou činnost. Poměr se bude lišit podle typu projektu, ale základna má vždy převažovat. U knihovny může být poměr výrazně ve prospěch unit testů, u aplikace s mnoha rozhraními se integrační vrstva rozroste.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Začni tím, že si v projektu spustíš git init. Tím vznikne skrytý adresář .git, kam se ukládá veškerá historie. Potom přidej soubory do indexu pomocí git add a ulož je příkazem git commit -m &amp;quot;popis změny&amp;quot;. Pozor na typickou chybu: lidé napíšou git commit bez předchozího git add a diví se, že se nic neuložilo. Index funguje jako přípravná zóna – co tam nedáš, to se necommitne.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Větve, konflikty a jak je řešit bez paniky Větve ti umožní zkoušet změny, aniž bys rozbil hlavní verzi. Vytvoříš ji příkazem git branch nazev a přepneš se pomocí git checkout nazev. Když na větvi dokončíš práci, sloučíš ji do hlavní pomocí . Právě při sloučení vznikají konflikty, pokud se stejná část souboru změnila na dvou místech. Git ti je označí v souboru a ty musíš ručně rozhodnout, která verze zůstane. Nenechávej konflikt nevyřešený a necommituj ho – vznikne zmatek, který se těžko rozplétá.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Časté chyby mají společné jméno: „any&amp;quot; a tvrzení typu. Když napíšete „něco as SomeType&amp;quot;, jen tím překladateli řeknete, ať věří, že data mají tvar, který nemají. Kontrola projde a chyba se objeví až v provozu. Stejně zrádné je ignorovat návratové hodnoty funkcí, které mohou vrátit null. Řešení není složité: vždy pracujte s možností, že hodnota chybí. Pomůže volitelný řetězec „?.&amp;quot;, výchozí hodnota přes „??&amp;quot; a úzké typy místo širokých. Místo „string&amp;quot; použijte konkrétní unijní typ, pokud znáte povolené hodnoty.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Testovací pyramida není dogma, ale poměr, který udržuje zpětnou vazbu rychlou a levnou. Základ tvoří unit testy: měly by pokrývat izolovanou logiku, hraniční hodnoty a chybové stavy. Držte je v řádu milisekund, bez sítě, bez souborového systému a bez databáze. Když unit test potřebuje kontejner nebo běžící server, není to unit test. Čím více jich je, tím častěji můžete spouštět celou sadu při každé změně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Mezi nejčastější chyby patří commitování velkých nebo citlivých souborů. Do repozitáře nepatří hesla, klíče ani dočasné soubory. Vytvoř soubor .gitignore a vypiš do něj vzory, které má Git ignorovat. Další častá chyba je práce přímo v hlavní větvi bez zálohy. Pokud něco pokazíš, můžeš sice použít git reset nebo git revert, ale je snazší mít změny na samostatné větvi a jen je sloučit, až fungují.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Kde končí rozumná hranice Vrchol pyramidy tvoří end-to-end testy. Procházejí celou aplikaci z pohledu uživatele a mají největší hodnotu při ověřování kritických cest: přihlášení, [https://telegra.ph/Jak-ve-v%C3%BDb%C4%9Bru-ide-zohlednit-podporu-pro-datab%C3%A1zov%C3%A9-n%C3%A1stroje-a-SQL-08-12 dokončení interiéru] objednávky, odeslání formuláře. Zásadní je držet jejich počet nízký. Každý e2e test je pomalý, křehký a jeho selhání často neukazuje na chybu v logice, ale na změnu v rozhraní nebo v datech. Pokud jich máte desítky, brzy strávíte více času jejich opravami než vývojem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Verzování není jen formalita pro programátory. Jakmile začneš upravovat jakýkoli soubor, ať už jde o kód, text nebo konfiguraci, bez historie změn se ztrácí přehled. Git řeší přesně to: ukládá snímky stavu, takže se můžeš kdykoli vrátit k předchozí verzi. První krok je pochopit tři místa, kde se soubory nacházejí: pracovní adresář, index (staging area) a repozitář. Většina začátečníků si plete, co je kde, a proto jim změny mizí.&lt;/div&gt;</summary>
		<author><name>ElmoZimmerman</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=Pro%C4%8D_verzovat_k%C3%B3d,_i_kdy%C5%BE_pracujete_na_projektu_sami%3F&amp;diff=186269</id>
		<title>Proč verzovat kód, i když pracujete na projektu sami?</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Pro%C4%8D_verzovat_k%C3%B3d,_i_kdy%C5%BE_pracujete_na_projektu_sami%3F&amp;diff=186269"/>
		<updated>2026-10-01T16:05:26Z</updated>

		<summary type="html">&lt;p&gt;ElmoZimmerman: Created page with &amp;quot;Nejčastější začátečnická chyba je začít nástroji. Tým koupí nebo rozjede několik služeb, postaví první pipeline a čeká, že se kultura změní sama. Jenže DevOps stojí na dohodách: kdo schvaluje změny, kdo nese odpovědnost za incident,  smí běžet neúspěšný build, než se začne řešit. Bez těchto domluv je automatizace jen rychlejší způsob, jak vyrábět chaos. První [https://matkafasi.com/user/marekmazur23 rekonstrukce koupelny krok...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nejčastější začátečnická chyba je začít nástroji. Tým koupí nebo rozjede několik služeb, postaví první pipeline a čeká, že se kultura změní sama. Jenže DevOps stojí na dohodách: kdo schvaluje změny, kdo nese odpovědnost za incident,  smí běžet neúspěšný build, než se začne řešit. Bez těchto domluv je automatizace jen rychlejší způsob, jak vyrábět chaos. První [https://matkafasi.com/user/marekmazur23 rekonstrukce koupelny krok za krokem] proto není instalace, ale krátká schůzka, na které se sepíše, jak dnes změna putuje od nápadu do produkce a kde se zdržuje.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nakonec myslete na zálohu a sdílení. Lokální repozitář je fajn, ale poškozený [https://Www.paramuspost.com/search.php?query=disk%20znamen%C3%A1&amp;amp;type=all&amp;amp;mode=search&amp;amp;results=25 disk znamená] konec. Nastavte si vzdálený repozitář, kam budete pravidelně nahrávat změny. I když pracujete sólo, získáte tím klid a možnost pracovat z jiného počítače. Před každým nahráním si projděte, co přesně odesíláte, ať neposíláte rozdělanou práci nebo citlivá data. Verzování není jednorázový úkol, ale návyk. Čím dřív ho přijmete za vlastní, tím méně času strávíte hašením požárů a tím víc prostoru zbyde na skutečné programování.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Statická analýza a formátování rozhodují o každodenní pohodě Druhé kritérium je podpora nástrojů, které kontrolují kód ještě před spuštěním. Hledej prostředí, které umí spustit kontrolu typů a hlásit chyby přímo v editoru, ne až v terminálu. Stejně důležité je automatické formátování při uložení. Nastav ho jednou a nech ho pracovat na pozadí. Pokud formátovač koliduje s dalším nástrojem, vznikají hádky o mezery a zbytečné rozdíly v gitu. Vyber jeden nástroj pro formátování a jeden pro kontrolu stylu, ne tři zároveň.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Během diskuze držte tři kategorie: co bylo dobré, co bylo špatné a co je nejisté. Třetí kategorie je často nejužitečnější, protože se v ní skrývají věci, o kterých se mlčí. Každý bod se musí převést na rozhodnutí: buď se změní, nebo se výslovně řekne, proč se měnit nebude. Neslibujte, že se něco udělá, když na to není kapacita. Prázdný slib je horší než žádný, protože příští retrospektiva začne nedůvěrou.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;U rozsáhlejších projektů oceníš skok na definici a zpět. Otestuj to na cizí knihovně, ne jen na vlastním kódu. Prostředí, které neumí dohledat definici v nainstalovaném balíčku, ti při ladění moc nepomůže. Stejně tak si ověř, jak zvládá velké soubory. Otevři soubor s několika tisíci řádky a zkus [https://michaldabrowski73.werite.net/jak-vyvazit-jednotkove-a-integracni-testy-pri-rustu-codebase osvětlení v obýváku] něm hledat. Zamrzání při každém stisku klávesy je signál, že dané prostředí není pro tvůj styl práce vhodné, i kdyby mělo sebelepší vzhled.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nezapomínej na ladicí běh. Nastav breakpoint, spusť program a zkontroluj, jestli vidíš hodnoty proměnných v okamžiku zastavení. Některá prostředí vyžadují doplňkový konfigurační soubor, jiná fungují okamžitě. Pokud ladění vyžaduje ruční zápis konfigurace, je to přijatelné, ale jen když rozumíš každému řádku. Zkopírovaná konfigurace bez pochopení bývá častým zdrojem chyb, které se projeví až za běhu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Instalace je přímočará. Vytvořte virtuální prostředí, aktivujte ho a nainstalujte pytest pomocí správce balíčků. Ověření provedete příkazem pytest --version. Testy se ukládají do souborů, jejichž název začíná na test_ nebo končí na _test. Samotné testovací funkce musí mít také prefix test_. pytest je sám najde bez jakékoli registrace. Spuštění je pak otázkou příkazu pytest v kořeni projektu. Pro podrobnější výstup použijte pytest -v, pro zastavení po první chybě pytest -x.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Poslední věc, která rozhoduje o výsledku, je tón. Zpětná vazba nemá být obhajoba ani hodnocení člověka. Když někdo řekne, že něco nefunguje, není to útok. Facilitátor to musí říct nahlas, jinak se lidé začnou bránit a diskuze se změní v hádku o vině. Struktura drží emoce na uzdě jen do chvíle, kdy ji někdo začne používat jako zbraň. Proto je [https://www.Google.com/search?q=lep%C5%A1%C3%AD%20mluvit lepší mluvit] o procesech a rozhodnutích než o lidech a jejich vlastnostech.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Začněte tím, že si vyberete nástroj. Dnes je standardem Git, ale klidně můžete použít i jiný distribuovaný systém. Rozdíl pocítíte hlavně v tom, jak pohodlně se větví a slučují změny. Pro webové vývojáře je klíčové, aby šel snadno propojit s editorem a abyste nemuseli přemýšlet nad každým příkazem. Nainstalujte si Git, ověřte verzi v terminálu a nastavte si jméno a e-mail, které se budou zapisovat do historie. To je vše, co potřebujete pro první commit.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;První commit by měl obsahovat základní kostru projektu. Pak už postupujte po malých krocích. Každá změna, která dává smysl sama o sobě, si zaslouží vlastní commit s výstižnou zprávou. Vyhněte se hromadným commitům typu „oprava&amp;quot; nebo „úpravy&amp;quot;. Zprávy pište v rozkazovacím způsobu a snažte se do první řádky vejít do padesáti znaků. Větší celek pak popište v delším textu. Díky tomu se v historii vyznáte i po měsících a snadno dohledáte, kdy a proč se něco změnilo.&lt;/div&gt;</summary>
		<author><name>ElmoZimmerman</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=4_n%C3%A1vyky,_kter%C3%A9_rozhoduj%C3%AD_o_kvalit%C4%9B_test%C5%AF_v_NUnit&amp;diff=186258</id>
		<title>4 návyky, které rozhodují o kvalitě testů v NUnit</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=4_n%C3%A1vyky,_kter%C3%A9_rozhoduj%C3%AD_o_kvalit%C4%9B_test%C5%AF_v_NUnit&amp;diff=186258"/>
		<updated>2026-10-01T16:00:23Z</updated>

		<summary type="html">&lt;p&gt;ElmoZimmerman: Created page with &amp;quot;Jednotná konfigurace projektu není o tom, že všichni mají stejný soubor. Je o tom, že každý  spustí projekt stejně, bez ohledu na to, zda pracuje na Windows, macOS nebo Linuxu. Pokud se to nedaří, začnou vznikat rozdíly, které se projeví až ve chvíli, kdy je potřeba něco [https://App.Photobucket.com/search?query=nasadit%20nebo nasadit nebo] opravit. Prvním krokem je ujasnit si, co vše má být sdílené: nastavení editoru, závislosti, formátová...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jednotná konfigurace projektu není o tom, že všichni mají stejný soubor. Je o tom, že každý  spustí projekt stejně, bez ohledu na to, zda pracuje na Windows, macOS nebo Linuxu. Pokud se to nedaří, začnou vznikat rozdíly, které se projeví až ve chvíli, kdy je potřeba něco [https://App.Photobucket.com/search?query=nasadit%20nebo nasadit nebo] opravit. Prvním krokem je ujasnit si, co vše má být sdílené: nastavení editoru, závislosti, formátování kódu, kontejnery, proměnné prostředí, skripty pro build a testy. Ne každá položka patří do repozitáře – některé věci jsou osobní preference a jejich vynucování zbytečně vytváří odpor.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pro začátek tedy stačí málo: popsat současný tok změny, vybrat jednu aplikaci, zautomatizovat cestu do produkce, zavést měření a domluvit se na společné odpovědnosti. Zbytek je postupné zlepšování, které nikdy nekončí. Kdo slibuje, [https://graph.org/Jak-strukturovat-verzov%C3%A1n%C3%AD-k%C3%B3du-pro-projekty-s-v%C3%ADce-verzemi-knihoven-08-12 že DevOps] nasadí [https://Mensvault.men/story.php?title=jak-zohlednit-skryte-cinnosti-pri-odhadu-casu-na-vyvojovy-ukol za týden] a hotovo, buď lže, nebo nepochopil, že jde o způsob práce, ne o projekt s koncem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pokrytí má smysl jako trend, ne jako absolutní práh. Sleduj, jestli dlouhodobě roste u rizikových částí, a jestli klesá tam, kde se přestává testovat. Pokud číslo stagnuje, ale přibývají chyby [https://www.jjj555.com/home.php?mod=space&amp;amp;uid=2774938 úložné prostory v malém bytě] produkci, je něco špatně v návrhu testů, ne v jejich počtu. V takové chvíli je lepší investovat do testů integračních a do testů na úrovni chování než do dalšího zvyšování procenta. Pokrytí je nástroj, ne cíl.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Čtvrtý návyk je práce s výjimkami a parametrizací. Pro očekávané výjimky používejte Assert.Throws nebo Assert.That s Throws.TypeOf, nikdy ne obalení do try-catch s prázdným blokem. Parametrizované testy s [TestCase] nebo [TestCaseSource] ušetří desítky metod a zpřehlední hraniční hodnoty. Pozor ale na přílišnou abstrakci: pokud parametr mění i logiku testu, ne jen vstup, patří zvlášť. Nakonec testy pravidelně spouštějte lokálně i v rámci sestavení, jinak ztratí smysl. Test, který se nespouští, je jen komentář s horší syntaxí.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Testování jednotek v C# s NUnit vypadá na první pohled jednoduše: napíšete metodu, ozdobíte ji atributem [Test], spustíte runner a hotovo. Jenže rozdíl mezi sadou testů, která vám vydrží roky, a sadou, kterou po měsíci přestanete spouštět, netkví v syntaxi. Tkví v návycích, které se kolem psaní testů vytvoří. Následující čtyři zásady pokrývají většinu problémů, na které při práci s NUnit narazíte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základní dělení je na permisivní a copyleftové. Permisivní licence, jako MIT, Apache 2.0 nebo BSD, dovolují kód použít i v uzavřeném produktu. Copyleftové, jako GPL nebo AGPL, vyžadují, aby odvozené dílo zůstalo pod stejnou licencí. Pokud chcete, aby váš kód někdo zabudoval do placeného programu a nic nemusel zveřejňovat, copyleft je pro vás špatná volba. Pokud naopak chcete, aby se úpravy vrátily komunitě, permisivní licence vám to [https://Stockhouse.com/search?searchtext=neuhl%C3%ADd%C3%A1 neuhlídá].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Když si pletete licenci s modelem vývoje Open source není totéž co veřejný repozitář. Kód bez licence není volně použitelný, i když je na očích. Bez explicitní licence platí autorské právo v plné síle a nikdo kromě autora s ním nesmí nic dělat. Další častá záměna je mezi open source a „source available&amp;quot; licencemi, které jen omezují komerční využití. Ty nejsou open source, i když se tak tváří. Přečtěte si vždy celý text licence, ne jen její název.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Třetí návyk se týká asercí. NUnit nabízí Assert.That s omezeními (constraints), která jsou čitelnější a poskytují lepší chybové zprávy než starší Assert.AreEqual. Pište Assert.That(vysledek, Is.EqualTo(5)) a při selhání dostanete přesnou hodnotu očekávanou i skutečnou. U kolekcí použijte Is.EquivalentTo, pokud nezáleží na pořadí, a Is.Ordered, pokud záleží. Častá chyba je testovat více věcí v jednom testu. Když první aserce selže, o zbytku se nic nedozvíte. Rozdělte je do samostatných testů, i když to znamená více metod.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktický postup: nejdřív zjistěte, jestli projekt, na kterém stavíte, už nějakou licenci má. Pokud ano, musí být kompatibilní s tou vaší. GPL a Apache 2.0 se například kombinovat nedají. Potom zkontrolujte, jestli nepoužíváte knihovnu s copyleftem v uzavřeném produktu. To je nejčastější právní problém, na který firmy narazí až při auditu. Pokud si nejste jistí, zvolte permisivní licenci a přidejte do repozitáře soubor s jejím plným zněním.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;První návyk se týká izolace. Každý test musí být nezávislý na pořadí, v jakém ho runner spustí, a nesmí měnit stav, který ovlivní ostatní testy. V praxi to znamená, že sdílená data nevytváříte v jednorázovém setupu na úrovni třídy, pokud je testy pouze čtou a nikdy nemění. Jakmile test zapisuje do statické kolekce, do souboru nebo do databáze, potřebuje vlastní instanci. NUnit k tomu nabízí atributy [SetUp] a [TearDown], které se volají před a po každém testu, nikoli před a po celé třídě. Záměna těchto úrovní je nejčastější příčina testů, které procházejí samostatně, ale padají ve skupině.&lt;/div&gt;</summary>
		<author><name>ElmoZimmerman</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=Kdy%C5%BE_commit_zpr%C3%A1va_%C5%A1et%C5%99%C3%AD_%C4%8Das_p%C5%99i_hled%C3%A1n%C3%AD_vin%C3%ADka_zm%C4%9Bny&amp;diff=186251</id>
		<title>Když commit zpráva šetří čas při hledání viníka změny</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Kdy%C5%BE_commit_zpr%C3%A1va_%C5%A1et%C5%99%C3%AD_%C4%8Das_p%C5%99i_hled%C3%A1n%C3%AD_vin%C3%ADka_zm%C4%9Bny&amp;diff=186251"/>
		<updated>2026-10-01T15:50:11Z</updated>

		<summary type="html">&lt;p&gt;ElmoZimmerman: Created page with &amp;quot;Asynchronní kód je další místo, kde vzniká zmatek. Nemíchejte async/await s .then() v jedné funkci. Zvolte jeden styl a držte se ho. U await vždy myslete na chyby – obalte volání do try/catch, nebo použijte pomocnou funkci, která vrací dvojici hodnot. Nikdy nenechávejte odmítnutý promise bez ošetření, jinak dostanete tichý pád, který se hledá těžko.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Rozdělte testování na několik úrovní. Unit testy ověřují jednotlivé funkce a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Asynchronní kód je další místo, kde vzniká zmatek. Nemíchejte async/await s .then() v jedné funkci. Zvolte jeden styl a držte se ho. U await vždy myslete na chyby – obalte volání do try/catch, nebo použijte pomocnou funkci, která vrací dvojici hodnot. Nikdy nenechávejte odmítnutý promise bez ošetření, jinak dostanete tichý pád, který se hledá těžko.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Rozdělte testování na několik úrovní. Unit testy ověřují jednotlivé funkce a běží rychle při každé změně. Integrační testy kontrolují spolupráci mezi moduly, například mezi sítí a lokální databází. UI testy simulují skutečné chování uživatele a odhalí problémy s rozvržením či navigací. Ruční průzkumné testování pak doplní to, co automatizace nepokryje – neobvyklé kombinace kroků, přerušení hovorem, otočení displeje, slabý signál.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nasazení oddělte od testování. Jeden workflow, který po každém pushe do hlavní větve rovnou nasadí na produkci, je rychlá cesta k výpadku. Lepší je nechat testy běžet na každý push a nasazení vázat na větev, tag nebo ruční schválení. Do pipeline přidejte i kontrolu, že se běh dokončil v rozumném čase — tichý běh, který visí hodinu, blokuje frontu a odrazuje od častých commitů.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Parametrizované dotazy bezpečně oddělí data od kódu, ale jen pro hodnoty, které patří do klauzulí WHERE, VALUES nebo SET. Jakmile aplikace potřebuje měnit název sloupce pro řazení nebo název tabulky podle vstupu od uživatele, musí přijít jiná obrana. Řešením není escapování uvozovek, ale mapování na pevný seznam povolených hodnot. Uživatel pošle klíč, aplikace ho přeloží na konkrétní název sloupce. Pokud klíč v seznamu není, dotaz se vůbec nesestaví a vrátí se chyba. Tím zmizí prostor pro vložení poddotazu nebo podmínky, která vrátí celou tabulku.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Proč selhávají běhy a jak tomu předejít Nejčastější chyba není v syntaxi, ale v prostředí. Běhy startují v čistém kontejneru, kde nejsou žádné globálně nainstalované nástroje ani tajné proměnné. Pokud testy projdou na vašem počítači a v pipeline ne, hledejte rozdíl ve verzi jazyka, v chybějící závislosti nebo v proměnné prostředí. Verzi vždy přišpendlete, například node-version: 20, místo aby spoléhaly na výchozí hodnotu, která se může kdykoli změnit.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Každý commit v repozitáři je malý záznam o tom, co se změnilo a proč. Pokud zpráva říká jen „oprava&amp;quot; nebo „update&amp;quot;, za půl roku nebudete vědět, co se opravovalo ani proč. Cílem není psát romány, ale dodat dost kontextu, aby se změna dala dohledat zpětně – od řádku kódu k důvodu, proč tam je.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Typická chyba je psát zprávu podle sebe, ne podle toho, kdo ji bude číst. Kolega, který za rok hledá, proč se změnilo chování tlačítka, potřebuje vědět, že šlo o opravu chyby na základě hlášení z provozu. Proto se vyplatí uvádět kontext: číslo úkolu, pokud existuje, ale i krátké vysvětlení, co bylo před změnou špatně. Stejně tak je chybou míchat do jednoho commitu refaktoring, opravu chyby a novou funkci – dohledatelnost tím trpí nejvíc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nakonec: čistota není jednorázový úklid, ale návyk. Před každým commitem si přečtěte, co jste napsali, a zkuste to zkrátit, aniž byste ztratili význam. Pokud váháte, zda je kód jasný, přečtěte ho nahlas. Kde se zaseknete, tam bude zaseknutý i kolega. Nástroje jako linter a formátovač nastavte hned na začátku projektu, ne až když je kód plný nekonzistencí. Automatické formátování odstraní hádky o styl a vy se můžete soustředit na logiku.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základem je dodržet strukturu, kterou zvládne přečíst člověk i nástroj pro procházení historie. První řádek pište v rozkazovacím způsobu a kratce: „Oprav datum u faktury za prosinec&amp;quot;. Do 50–72 znaků se vejde téměř vždy. Pokud potřebujete víc, dejte po prvním řádku prázdný řádek a teprve pak rozveďte podrobnosti – co bylo špatně, co jste změnili a proč zrovna takto.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Dobře napsaná zpráva se pozná tak, že při hledání v historii nemusíte otevírat samotný diff. Stačí projít seznam commitů a máte jasno. Zaveďte si jednoduchý zvyk: nejdřív napište, co změna dělá, pak proč, a teprve nakonec zmiňte, jak. Výsledkem je historie, která se dá číst jako deník projektu – a to je při zpětné dohledatelnosti změn ta nejcennější vlastnost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Co do zprávy patří a co naopak škodí Užitečná zpráva odpovídá na tři otázky: co se změnilo, proč to bylo potřeba a jaký to má dopad. Místo „přidal jsem podmínku&amp;quot; napište „přidává kontrolu prázdného vstupu, aby aplikace nespadla při importu bez hlavičky&amp;quot;. Vyhněte se odkazům na interní systémové zkratky, kterým po čase nikdo nerozumí, a vynechejte i výrazy jako „různé úpravy&amp;quot; nebo „úklid&amp;quot;. Pokud commit obsahuje víc nesouvisejících změn, raději je rozdělte do několika menších – historie pak zůstane čitelná a snadno dohledatelná.&lt;/div&gt;</summary>
		<author><name>ElmoZimmerman</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=User:ElmoZimmerman&amp;diff=186250</id>
		<title>User:ElmoZimmerman</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=User:ElmoZimmerman&amp;diff=186250"/>
		<updated>2026-10-01T15:50:03Z</updated>

		<summary type="html">&lt;p&gt;ElmoZimmerman: Created page with &amp;quot;Někdo, kdo dílnou i obývákem sází na osvědčené tipy. Píšu o tom, jak si poradit v malém bytě. Nejvíc mě baví ukazovat chytrá řešení, která zvládne každý.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Někdo, kdo dílnou i obývákem sází na osvědčené tipy. Píšu o tom, jak si poradit v malém bytě. Nejvíc mě baví ukazovat chytrá řešení, která zvládne každý.&lt;/div&gt;</summary>
		<author><name>ElmoZimmerman</name></author>
	</entry>
</feed>