Theory of Unit Testing, del 3

I de to siste artiklene har vi tatt en nærmere titt på teorien bak enhetstesting og hvordan den kan hjelpe oss i vår WordPress-utviklingsarbeid. Vi har definert enhetstesting og undersøkt ulike måter det kan hjelpe oss gjennom våre prosjekter.

Men vi har fortsatt mer å dekke.

I denne siste artikkelen vil vi se på hvorfor vi bør plage å gjøre enhetstesting, og vi vil oppsummere fordelene og ulempene ved å gjøre det. Deretter ser vi på hvordan vi kan etterfeste testing i våre eksisterende prosjekter. Og for å pakke opp, vil vi oppsummere en liste over ressurser som er tilgjengelige spesielt for oss WordPress-utviklere som vil hjelpe deg med å begynne å teste våre temaer.


Hvorfor vi Unit Test: Alt om kvalitet

Det overordnede temaet i hele denne serien har vært om hvorfor vi burde plage oss med enhetstesting, men hvis det ikke har blitt kortfattet oppgitt, er det derfor:

Enhetstesting hjelper oss med å avdekke problemer tidlig, gi utviklere et nivå av selvdokumenterende kode og gir oss et høyere kvalitetsnivå for programvare.

Gitt, dette antar at vi følger gjennom på å praktisere gode testteknikker. Selvfølgelig var dette dekket i detalj i den forrige artikkelen, men det er verdt å gjenta.

En viktig ting å merke seg - spesielt hvis du prøver å bruke dette i en mer bedriftskonfigurasjon eller i sammenheng med en større bedrift - er at enhetstesting ikke bare er noe utviklere gjør for seg selv. Kvalitet er tosidig - det fordeler kunden, og det fordeler virksomheten.

Ved å gi et høyere kvalitetsnivå for kunden - det vil si mer grundig testet programvare - de burde oppleve færre feil. Siden feil resulterer i at utviklere må bruke løsningen i stedet for å jobbe med nye prosjekter eller nye funksjoner i eksisterende produkter, kan dette til slutt spare penger.

Ved å gi et høyere kvalitetsnivå for virksomheten, er utviklere mer selvsikker i deres anstrengelser fordi de kan utføre en prøvepakke hver gang en endring er gjort, og vet hvordan deres arbeid påvirket hele applikasjonen. Hvis en test mislykkes, er de i stand til å løse det før de distribueres til produksjon.

Enhetstesting handler om kvalitet, og det påvirker ikke bare de som skriver koden, men virksomheten som sender den, og kundene som bruker den, også.


Fordeler og ulemper

Sannheten er at vi allerede har dekket fordelene ved enhetstesting. For fullstendighet, la oss oppsummere dem her (selv om du alltid kan se gjennom dem i detalj!). Enhetstesting ...

  • Hjelper utviklere med å finne problemer tidlig, og kan spare tid da applikasjonen vokser og nye funksjoner blir introdusert
  • Gir et dokumentasjonsnivå i koden slik at dagens og fremtidige utviklere kan forstå hvordan koden skal fungere
  • Driver arkitektur slik at applikasjonen kan testes gjennom hele levetiden
  • Forbedrer språket i koden ved å gi mer lesbare funksjoner og styringsflyt

Alt høres bra ut, ikke sant? Og ja, det er basert på utviklere som holder seg ansvarlig overfor høye standarder og praksis når det gjelder å faktisk implementere dette i det daglige arbeidet, men enhetstesting er ikke uten sine ulemper.

Tiden er penger og du bruker tid

Dette har blitt sagt gjennom hele denne serien: enhetstesting tar en betydelig investeringstid. Ganske vist, hvis du starter et nytt prosjekt, er investeringen i tiden mye lavere enn om du tilpasser dette til et eksisterende program, men du er fortsatt å skrive mer kode enn uten testing.

Fordi du skriver mer kode, tar du mer tid - igjen, på forsiden av prosjektet. Fordelene ved enhetstesting kommer ofte ikke til senere, men hvis et prosjekt har en bestemt måldato for utgivelse, og at utgivelsen inneholder et visst antall funksjoner, er det ikke sannsynlig at du passer alle enhetstester og funksjonene inn i utgivelsen.

Hvis du vil unngå mindre funksjonssett ved utgivelse eller forsinkede måldatoer, vil du ha å bygge opp tid for enhetstesting.

Kompleksitet dreper og andre klicher

Du har hørt dem alle: Kompleksitet dreper, holder det enkelt dumt, mindre er mer, og så videre.

Ærlig, alle disse er sanne og de har sitt rette sted i utvikling, men faktum er at enhetstesting er tilleggskode og tilleggskode alltid introduserer mer kompleksitet. Som sådan må vi sørge for at vi har en riktig måte å håndtere og organisere alle våre enhetstester på.

