Nejlepší odpověď
Momentálně pracuji pro AutoTrader, který to podle mého názoru dělá velmi dobře.
Prostě vás posadíme před notebook s větším monitorem a klávesnicí / myší, spárujeme s jedním z našich starších vývojářů a pozorujeme je od jiného staršího vývojáře.
Je to docela zábava pro všichni, kromě obvyklých nervů při pohovoru, a skutečnost, že potkáváte nové lidi. Ale určitě, když jsem váš pár, snažím se mít trochu přátelského vztahu, abyste se cítili vítáni atd. Jako obvykle. Vlastně vám fandím, abyste uspěli.
Dostanete půlstránkový popis problému jednoduchého úkolu. A pak provedete trochu párového programování.
Existuje několik věcí, které byly zaznamenány a hodnoceny:
- Píšete nejprve testy? Po kódu? Nikdy?
- Používáte testy, abyste přemýšleli o designu?
- Pojmenujete věci jasně?
- Upřednostňujete OOP, procedurální programování – nebo jen jeden enormní funkce?
- Spolupracujete s dvojicí dobře? Nebo vůbec?
- Vysvětlujete, jak uvažujete, a vyzýváte dvojici, aby přispěla? Nebo sedíte v tichosti?
- Používáte v Javě standardní vybavení, jako jsou sbírky? Pokud ne, co děláte?
- Používáte IDE (které si sami vyberete) dobře?
- Rozdělili jste problém dobře? Špatně? Vůbec ne?
Pokud umíte Java, TDD a / nebo design, který chcete otestovat na jednotku, a vypadáte jako rozumně přizpůsobivý druh, máte tendenci skórovat vysoko.
Tento test se netýká znalostí zvláštních jazykových funkcí, zvláštních znalostí algoritmů nebo dokonce dokončení problému.
Je to všechno o tom, jak tyto věci, které jste napsali do životopisu, používáte v reálném životě.
Bude se vám opravdu líbit. Poskytne každému věrný obraz o tom, kde se kandidát nachází.
Nemilosrdně také vyprazdňuje falešné žádosti o životopis.
Říkáte, že děláte TDD? Nevíte, co znamená ‚prosazovat ? Bože Řekněme, že jste zvládli OOP? Celý kód, který nefunguje, je ve stejné metodě jako test jednotky, který jsme dodali? Ach bože.
(A ano, to se skutečně stalo).
Pro mě to byl otvírák očí, který je na obou stranách tohoto procesu.
Odpověď
TDD je nástroj. Co se děje, je zacházet s TDD jako s náboženstvím.
TDD se obvykle provádí pomocí testů jednotek: Testy malých částí nebo funkcí („jednotek“) ) vašeho kódu. Testy jednotek by měly běžet rychle , takže obvykle zesměšňujete jakékoli závislosti na externích službách a jen se ujistíte, že je testován samotný kód.
Problém obrovského slona v místnosti spočívá v tom, že někdy tyto externí služby, které jste zesměšňovali, obsahují většinu logiky funkce. Pokud vaše „jednotka“ popadne položku z databáze pomocí dotazu a vrátí ji, posměšně je tato interakce 100\% zbytečná kromě náhrady za kontrolu typu.
Dovolte mi říci, že znovu jiným způsobem: Takzvaní „vedoucí myšlenek“ „Kteří kážou evangelium TDD také často kážou evangelium dynamických jazyků. Takže jazyky, které vám říkají, jsou mnohem produktivnější ve skutečnosti vyžaduje mnohem více práce s testováním a často je nutné tyto testy přepsat, když je potřeba provést refaktor.
Napište svůj kód v bezpečnějším jazyce, jako je C #, Java nebo TypeScript, a nemusíte Není třeba se obávat ověřování typů jsou stále platné. A existuje spousta skutečných výhod plynoucích z používání jazyků statického typu a navíc není nutné psát testy, které ve skutečnosti nic netestují.
Co tedy vlastně myslím pod pojmem testy „nic netestovat“? Řekněme, že máte funkci, která vytváří dotaz SQL proti vaší databázi. Má hledat položky filtrované podle konkrétního pole. Chcete-li napsat rychlý test jednotky, vysmíváte se dotazu SQL. Pokud vaše falešná knihovna nedokáže simulovat veškerou logiku PostgreSQL pracujícího na ukázkové datové sadě, skutečná základní logika vaší funkce se vůbec netestuje ; jediné testy věcné správnosti, které byste mohli napsat, abyste ověřili logiku, by pouze ověřily, že vaše falešné zprávy vracejí vhodné odpovědi.
Často vidím falešné zprávy, že jednoduše „ověřte, že databáze byla volána správným počtem opakování.“ To by vám nakonec přineslo 100\% pokrytí kódu! Skvělé, číslo zapůsobit na netechnické manažery, což v praxi neznamená vůbec nic! Přejít na tým Klamná statistika!
Ne, potřebujete testy systému, nebo testy integrace / E2E, abyste ověřili, že je celý váš systém pracovní. Nejen testy jednotek, ale také testy, které ne zesměšňují volání do databáze, ale tyto hovory provádějí.A když testovací sada potřebuje postavit skutečnou databázi testů, vyčistit ji a nasadit ji mezi testy, je TDD jako praxe nepraktická; je to příliš pomalé.
Takže jděte do toho a nejdříve napište kód, až poté napište svůj test E2E a ujistěte se, že přináší správný výsledek. Sakra, můžete použít funkci snímek testovacích sad, jako je Jesthttps: //jestjs.io/docs/en/snapshot-testing, abyste ověřili, že se odpověď nezmění; podívejte se na to jednou, abyste se ujistili, že je to správné, a poté, co řeknete Jestovi, že je to správné, ověří, že to zůstane stejné i v budoucích bězích! API lze testovat a nechat si jejich testy aktualizovat téměř automatizovaným způsobem!
Takže pokud ignorujete ravings věrných TDD, můžete svou práci dokončit dvakrát rychleji, protože nepotřebujete počkat 10 minut (nebo déle! Viděl jsem testovací sadu, která trvala více než hodinu …), aby se spustila celá sada E2E, aby se test zobrazil selhání dříve, než začnete psát svůj kód.
Testování uživatelského rozhraní navíc , jak je uvedeno v odpovědi Moray Taylora, je navíc za mnoha okolností nepraktické. Existuje určitá úroveň testu E2E, kterou lze použít na uživatelské rozhraní, ale návratnost investice se zpravidla pro obecný případ zřídka vyplatí.
To znamená, že jsem pracoval na grafické knihovně , kterou dříve používalo více než sto různých videoher, a napsal jsem test E2E sada pro to, aby ověřila, že změna vnitřní logiky knihovny nezlomí nějakou obskurní hru, kterou jsem nikdy neviděl. Knihovny si vždy zaslouží důkladnější testy. Ale pro uživatelské rozhraní pro jednu aplikaci nemá testování E2E téměř nikdy smysl.