stojí unit testing za to úsilí?
<p>pracuji na integraci testování jednotek do vývojového procesu v týmu, na kterém pracuji, a existuje několik skeptiků. jaké jsou dobré způsoby, jak přesvědčit skeptické vývojáře o hodnotě jednotkového testování? v mém konkrétním případě bychom přidávali unit testy, protože přidáváme funkčnost nebo opravené chyby. naše kódová základna bohužel neumožňuje snadné testování.</p>
<p>každý den v naší kanceláři probíhá výměna, která vypadá takto:</p><blockquote> <p>"člověče, miluji jen testy jednotek, právě jsem dokázal provést spoustu změn ve způsobu, jakým něco funguje, a pak jsem byl schopen potvrdit, že jsem nic neporazil opakováním testu ..."</p> </blockquote><p>podrobnosti se mění každý den, ale sentiment se nemění. jednotkové testy a vývoj řízený testem (tdd) mají tolik skrytých a osobních výhod, stejně jako ty zjevné, které vám někdo opravdu nedokáže vysvětlit, dokud to sami neučiní.</p><p>ale ignoruji to, tady je můj pokus!</p><ol> <li> <p>testy jednotek umožňují rychlé změny kódu. víte, že to funguje nyní, protože jste provedli testy, když provedete změny, které musíte provést, musíte testy znovu uvést do provozu. to šetří hodiny.</p> </li> <li> <p>tdd vám pomůže uvědomit si, kdy ukončit kódování. vaše testy vám dávají jistotu, že jste prozatím udělali dost, a mohou přestat vyladit a přejít k další věci.</p> </li> <li> <p>testy a kód spolupracují na dosažení lepšího kódu. váš kód může být špatný/buggy. váš test může být špatný/buggy. v tdd bankujete s pravděpodobností, že <strong>obojí</strong> špatné/buggy nízké. často je to test, který vyžaduje opravu, ale to je stále dobrý výsledek.</p> </li> <li> <p>tdd pomáhá při zácpě při kódování. když budete čelit velké a skličující práci před psaním testů, dostanete se rychle do pohybu.</p> </li> <li> <p>testy jednotek vám pomohou skutečně porozumět designu kódu, na kterém pracujete. místo toho, abyste psali kód, abyste něco udělali, začínáte tím, že nastíníte všechny podmínky, kterým je kód vystaven, a jaké výstupy od toho očekáváte.</p> </li> <li> <p>testy jednotek vám poskytují okamžitou vizuální zpětnou vazbu, všichni jsme rádi pocit všech těch zelených světel, když jsme to udělali. je to velmi uspokojivé. je také mnohem snazší vyzvednout si, kde jste přestali po přerušení, protože vidíte, kam jste se dostali - další červené světlo, které potřebuje opravit.</p> </li> <li> <p>na rozdíl od všeobecného vyznání víry jednotka neznamená psaní dvakrát tolik kódu, nebo kódování pomaleji. je to rychlejší a robustnější než kódování bez testů, jakmile to zvládnete. samotný testovací kód je obvykle relativně triviální a nepřispívá k tomu, co děláte, velkou režii. tohle budeš věřit jen tehdy, když to děláš :)</p> </li> <li> <p>myslím, že to byl fowler, kdo řekl: „nedokonalé testy, které probíhají často, jsou mnohem lepší než perfektní testy, které se nikdy nepíšou“. interpretuji to tak, že mi dovoluji psát testy, kde si myslím, že budou nejužitečnější, i když zbytek mého pokrytí kódem je žalostně neúplný.</p> </li> <li> <p>dobré jednotkové testy mohou pomoci dokumentovat a definovat, co má něco dělat</p> </li> <li> <p>jednotkové testy pomáhají s opakovaným použitím kódu. migrujte svůj kód <strong>a</strong> vaše testy do nového projektu. vylaďte kód, dokud se testy neběží znovu.</p> </li> </ol><p>hodně práce, se kterou se zabývám, se netestuje dobře unit unit (interakce s uživateli webových aplikací atd.), ale přesto jsme všichni testováni v tomto obchodě infikovaní a nejšťastnější, když máme testy svázané. nemohu doporučit přístup dostatečně vysoko.</p>
K dispozici jsou 2 standardní způsoby, jak se blíží k testu, která závisí na něčem jiném (namítat, volání funkce, atd).


* Můžete použít vysmívá namísto objekty kód testujete závisí na.
* Můžete načíst přípravek nebo dělat tvorbu / hovor zkušební sestavy.


