Hva er testdrevet utvikling (TDD)? Opplæring med eksempel

Testdrevet utvikling

Test Driven Development (TDD) er programvareutviklingsmetode der testtilfeller utvikles for å spesifisere og validere hva koden vil gjøre. Enkelt sagt, testsaker for hver funksjonalitet blir opprettet og testet først, og hvis testen mislykkes, blir den nye koden skrevet for å bestå testen og gjøre koden enkel og feilfri.

Testdrevet utvikling starter med å designe og utvikle tester for alle små funksjoner i et program. TDD instruerer utviklere om å skrive ny kode bare hvis en automatisert test mislyktes. Dette unngår duplisering av kode. Den fulle formen for TDD er testdrevet utvikling.

Det enkle konseptet med TDD er å skrive og korrigere de mislykkede testene før du skriver ny kode (før utvikling). Dette bidrar til å unngå duplisering av kode når vi skriver en liten mengde kode om gangen for å bestå tester. (Tester er bare kravbetingelser som vi trenger for å teste for å oppfylle dem.).

Testdrevet utvikling er en prosess for å utvikle og kjøre automatisert test før faktisk utvikling av applikasjonen. Derfor kalles TDD noen ganger også som Test First Development.

I denne veiledningen lærer du mer om-

  • Hvordan utføre TDD-test
  • TDD Vs. Tradisjonell testing
  • Hva er aksept TDD og Developer TDD
  • Skalering TDD via Agile Model Driven Development (AMDD)
  • Test Driven Development (TDD) Vs. Agile Model Driven Development (AMDD)
  • Eksempel på TDD
  • Fordeler med TDD

Slik utfører du TDD-test

Følgende trinn definerer hvordan TDD-test skal utføres,

  1. Legg til en test.
  2. Kjør alle testene og se om noen nye test mislykkes.
  3. Skriv noen kode.
  4. Kjør tester og refaktorkode.
  5. Gjenta.

TDD-syklus definerer

  1. Skriv en test
  2. Gjør det kjørt.
  3. Endre koden å gjøre det riktig, dvs. Refactor.
  4. Gjenta prosessen.

Noen avklaringer om TDD:

  • TDD handler ikke om «Testing» heller ikke om «Design».
  • TDD betyr ikke «skriv noen av testene, og bygg deretter et system som består testene.
  • TDD betyr ikke» gjør masse testing. «

TDD vs. tradisjonell testing

TDD-tilnærming er først og fremst en spesifikasjonsteknikk. Det sikrer at kildekoden din blir grundig testet ved bekreftelse nivå.

  • Med tradisjonell testing finner en vellykket test en eller flere feil. Det er det samme som TDD. Når en test mislykkes, har du gjort fremgang fordi du vet at du trenger å løse problemet.
  • TDD sørger for at systemet ditt faktisk oppfyller kravene som er definert for det. Det hjelper med å bygge din tillit til systemet ditt.
  • I TDD er mer fokus på produksjonskode som verifiserer om testing vil fungere skikkelig. I tradisjonell testing er mer fokus på test case design. Om testen vil vise riktig / upassende gjennomføring av applikasjonen for å oppfylle kravene.
  • I TDD oppnår du 100% dekningstest. Hver eneste linje med kode blir testet, i motsetning til tradisjonell testing.
  • Kombinasjonen av både tradisjonell testing og TDD fører til viktigheten av å teste systemet i stedet for å perfeksjonere systemet.
  • I Agile Modelling (AM), bør du «teste med et formål». Du bør vite hvorfor du tester noe, og hvilket nivå det må testes på.

Hva er aksept TDD og Developer TDD

Det er to nivåer av TDD

  1. Aksept TDD (ATDD): Med ATDD skriver du en enkelt aksepttest. Denne testen oppfyller kravene i spesifikasjonen eller tilfredsstiller systemets oppførsel. Etter det skriver du akkurat nok produksjons- / funksjonalitetskode for å oppfylle akseptantesten. Akseptstesten fokuserer på systemets generelle oppførsel. ATDD var også kjent som Behavioral Driven Development (BDD).
  2. Utvikler TDD: Med utvikler TDD skriver du enkelt utvikler test, dvs. enhetstest og deretter akkurat nok produksjonskode for å oppfylle den testen. Enhetstesten fokuserer på alle små funksjoner i systemet. Utvikler TDD kalles ganske enkelt som TDD.

    Hovedmålet med ATDD og TDD er å spesifisere detaljerte, kjørbare krav til løsningen din på en JIT-basis. JIT betyr bare å ta de kravene i betraktning som er nødvendige i systemet. Så øk effektiviteten.

