Hvad er TDD (Test Driven Development)? Tutorial med eksempel

Testdrevet udvikling

Test Driven Development (TDD) er en softwareudviklingsmetode, hvor testcases udvikles til at specificere og validere, hvad koden vil gøre. Enkelt sagt oprettes og testes testcases for hver funktionalitet først, og hvis testen mislykkes, skrives den nye kode for at bestå testen og gøre koden enkel og fejlfri.

Testdrevet udvikling starter med at designe og udvikle tests til hver lille funktionalitet i en applikation. TDD beder udviklere om kun at skrive ny kode, hvis en automatiseret test mislykkedes. Dette undgår duplikering af kode. Den fulde form for TDD er testdrevet udvikling.

Det enkle koncept med TDD er at skrive og rette de mislykkede tests, før du skriver ny kode (før udvikling). Dette hjælper med at undgå duplikering af kode, da vi skriver en lille mængde kode ad gangen for at bestå test. (Test er intet andet end kravbetingelser, som vi skal teste for at opfylde dem).

Testdrevet udvikling er en proces til udvikling og kørsel af automatiseret test inden faktisk udvikling af applikationen. Derfor kaldes TDD undertiden også som Test First Development.

I denne vejledning lærer du mere om-

  • Sådan udføres TDD-test
  • TDD Vs. Traditionel test
  • Hvad er accept 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
  • Fordele ved TDD

Sådan udføres TDD-test

Følgende trin definerer, hvordan TDD-test skal udføres,

  1. Tilføj en test.
  2. Kør alle tests og se om nogen ny test mislykkes.
  3. Skriv nogle kode.
  4. Kør tests og refaktorkode.
  5. Gentag.

TDD-cyklus definerer

  1. Skriv en test
  2. Få det til at køre.
  3. Skift kode at gøre det rigtigt, dvs. Refactor.
  4. Gentag processen.

Nogle præciseringer om TDD:

  • TDD handler ikke om “Testing” heller ikke om “Design”.
  • TDD betyder ikke “skriv nogle af testene, bygg derefter et system, der består testene.
  • TDD betyder ikke” gør masser af test. “

TDD vs. traditionel testning

TDD-tilgang er primært en specifikationsteknik. Det sikrer, at din kildekode testes grundigt ved bekræftelse niveau.

  • Med traditionel test finder en vellykket test en eller flere defekter. Det er det samme som TDD. Når en test mislykkes, har du gjort fremskridt, fordi du ved, at du har brug for at løse problemet.
  • TDD sikrer, at dit system rent faktisk lever op til de krav, der er defineret for det. Det hjælper med at opbygge din tillid til dit system.
  • I TDD er mere fokus på produktionskode, der verificerer, om test fungerer korrekt. I traditionel test er der mere fokus på test case design. Om testen viser korrekt / forkert udførelse af applikationen for at opfylde kravene.
  • I TDD opnår du 100% dækningstest. Hver eneste linje kode testes i modsætning til traditionel test.
  • Kombinationen af både traditionel test og TDD fører til vigtigheden af at teste systemet i stedet for perfektion af systemet.
  • I Agile Modelling (AM), skal du “teste med et formål”. Du skal vide, hvorfor du tester noget, og hvilket niveau det skal testes.

Hvad er accept TDD og Developer TDD

Der er to niveauer af TDD

  1. Acceptance TDD (ATDD): Med ATDD skriver du en enkelt accept test. Denne test opfylder kravene i specifikationen eller tilfredsstiller systemets opførsel. Derefter skriver du lige nok produktion / funktionalitetskode til at udføre den acceptstest. Acceptanstest fokuserer på systemets samlede opførsel. ATDD blev også kendt som Behavioral Driven Development (BDD).
  2. Udvikler TDD: Med udvikler TDD skriver du en enkelt udvikler test, dvs. enhedstest og derefter lige nok produktionskode til at udføre denne test. Enhedstesten fokuserer på hver eneste lille funktionalitet i systemet. Udvikler TDD kaldes simpelthen som TDD.

    Hovedmålet med ATDD og TDD er at specificere detaljerede, eksekverbare krav til din løsning på en just in time (JIT) basis. JIT betyder kun at tage de krav i betragtning, der er nødvendige i systemet. Så øg effektiviteten.

Skalering af TDD via Agile Model Driven Development (AMDD)

TDD er meget god til detaljeret specifikation og validering. Det undlader at tænke igennem større problemer som overordnet design, brug af systemet eller UI.AMDD løser de agile skaleringsproblemer, som TDD ikke gør.

Således bruges AMDD til større problemer.

AMDDs livscyklus.

I Model-driven Development (MDD) oprettes omfattende modeller inden kildekoden er skrevet. Hvilke har en agil tilgang?

I ovenstående figur repræsenterer hvert felt en udviklingsaktivitet.

Envisioning er en af TDD-processen til forudsigelse / forestilling af tests, der vil blive udført i løbet af projektets første uge. Hovedmålet med forestillingen er at identificere systemets omfang og systemets arkitektur. Krav på højt niveau og arkitekturmodellering udføres for en vellykket forestilling.

Det er den proces, hvor der ikke udføres en detaljeret specifikation af software / system, men udforskning af kravene til software / system, der definerer den overordnede strategi for projektet.

  1. Iteration 0: Envisioning

Der er to hovedunderaktiveringer.

  1. Indledende krav til planlægning.

    Det kan tage flere dage at identificere systemkrav på højt niveau og omfang. Hovedfokus er at udforske brugsmodel, indledende domænemodel og brugergrænseflademodel (UI).

  2. Indledende arkitektonisk forestilling.

    Det tager også flere dage at identificere systemets arkitektur. Det giver mulighed for at indstille tekniske retninger for projektet. Hovedfokus er at udforske teknologidiagrammer, brugergrænseflade (UI) flow, domænemodeller og Change cases.

  1. Iterationsmodellering:

    Her skal teamet planlægge det arbejde, der skal udføres for hver iteration.

  • Agil proces bruges til hver iteration, dvs. under hver iteration tilføjes nyt arbejdselement med prioritet.
  • Først højere prioriteret arbejde vil blive taget i betragtning. Arbejdsgenstande, der tilføjes, kan omprioriteres eller fjernes fra varestakken når som helst.
  • Teamet diskuterer, hvordan de vil implementere hvert krav. Modellering bruges til dette formål.
  • Modelleringsanalyse og design udføres for hvert krav, der skal implementeres for den iteration.
  1. Modelstorming:

    Dette er også kendt som Just in time Modeling.

  • Her involverer modelleringssession et team på 2/3 medlemmer, der diskuterer spørgsmål på papir eller whiteboard.
  • Et teammedlem vil spørge et andet at modellere med dem. Denne modelleringssession tager cirka 5 til 10 minutter. Hvor teammedlemmer samles for at dele tavle / papir.
  • De udforsker spørgsmål, indtil de ikke finder hovedårsagen til problemet. Lige i tide, hvis et teammedlem identificerer det emne, som han / hun ønsker for at løse, så tager han / hun hurtig hjælp fra andre teammedlemmer.
  • Andre gruppemedlemmer udforsker derefter problemet, og derefter fortsætter alle som før. Det kaldes også som stand-up modellering eller kunde QA sessioner .
  1. Test Driven Development (TDD).
  • Det fremmer bekræftende test af din applikationskode og detaljeret specifikation.
  • Både acceptstest (detaljerede krav) og udviklertests (enhedstest) er input til TDD.
  • TDD gør koden enklere og tydeligere. Det giver udvikleren mulighed for at opretholde mindre dokumentation.
  1. Anmeldelser.
  • Dette er valgfrit. Det inkluderer kodeinspektioner og modelanmeldelser.
  • Dette kan være udført for hver iteration eller for hele projektet.
  • Dette er en god mulighed for at give feedback til projektet.

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

Eksempel på TDD

