Wat is het testen van eenheden?
UNIT TESTING is een soort softwaretest waarbij individuele units of componenten van software worden getest. Het doel is om te valideren dat elke eenheid van de softwarecode presteert zoals verwacht. Unit Testing wordt gedaan tijdens de ontwikkeling (coderingsfase) van een applicatie door de ontwikkelaars. Unit Tests isoleren een gedeelte van de code en verifiëren de juistheid ervan. Een eenheid kan een individuele functie, methode, procedure, module of object zijn.
In SDLC, STLC, V-model is het testen van eenheden het eerste testniveau dat wordt uitgevoerd vóór integratietests. Unit-testing is een WhiteBox-testtechniek die gewoonlijk door de ontwikkelaar wordt uitgevoerd. Hoewel, in een praktische wereld als gevolg van tijdgebrek of onwil van ontwikkelaars voor tests, QA-ingenieurs ook unit-tests uitvoeren.
In deze tutorial leer je-
- Waarom unit testen?
- Unit-tests uitvoeren
- Unit Testing Technieken
- Instrumenten voor het testen van eenheden
- Test Driven Development (TDD) en unit testen
- Eenheid testen mythe
- Unit testen voordeel
- Unit testen nadelen
- Best practices voor het testen van eenheden
Waarom unit testen?
Unit-testen is belangrijk omdat softwareontwikkelaars soms proberen tijd te besparen door minimale unit-tests uit te voeren, en dit is een mythe omdat onjuiste unit-testen leiden tot hoge kosten. Als de unit in de vroege ontwikkeling goed wordt getest, bespaart dit uiteindelijk tijd en geld.
Hier zijn de belangrijkste redenen om unit-tests uit te voeren in software-engineering:
- Unit-tests helpen om bugs vroeg in de ontwikkelingscyclus op te lossen en kosten te besparen.
- Het helpt de ontwikkelaars de testcodebasis te begrijpen en stelt hen in staat om snel wijzigingen aan te brengen
- Goede unit-tests dienen als projectdocumentatie
- Unit-tests helpen bij het hergebruik van code. Migreer zowel uw code als uw tests naar uw nieuwe project. Tweak de code totdat de tests opnieuw worden uitgevoerd.
Unit-tests uitvoeren
Om Unit Testing te doen , schrijven ontwikkelaars een gedeelte van de code om een specifieke functie in de softwaretoepassing te testen. Ontwikkelaars kunnen deze functie ook isoleren om rigoureuzer te testen, wat onnodige afhankelijkheden aan het licht brengt tussen de functie die wordt getest en andere eenheden, zodat de afhankelijkheden kunnen worden geëlimineerd. Ontwikkelaars gebruiken over het algemeen het UnitTest-framework om geautomatiseerde testcases te ontwikkelen voor het testen van eenheden.
Unit Testing is van twee soorten
- Handleiding
- Geautomatiseerd
Het testen van eenheden is gewoonlijk geautomatiseerd, maar kan nog steeds handmatig worden uitgevoerd. Software Engineering geeft niet de voorkeur aan de een boven de ander, maar automatisering heeft de voorkeur. Een handmatige benadering van het testen van eenheden kan een stapsgewijs instructiedocument gebruiken.
Onder de geautomatiseerde aanpak-
- Een ontwikkelaar schrijft een stukje code in de applicatie om de functie te testen. Ze zouden later commentaar geven en uiteindelijk de testcode verwijderen wanneer de applicatie wordt geïmplementeerd.
- Een ontwikkelaar kan de functie ook isoleren om deze rigoureuzer te testen. Dit is een meer grondige praktijk voor het testen van eenheden waarbij code wordt gekopieerd en geplakt in de eigen testomgeving dan in de natuurlijke omgeving. Het isoleren van de code helpt bij het onthullen van onnodige afhankelijkheden tussen de code die wordt getest en andere eenheden of gegevensruimten in het product. Deze afhankelijkheden kunnen vervolgens worden geëlimineerd.
- Een coder gebruikt over het algemeen een UnitTest Framework om geautomatiseerde testcases te ontwikkelen. Met behulp van een automatiseringsraamwerk codeert de ontwikkelaar criteria in de test om de juistheid van de code te verifiëren. Tijdens de uitvoering van de testcases registreert het framework falende testcases. Veel frameworks zullen deze mislukte testgevallen ook automatisch markeren en rapporteren. Afhankelijk van de ernst van een storing, kan het raamwerk daaropvolgende testen stoppen.
- De workflow van Unit Testing is 1) Testcases maken 2) Beoordeling / herwerking 3) Baseline 4) Testcases uitvoeren.
Unit Testing Technieken
De unit- testtechnieken zijn hoofdzakelijk onderverdeeld in drie delen: Black box-testen waarbij de gebruikersinterface wordt getest, samen met invoer en uitvoer, White-box-testen waarbij het functionele gedrag van de softwareapplicatie wordt getest en Gray-box-testen die worden gebruikt om de test uit te voeren. suites, testmethoden, testcases en het uitvoeren van risicoanalyses.
De codedekkingstechnieken die worden gebruikt bij het testen van eenheden worden hieronder vermeld:
- Verklaring dekking
- Beslissingsdekking
- Bijkantoordekking
- Conditie dekking
- Finite State Machine-dekking
Raadpleeg voor meer informatie https://www.guru99.com/code-coverage.html
Unit Test Voorbeeld: Mock Objects
Het testen van eenheden is gebaseerd op het maken van nepobjecten om secties van code te testen die nog geen deel uitmaken van een volledige applicatie. Mock-objecten vullen de ontbrekende delen van het programma in.
U hebt bijvoorbeeld een functie waarvoor variabelen nodig zijn of objecten die nog niet zijn gemaakt. Bij het testen van eenheden wordt hiermee rekening gehouden in de vorm van nepobjecten die uitsluitend zijn gemaakt voor de eenheidstests die op dat gedeelte van de code zijn uitgevoerd.
Instrumenten voor het testen van eenheden
Er zijn verschillende geautomatiseerde unit-testsoftware beschikbaar om te helpen bij het testen van units. We zullen hieronder een paar voorbeelden geven:
- Junit: Junit is een gratis te gebruiken testtool die wordt gebruikt voor de programmeertaal Java. Het biedt beweringen om de testmethode te identificeren. Deze tool test eerst de gegevens en voegt ze vervolgens in het stuk code in.
- NUnit: NUnit is een veelgebruikt framework voor unit-testing voor alle .net-talen. Het is een open source-tool waarmee u handmatig scripts kunt schrijven. Het ondersteunt gegevensgestuurde tests die parallel kunnen worden uitgevoerd.
- JMockit: JMockit is een open source tool voor het testen van eenheden. Het is een codedekkingstool met lijn- en padstatistieken. Het maakt een mock-API mogelijk met opname- en verificatiesyntaxis. Deze tool biedt lijndekking, paddekking en gegevensdekking.
- EMMA: EMMA is een open-source toolkit voor het analyseren en rapporteren van code geschreven in Java-taal. Emma ondersteunt dekkingstypen zoals methode, lijn, basisblok. Het is gebaseerd op Java, dus het is zonder externe bibliotheekafhankelijkheden en heeft toegang tot de broncode.
- PHPUnit: PHPUnit is een tool voor het testen van eenheden voor PHP-programmeur. Er zijn kleine stukjes code nodig die eenheden worden genoemd en test ze allemaal afzonderlijk. De tool stelt ontwikkelaars ook in staat om vooraf gedefinieerde assertiemethoden te gebruiken om te beweren dat een systeem zich op een bepaalde manier gedraagt.
Dit zijn slechts enkele van de beschikbare tools voor het testen van eenheden. Er zijn nog veel meer, vooral voor C-talen en Java, maar u zult zeker een tool voor het testen van eenheden vinden voor uw programmeerbehoeften, ongeacht de taal die u gebruikt.
Test Driven Development (TDD) en unit testen
Unit testen in TDD omvat een uitgebreid gebruik van testkaders. Een unit test framework wordt gebruikt om geautomatiseerde unit tests te maken. Unit testing frameworks zijn niet uniek voor TDD, maar ze zijn er wel essentieel voor. Hieronder bekijken we wat TDD in de wereld van unit testing brengt:
- Tests worden vóór de code geschreven
- Vertrouw sterk op het testen van frameworks
- Alle klassen in de applicaties worden getest
- Snelle en gemakkelijke integratie is mogelijk gemaakt
Eenheid testen mythe
Mythe: het kost tijd en ik word altijd overscheduled. Mijn code is oerdegelijk! Ik heb geen unit tests nodig.
Mythen zijn van nature onjuiste aannames. Deze aannames leiden als volgt tot een vicieuze cirkel:
Truth is Unit testing verhoogt de snelheid van ontwikkeling.
Programmeurs denken dat Integration Testing alle fouten opspoort en voeren de unit-test niet uit. Als de units eenmaal zijn geïntegreerd, duurt het erg lang voordat zeer eenvoudige fouten die gemakkelijk kunnen worden gevonden en verholpen in de geteste unit, worden opgespoord en verholpen.
Unit testen voordeel
- Ontwikkelaars die willen weten welke functionaliteit een eenheid biedt en hoe ze deze kunnen gebruiken, kunnen de eenheidstests bekijken om een basiskennis te krijgen van de eenheid-API.
- Unit testing stelt de programmeur in staat om de code op een later tijdstip te refactoren, en ervoor te zorgen dat de module nog steeds correct werkt (dwz regressietesten). De procedure is om testcases te schrijven voor alle functies en methoden, zodat elke verandering die een fout veroorzaakt, deze snel kan worden geïdentificeerd en verholpen.
- Vanwege het modulaire karakter van de unit-testen, kunnen we delen van het project testen zonder te wachten tot andere voltooid zijn.
Unit testen nadelen
- Het testen van eenheden kan niet elke fout in een programma opsporen. Het is niet mogelijk om alle uitvoeringspaden te evalueren, zelfs niet in de meest triviale programma's
- Unit-testen zijn van nature gericht op een code-eenheid. Daarom kan het geen integratiefouten of fouten op systeemniveau opvangen.
Het wordt aanbevolen eenheidstests te gebruiken in combinatie met andere testactiviteiten.
Best practices voor het testen van eenheden
- Unit Test-cases moeten onafhankelijk zijn. In het geval van verbeteringen of wijzigingen in de vereisten, mogen unit-testgevallen niet worden beïnvloed.
- Test slechts één code tegelijk.
- Volg duidelijke en consistente naamgevingsconventies voor uw unit-tests
- In het geval van een wijziging in de code in een module, zorg ervoor dat er een overeenkomstige unit-testcase voor de module is, en de module slaagt voor de tests voordat de implementatie wordt gewijzigd
- Bugs die tijdens het testen van eenheden zijn geïdentificeerd, moeten worden opgelost voordat u doorgaat naar de volgende fase in SDLC
- Pas een "test als uw code" -benadering toe. Hoe meer code u schrijft zonder te testen, hoe meer paden u op fouten moet controleren.
Overzicht
- UNIT TESTING wordt gedefinieerd als een type softwaretest waarbij individuele units of componenten van software worden getest.
- Zoals u kunt zien, kan er veel komen kijken bij het testen van eenheden. Het kan complex of vrij eenvoudig zijn, afhankelijk van de toepassing die wordt getest en de gebruikte teststrategieën, tools en filosofieën. Het testen van eenheden is altijd op een bepaald niveau nodig. Dat is een zekerheid.