Skalering av TDD via Agile Model Driven Development (AMDD)

TDD er veldig god i detaljert spesifikasjon og validering. Det mislykkes i å tenke gjennom større problemer som generell design, bruk av systemet eller brukergrensesnitt.AMDD adresserer Agile skaleringsproblemer som TDD ikke gjør.

Dermed ble AMDD brukt til større problemer.

Livssyklusen til AMDD.

I Model-driven Development (MDD) opprettes omfattende modeller før kildekoden er skrevet. Som igjen har en smidig tilnærming?

I figuren ovenfor representerer hver boks en utviklingsaktivitet.

Envisioning er en av TDD-prosessen med å forutsi / forestille tester som vil bli utført i løpet av den første uken av prosjektet. Hovedmålet med å forestille seg er å identifisere omfanget av systemet og arkitekturen til systemet. Høye krav og arkitekturmodellering gjøres for vellykket forestilling.

Det er prosessen der det ikke gjøres en detaljert spesifikasjon av programvare / system, men som utforsker kravene til programvare / system som definerer den overordnede strategien for prosjektet.

  1. Iterasjon 0: Envisioning

Det er to hovedunderaktiveringer.

  1. Innledende krav forutsatt.

    Det kan ta flere dager å identifisere systemkrav på høyt nivå og omfang. Hovedfokus er å utforske bruksmodell, Initial domain model og user interface model (UI).

  2. Innledende arkitektonisk forestilling.

    Det tar også flere dager å identifisere systemets arkitektur. Det gjør det mulig å sette tekniske retninger for prosjektet. Hovedfokuset er å utforske teknologidiagrammer, brukergrensesnittstrøm (UI), domenemodeller og Change cases.

  1. Iterasjonsmodellering:

    Her må teamet planlegge arbeidet som skal gjøres for hver iterasjon.

  • Agil prosess brukes for hver iterasjon, dvs. under hver iterasjon vil nytt arbeidselement legges til med prioritet.
  • Først høyere prioritert arbeid vil bli tatt i betraktning. Arbeidselementer som legges til, kan omprioriteres eller fjernes fra varestakken når som helst.
  • Teamet diskuterer hvordan de skal implementere hvert krav. Modellering brukes til dette formålet.
  • Modelleringsanalyse og design gjøres for hvert krav som skal implementeres for den iterasjonen.
  1. Model storming:

    Dette er også kjent som Just in time Modelling.

  • Her involverer modelleringsøkten et team på 2/3 medlemmer som diskuterer saker på papir eller tavle.
  • Et teammedlem vil spørre et annet å modellere med dem. Denne modelløkten vil ta omtrent 5 til 10 minutter. Hvor teammedlemmer samles for å dele tavle / papir.
  • De utforsker spørsmål til de ikke finner hovedårsaken til problemet. Bare i tide, hvis et teammedlem identifiserer problemet som han / hun ønsker for å løse, vil han / hun ta rask hjelp fra andre teammedlemmer.
  • Andre gruppemedlemmer utforsker deretter problemet, og deretter fortsetter alle som før. Det kalles også som stand-up modellering eller kunde-kvalitetsøkter .
  1. Test Driven Development (TDD).
  • Det fremmer bekreftende testing av applikasjonskoden og detaljert spesifikasjon.
  • Både akseptansetest (detaljerte krav) og utviklertester (enhetstest) er innganger for TDD.
  • TDD gjør koden enklere og tydeligere. Det gjør at utvikleren kan opprettholde mindre dokumentasjon.
  1. Anmeldelser.
  • Dette er valgfritt. Det inkluderer kodeinspeksjoner og modellgjennomgang.
  • Dette kan være gjort for hver iterasjon eller for hele prosjektet.
  • Dette er et godt alternativ for å gi tilbakemelding på prosjektet.

