Když chceš tvořit aplikace pro Android, začni tady
První aplikace by měla být co nejjednodušší. Vytvoř si aplikaci, která zobrazí text na obrazovce po stisknutí tlačítka. Tím se naučíš, jak funguje rozložení, jak propojit obrazovku s logikou a jak reagovat na uživatelské akce. Neboj se experimentovat, ale měj na paměti, že nejčastější chyba začátečníků je přidávat příliš mnoho funkcí hned na začátku. To vede k tomu, že se v kódu ztratíš a nevíš, co děláš. Drž se jednoduchosti a postupně přidávej další prvky, jako jsou vstupní pole nebo obrázky.
Když budete mít základní stránku hotovou, zaměřte se na výkon. Obrázky zmenšujte a používejte moderní formáty. Minimalizujte CSS a JavaScript, pokud to jde. Každý kilobajt navíc zpomaluje načítání a uživatelé odcházejí. Také si zvykněte psát komentáře do kódu, ale jen tam, kde je to potřeba. Vysvětlete, proč jste zvolili určité řešení, ne co dělá každý řádek. To vám pomůže při návratu k projektu po měsíci. Až zvládnete tyto základy, můžete se pustit do flexboxu a gridu, ale to už je další kapitola.
Nezapomínejte ani na kontrolu minulých opatření. Pokud na začátku schůzky nezkontrolujete, co se splnilo, tým rychle ztratí motivaci. Udělejte z toho samostatný bod programu: „Co jsme si minule slíbili a jak to dopadlo?" Když se něco nesplnilo, zeptejte se proč, a buďto to přesuňte do nové akce, nebo to škrtněte. Tento jednoduchý rituál ukáže, že retrospektiva má skutečný dopad, a lidé začnou brát své závazky vážněji.
Při psaní testů se také vyplatí myslet na to, co přesně testujete. Pokud testujete funkci, která počítá cenu s DPH, netestujte zároveň i databázové spojení. To už je integrační test. Jednotkové testy mají být rychlé, izolované a bez vedlejších efektů. Pokud potřebujete testovat závislost na vnějším systému, použijte mock. Ale mockování má také své úskalí – pokud zamockujete příliš mnoho, test přestane testovat skutečnou logiku a začne testovat jen to, jak jste mock nastavili. Zamockujte jen to, co je nezbytně nutné, a zbytek nechte běžet reálně.
Dalším častým úskalím je, že se tým snaží vyřešit deset problémů najednou. Pak se každému věnuje deset minut, nic se nedotáhne a na konci nikdo neví, kdo za co zodpovídá. Vyberte si maximálně tři hlavní témata, která mají největší dopad na týmovou spolupráci, a pro každé z nich určete jednoho vlastníka. Vlastník nemusí problém vyřešit sám, ale je zodpovědný za to, že navrhne první krok a dohodne termín kontroly. Bez tohoto kroku je retrospektiva jen povídáním.
Častým oříškem je testování více akcí, které běží paralelně. Místo reálného časovače použijte fake timers, abyste mohli řídit průběh Promise. Pomocí await vi.runAllTimersAsync() nebo podobné funkce simulujete dokončení asynchronních operací. Bez toho testy visí na reálném čase, což vede k flaky výsledkům. Nezapomeňte také na testování akcí, které nejsou thunky, ale jen obyčejné akce – ty se testují triviálně, jen jako tovární funkce vracející objekt.
Jak simulovat dispatch a getState bez Redux store Pro testování thunků si vytvořte falešný store pomocí jednoduchého objektu. Funkce dispatch v testu může zaznamenávat akce do pole, zatímco getState vrací předem definovaný stav. Tím docílíte toho, že testujete samotnou akci, ne její propojení s reducerem. Typická chyba je testovat reducer a thunk dohromady, což vede k závislosti na celém store a ztěžuje izolaci problému.
Prakticky to uděláte tak, že si v nástroji pro měření pokrytí nastavíte hlášení o tom, které řádky nebyly pokryty, a pravidelně si je prohlížíte. Když najdete nepokrytý řádek, zeptejte se sami sebe, proč tam je. Pokud je to obsluha chyby, kterou testy nikdy nevyvolají, možná je v pořádku, že ji testy neprocházejí – ale pokud je to hlavní logika, máte problém. Dalším krokem je měření pokrytí mutací, které vám řekne, jestli testy skutečně odhalí chyby. Tato metoda spočívá v tom, že se do kódu záměrně vloží drobné změny (mutace) a zjistí se, kolik z nich testy odhalí. Pokud je mutační skóre nízké, vaše testy jsou slabé, i když je řádkové pokrytí vysoké.
Další častá chyba se týká parametrizace. Mnoho lidí píše pro každou kombinaci vstupů zvlášť test, což vede k obrovskému množství duplicitního kódu. Místo toho použijte @pytest.mark.parametrize. Nejenže tím zkrátíte kód, ale také zpřehledníte, které kombinace selhávají. Ale pozor – parametrizace s mnoha případy může zpomalit běh. Pokud máte desítky kombinací, zvažte, jestli některé nejsou redundantní. A vždycky si pohlídejte, aby každý parametr měl čitelné ID, jinak se v hlášeních ztratíte.
Při samotné retrospektivě pak dejte prostor každému členovi týmu, a to rovnoměrně. Tichý kolega, který mlčí, protože ho přerušil extrovert, má často nejcennější postřehy. Vyhraďte proto pevný časový limit, třeba pět minut na osobu, a během něj nikdo neskáče do řeči. Pokud se objeví ostrá kritika, nechte ji zaznít a hned se zeptejte: „Co by podle tebe pomohlo?" Tím se vyhnete tomu, aby se schůzka proměnila v diskuzi o pocitech bez konkrétního výstupu.