Hvad er testdrevet udvikling (TDD)? Eksempel

โšก Smart opsummering

Testdrevet udvikling (TDD) er en softwareudviklingsmetode, hvor testcases skrives fรธr koden, hvilket guider udviklere til kun at skrive nok kode til at bestรฅ hver fejlende test, hvilket producerer enklere, fejlfri, fuldt dรฆkket og vedligeholdelsesvenlig software.

  • ???? TDD-defineret: Skriv fรธrst testcases, og skriv derefter kun nok kode til at fรฅ dem til at bestรฅ.
  • ๐Ÿ” Fem trin: Tilfรธj en test, kรธr tests, skriv kode, kรธr og refaktorรฉr, og gentag derefter.
  • ๐Ÿ†š vs. traditionel testning: TDD er en specifikationsteknik, der sigter mod 100% testdรฆkning af produktionskode.
  • ๐ŸŽฏ To niveauer: Acceptance TDD (ATDD/BDD) er rettet mod systemadfรฆrd; Developer TDD er rettet mod enhedsfunktionalitet.
  • ๐Ÿงฐ Rammer: JUnit, TestNG, csUnit, NUnit og Rspec understรธtter testdrevet udvikling.
  • โœ… Fordele: Tidlig fejldetektion, renere udvidelig kode, sikker refactoring og bedre teamwork.

Hvad er testdrevet udvikling (TDD)

Hvad er testdrevet udvikling (TDD)?

Testdrevet udvikling (TDD) er softwareudviklingstilgang, hvor testcases udvikles for at specificere og validere, hvad koden vil gรธre. Enkelt sagt, testcases for hver funktionalitet oprettes og testes 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 design og udviklingping test for hver eneste lille funktionalitet i en applikation. TDD-frameworket instruerer udviklere i kun at skrive ny kode, hvis en automatiseret test er mislykket. Dette undgรฅr dobbeltarbejde. Den fulde form af TDD er testdrevet udvikling.

Testdrevet udvikling

Det simple 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รฅ tests. (Tester er intet andet end kravbetingelser, som vi skal teste for at opfylde dem).

Testdrevet udvikling er en udviklingsprocesping og kรธrer automatiseret test fรธr den faktiske udvikling af applikationen. Derfor kaldes TDD undertiden ogsรฅ for Test fรธrste udvikling.

Sรฅdan udfรธres TDD-testen

Fรธlgende trin definerer, hvordan man udfรธrer TDD-test,

  1. Tilfรธj en test.
  2. Kรธr alle test og se, om en ny test mislykkes.
  3. Skriv noget kode.
  4. Kรธr test og Refactor-kode.
  5. Gentage.
Udfรธr TDD-test
Fem trin i testdrevet udvikling

TDD cyklus definerer

  1. Skriv en test
  2. Fรฅ det til at kรธre.
  3. Skift koden for at gรธre den rigtig, dvs. Refactor.
  4. Gentag processen.

Nogle prรฆciseringer om TDD:

  • TDD-tilgangen handler hverken om "Test" eller om "Design".
  • TDD betyder ikke "skriv nogle af testene, og byg derefter et system, der bestรฅr testene.
  • TDD betyder ikke "udfรธr en masse test."

TDD vs. Traditionel test

Nedenfor er hovedforskellen mellem testdrevet udvikling og traditionel test:

TDD tilgang er primรฆrt en specifikationsteknik. Det sikrer, at din kildekode er grundigt testet pรฅ bekrรฆftende 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 skal lรธse problemet.
  • TDD sikrer, at dit system rent faktisk opfylder de krav, der er defineret for det. Det hjรฆlper med at opbygge din tillid til dit system.
  • I TDD er der mere fokus pรฅ produktionskode, der verificerer, om test vil fungere korrekt. I traditionel test er der mere fokus pรฅ design af testcase. Om testen vil vise den korrekte/ukorrekte udfรธrelse af applikationen for at opfylde kravene.
  • I TDD opnรฅr du 100% dรฆkningstest. Hver enkelt kodelinje testes i modsรฆtning til traditionel test.
  • Kombinationen af โ€‹โ€‹bรฅde traditionel test og TDD fรธrer til vigtigheden af โ€‹โ€‹at teste systemet frem for perfektion af systemet.
  • In Agile modellering (AM), bรธr du "teste med et formรฅl". Du bรธr vide, hvorfor du tester noget, og hvilket niveau det skal testes.