Test Driven Development (TDD) Vs. Agile Model Driven Development (AMDD)

Eksempel på TDD

Her i dette eksemplet vil vi definere et klassepassord. For denne klassen vil vi prøve å tilfredsstille følgende betingelser.

En betingelse for aksept av passord:

  • Passordet skal være mellom 5 og 10 tegn.

Først skriver vi koden som oppfyller alle ovennevnte krav.

Scenario 1: For å kjøre testen lager vi klasse PasswordValidator ();

Vi kjører over klasse TestPassword ();

Utdata er PASSERT som vist nedenfor;

Utgang:

Scenario 2: Her kan vi se i metode TestPasswordLength () er det ikke behov for å opprette en forekomst av klasse PasswordValidator. Forekomst betyr å lage et objekt av klassen for å henvise medlemmene (variabler / metoder) til den klassen.

Vi fjerner klasse PasswordValidator pv = ny PasswordValidator () fra koden. Vi kan kalle metoden isValid () direkte med PasswordValidator. IsValid («Abc123»).(Se bildet nedenfor)

Så vi refaktorerer (endrer kode) som nedenfor:

Scenario 3: Etter refactoring viser utdata mislykket status (se bildet nedenfor), dette er fordi vi har fjernet forekomsten. Så det er ingen referanse til ikke-statisk metode isValid ().

Så vi må endre denne metoden ved å legge til «statisk» ord før boolsk som offentlig statisk boolsk isValid (strengpassord). Refactoring Class PasswordValidator () for å fjerne feilen ovenfor for å bestå testen.

Utgang:

Etter endringer i klasse PassValidator () hvis vi kjører testen, vil utgangen passeres som vist nedenfor.

Fordeler med TDD

  • Tidlig feil melding.

    Utviklere tester koden sin, men i databaseverdenen består dette ofte av manuelle tester eller engangsskript. Ved hjelp av TDD bygger du over tid en serie automatiserte tester som du og enhver annen utvikler kan kjøre på nytt etter eget ønske.

  • Bedre designet, renere og mer utvidbar kode.
    • Det hjelper å forstå hvordan koden skal brukes og hvordan den samhandler med andre moduler.
    • Det resulterer i bedre designbeslutninger og mer vedlikeholdbar kode.
    • TDD tillater å skrive mindre kode som har ett ansvar fremfor monolitiske prosedyrer med flere ansvarsområder. Dette gjør koden enklere å forstå.
    • TDD tvinger også til å bare skrive produksjonskode for å bestå tester basert på brukerkrav.
  • Tillit til refaktor
    • Hvis du refaktorerer koden, kan det være muligheter for brudd i koden. Så hvis du har et sett med automatiserte tester, kan du fikse disse pausene før utgivelsen. Riktig advarsel vil bli gitt hvis pauser blir funnet når automatiserte tester brukes.
    • Bruk av TDD burde resultere i raskere, mer utvidbar kode med færre feil som kan oppdateres med minimal risiko.
  • Bra for teamarbeid

    I fravær av noe teammedlem kan andre teammedlemmer enkelt hente og jobbe med koden. Det hjelper også kunnskapsdeling, og dermed blir teamet mer effektivt generelt.

  • Bra for utviklere

    Selv om utviklere må bruke mer tid på å skrive TDD-testtilfeller, tar det mye mindre tid å feilsøke og utvikle nye funksjoner. Du vil skrive renere, mindre komplisert kode.

Sammendrag:

  • TDD står for testdrevet utvikling. Det er en prosess med å endre koden for å bestå en test som er designet tidligere.
  • Det er mer vekt på produksjonskode i stedet for test case design.
  • Testdrevet utvikling er en prosess for å endre koden for å bestå en test som er designet tidligere.
  • I Software Engineering er det noen ganger kjent som «Test First Development.»
  • TDD inkluderer refaktorisering av en kode, dvs. å endre / legge til en viss mengde kode i den eksisterende koden uten å påvirke oppførselen til koden.
  • TDD når den blir brukt, blir koden klarere og enkel å forstå.

Denne artikkelen er bidratt av Kanchan Kulkarni

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *