Belastingtesten versus stresstesten: Verschillen, statistieken en k6-voorbeelden
Eén bewijst dat uw systeem het verkeer afhandelt dat u verwacht. De ander zoekt uit waar het kapot gaat en hoe het herstelt. Leer wanneer u elke test moet uitvoeren, welke cijfers u kunt vertrouwen en hoe u een test plant die echte antwoorden oplevert.
- Met belastingtests wordt gecontroleerd of een systeem onder verwacht verkeer aan zijn doelstellingen voldoet.
- Stresstesten gaan voorbij aan de capaciteit om het breekpunt te vinden en herstel te bestuderen.
- De instrumenten zijn meestal hetzelfde. Wat verschilt is het doel en het verkeerspatroon.
- Beoordeel resultaten met percentielen zoals p95 en p99, aangezien gemiddelden ernstige problemen kunnen verbergen.
Uw applicatie werkt perfect met tien gebruikers. Wat gebeurt er op de uitverkoopdag, met tienduizend? Belastingtesten versus stresstesten beschrijven twee verschillende manieren om dit te beantwoorden, en het combineren ervan leidt tot tests die niet bewijzen wat je denkt dat ze doen.
In deze handleiding wordt uitgelegd wat elke test laat zien, de bijbehorende testtypen en hoe u de resultaten kunt lezen. We hebben de onderstaande kleine percentielberekening uitgevoerd op Python 3.13, met gesimuleerde getallen. De k6-scripts zijn illustratieve voorbeelden die we niet hebben uitgevoerd, en de gebruikersaantallen en doelen zijn bedacht, dus vervang ze door uw eigen. Voer deze tests alleen uit op systemen waarvan u de eigenaar bent of waarvoor u toestemming heeft om te testen, aangezien zwaar verkeer op een aanval kan lijken en echte storingen kan veroorzaken.
Het korte antwoord
Bij een belastingstest wordt de vraag gesteld: kunnen we het verkeer dat we verwachten aan, en daarbij onze doelstellingen halen? Een stresstest vraagt zich af: hoeveel kunnen we verdragen voordat we falen, hoe falen we en hoe snel herstellen we?
Denk aan een brug. Een beladingstest rijdt met het verwachte aantal vrachtwagens over de grens en bevestigt dat het in orde is. Een stresstest blijft gewicht toevoegen om erachter te komen wat de limiet is, en of er eerst een waarschuwing wordt gegeven. Gelukkig is software goedkoper om te breken dan een brug.
Belastingtesten versus stresstesten naast elkaar
| Aspect | Belasting testen | Stress testen |
|---|---|---|
| Belangrijkste vraag | Halen we de doelstellingen bij de verwachte belasting? | Waar en hoe breken we? |
| Verkeersniveau | Normale tot verwachte piek | Boven verwachting hoogtepunt |
| Patroon | Opvoeren, stabiel blijven | Blijf verhogen totdat het mislukt |
| Mislukking | Een mislukte proef | De verwachte uitkomst |
| Belangrijke statistieken | Reactietijd, doorvoer, fouten | Breekpunt, faalmodus, hersteltijd |
| Typische timing | Vóór elke grote release of evenement | Nadat het systeem stabiel is onder belasting |
| Resultaat | Passeren of falen tegen doelen | Een capaciteitslimiet en een lijst met zwakke punten |
Wat is belastingtesten?
Met belastingtests wordt het realistische verkeer gesimuleerd dat u verwacht, en wordt gemeten hoe het systeem zich gedraagt. Het heeft een doel nodig om te testen, bijvoorbeeld: “bij 500 gelijktijdige gebruikers eindigt 95% van de betaalverzoeken binnen 800 ms, met minder dan 1% fouten.”
Hier ziet u hoe dat eruit zou kunnen zien als een k6-script. k6-tests zijn geschreven in JavaScript en thresholds zetten uw doelen om in een geslaagd of mislukt resultaat:
import http from "k6/http";
import { sleep } from "k6";
export const options = {
stages: [
{ duration: "5m", target: 500 }, // ramp up
{ duration: "20m", target: 500 }, // hold at expected peak
{ duration: "2m", target: 0 }, // ramp down
],
thresholds: {
http_req_duration: ["p(95)<800"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
http.get("https://staging.example.com/products");
sleep(1); // think time, as real users pause
}
De sleep is belangrijk. Zonder denktijd hamert elke virtuele gebruiker voortdurend op de server, waardoor veel meer verkeer wordt gegenereerd dan hetzelfde aantal echte mensen zou doen.
Wat is stresstesten?
Stresstesten gaan doelbewust verder dan de verwachte niveaus. Je probeert niet te passeren. Je wilt antwoorden op vragen als:
- Op welk niveau beginnen de prestaties uit elkaar te vallen?
- Welk onderdeel faalt als eerste: de database, de applicatieservers of een oproep van derden?
- Mislukt het probleemloos met duidelijke fouten, of crasht het en gaan er gegevens verloren?
- Herstelt het zichzelf als het verkeer afneemt?
export const options = {
stages: [
{ duration: "5m", target: 500 }, // expected peak
{ duration: "5m", target: 1000 }, // beyond it
{ duration: "5m", target: 2000 }, // further
{ duration: "5m", target: 4000 }, // likely to break
{ duration: "10m", target: 0 }, // recovery: does it come back?
],
};
Die laatste herstelfase wordt vaak vergeten, en is misschien wel de meest waardevolle. Een systeem dat goed met storingen omgaat, maar nooit herstelt zonder handmatig opnieuw op te starten, betekent nog steeds een storing die iemand midden in de nacht moet verhelpen. Idealiter zou een systeem onder extreme belasting op een gecontroleerde manier zijn werk moeten doen, met duidelijke 503 reacties in plaats van een time-out.
Spike, geniet en andere soorten
Belasting- en stresstests behoren tot een bredere familie van prestatietests:
| Typ | Patroon | Wat het vindt |
|---|---|---|
| Rook (prestatie) | Een paar gebruikers, kort | Of het script en het systeem überhaupt werken |
| Laden | Verwachte piek, vastgehouden | Of doelstellingen worden gehaald |
| Stress | Boven capaciteit stijgen | Grenzen en faalwijzen |
| Spike | Een plotselinge sprong en dan een val | Automatisch schalen en wachtrijgedrag |
| Genieten (uithoudingsvermogen) | Normale belasting voor uren | Geheugenlekken, verbindingen die opraken |
| Capaciteit | Geleidelijke stijging | De maximale belasting binnen uw doelstellingen |
Soak-tests vangen problemen op die korte tests nooit zien. Een klein geheugenlek kan twintig minuten onschuldig lijken en de service pas na twee dagen wegvallen. Spike-tests zijn geschikt voor evenementen zoals flash-verkopen, waarbij het verkeer niet geleidelijk toeneemt.
Metrieken die er toe doen
| Metrisch | Betekenis | Let op |
|---|---|---|
| Reactietijd (percentielen) | Hoe lang verzoeken duren | p95 en p99 stijgen |
| Doorvoer | Verzoeken afgehandeld per seconde | Afvlakking naarmate het aantal gebruikers toeneemt |
| Foutpercentage | Percentage mislukte verzoeken | Elke plotselinge stijging |
| CPU en geheugen | Gebruik van serverbronnen | Verzadiging of gestage groei |
| Database | Trage zoekopdrachten, gebruik van verbindingspool | Zwembad uitgeput, slot wacht |
| Diepte van wachtrij | Werk dat wacht om verwerkt te worden | Groei die nooit wegebt |
Waarom gemiddelden misleiden
Gemiddelden verbergen de langzame verzoeken waar echte mensen over klagen. Om dit te laten zien, hebben we 100 gesimuleerde responstijden gegenereerd, waarvan 95 snel (80 tot 200 ms) en 5 erg langzaam (2,5 tot 4 seconden), en vervolgens de algemene statistieken berekend:
import math, random, statistics
random.seed(3)
times = [random.randint(80, 200) for _ in range(95)] \
+ [random.randint(2500, 4000) for _ in range(5)]
def pct(values, p):
values = sorted(values)
return values[math.ceil(p / 100 * len(values)) - 1]
print("avg", round(statistics.mean(times)), "p50", pct(times, 50),
"p95", pct(times, 95), "p99", pct(times, 99), "max", max(times))
# avg 302 p50 150 p95 199 p99 3740 max 3896
Kijk eens goed naar die cijfers. Het gemiddelde van 302 ms beschrijft niemand. Typische verzoeken duurden ongeveer 150 ms, terwijl de langzame verzoeken meer dan 3 seconden duurden. Zelfs p95 ziet er gezond uit na 199 ms, en alleen p99 onthult het probleem. Een cijfer als p95 betekent dat 95% van de verzoeken zo snel of sneller was.
En één procent van de verzoeken is geen zeldzame gebeurtenis. Als een pagina 50 verzoeken doet, heeft een trage p99 invloed op een groot deel van de paginaweergaven. Stel doelen op de percentielen die voor u belangrijk zijn, en bekijk er meerdere samen.
Tip: Zoek naar de ‘knie’ in je grafieken. Naarmate de belasting toeneemt, blijven de responstijden een tijdje vlak en stijgen dan plotseling, terwijl de doorvoer stopt met groeien. Dat punt is je praktische capaciteit, en het komt vaak lang voordat er daadwerkelijk iets crasht.
Gereedschap
| Gereedschap | Scripten | Bekend om |
|---|---|---|
| k6 | JavaScript | Ontwikkelaarsvriendelijk, drempels passen bij CI |
| JMeter | GUI en XML | Volwassen, ondersteunt veel protocollen |
| Gatling | Scala, Java, Kotlin en anderen | Op code gebaseerd, efficiënt |
| Sprinkhaan | Python | Eenvoudig, op Python gebaseerd gebruikersgedrag |
Elk van deze kan zowel belastings- als stresstests uitvoeren. Kies degene die past bij de vaardigheden van uw team, in plaats van een lijst met functies na te jagen. Als u er een in uw pijplijn wilt gebruiken, gaat u naar Wat is CI/CD.
Hoe u een toets plant
- Stel doelen. Gebruik echte analyses om uw piekverkeer te vinden en doelen te definiëren.
- Kies trajecten. Modelleer realistisch gebruikersgedrag, zoals browsen, zoeken en afrekenen, in realistische proporties. Alleen het raken van de startpagina bewijst weinig.
- Gebruik een realistische omgeving. Een kleine testserver kan de productie niet voorspellen. Noteer eventuele verschillen.
- Gegevens voorbereiden. Gebruik realistische volumes, want een zoekopdracht die snel is op 100 rijen kan op 10 miljoen rijen crawlen.
- Waarschuw mensen. Vertel uw operationele team en eventuele derde partijen, en voer niet per ongeluk een laadtest uit bij een betalingsprovider. Mock externe diensten waar nodig.
- Begin klein. Voer eerst een kleine rooktest uit om te bevestigen dat uw script werkt.
- Houd alles in de gaten. Zonder serverstatistieken zul je zien dat de snelheid is vertraagd, maar niet waarom.
- Herhaal. Voer het na elke oplossing opnieuw uit en houd een basislijn bij om mee te vergelijken.
Het lezen van de resultaten
| Symptoom | Mogelijke oorzaak |
|---|---|
| Trage reacties, maar lage CPU | Wachten op een database, slot of externe dienst |
| Database-CPU is hoog | Ontbrekende indexen of inefficiënte zoekopdrachten |
| Plotselinge verbindingsfouten | Verbindingspool of bestandslimiet bereikt |
| Het geheugen stijgt gestaag | Een lek of een onbegrensde cache |
| CPU van belastinggenerator is hoog | De testtool is de bottleneck, niet uw systeem |
Databases vormen een veelvoorkomend knelpunt, dus als query’s het probleem vormen, lees dan onze handleiding voor SQL-queryoptimalisatie. Die laatste rij van de tabel is een belangrijke valkuil: controleer altijd ook de gezondheid van de machine die de belasting genereert.
Veel voorkomende fouten
- Gebruikers verwarren met verzoeken. Maak duidelijk of een doel gelijktijdige gebruikers of verzoeken per seconde betekent.
- We laten de bedenktijd achterwege. Dit leidt tot meer bezoekersaantallen en levert misleidende resultaten op.
- Te laat testen. Een week voor de lancering is er geen tijd meer om architectuurproblemen op te lossen.
- Met gebruik van één eindpunt. Echt verkeer combineert lees-, schrijf- en zoekacties.
- Caching verbergt alles. Identieke herhaalde verzoeken testen mogelijk alleen je cache, dus varieer de gegevens.
- Eén keer testen. De prestaties veranderen bij elke release, dus voer regelmatig tests uit.
Tot slot
Voer belastingtests uit om te bevestigen dat u het verwachte verkeer aankan, en stresstests om erachter te komen wat er gebeurt als u dat niet kunt. Begin klein: kies uw belangrijkste gebruikerstraject, stel één duidelijk doel en voer een korte test uit tegen staging met monitoring ingeschakeld. Die eerste run leert je meestal iets, en van daaruit kun je verder bouwen.
Veelgestelde vragen
Wat is het belangrijkste verschil tussen belasting- en stresstests?
Met belastingtests wordt het gedrag onder verwacht verkeer gecontroleerd aan de hand van vastgestelde doelen. Stresstesten gaan verder dan het vermogen om het breekpunt te vinden en hoe het systeem herstelt.
Moet ik eerst een belastingtest of een stresstest uitvoeren?
Eerst een test laden. Zodra het systeem onder het verwachte verkeer zijn doelstellingen bereikt, voert u stresstests uit om de grenzen ervan te verkennen. Stressresultaten betekenen weinig voor een onstabiel systeem.
Wat is het verschil tussen een stresstest en een piektest?
Bij een stresstest wordt de belasting doorgaans stap voor stap verhoogd totdat deze faalt. Een piektest springt plotseling naar een hoog niveau, om te zien hoe het systeem omgaat met abrupte veranderingen.
Wat is p95-responstijd?
Dit betekent dat 95% van de verzoeken op of onder dat tijdstip zijn afgerond. Het beschrijft de ervaring van de meeste gebruikers beter dan gemiddeld.
Kan ik belastingtests uitvoeren op productie?
Dat kan, maar voorzichtig, met toestemming, toezicht en een manier om snel te stoppen. De meeste teams beginnen met een productie-achtige staging-omgeving om het risico voor echte gebruikers te verminderen.
Blijf leren
Hulp nodig met testen, WordPress of SEO?
We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.
Meer handleidingen over testen, AI en moderne ontwikkeling
Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.
AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen
AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…
Lees artikel →DevOpsOmgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan
Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…
Lees artikel →SoftwareontwikkelingAPI-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten
API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…
Lees artikel →TestautomatiseringSpotten in Python: unittest.mock, patch en de fouten die tests doen liegen
Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…
Lees artikel →SoftwaretestenCodedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent
Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…
Lees artikel →Databases & SQLDELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken
DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…
Lees artikel →Databases & SQLSQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden
SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…
Lees artikel →SoftwareontwikkelingTypeScript-interface versus type: echte verschillen, getest met de compiler
TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…
Lees artikel →SoftwareontwikkelingPython *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden
Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…
Lees artikel →SoftwareontwikkelingPython Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken
Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…
Lees artikel →Kunstmatige intelligentieWat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren
Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…
Lees artikel →DevOpsMonitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen
Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…
Lees artikel →DevOpsDocker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier
Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…
Lees artikel →TestautomatiseringTDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt
TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…
Lees artikel →SoftwaretestenGebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden
Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…
Lees artikel →Databases & SQLSQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen
SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…
Lees artikel →Databases & SQLSQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten
SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…
Lees artikel →SoftwareontwikkelingWat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld
Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…
Lees artikel →SoftwareontwikkelingJavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden
De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…
Lees artikel →SoftwareontwikkelingPython-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden
Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …
Lees artikel →Kunstmatige intelligentieWat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd
Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…
Lees artikel →DevOpsImplementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen
Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…
Lees artikel →TestautomatiseringSchilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen
Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…
Lees artikel →SoftwaretestenBelastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden
Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …
Lees artikel →SoftwaretestenTestcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken
Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…
Lees artikel →Databases & SQLOptimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing
Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…
Lees artikel →Databases & SQLSQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties
SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…
Lees artikel →SoftwareontwikkelingJavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs
Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…
Lees artikel →SoftwareontwikkelingPython-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden
Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…
Lees artikel →SoftwareontwikkelingPython-klassen en -objecten: OOP-zelfstudie met echte voorbeelden
Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…
Lees artikel →Kunstmatige intelligentieWat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype
Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…
Lees artikel →DevOpsLinux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden
Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…
Lees artikel →TestautomatiseringSelenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen
Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …
Lees artikel →SoftwaretestenEquivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden
Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…
Lees artikel →SoftwaretestenErnst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden
Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…
Lees artikel →Databases & SQLTutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden
Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …
Lees artikel →Databases & SQLSQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus
SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…
Lees artikel →SoftwareontwikkelingGit merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt
Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.
Lees artikel →SoftwareontwikkelingPython list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt
Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.
Lees artikel →Databases & SQLSQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)
Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.
Lees artikel →