Microsoft AZ-400: Teststrategie en Quality Engineering — Studiegids
Onderdeel van de Microsoft DevOps Engineer Expert AZ-400 — Studiegids. Oefen met geverifieerde antwoorden in het Microsoft-examencentrum, of doe getimede oefentests op ExamRoll.io.
Overzicht
Teststrategie en Quality Engineering in Azure DevOps draait om het opbouwen van vertrouwen in software door snelle, deterministische feedback gedurende de gehele leveringscyclus. Hierbij worden de native mogelijkheden van het platform gebruikt om quality gates en traceerbaarheid af te dwingen. Effectieve strategieën combineren een gebalanceerde testpiramide, vroege en continue validatie (TDD/BDD), robuuste automatisering in pipelines, gedisciplineerd beheer van testdata en geavanceerde technieken zoals load testing, chaos engineering, toegankelijkheidscontroles en op code coverage gebaseerde deployments. Azure Test Plans, Azure Pipelines, Azure Load Testing en Azure Chaos Studio bieden de tools om deze praktijken op grote schaal te implementeren.
Fundamenten van Teststrategie
Een pragmatische testpiramide vermindert risico’s met snelle, goedkope tests aan de basis en een kleiner aantal high-fidelity tests aan de top:
- Unit tests valideren geïsoleerde logica en zouden het grootste deel van de testsuite moeten uitmaken. Streef naar snelle uitvoering en hoge determinisme. Stel voor de meeste producten doelen voor unit test coverage in het bereik van 70-90% voor kritieke services, en erken daarbij dat coverage een proxy-metric is en geen garantie voor kwaliteit.
- Integration tests verifiëren de contracten tussen componenten (bijv. database, messaging, externe services) met realistische grenzen en tijdelijke (ephemeral) afhankelijkheden. Voer ze waar mogelijk parallel uit, in gecontaineriseerde of gesandboxte omgevingen, en richt je op 30-60% van de kritieke codepaden die worden doorlopen via scenario’s op integratieniveau.
- End-to-end (E2E) tests valideren gebruikerstrajecten (user journeys) over de volledige stack. Houd ze minimaal en gericht op de meest waardevolle paden (doorgaans 5-15% van de suite) om breekbare, trage feedback te vermijden.
Shift-left testpraktijken verminderen defecten in een vroeger stadium:
- Test-Driven Development (TDD) dwingt red-green-refactor cycli af, informeert het ontwerp en verhoogt het vertrouwen op unit-niveau. Maak TDD praktisch door engineers snelle, lokale test runners te bieden en door tests hermetisch en deterministisch te houden.
- Behavior-Driven Development (BDD) legt de intentie vast in een gedeelde vocabulaire met behulp van Gherkin. .NET-teams kunnen SpecFlow gebruiken; Java- en JavaScript-teams gebruiken vaak Cucumber. Koppel BDD-scenario’s aan acceptatiecriteria in Azure Boards en publiceer de resultaten naar Azure Test Plans voor traceerbaarheid.
Beheer van testdata elimineert non-determinisme:
- Synthetische data levert deterministische, privacy-veilige datasets voor unit- en integration tests. Genereer deze met taalspecifieke ‘faker’-bibliotheken en seed-waarden die reproduceerbaarheid mogelijk maken.
- Data masking maakt realistische testdatasets mogelijk zonder persoonlijke of gevoelige informatie bloot te leggen. Gebruik tools voor databasemasking of data pipelines die onomkeerbare transformaties toepassen. Voor Azure SQL Database, exporteer snapshots naar een staging-subscription en pas masking toe vóór gebruik in tests.
- Omgevingspariteit (environment parity) zorgt ervoor dat testresultaten betekenisvol zijn. Provisioneer testomgevingen met Infrastructure as Code (ARM/Bicep/Terraform) zodat systeemcomponenten, configuratie en netwerktopologie zo goed mogelijk overeenkomen met productie. Houd schemamigraties synchroon (in lockstep) over alle omgevingen.
Detectie en beheer van ‘flaky’ tests beschermen feedback-loops:
- Oorzaken zijn onder meer timing-races, externe afhankelijkheden, koppeling door testvolgorde en resource contention. Gebruik de Visual Studio Test task van Azure Pipelines met
rerunFailedTestsingeschakeld om tijdelijke ‘ruis’ te verminderen terwijl je onderzoek doet. - Plaats niet-deterministische tests in quarantaine om pipelines groen te houden. Tag en isoleer ze in een aparte suite die draait en rapporteert, maar de build niet laat falen. Houd de ‘quarantaine-schuld’ bij met work items in Azure Boards.
- Root cause analysis vereist instrumentatie. Leg logs, timing-metrics en omgevingsdetails vast tijdens uitvoeringen; reproduceer lokaal met dezelfde seed en afhankelijkheden; verwijder de afhankelijkheid van niet-gemockte systeemklokken, netwerk en bestandssysteem; en los het non-determinisme bij de bron op.
Azure DevOps en Azure Testmogelijkheden
Azure Test Plans biedt eersteklas handmatige en verkennende (exploratory) tests, plus traceerbaarheid:
- Test cases definiëren stappen, verwachte resultaten en parameters; gedeelde stappen (shared steps) en geparametriseerde test cases verminderen duplicatie. Op requirements gebaseerde suites koppelen cases aan Product Backlog Items of user stories, terwijl statische en op queries gebaseerde suites tests groeperen voor uitvoering.
- Test runs wijzen suites en configuraties toe aan testers, registreren resultaten en duur, en leggen diagnostische gegevens vast. Uitgebreide bugrapportage omvat screenshots, video, omgevingsdata en actielogs.
- Exploratory testing gebruikt de Test & Feedback browserextensie om charters, sessienotities en artefacten vast te leggen tijdens ad-hoc verkenning. Koppel bevindingen aan work items en analyseer de dekking (coverage) van requirements en testsessies.
Geautomatiseerd testen integreert rechtstreeks in pipelines:
- Gebruik de Visual Studio Test task (VsTest) om MSTest, NUnit en xUnit tests uit te voeren en TRX-resultaten te publiceren. Voor .NET is dotnet test met de juiste logger (trx, junit) gebruikelijk.
- Voor Java, voer JUnit uit via Maven of Gradle en publiceer JUnit XML met de Publish Test Results task. Voor JavaScript, configureer runners (Jest, Mocha) om JUnit XML te genereren.
- Publish Test Results consolideert resultaten en trends over meerdere runs. Standaardiseer resultaat-formats (TRX of JUnit XML) om rapportage te uniformeren en ‘flaky test’-analyses mogelijk te maken.
- Koppel geautomatiseerde test runs aan Azure Test Plans door test cases te mappen aan geautomatiseerde testmethoden. Dit zorgt voor end-to-end traceerbaarheid van requirement tot uitvoering tot defect.
Code coverage is een meetbare kwaliteitswaarborg (quality guardrail):
- Verzamel coverage met Coverlet (voor .NET), JaCoCo (Java), of Cobertura/lcov (JavaScript). Converteer naar formats die Azure DevOps begrijpt en publiceer via Publish Code Coverage Results om trends en delta’s zichtbaar te maken.
- Dwing minimale drempelwaarden (thresholds) af tijdens de build. Gebruik voor .NET de threshold-switches van Coverlet om de build te laten mislukken als de line- of branch-coverage onder het beleid zakt. Als alternatief, gebruik de Build Quality Checks-extensie om coverage en op trends gebaseerd beleid af te dwingen.
- Deployments met een coverage-gate voorkomen doorstroming wanneer de kwaliteit daalt. Laat in YAML de quality stage mislukken als de coverage onder de doelwaarde is; gebruik voor classic releases gates die een Azure Function of REST-check aanroepen om de gemeten coverage te valideren vóór promotie.
Performance, Chaos en Resilience
Load- en performancetests valideren non-functional requirements vroegtijdig en continu:
- Azure Load Testing orkestreert op JMeter gebaseerde load op schaal en korreleert tegelijkertijd backend-telemetrie van Application Insights. Importeer JMX-testplannen, stel slaag/faal-criteria in (bijv. p95 latency, error rate), en breng resultaten naar voren in pipelines. Gebruik de Azure Monitor gate of environment checks om doorstroming te blokkeren wanneer de baselines niet worden gehaald.
- Apache JMeter blijft een veelzijdige keuze voor loadtests op protocolniveau. Houd thread groups en assertions geparametriseerd voor CI. Sla JMX- en CSV-datasets op bij de code, onder versiebeheer samen met de scenario’s.
- k6 maakt ontwikkelaarvriendelijke load testing as code mogelijk. Voer k6 uit in Azure Pipelines via een container of een Node-runtime, leg resultaten vast en exporteer naar JUnit of JSON voor publicatie. Gebruik threshold-expressies binnen k6-scripts om runs deterministisch te laten mislukken.
- Baseline-management is cruciaal. Volg de trends van latency, throughput en resourcegebruik per omgeving. Stel SLO’s vast en zorg ervoor dat tests draaien met representatieve datavolumes en configuraties.
Chaos engineering verifieert de veerkracht (resilience) onder foutcondities:
- Azure Chaos Studio injecteert fouten in Azure-resources met een gecontroleerde ‘blast radius’ en veiligheidsmaatregelen. Soorten experimenten zijn onder meer CPU/geheugendruk op VM’s, netwerklatency/blackhole, het beëindigen van processen (process kill) en service throttling.
- Voer experimenten eerst uit in pre-productie en instrumenteer met Application Insights en Azure Monitor om faalscenario’s (failure modes), error budgets en automatisch herstelgedrag vast te leggen.
- Resilience-validatie koppelt chaos aan health probes en synthetische transacties om te garanderen dat voor de gebruiker kritieke paden beschikbaar blijven of gecontroleerd degraderen (degrade gracefully). Promoot alleen wanneer de resilience-hypotheses zijn bevestigd en alerts zich gedragen zoals ontworpen.
Toegankelijkheid, Compliance en Governance
Toegankelijkheid en compliance zijn fundamentele kwaliteitsaspecten:
- Voldoe minimaal aan WCAG 2.1 AA voor publiek toegankelijke experiences. Vertaal requirements naar acceptatiecriteria in Azure Boards en Azure Test Plans met specifieke test cases voor toegankelijkheid.
- Automatiseer controles met axe-core, geïntegreerd in UI-testframeworks zoals Playwright, Cypress of Selenium. Laat builds falen wanneer kritieke overtredingen worden gedetecteerd en publiceer toegankelijkheidsrapporten als pipeline artifacts.
- Vul automatisering aan met handmatige audits (toetsenbordnavigatie, ondersteuning voor screenreaders, kleurcontrast in dynamische contexten) en leg bevindingen vast in verkennende sessies met de Test & Feedback-extensie.
- Compliance en kwaliteitsgovernance in Azure Pipelines maken gebruik van environment checks en gates. Voor performance en beschikbaarheid, bevraag Azure Monitor of Azure Load Testing voor baselines vóór de deployment. Voor gatekeeping op het gebied van coverage of toegankelijkheid, roep een functie of REST-check aan die gepubliceerde rapporten parseert en een pass/fail retourneert. Dit dwingt niet-functionele kwaliteit af als een voorwaarde voor een release, en niet als iets waar pas achteraf aan wordt gedacht.
Publicatie en analyse van testresultaten sluiten de cirkel:
- Standaardiseer op resultaat- en coverage-rapportformaten om Test Analytics te vullen, slagingspercentages te trenden en flaky tests automatisch te signaleren.
- Gebruik build policies en branch protections om succesvolle tests en voldoende coverage te vereisen alvorens te mergen. Houd de feedback-loop kort; parallelliseer test stages, shard grote suites en cache dependencies om de cyclustijd te verkorten.
Praktijkscenario
Adobe moderniseert een platform voor documentverwerking naar microservices op Azure. Het engineering management eist een snellere release-cadans zonder regressies, aantoonbare performance-baselines, veerkracht tegen regionale netwerkstoringen en compliance met WCAG 2.1 AA. De huidige pipelines hebben last van onstabiele (flaky) E2E-tests en inconsistente testdata.
- Implementeer de testpiramide en shift-left-werkwijzen
- Pas TDD toe voor core libraries en services om een grote, deterministische basis van unit tests te creëren, met NUnit en xUnit voor .NET-componenten en JUnit voor Java. BDD met SpecFlow en Cucumber legt team-overstijgende acceptatiecriteria vast als uitvoerbare specificaties. Dit zorgt voor snelle feedback en een gedeeld begrip.
- Automatiseer tests en publiceer resultaten in Azure Pipelines
- Gebruik VsTest voor .NET en Maven/Gradle voor Java om unit- en integratietests uit te voeren. Publiceer resultaten met Publish Test Results en coverage met Publish Code Coverage Results om rapportage te centraliseren en analyse van flaky tests mogelijk te maken. Ingebouwde taken zorgen voor een strakke integratie met Azure DevOps en verminderen de noodzaak voor custom tooling.
- Dwing code coverage-drempels af en gebruik gates voor deployments
- Configureer drempelwaarden voor Coverlet en JaCoCo om builds te laten falen als de coverage voor kritieke services onder de 80% line en 60% branch daalt. Voeg een release check toe die een Azure Function aanroept om het meest recente coverage artifact te lezen en een pass/fail terug te geven, wat een deployment voorkomt als de coverage niet aan het beleid voldoet. Dit formaliseert quality gates zonder menselijke tussenkomst.
- Implementeer testdatamanagement voor determinisme
- Genereer synthetische datasets voor unit- en integratietests met behulp van faker libraries. Voor systeemtests, kloon gemaskeerde kopieën van Azure SQL-databases via een geautomatiseerde pipeline met Data Factory om onomkeerbare maskering toe te passen. Provisioneer omgevingen met Bicep voor pariteit. Dit elimineert privacyrisico’s en data-gerelateerde onstabiliteit (flakiness).
- Isoleer en elimineer flaky tests
- Activeer rerunFailedTests in VsTest om tijdelijke (transient) fouten te mitigeren en tag onstabiele specificaties met een quarantainemarkering die ze uitsluit van de blokkerende suite, terwijl ze wel nog worden uitgevoerd en gerapporteerd. Maak Azure Boards work items aan voor elke test in quarantaine. Voer een root-cause-analyse uit door timing- en netwerklogs te verzamelen en niet-deterministische waits te verwijderen. Dit houdt pipelines betrouwbaar terwijl het de implementatie van permanente oplossingen stimuleert.
- Valideer performance met Azure Load Testing en k6
- Modelleer belangrijke user journeys als JMeter-plannen en voer ze uit in Azure Load Testing na deployment naar staging, met pass/fail-criteria voor p95-latency en foutpercentages. Voor API-level tests voor ontwikkelaars, voer k6-scripts uit in CI met ingebouwde drempelwaarden. Voeg een Azure Monitor gate toe om de deployment naar productie te blokkeren als de baselines van staging niet worden gehaald. Deze tools bieden schaalbare, meetbare afdwinging van performance, in lijn met het gate-concept uit de Q&A.
- Bewijs veerkracht met Azure Chaos Studio
- Ontwerp experimenten die netwerklatency en CPU-druk injecteren op geselecteerde microservices in staging, terwijl Application Insights de error budgets en het herstel monitort. Vereis dat alle veerkrachtexperimenten voldoen aan de SLO’s voordat promotie naar de volgende omgeving plaatsvindt. De governance-controles van Chaos Studio sluiten aan bij de behoefte van Adobe aan een gecontroleerde ‘blast radius’ en auditeerbare experimenten.
- Waarborg toegankelijkheid en compliance
- Integreer axe-core in Playwright UI-tests om automatisch WCAG 2.1 AA-overtredingen op kernschermen te detecteren. Publiceer rapporten van overtredingen als build artifacts en laat de build falen bij kritieke problemen. Plan verkennende toegankelijkheidssessies met Azure Test Plans en de Test & Feedback-extensie voor handmatige verificatie. Dit combineert geautomatiseerde dekking met mensgerichte controles.
- Zorg voor traceerbaarheid en analytics
- Koppel geautomatiseerde tests waar relevant aan Azure Test Plans, lijn suites uit met requirements en gebruik Test Analytics om slagingspercentages te trenden, flaky tests te identificeren en herstelwerkzaamheden te focussen. Dit stelt het management in staat om in één oogopslag kwaliteitstrends en de gereedheid voor een release te zien.
Elke keuze legt de nadruk op native Azure DevOps- en Azure-services voor een eersteklas integratie, governance via environment checks en gates, en een gebalanceerde teststrategie die de snelheid van feedback, betrouwbaarheid en compliance optimaliseert.
← Beveiliging · Alle domeinen · Monitoring →
Oefen deze vragen → · Getimede oefening op ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Slaag voor je examen →