Hvad er accept TDD og udvikler TDD

Der er to niveauer af TDD

  1. Accept TDD (ATDD): Med ATDD skriver du en enkelt accepttest. Denne test opfylder kravene i specifikationen eller tilfredsstiller systemets opfรธrsel. Skriv derefter lige nok produktions-/funktionalitetskode til at opfylde denne accepttest. Accepttest fokuserer pรฅ systemets overordnede adfรฆrd. ATDD var ogsรฅ kendt som Behavioural Driven Development (BDD).
  2. Udvikler TDD: Med Developer TDD skriver du en enkelt udviklertest, dvs. enhedstest og derefter lige nok produktionskode til at opfylde 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รฅ et just in time (JIT) grundlag. JIT betyder kun at tage de krav i betragtning, som er nรธdvendige i systemet. Sรฅ รธge effektiviteten.

Accept TDD og udvikler TDD

Skalering af TDD via Agile Model Driven Development (AMDD)

TDD er meget god til detaljerede specifikationer og validering. Den formรฅr ikke at gennemtรฆnke stรธrre problemer sรฅsom overordnet design, brug af systemet eller brugergrรฆnseflade. AMDD lรธser problemer med Agile skalering, som TDD ikke gรธr.

Sรฅledes AMDD brugt til stรธrre problemer.

AMDDs livscyklus

AMDDs livscyklus

I Model-driven Development (MDD) oprettes omfattende modeller fรธr kildekoden skrives. Som igen har en agil tilgang?

I ovenstรฅende figur reprรฆsenterer hver boks en udviklingsaktivitet.

Envisioning er en af โ€‹โ€‹TDD-processerne med forudsigelse/forestillingstest, som vil blive udfรธrt i lรธbet af den fรธrste uge af projektet. Hovedmรฅlet med envisioning er at identificere omfanget af systemet og systemets arkitektur. Krav og arkitekturmodellering pรฅ hรธjt niveau udfรธres for vellykket forestilling.

Det er processen, hvor der ikke udfรธres en detaljeret specifikation af software/system, men udforskning af kravene til software/system, der definerer projektets overordnede strategi.

Iteration 0: Envisioning

Der er to primรฆre underaktiveringer.

  1. Indledende krav forestillende.Det kan tage flere dage at identificere hรธje krav og omfang af systemet. Hovedfokus er at udforske brugsmodel, indledende domรฆnemodel og brugergrรฆnseflademodel (UI).
  2. Initial Architeknisk forestilling. Det tager ogsรฅ flere dage at identificere systemets arkitektur. Det giver mulighed for at sรฆtte tekniske retningslinjer for projektet. Hovedfokus er at udforske teknologidiagrammer, User Interface (UI) flow, domรฆnemodeller og Change cases.

Iterationsmodellering

Her skal teamet planlรฆgge det arbejde, der skal udfรธres for hver iteration.

  • Agile proces bruges til hver iteration, dvs. under hver iteration vil nyt arbejdsemne blive tilfรธjet med prioritet.
  • Det fรธrste hรธjere prioriterede arbejde vil blive taget i betragtning. Arbejdselementer, der tilfรธjes, kan til enhver tid omprioriteres eller fjernes fra stablen af โ€‹โ€‹elementer.
  • Teamet diskuterer, hvordan de vil implementere hvert enkelt krav. Modellering bruges til dette formรฅl.
  • Modelleringsanalyse og design udfรธres for hvert krav, som skal implementeres for den iteration.

Model stormende

