{"id":109,"date":"2018-06-21T17:56:07","date_gmt":"2018-06-21T15:56:07","guid":{"rendered":""},"modified":"2021-09-09T21:07:02","modified_gmt":"2021-09-09T19:07:02","slug":"uspesne-jednotkove-testy","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/uspesne-jednotkove-testy\/","title":{"rendered":"\u00daspe\u0161n\u00e9 jednotkov\u00e9 testy"},"content":{"rendered":"<p class=\"MsoNormal\" style=\"text-align: justify;\">Pred nejak\u00fdm \u010dasom som p\u00edsal <a href=\"http:\/\/spireng.sk\/en\/nerobte-to-nepreskakujte-jednotkove-testy\/\">\u010dl\u00e1nok<\/a> o\u00a0tom, \u017ee pri budovan\u00ed automatick\u00e9ho testovania nie je dobr\u00e9 vynecha\u0165 jednotkov\u00e9 testy. Ke\u010f\u017ee ka\u017ed\u00e9 spektrum m\u00e1 dva extr\u00e9my, aj v\u00a0tomto pr\u00edpade je to tak. Toti\u017e pusti\u0165 sa do p\u00edsania testov, a\u00a0nema\u0165 to premyslen\u00e9, m\u00f4\u017ee skon\u010di\u0165 katastrofou. Viem o\u00a0nieko\u013ek\u00fdch projektoch, ktor\u00e9 takto zahodili mo\u017enos\u0165 testovanie automatizova\u0165.<!--more--><!--break--><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Na za\u010diatku (ako to u\u017e b\u00fdva) je zop\u00e1r pekn\u00fdch my\u0161lienok: \u201eVieme, \u017ee na projekte m\u00e1me probl\u00e9m s\u00a0kvalitou k\u00f3du. O\u00a0jednotkov\u00fdch testoch sme po\u010duli, \u017ee s\u00a0t\u00fdm vedia pom\u00f4c\u0165. V\u0161etci hovoria, \u017ee p\u00edsanie testov je super a\u00a0mali by sme to robi\u0165. Preto ideme robi\u0165 jednotkov\u00e9 testy.\u201c<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">To, \u010do nasleduje, u\u017e tak\u00e9 super nie je. Nejak\u00fd program\u00e1tor (alebo v\u00a0hor\u0161om pr\u00edpade v\u0161etci program\u00e1tori naraz) je vybran\u00fd a\u00a0ide na to. Nie\u010do si na\u0161tuduje, nak\u00f3di nejak\u00fa funkcionalitu a\u00a0za\u010dne p\u00edsa\u0165 testy. Nejako mu to ale trv\u00e1 a\u00a0\u00faloha, \u010do bola odhadovan\u00e1 na 4 hodiny, sa robila 16 hod\u00edn. Ale na konci m\u00e1 jeden alebo viac testov. Mana\u017ement zatne zuby a\u00a0ide sa \u010falej s\u00a0my\u0161lienkou, \u017ee za\u010diatky s\u00fa \u0165a\u017ek\u00e9.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Probl\u00e9m je, \u017ee aj \u010fal\u0161ie \u00falohy sa predl\u017euj\u00fa a\u00a0medzi\u010dasom sa zist\u00ed, \u017ee k\u00f3d z\u00a0prv\u00e9ho zadania niekto zmenil a\u00a0p\u00f4vodn\u00e9 testy nefunguj\u00fa. To u\u017e je ale \u010das releasu, a\u00a0preto sa testy nerie\u0161ia. D\u00f4le\u017eit\u00e9 je doda\u0165 funk\u010dn\u00fd k\u00f3d. Nasleduje e\u0161te nieko\u013eko pokusov s\u00a0testami, dokopy sa ich nazber\u00e1 30 na r\u00f4zne \u010dasti k\u00f3du. \u010cas\u0165 z\u00a0nich je u\u017e nefunk\u010dn\u00e1, a\u00a0tak s\u00fa bu\u010f zakomentovan\u00e9 alebo sa pri zostavovan\u00ed zapne prep\u00edna\u010d, aby ich ignoroval. V\u0161etko sa vracia do p\u00f4vodn\u00fdch ko\u013eaj\u00ed s\u00a0jednou v\u00fdnimkou. Diskusie na t\u00e9mu jednotkov\u00fdch testov s\u00fa o\u00a0\u010dosi depres\u00edvnej\u0161ie a\u00a0do projektu sa vkr\u00e1daj\u00fa my\u0161lienky, \u017ee to s\u00a0t\u00fdmi testami je nejak\u00e1 nerealizovate\u013en\u00e1 te\u00f3ria, alebo \u017ee na tomto projekte sa to proste ned\u00e1 (kv\u00f4li z\u00e1kazn\u00edkovi, kv\u00f4li budgetu, kv\u00f4li&#8230;).<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Na mojej ceste cez r\u00f4zne projekty za posledn\u00e9 roky som videl naozaj ve\u013ea tak\u00fdchto stavov. Nejak\u00e9 testy v\u00a0repozit\u00e1ri, v\u0161eobecn\u00e9 povedomie alebo\u00a0ak\u00e9si tu\u0161enie toho, \u017ee testy s\u00fa dobr\u00e9 ale z\u00e1rove\u0148 negat\u00edvne sk\u00fasenosti s\u00a0ich p\u00edsan\u00edm. Kde je probl\u00e9m?<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Probl\u00e9m je, \u017ee testy nie s\u00fa magick\u00fd pr\u00fatik, ktor\u00fdm sta\u010d\u00ed m\u00e1vnu\u0165 a\u00a0v\u0161etko funguje. Ak za\u010d\u00ednate od nuly s\u00a0ich p\u00edsan\u00edm, tak treba \u010daka\u0165, \u017ee to nebude jednoduch\u00e9. P\u00edsanie testov je zru\u010dnos\u0165, ktor\u00fa je nutn\u00e9 sa nau\u010di\u0165. To bude st\u00e1\u0165 ur\u010dit\u00fd \u010das a\u00a0teda aj peniaze. Znamen\u00e1 to, \u017ee sa nejak\u00e1 \u010das\u0165 implement\u00e1cie predra\u017e\u00ed. A\u00a0pr\u00e1ve nad t\u00fdm sa treba zamyslie\u0165.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Jednotkov\u00e9 testy s\u00fa ako ka\u017ed\u00fd in\u00fd n\u00e1stroj. M\u00e1 svoj \u00fa\u010del a\u00a0svoje limity. Aplikova\u0165 ho len tak v\u0161eobecne v\u00a0duchu \u201epo\u010fme p\u00edsa\u0165 jednotkov\u00e9 testy\u201c je cesta do pekla. Ak za mnou niekto pr\u00edde, \u017ee chce za\u010da\u0165 p\u00edsa\u0165 testy, tak ako prv\u00fa vec sa ho p\u00fdtam, pre\u010do to chce robi\u0165. A\u00a0niekedy sa st\u00e1va, \u017ee na to, \u010do chce dosiahnu\u0165 (lep\u0161iu \u0161trukt\u00faru k\u00f3du, menej ch\u00fdb at\u010f.), mu porad\u00edm nejak\u00fa in\u00fa techniku (review k\u00f3du, statick\u00fa anal\u00fdzu at\u010f.).<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Ale ak u\u017e ostaneme pri jednotkov\u00fdch testoch, tak mu porad\u00edm, nech si vyberie oblas\u0165, ktor\u00e1 je pre projekt (a teda aj jeho mana\u017ement) kritick\u00e1. Nejak\u00e1 \u010das\u0165, komponent, ktor\u00e1 mus\u00ed by\u0165 kvalitn\u00e1, inak cel\u00e1 aplik\u00e1cia str\u00e1ca zmysel, hoci sa aj teraz nejde meni\u0165, a\u00a0teda testy sa bud\u00fa p\u00edsa\u0165 na k\u00f3d, ktor\u00fd u\u017e nejak\u00fd \u010das existuje.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Je to za prv\u00e9 preto, lebo z\u00a0praktick\u00e9ho h\u013eadiska je naozaj zmyslupln\u00e9 dr\u017ea\u0165 vysok\u00fa kvalitu na d\u00f4le\u017eitom komponente ako na nie\u010dom menej d\u00f4le\u017eitom. A\u00a0za druh\u00e9 preto, lebo mana\u017ement bude ochotnej\u0161\u00ed investova\u0165 \u010fal\u0161ie peniaze naviac do d\u00f4le\u017eitej \u010dasti, ako keby ho mala st\u00e1\u0165 dvojn\u00e1sobok implement\u00e1cia nejak\u00e9ho tla\u010didla pre okrajov\u00e9 pr\u00edpady.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify;\">Ak dospejete do stavu, \u017ee v\u00e1\u0161 t\u00edm je navyknut\u00fd p\u00edsa\u0165 testy (a v\u00e1\u0161 mana\u017ement je navyknut\u00fd to plati\u0165), tak ich m\u00f4\u017eete roz\u0161\u00edri\u0165 na v\u00e4\u010d\u0161inu aplik\u00e1cie (o 100% pokrytie sa nem\u00e1 zmysel sna\u017ei\u0165, ale 90% je celkom re\u00e1lne). Dovtedy sa treba pozera\u0165 na jednotkov\u00e9 testy ako n\u00e1stroj, ktor\u00fd v\u00e1s bude nie\u010do st\u00e1\u0165, a\u00a0preto ho treba pou\u017e\u00edva\u0165 s\u00a0rozvahou a\u00a0tam, kde to m\u00e1 najv\u00e4\u010d\u0161\u00ed zmysel. V\u00a0opa\u010dnom pr\u00edpade hroz\u00ed, \u017ee si na tom vyl\u00e1mete zuby a\u00a0po takom ne\u00faspechu sa nov\u00fd re\u0161tart tejto t\u00e9my rob\u00ed o\u00a0dos\u0165 \u0165a\u017e\u0161ie.<\/p>","protected":false},"excerpt":{"rendered":"<p>Pred nejak\u00fdm \u010dasom som p\u00edsal \u010dl\u00e1nok o\u00a0tom, \u017ee pri budovan\u00ed automatick\u00e9ho testovania nie je dobr\u00e9 vynecha\u0165 jednotkov\u00e9 testy. Ke\u010f\u017ee ka\u017ed\u00e9 spektrum m\u00e1 dva extr\u00e9my, aj v\u00a0tomto pr\u00edpade je to tak. Toti\u017e pusti\u0165 sa do p\u00edsania testov, a\u00a0nema\u0165 to premyslen\u00e9, m\u00f4\u017ee skon\u010di\u0165 katastrofou. Viem o\u00a0nieko\u013ek\u00fdch projektoch, ktor\u00e9 takto zahodili mo\u017enos\u0165 testovanie automatizova\u0165.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-109","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=109"}],"version-history":[{"count":10,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":366,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/109\/revisions\/366"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}