Her i dette eksempel definerer vi et klasseadgangskode. For denne klasse vil vi forsøge at opfylde følgende betingelser.

En betingelse for adgangskodeadgangskode:

  • Adgangskoden skal være mellem 5 og 10 tegn.

Først skriver vi koden der opfylder alle ovenstående krav.

Scenarie 1: For at køre testen opretter vi klasse PasswordValidator ();

Vi løber over klasse TestPassword ();

Output passeres som vist nedenfor;

Output:

Scenarie 2: Her kan vi se i metode TestPasswordLength () er der ikke behov for at oprette en forekomst af klasse PasswordValidator. Forekomst betyder oprettelse af et objekt i klassen for at henvise medlemmerne (variabler / metoder) til den klasse.

Vi fjerner klasse PasswordValidator pv = ny PasswordValidator () fra koden. Vi kan kalde metoden isValid () direkte ved PasswordValidator. IsValid (“Abc123”).(Se billedet nedenfor)

Så vi refaktorerer (ændrer kode) som nedenfor:

Scenarie 3: Efter refactoring viser output mislykket status (se billedet nedenfor), fordi vi har fjernet forekomsten. Så der er ingen henvisning til ikke-statisk metode isValid ().

Så vi er nødt til at ændre denne metode ved at tilføje “statisk” ord før boolsk som offentlig statisk boolsk isValid (strengadgangskode). Refactoring klasse PasswordValidator () for at fjerne ovenstående fejl for at bestå testen.

Output:

Efter ændringer i klasse PassValidator () hvis vi kører testen, vil output blive bestået som vist nedenfor.

Fordele ved TDD

  • Tidlig fejl notifikation.

    Udviklere tester deres kode, men i databaseverdenen består dette ofte af manuelle tests eller engangs-scripts. Ved hjælp af TDD opbygger du over tid en række automatiske tests, som du og enhver anden udvikler kan køre igen efter eget valg.

  • Bedre designet, renere og mere udvidelig kode.
    • Det hjælper med at forstå, hvordan koden skal bruges, og hvordan den interagerer med andre moduler.
    • Det resulterer i en bedre designbeslutning og en mere vedligeholdelig kode.
    • TDD tillader skrivning af mindre kode med et enkelt ansvar i stedet for monolitiske procedurer med flere ansvarsområder. Dette gør koden lettere at forstå.
    • TDD tvinger også kun til at skrive produktionskode for at bestå test baseret på brugerkrav.
  • Tillid til refactor
    • Hvis du refaktorerer kode, kan der være muligheder for pauser i koden. Så hvis du har et sæt automatiserede tests, kan du rette disse pauser inden udgivelsen. Korrekt advarsel gives, hvis der findes pauser, når automatiske tests bruges.
    • Brug af TDD burde resultere i hurtigere, mere udvidelig kode med færre fejl, der kan opdateres med minimale risici.
  • Godt til teamwork

    I mangel af et teammedlem kan andre teammedlemmer let hente og arbejde på koden. Det hjælper også videndeling og derved gør teamet mere effektivt generelt.

  • Godt for udviklere

    Selvom udviklere skal bruge mere tid på at skrive TDD-testcases, tager det meget mindre tid at debugge og udvikle nye funktioner. Du vil skrive renere, mindre kompliceret kode.

Resume:

  • TDD står for testdrevet udvikling. Det er en proces til at ændre koden for at bestå en test, der er designet tidligere.
  • Det er mere vægt på produktionskode snarere end test case design.
  • Testdrevet udvikling er en proces at ændre koden for at bestå en test, der er designet tidligere.
  • I Software Engineering kaldes den undertiden som “Test First Development.”
  • TDD inkluderer refactoring af en kode, dvs. ændring / tilføjelse af en vis mængde kode til den eksisterende kode uden at påvirke kodens opførsel.
  • TDD når den bruges, bliver koden klarere og mere enkel at forstå.

Denne artikel er bidraget af Kanchan Kulkarni

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *