Wat is Test Driven Development (TDD)? Tutorial met voorbeeld

Testgestuurde ontwikkeling

Test Driven Development (TDD) is een softwareontwikkelingsbenadering waarin testgevallen worden ontwikkeld om te specificeren en valideren wat de code zal doen. In eenvoudige bewoordingen worden testcases voor elke functionaliteit eerst gemaakt en getest en als de test mislukt, wordt de nieuwe code geschreven om de test te doorstaan en de code eenvoudig en foutvrij te maken.

Testgestuurde ontwikkeling begint met het ontwerpen en ontwikkelen van tests voor elke kleine functionaliteit van een applicatie. TDD instrueert ontwikkelaars om alleen nieuwe code te schrijven als een geautomatiseerde test is mislukt. Dit voorkomt duplicatie van code. De volledige vorm van TDD is testgestuurde ontwikkeling.

Het simpele concept van TDD is om de mislukte tests te schrijven en te corrigeren voordat je gaat schrijven nieuwe code (vóór ontwikkeling). Dit helpt om duplicatie van code te voorkomen, omdat we een kleine hoeveelheid code tegelijk schrijven om tests te doorstaan. (Tests zijn niets anders dan vereiste voorwaarden die we moeten testen om eraan te voldoen).

Testgestuurde ontwikkeling is een proces van het ontwikkelen en uitvoeren van geautomatiseerde test voordat de applicatie daadwerkelijk wordt ontwikkeld. Vandaar dat TDD ook wel Test First Development wordt genoemd.

In deze tutorial leert u meer over-

  • Hoe TDD-tests uit te voeren
  • TDD Vs. Traditioneel testen
  • Wat is acceptatie TDD en TDD voor ontwikkelaars
  • TDD opschalen via Agile Model Driven Development (AMDD)
  • Test Driven Development (TDD) vs. Agile Model Driven Development (AMDD)
  • Voorbeeld van TDD
  • Voordelen van TDD

Hoe TDD-test uitvoeren

De volgende stappen bepalen hoe een TDD-test moet worden uitgevoerd,

  1. Voeg een test toe.
  2. Voer alle tests uit en kijk of een nieuwe test mislukt.
  3. Schrijf er enkele code.
  4. Voer tests en refactorcode uit.
  5. Herhaal.

TDD-cyclus definieert

  1. Schrijf een test
  2. Laat hem draaien.
  3. Verander de code om het goed te maken, dwz Refactor.
  4. Herhaal het proces.

Enkele verduidelijkingen over TDD:

  • TDD gaat niet over “testen” noch over “Design”.
  • TDD betekent niet “schrijf een aantal van de tests en bouw dan een systeem dat de tests doorstaat.
  • TDD betekent niet” doe veel testen. “

TDD versus traditioneel testen

TDD-benadering is in de eerste plaats een specificatietechniek. Het zorgt ervoor dat uw broncode grondig wordt getest bij bevestiging niveau.

  • Bij traditionele tests worden bij een geslaagde test een of meer defecten gevonden. Het is hetzelfde als TDD. Als een test mislukt, hebt u vooruitgang geboekt omdat u weet dat u het probleem moet oplossen.
  • TDD zorgt ervoor dat uw systeem daadwerkelijk voldoet aan de vereisten die ervoor zijn gedefinieerd. Het helpt om uw vertrouwen in uw systeem op te bouwen.
  • In TDD ligt meer focus op productiecode die verifieert of testen correct zal werken. Bij traditioneel testen ligt de nadruk meer op het ontwerpen van testcases. Of de test de juiste / onjuiste uitvoering van de applicatie zal aantonen om aan de vereisten te voldoen.
  • In TDD behaalt u een 100% dekkingstest. Elke regel code wordt getest, in tegenstelling tot traditioneel testen.
  • De combinatie van zowel traditioneel testen als TDD leidt tot het belang van het testen van het systeem in plaats van het perfectioneren van het systeem.
  • In Agile Modeling (AM), je moet “testen met een doel”. U moet weten waarom u iets test en op welk niveau het moet worden getest.

Wat is acceptatie TDD en ontwikkelaar TDD

Er zijn twee niveaus van TDD

  1. Acceptatie TDD (ATDD): Met ATDD schrijf je een enkele acceptatietest. Deze test voldoet aan de eis van de specificatie of voldoet aan het gedrag van het systeem. Schrijf daarna net genoeg productie- / functionaliteitscode om die acceptatietest te doorstaan. Acceptatietest richt zich op het algemene gedrag van het systeem. ATDD stond ook bekend als Behavioral Driven Development (BDD).
  2. Ontwikkelaar TDD: met Developer TDD schrijft u een enkele ontwikkelaarstest, d.w.z. eenheidstest en vervolgens net genoeg productiecode om die test te voltooien. De unit-test richt zich op elke kleine functionaliteit van het systeem. Ontwikkelaar TDD wordt eenvoudigweg TDD genoemd.

    Het belangrijkste doel van ATDD en TDD is het specificeren van gedetailleerde, uitvoerbare vereisten voor uw oplossing op een just in time (JIT) -basis. JIT betekent alleen rekening houden met die vereisten die nodig zijn in het systeem. Verhoog dus de efficiëntie.

TDD opschalen via Agile Model Driven Development (AMDD)

TDD is erg goed in gedetailleerde specificatie en validatie. Het slaagt er niet in om grotere kwesties te overdenken, zoals het algehele ontwerp, het gebruik van het systeem of de gebruikersinterface.AMDD pakt de Agile-schaalproblemen aan die TDD niet doet.

Dus AMDD gebruikt voor grotere problemen.

De levenscyclus van AMDD.

In Model-driven Development (MDD) worden uitgebreide modellen gemaakt voordat de broncode is geschreven. Welke hebben op hun beurt een agile aanpak?

In bovenstaande afbeelding vertegenwoordigt elk vak een ontwikkelingsactiviteit.

Envisioning is een van de TDD-processen van het voorspellen / verbeelden van tests die tijdens de eerste week van het project zullen worden uitgevoerd. Het belangrijkste doel van visualiseren is om de reikwijdte van het systeem en de architectuur van het systeem te identificeren. Vereisten op hoog niveau en architectuurmodellering worden gedaan voor een succesvolle visualisatie.

Het is het proces waarbij geen gedetailleerde specificatie van software / systeem wordt gedaan, maar het onderzoeken van de vereisten van software / systeem dat de algemene strategie van het project definieert.

  1. Iteratie 0: Envisioning

Er zijn twee hoofdsubactiveringen.

  1. Initiële vereisten voorzien.

    Het kan enkele dagen duren om de vereisten op hoog niveau en de omvang van het systeem te identificeren. De belangrijkste focus is om het gebruiksmodel, het initiële domeinmodel en het gebruikersinterfacemodel (UI) te verkennen.

  2. Oorspronkelijke architectonische voorstelling.

    Het duurt ook enkele dagen om de architectuur van het systeem te identificeren. Hiermee kunnen technische richtlijnen voor het project worden opgesteld. De belangrijkste focus is het verkennen van technologiediagrammen, User Interface (UI) -stroom, domeinmodellen en Change-cases.

  1. Iteratiemodellering:

    Hier moet het team het werk plannen dat voor elke iteratie zal worden gedaan.

  • Agile-proces wordt gebruikt voor elke iteratie, dwz tijdens elke iteratie wordt een nieuw werkitem met prioriteit toegevoegd.
  • Eerste hogere prioriteit werk zal in overweging worden genomen. Toegevoegde werkitems kunnen op elk moment een nieuwe prioriteit krijgen of uit de itemsstapel worden verwijderd.
  • Het team bespreekt hoe ze elke vereiste gaan implementeren. Modellering wordt voor dit doel gebruikt.
  • Modelleringanalyse en -ontwerp wordt gedaan voor elke vereiste die voor die iteratie wordt geïmplementeerd.
  1. Modelbestorming:

    Dit wordt ook wel Just in time Modeling genoemd.

  • Bij de modelleringssessie is een team van 2/3 leden betrokken die problemen op papier of een whiteboard bespreken.
  • Het ene teamlid zal het een ander vragen om met hen te modelleren. Deze modelleersessie duurt ongeveer 5 tot 10 minuten. Waar teamleden samenkomen om whiteboard / paper te delen.
  • Ze onderzoeken problemen totdat ze de hoofdoorzaak van het probleem niet vinden. Net op tijd, als een teamlid het probleem identificeert dat hij / zij wil om op te lossen, zal hij / zij snel hulp van andere teamleden inroepen.
  • Andere groepsleden onderzoeken het probleem en dan gaat iedereen verder zoals voorheen. Het wordt ook wel stand-up modellering of QA-sessies voor klanten genoemd .
  1. Test Driven Development (TDD).
  • Het bevordert het testen van uw applicatiecode en gedetailleerde specificatie.
  • Zowel acceptatietest (gedetailleerde vereisten) als ontwikkelaarstests (eenheidstest) zijn invoer voor TDD.
  • TDD maakt de code eenvoudiger en duidelijker. Het stelt de ontwikkelaar in staat om minder documentatie bij te houden.
  1. Recensies.
  • Dit is optioneel. Het omvat code-inspecties en modelrecensies.
  • Dit kan gedaan voor elke iteratie of voor het hele project.
  • Dit is een goede optie om feedback te geven voor het project.

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

Voorbeeld van TDD

Hier in dit voorbeeld zullen we een klassenwachtwoord definiëren. Voor deze les proberen we aan de volgende voorwaarden te voldoen.

Een voorwaarde voor wachtwoordacceptatie:

  • Het wachtwoord moet tussen de 5 en 10 tekens lang zijn.

Eerst schrijven we de code die aan alle bovenstaande eisen voldoet.

Scenario 1: Om de test uit te voeren, creëren we de klasse PasswordValidator ();

We draaien boven klasse TestPassword ();

Uitvoer is PASSED zoals hieronder getoond;

Uitvoer:

Scenario 2: hier kunnen we zie in methode TestPasswordLength () het is niet nodig om een instantie van de klasse PasswordValidator te maken. Instantie betekent het maken van een klasseobject om de leden (variabelen / methoden) van die klasse te verwijzen.

We zullen de klasse PasswordValidator pv = new PasswordValidator () uit de code verwijderen. We kunnen de isValid () – methode rechtstreeks aanroepen door PasswordValidator. IsValid (“Abc123”).(Zie onderstaande afbeelding)

Dus we refactoren (wijzigen code) zoals hieronder:

Scenario 3: Na refactoring toont de uitvoer de status mislukt (zie onderstaande afbeelding). Dit komt omdat we de instantie hebben verwijderd. Er is dus geen verwijzing naar de niet-statische methode isValid ().

Dus we moeten deze methode veranderen door een “statisch” woord toe te voegen voor Boolean als public static boolean isValid (String wachtwoord). Refactoring Class PasswordValidator () om bovenstaande fout te verwijderen en de test te doorstaan.

Uitvoer:

Na het aanbrengen van wijzigingen aan klasse PassValidator () als we de test uitvoeren, wordt de uitvoer PASSED zoals hieronder weergegeven.

Voordelen van TDD

  • Vroege bug kennisgeving.

    Ontwikkelaars testen hun code, maar in de databasewereld bestaat dit vaak uit handmatige tests of eenmalige scripts. Met behulp van TDD bouwt u in de loop van de tijd een reeks geautomatiseerde tests op die u en elke andere ontwikkelaar naar believen opnieuw kunnen uitvoeren.

  • Beter ontworpen, schonere en beter uitbreidbare code.
    • Het helpt om te begrijpen hoe de code zal worden gebruikt en hoe deze samenwerkt met andere modules.
    • Het resulteert in een betere ontwerpbeslissing en beter te onderhouden code.
    • TDD maakt het mogelijk kleinere code te schrijven met een enkele verantwoordelijkheid in plaats van monolithische procedures met meerdere verantwoordelijkheden. Dit maakt de code eenvoudiger te begrijpen.
    • TDD dwingt ook om alleen productiecode te schrijven om tests te doorstaan op basis van gebruikersvereisten.
  • Vertrouwen om te refactor
    • Als je code refactoreert, kunnen er pauzes in de code voorkomen. Met een reeks geautomatiseerde tests kunt u die pauzes oplossen voordat u ze vrijgeeft. Er zal een juiste waarschuwing worden gegeven als er onderbrekingen worden gevonden wanneer geautomatiseerde tests worden gebruikt.
    • Het gebruik van TDD zou moeten resulteren in snellere, beter uitbreidbare code met minder bugs die kunnen worden bijgewerkt met minimale risicos.
  • Goed voor teamwerk

    Bij afwezigheid van een teamlid kunnen andere teamleden gemakkelijk de code oppikken en eraan werken. Het helpt ook bij het delen van kennis, waardoor het team in het algemeen effectiever wordt.

  • Goed voor ontwikkelaars

    Hoewel ontwikkelaars meer tijd moeten besteden aan het schrijven van TDD-testcases, kost het veel minder tijd om fouten op te sporen en nieuwe functies te ontwikkelen. Je schrijft schonere, minder gecompliceerde code.

Samenvatting:

  • TDD staat voor Test-driven development. Het is een proces van het wijzigen van de code om te slagen voor een eerder ontworpen test.
  • Het legt meer de nadruk op productiecode dan op het ontwerp van testcases.
  • Testgestuurde ontwikkeling is een proces van het wijzigen van de code om te slagen voor een eerder ontworpen test.
  • In Software Engineering wordt het ook wel “Test First Development” genoemd.
  • TDD omvat het herstructureren van een code, dwz het wijzigen / toevoegen van een hoeveelheid code aan de bestaande code zonder het gedrag van de code te beïnvloeden.
  • Wanneer TDD wordt gebruikt, wordt de code duidelijker en eenvoudiger begrijpen.

Dit artikel is bijgedragen door Kanchan Kulkarni

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *