Če ste kdaj morali izslediti napako v svoji kodi, potem veste, kako frustrirajuće je lahko. Ta frustracija se samo poveča, če delate na veliki kodni bazi.
Testiranje vam omogoča, da preverite, ali rezultati vaše kode ustrezajo vašim pričakovanjem. Na ta način lahko enostavno prepoznate in odpravite težavo, preden uvedete svojo aplikacijo. Poleg tega, da vam pomaga hitreje odkriti napake kode, vas testiranje tudi prisili, da napišete dobro kodo.
1. Statično testiranje
Statično testiranje se nanaša na teste, ki se izvajajo brez izvajanja kode. To se zgodi s primerjavo kode s predhodno nastavljenimi pravili kodiranja. Običajni načini izvajanja statičnega testiranja vključujejo linting in preverjanje tipa.
Linting vključuje preverjanje kode za programske in slogovne napake. Linter analizira kodo in označi morebitne napake. Primeri orodij za linting so EsLint, PyLint in CSSLint.
Preverjanje tipa je postopek uveljavljanja pravil tipkanja in omejitev vrednosti. Nekateri programski jeziki so strogo tipizirani, kar pomeni, da vržejo napake, če vrednosti niso pravilno tipizirane.
Vendar imajo nekateri jeziki, kot je JavaScript, šibek sistem tipkanja in so bolj prizanesljivi. V teh jezikih je napake težko odkriti in knjižnica za preverjanje tipa je bistvena. Za JavaScript lahko uporabite TypeScript za uveljavitev močnega tipkanja.
Za samodejno analizo kode lahko uporabite tudi orodja za statično analizo. Ta orodja preverjajo kakovost kode in poročajo o morebitnih težavah, ki jih najdejo. Primeri orodij za statično analizo na trgu so SonarQube, DeepSource in SpotBugs. Pri izbiri statičnega analizatorja se prepričajte, da podpira vaš programski jezik.
2. Preizkusi enot
Preskusi enot preverjajo najmanjše dele aplikacije, ki jih je mogoče preizkusiti, da ugotovijo, ali delujejo po pričakovanjih. Napišete lahko teste enot za funkcije, module, objekte itd.
Čeprav so preizkusi enot lahko zamudni, bi morali prihraniti več časa, kot bi ga porabili odpravljanje napak v aplikaciji potem ko ste napisali vso kodo.
Na splošno je testiranje enot sestavljeno iz štirih korakov:
- Ustvarjanje testov
- Pregled testa
- Izhodišče
- Izvajanje testa.
Teste enot lahko napišete ročno ali jih avtomatizirate z uporabo ogrodja za testiranje enot. Pri ročnem preizkusu bi napisali kodo za preizkus funkcije ali enote, ki jo potrebujete, nato pa pozneje izbrisali preskusno kodo.
Če uporabljate ogrodje, določite enoto, ki jo testirate, in pričakovane rezultate, nato zaženite preizkus. Testni okvir bi nato zabeležil neuspešne in uspešne teste. Na splošno je bolje uporabiti okvir, ker je hitrejši.
Ko pišete test enote, se prepričajte, da je enota, ki jo testirate, neodvisna. Če se zanaša na zunanje podatke, kot so spremenljivke, lahko uporabite ponaredke. Mocks nadomestijo manjkajoče podatke, uporabljene v enoti.
Na primer, če preizkušate funkcijo, ki se opira na podatke, pridobljene iz API-ja, lahko ustvarite lažni podatkovni objekt za namene testiranja.
3. Integracijski testi
Integracijski testi preverjajo, kako različne komponente delujejo skupaj. To je za razliko od testov enote, ki testirajo neodvisne komponente. Integracijske teste pišete po enotnih testih.
Integracijski testi so bistveni, saj zagotavljajo, da logika vaše aplikacije drži.
Na primer, upoštevajte dva modula: enega, ki pridobiva podatke iz API-ja, in drugega, ki jih analizira. Želeli bi zagotoviti, da vaša koda pridobi pravilne podatke in jih pravilno analizira.
Tu nastopi integracijsko testiranje. Zagotavlja brez napak v logičnem toku od enega modula do drugega.
4. Testi od konca do konca
Testiranje od konca do konca preverja potek aplikacije z vidika končnega uporabnika. Postopek testira aplikacijo od začetka do konca, saj bo uporabnik uporabljal aplikacijo. Ti testi zagotavljajo večjo pokritost kot testi enot ali integracijski testi.
Testi od konca do konca definirajo odvisnosti aplikacije, baze podatkov in zunanjo komunikacijo. Kar se da natančno posnemajo scenarij iz resničnega sveta.
Na primer, ko preskušate obrazec za prijavo, bo preskus od konca do konca preizkusil različne scenarije, kot so:
- Uporabnik, ki predloži e-pošto in geslo
- Uporabnik uporablja šibko geslo
- Uporabnik uporablja neveljaven e-poštni naslov
- Uporabnik, ki odda samo e-pošto
- Uporabnik, ki predloži samo geslo
Testi od konca do konca zagotavljajo, da se aplikacija v teh scenarijih obnaša po pričakovanjih.
Pisanje testov vs. Pisanje kode
Testiranje vaše aplikacije zgodaj v procesu razvoja je bistvenega pomena. Čeprav so vsi ti testi bistveni, je pomembno najti ravnovesje, ki vam ustreza. V nasprotnem primeru boste porabili preveč časa za pisanje testov namesto kode.
Testiranje enot je ključnega pomena za večino aplikacij in morda mu boste želeli nameniti dovolj časa. Ko izvedete teste enote, ste lahko prepričani, da gradniki vaše aplikacije delujejo pravilno.