Kanskje det er filorganisasjon, navnavstand, navnekonvensjoner eller versjoner eller alle de ovennevnte. Uansett hva det er som du ender med, bør enhetstester ikke bli behandlet som førsteklasses borgere i programvareverdenen - de bør være underlagt de samme designprinsippene som andre klasser eller funksjoner så mye som mulig.

Downside of Design

Ja, i den siste artikkelen sa vi at enhetstesting kan hjelpe til med å drive utformingen av et program, og det kan bidra til å fremme et design som gjør hele applikasjonen mer testbar. Dette er fortsatt sant, men det kommer på bekostning: noen ganger er den mest enhetlige testbare designen ikke den klareste.

Dermed mener jeg at fordi et sett med funksjoner - eller til og med en klasse - er helt enhetstestet, har samholdet potensialet til å bli kompromittert fordi vi gjør ofre for å få tilgang til visse funksjoner for å verifisere databehandlingen av data. Selvfølgelig er dette ikke en vanskelig og rask regel, og dette kan ikke engang være et problem for noen, men du må bestemme hva du skal være dogmatisk om: er det et perfekt utformet sett med klasser og eller funksjoner eller et sammenhengende system av tester og funksjoner som fungerer sammen?

Til syvende og sist tror jeg at det kommer ned på hvordan du ser tester som en stor del av det hele. Hvis de er en del av søknadens design, kan designet ikke lide. Men hvis du ser på tester som en ettertanke, kan utformingen av kjerneprogrammet bli kompromittert bare litt.

Kontinuerlig Tweaking

Som de sier, er det aldri gjort programvare, og siden enhetstesting er en del av et program, blir det aldri gjort.

Fordi en applikasjon alltid skal utvikle seg - det være seg at bugs blir squashed, nye funksjoner blir introdusert (eller til og med fjernet), de tilhørende testene må også legges til eller oppdateres. Og det kommer alltid tilbake til tiden.

Videre, hvis du jobber i et team av utviklere, kan vår mangel på oppdateringstester negativt påvirke teamet da resultatene som tester rapporterer kan være falske positive eller falske negativer. Når testene er skrevet, er det viktig at de oppdateres. ellers kan de resultere i et svært dårlig produkt.


Inkluderer Unit Testing i arbeidsflyten din

Enhetstesting er mye lettere å selge når du starter med et prosjekt, men hvis du ønsker å omforme det til et eksisterende program (eller tema eller plugin, i vårt tilfelle), vil det ta litt tid og anstrengelse.

Og selv om det ikke er noen sølvkule for hvordan du perfekt kan utføre dette, er det noen gode måter å begynne å implementere øvelsen på i ditt daglige arbeid:

  • Sørg for at prosjektet ditt er under kildekontroll - Dette burde være et gitt, men hvis det ikke er det, kom i gang så snart som mulig. "hvordan er og hvorfor er det"er utenfor rammen av denne artikkelen, men det er viktig å ha arbeidet ditt under kildekontroll, spesielt når du introduserer tester.
  • Innfør WordPress Unit Tests - Få oppsett med WordPress Unit Tests (instruksjoner her). Jeg anbefaler å holde dem i en underkatalog i prosjektet for å enklere organisere testene. Pass på at de blir forpliktet til kildekontroll.
  • Begynn å legge til tester - Hver gang du jobber på en funksjon eller introduserer en ny funksjon, legg til en tilsvarende enhetstest. Hvis en eksisterende funksjon ikke er testbar, bruker du tiden til å kontrollere at den er. Dette er et oppoverbakke slag, men det vil Lønne seg.
  • Husk suksess og fiasko - Husk at mens du skriver tester, må du også introdusere tester for suksessssaker og tester for feilfall.

Hvis du følger trinnene ovenfor, vil du til slutt ende opp med en betydelig mengde kodetekning. Ja, det tar tid og ja, du må sannsynligvis tilpasse mye av koden, men samtidig vil investeringen gi utbytte i fremtiden for produktet ditt.


Tilgjengelige ressurser

Her er et sammendrag av ressursene som kan bidra til vellykket testing av dine WordPress-baserte prosjekter:

  • Nybegynners veiledning til enhetstesting - En serie artikler som jeg skrev innføring av enhetstesting og hvordan man tester plugins og temaer.
  • PHPUnit - Rammen som WordPress-testene er basert på.
  • PHPUnit-dokumentasjon - Håndboken for PHPUnit. Dette er nyttig når du leter etter tilgjengelige metoder for å skrive påstander i koden din.
  • Hei Leser - En enkel plugin som jeg skrev for å demonstrere hvordan du kan testenhetstestene.
  • WordPress-tester - De offisielle WordPress-testene og testrammen er tilgjengelige for kassen via Subversion.
  • Grunnleggende tema - En enkel WordPress Theme brukes til å demonstrere hvordan man skal teste enhetstema.

Mellom den første serien av artikler og denne artikkelen er det lagt et sterkt fundament som du kan fortsette å bygge enhetens testing praksis på..