Někteří lidé mají rádi „klasických“ unit testů, kde je testován jen „jednotka“ kódu. V těchto případech se obvykle používají se vysmívá a pahýly nahradit závislostí.


Jiné podobné více integračních testů, kde je testována většinu nebo všechny zásobníku volání. V těchto případech můžete použít přípravek, nebo možná dokonce dělat hovory / výtvory ve funkci nastavení.


Obecně byste **to** udělat jeden test závisí na druhého. Všechny testy by měly:


* uklidit po sobě
* je spustitelný v izolaci
* být spustitelný jako součást sady
* být konzistentní a opakovatelné


Pokud uděláte jeden test závislý na jiném nemohou být spuštěny v izolaci, a ty jsou také nutí rozkaz testy spustit. Prosazování pořadí v testech není dobré, ve skutečnosti mnoho lidí pocit, že by se náhodně pořadí, ve kterém jsou spouštěny vaše testy. Máte-li stejnou platformu i verzi aplikace, s největší pravděpodobností jste každý v jiné skupině uživatelů pro A/B testování. Tak vývojáři ověřují účinnost aplikace a nakonec zvolí tu účinnější verzi a zavedou všem. Chce-li lingoty, může zkusit web na PC nebo třeba i v mobilu v nějakém internetovém prohlížeči. Pravděpodobně to zabere. Tak ono zalezi o jakou dokumentaci ti jde. Muzes mit dokumentaci ve forme JavaDoc pro Javovske aplikace. K tomu ti staci vyvojovy nastroj, ktery vyvojari uz pouzivaji. Lze z toho generovat html stranky. Toto je dokumentace pro vyvojare. (IMHO javadoc ale obecne komentare a poznamky v kodu jsou musthave, at uz nejakou dokumentaci vubec planujete delat nebo ne ;) )Testy jsou z urciteho pohledu taky dokumentace. Dokumentuji, jak urcite casti maji fungovat, jake jsou okrajove podminky, a co to delat nema.Pokud mas na mysli napr user guide, nebo architecture, security, maintenance/support a podobne, tak nato muzes pouzit treba LibreOffice s podporou nastroju pro tvorbu napr. UML diagramu, jako treba class diagram. Tady mas moznosti jako EnterpriseArchitect (placeny, ale existuje i spousta free variant). Je toho spousta. Nebo muzes pouzit nejaka online reseni (i v ramci intranetu), jako napr. wiki, Confluence, E-share, GitHub (muzes mit interni/privatni instalaci, GitHub ma svoji vlastni wiki) Dnes je přetaktování procesorů o dost snadnější i v jistých mezích bezpečnější jak v minulosti. Ale rizika jsou i dnes. Paušálně nelze říct o kolik konkrétní typ CPU je schpný snést přetaktování. Procesory nejsou absolutně stejné, a kvalitativně se můžou lišit dle výrobní šarže. Nebudu rozepisovat proč tomu tak je a jak se ve výrobě testují a vybírají procesory pro provoz určitého taktu. Ale je běžné že máš dva stejné procesory vedle sebe a jeden zvládne třeba 4.8 Ghz ale druhý nedá víc jak 4.5Ghz. Při taktování v domácích podmínkách se nejčastěji postupuje po krocích. Přetaktuješ třeba o 100 Mhz a testuješ procesor stress testem kvůli stabilitě. A zastavíš se v momentě kdy to začne být nestabilní, v ten moment se vrátiš o jeden či dva kroky zpět a mělo být to být v pořádku. Pokud je dostatečně kvalitně řešené chlazení nemělo by se stát že by odešel teplem dřív než zareaguje vnitřní tepelná ochrana. Větší rizika jsou spíš při zvedání pracovního napětí procesoru, ale o trochu jde přetaktovat praktickykaždý procesor. Je možné že budeš mít dobrý kus a půjde taktovat snadno na větší frekvence, je to o náhodě jak kvalitní kus křemíku máš doma. Riziko je tam ale vždy, a proto je dobré zvážit jestli případný přínos vyváží případné rizika. Pokud se potřebuješ ptát zda se ti to bude hodit, tak je jednoduchá odpověď: NE, nebude.Programování není něco co se naučíš za pár měsíců a pak už budeš umět programovat. Tohle je záležitost na celý život. Programování se stále vyvíjí a jsou tu nové metody/postupy jak programovat. Je potřebné se neustále učit něco nového. Protože je to běh na dlouhou trať tak to chce mít nějakou motivaci proč to děláš. Nejlépe aby jsi z toho měl nějaký vlastní užitek. Co já jsem si tak pro sebe programoval, tak byly různé automatizace a strojové konverze/porovnávání atd. Například co si vzpomínám, tak jsem měl k filmům titulky. A potřeboval jsem všechny titulky pojmenovat stejně jako ten film, aby se automaticky načítali do přehrávače. A měl jsem na disku vždy ve složce video a titulky. A než abych hledal něco co mi to přejmenuje, tak jsem si napsal prográmek co prošel zadanou složku s filmama, a v každé složce našel dva soubory a ten menší soubor pojmenoval podle toho většího souboru. A měl jsem hotovo. Nebo třeba když jsem potřeboval hromadně v souboru na každém druhém řádku dopsat 0 na 7mou pozici. Nebo třeba když jsem chtěl projít nějaký web a proklikat ho celý a stáhnout tam odtud všechny obrázky atd. Když si teda najdeš něco kde by jsi to využil tak budeš rád že to umíš. Už nebudeš muset hodiny hledat aplikaci, která bude umět to co chceš, ale za půl hodinky si tu aplikaci uděláš sám.Pokud by jsi to chtěl na nějaký přivýdělek, tak to možná ano, ale nejdřív to chce produkovat prográmky co fungují a alespoň nepadají. Tj budeš tam mít ošetřené všechny chybové stavy. Tj od toho, že pokud ti má uživatel zadat číslo od 1 do 10, tak musíš být připravený, že zadá opravdu číslo od 1 do 10, ale on taky může zadat 0 nebo 15, nebo třeba -4. A co hůř on ti třeba nemusí zadat nic, a nebo ti zadá nějaké písmeno atd. Na nic z tohoto by aplikace neměla spadnout. Měla by alespoň vypsat chybu, že je uživatel blb a nezadal správnou hodnotu. Nebo třeba když budeš… načítat soubory z disku, tak uživatel nemusí mít právo ten soubor číst, nebo do něj zapisovat atd. A ani na tomhle by to nemělo padnout. A to mi věř tohle se naučit ti bude trvat asi mnohem déle než těch několik měsíců. Chtít peníze za něco co funguje jen v případě že je to správně použito a jinak to padne bez nějaké smysluplné hlášky, kdy uživatel ani neví co udělal blbě, mi přijde celkem nefér a podruhé si od tebe už nikdo nic nenechá udělat. [Ukázat celý příspěvek](javascript:void(0)) No jestli si můj CPU myslí, že se bude, za ty prachy co sem do něj vrazil, loudat, tak to má smůlu hošík. Pěkně počítat bude. Jen doufám, že to bude k něčemu dobré, protože ač tyhle systémy už fungují dlouho, ještě jsem neslyšel, že by jejich výsledky něco zásadního vyřešily. Možná je ještě moc brzo. Rozhodně ale mi tenhle ajc výpočet přijde užitečnější, než hledat nějaké MZáky. Je pravda, že některé z rozhovorů venku jsou velmi primitivní, bohužel někdy převážná část vašeho davu může potřebovat. Považuji se nováček v mnoha oblastech, ale já jsem navštěvovat přednášky, které jsem si myslel, byly pod sebou a stále lidé žádají velmi základní otázky. Možná, že by stálo za to má bi-měsíční uživatelskou skupinu, jeden týden na základní úrovni a jeden týden pro pokročilé. To nemusí nutně znamenat dvojnásobek práce, pokud můžete dostat někoho, kdo vám pomůže koordinovat spoustu práce budou překrývat. Na druhou stranu můžete jen potřebují cítit se členy skupiny a zjistit, jaká je jejich průměrná úroveň dovedností je a hrát si na to. ![](/Client.Images/smileys/1.gif)![](/Client.Images/smileys/1.gif)prosím tě kup si jeden výkonný nový počítač.Já chápu, že jsi někde něco slyšel o clusteru, ale rozběhnout je docela cenově drahý a udržovat to taky. Nejsem si jistá, jestli vám v tomhle bude někdo schopný dobře poradit, protože úrovně jednotlivých lekcí jsou úplně nová funkce. Teprv nedávno se začaly testovat a většina lidí je ještě nemá. (Myslím, že je zatím nabízejí jen nově zaregistrovaným účtům.)


Mně by přišlo nejrozumnější to nějak nakombinovat, nejdřív probrat nějaké množství lekcí na nižší úrovni a pak postupně přitvrdit. Ale každému to může vyhovovat nějak jinak.


Zkuste a kdyžtak dejte vědět, jaké s tím budete mít zkušenosti. Dalo by to hodně práce a výsledek by byl stejně jen polovičatý. Tady bude lepší prodej, dokud to ještě má nějakou alespoň minimální cenu a postavit nové PC.