Dette er ogsรฅ kendt som Just in time Modeling.

  • Her involverer modelleringssession et team pรฅ 2/3 medlemmer, som diskuterer spรธrgsmรฅl pรฅ papir eller tavle.
  • Et teammedlem vil bede et andet om at modellere med dem. Denne modelleringssession vil tage cirka 5 til 10 minutter. Hvor teammedlemmer samles for at dele whiteboard/papir.
  • De udforsker problemer, indtil de ikke finder hovedรฅrsagen til problemet. Lige i tide, hvis et teammedlem identificerer det problem, han/hun รธnsker at lรธse, vil han/hun tage hurtig hjรฆlp fra andre teammedlemmer.
  • Andre gruppemedlemmer udforsker derefter problemet, og sรฅ fortsรฆtter alle som fรธr. Det kaldes ogsรฅ som stand-up modellering eller kunde QA sessioner.

Testdrevet udvikling (TDD)

  • Det fremmer bekrรฆftende test af din ansรธgningskode og detaljerede specifikationer.
  • Bรฅde accepttest (detaljerede krav) og udviklertest (enhedstest) er input til TDD.
  • TDD gรธr koden enklere og overskuelig. Det giver udvikleren mulighed for at vedligeholde mindre dokumentation.

Reviews

  • Dette er valgfrit. Det inkluderer kodeinspektioner og modelgennemgange.
  • Dette kan gรธres for hver iteration eller for hele projektet.
  • Dette er en god mulighed for at give feedback til projektet.

Testdrevet udvikling (TDD) vs. Agile modeldrevet udvikling (AMDD)

TDD AMDD
TDD forkorter programmeringsfeedbackslรธjfen AMDD forkorter modellering feedback loop.
TDD er detaljeret specifikation AMDD arbejder for stรธrre problemer
TDD fremmer udviklingen af โ€‹โ€‹kode af hรธj kvalitet AMDD fremmer kommunikation af hรธj kvalitet med interessenter og udviklere.
TDD taler til programmรธrer AMDD taler med Business Analyst, interessenter og dataprofessionelle.
TDD ikke-visuelt orienteret AMDD visuelt orienteret
TDD har begrรฆnset omfang til softwarearbejde AMDD har et bredt anvendelsesomrรฅde, herunder interessenter. Det handler om at arbejde hen imod en fรฆlles forstรฅelse
Begge understรธtter evolutionรฆr udvikling ---------------

TDD Frameworks

Her er listen over de bedste testdrevne udviklingsrammer (TDD).

  1. Junit
  2. TestNG
  3. csUnit og NUnit
  4. Rspec

Lad os nu lรฆre Testdrevet udvikling ved eksempel.

Eksempel pรฅ TDD

Her i dette testdrevne udviklingseksempel vil vi definere en klasseadgangskode. For denne klasse vil vi forsรธge at opfylde fรธlgende betingelser.

En betingelse for accept af adgangskode:

  • Adgangskoden skal vรฆre mellem 5 og 10 tegn.

Fรธrst i dette TDD-eksempel skriver vi koden, der opfylder alle ovenstรฅende krav.

Eksempel pรฅ TDD

Scenario 1: For at kรธre testen opretter vi klassen PasswordValidator ();

Eksempel pรฅ TDD

Vi kรธrer over klassen TestPassword ();

Outputtet er bestรฅet som vist nedenfor;

Produktion:

Eksempel pรฅ TDD

Scenario 2: Her kan vi se i metoden TestPasswordLength () at der ikke er behov for at oprette en forekomst af klassen PasswordValidator. Forekomst betyder at oprette en objekt klasse for at henvise medlemmerne (variabler/metoder) af den pรฅgรฆldende klasse.

Eksempel pรฅ TDD

Vi fjerner klassen PasswordValidator pv = new PasswordValidator () fra koden. Vi kan ringe til er gyldig () metode direkte ved Password Validator. IsValid ("Abc123"). (Se billedet nedenfor)

Sรฅ vi Refactor (รฆndre kode) som nedenfor:

Eksempel pรฅ TDD

Scenario 3: Efter refactoring viser outputtet mislykket status (se billedet nedenfor), det skyldes, at vi har fjernet instansen. Sรฅ der er ingen reference til ikke-statisk metode er gyldig ().

Eksempel pรฅ TDD

Sรฅ vi er nรธdt til at รฆndre denne metode ved at tilfรธje "statisk" ord fรธr Boolean som offentlig statisk boolean isValid (strengadgangskode). Refactoring Class PasswordValidator () for at fjerne ovenstรฅende fejl for at bestรฅ testen.

Eksempel pรฅ TDD

Output:

Efter at have foretaget รฆndringer i klassen PassValidator (), hvis vi kรธrer testen, vil outputtet blive bestรฅet som vist nedenfor.

Eksempel pรฅ TDD

Fordele ved TDD

Fรธlgende er de vigtigste fordele ved Test Driven Development in Software Engineering:

Tidlig fejlmeddelelse.

  • Udviklere tester deres kode, men i databaseverdenen bestรฅr dette ofte af manuelle tests eller enkeltstรฅende scripts. Ved at bruge TDD opbygger du over tid en rรฆkke automatiserede tests, som du og enhver anden udvikler kan kรธre igen efter eget รธnske.

Bedre designet, renere og mere udvidelsesbar kode.

  • Det hjรฆlper med at forstรฅ, hvordan koden vil blive brugt, og hvordan den interagerer med andre moduler.
  • Det resulterer i bedre designbeslutninger og mere vedligeholdelsesvenlig kode.
  • TDD gรธr det muligt at skrive mindre kode med enkelt ansvar i stedet for monolitiske procedurer med flere ansvarsomrรฅder. Dette gรธr koden lettere at forstรฅ.
  • TDD tvinger ogsรฅ til kun at skrive produktionskode for at bestรฅ test baseret pรฅ brugerkrav.

Tillid til Refactor

  • Hvis du refactorer koder, kan der vรฆre muligheder for brud i koden. Sรฅ med et sรฆt automatiserede tests kan du rette disse pauser fรธr frigivelse. Korrekt advarsel vil blive givet, hvis der konstateres pauser, nรฅr der anvendes automatiserede tests.
  • Brug af TDD bรธr resultere i hurtigere, mere udvidelsesbar kode med fรฆrre fejl, der kan opdateres med minimale risici.

God til teamwork

  • I mangel af et teammedlem kan andre teammedlemmer nemt samle op og arbejde pรฅ koden. Det hjรฆlper ogsรฅ med at dele viden, og derved gรธre teamet mere effektivt generelt.

Godt for udviklere

  • Selvom udviklere skal bruge mere tid pรฅ at skrive TDD-testcases, tager det meget mindre tid til fejlfinding og udvikling.ping nye funktioner. Du vil skrive renere og mindre kompliceret kode.

Ofte Stillede Spรธrgsmรฅl

Rรธd-grรธn-refaktorering er den centrale TDD-cyklus: skriv en fejlende test (rรธd), skriv minimal kode for at bestรฅ den (grรธn), og forbedr derefter koden uden at รฆndre adfรฆrd (refaktorering). Cyklussen gentages for hver funktion.

TDD fokuserer pรฅ at teste smรฅ kodeenheder fra en udviklers synspunkt, mens BDD (Behavior Driven Development) beskriver forventet adfรฆrd i et letforstรฅeligt sprog, sรฅ forretnings- og tekniske teams deler en fรฆlles forstรฅelse.

TDD krรฆver ekstra tid til at skrive tests pรฅ forhรฅnd, har en indlรฆringskurve og krรฆver vedligeholdte testpakker. Dรฅrligt skrevne tests kan give falsk selvtillid og langsom udvikling, hvis de ikke hรฅndteres ordentligt.

AI kan generere enhedstests ud fra krav, foreslรฅ edge cases, skrive minimal kode til videregivelse og refaktorere automatisk. Dette accelererer rรธd-grรธn-refaktoreringscyklussen, mens udviklere gennemgรฅr de genererede tests.

Ja. AI-assistenter kan udarbejde fejlende tests baseret pรฅ en specifikation og derefter foreslรฅ kode for at fรฅ dem til at bestรฅ. Udviklere validerer stadig, at testene afspejler de sande krav.

Opsummer dette indlรฆg med: