Implementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen

  1. Home
  2. Blog
  3. DevOps

DevOps

Implementatie van blauw-groen versus kanarie: Verschillen, afwegingen en hoe te kiezen

Met beide strategieën kunt u vrijgeven zonder de site offline te halen, maar ze beheren de risico’s op tegenovergestelde manieren. Ontdek hoe ze allemaal werken, wat het werkelijk kost, hoe je met de database omgaat en wat bij jouw team past.

9 min leestijd
Blauw-groen versus kanarie-inzet: verschillen, afwegingen en hoe te kiezen

Belangrijkste punten

  • Blauwgroen behoudt twee volledige omgevingen en schakelt al het verkeer in één keer om.
  • Canary stuurt de nieuwe versie eerst naar een klein deel van de gebruikers en breidt deze vervolgens geleidelijk uit.
  • Blauwgroen biedt een zeer snelle terugdraaiing. Canary beperkt het aantal gebruikers dat een slechte release kan beïnvloeden.
  • Beide zijn afhankelijk van achterwaarts compatibele databasewijzigingen en goede monitoring.

Het uitbrengen van software betekende vroeger een onderhoudsvenster en gekruiste vingers. Moderne teams gebruiken strategieën die releases routine maken, en de keuze blauw-groen versus kanarie is een van de eerste waarmee u te maken krijgt. Beide verminderen het risico, maar ze doen dit op tegenovergestelde manieren: de één bereidt een volledige vervanging voor, terwijl de ander beetje bij beetje met echte gebruikers test.

In deze handleiding wordt uitgelegd hoe elk ervan werkt en wat het in de praktijk kost. We hebben de kleine voorbeelden van gebruikersrouting en rollback uitgevoerd in Python 3.13, en de uitvoer komt uit die run. De Kubernetes-voorbeelden zijn illustratief, maar die hebben we niet uitgevoerd. Beschouw de percentages en drempels als startvoorbeelden om aan te passen.

Het korte antwoord

Met blauw-groene implementatie beheert u twee identieke productieomgevingen. De ene bedient gebruikers terwijl u de nieuwe versie implementeert en test, aan de andere kant, en vervolgens schakelt u al het verkeer in één beweging over.

Bij canary-implementatie wordt de nieuwe versie naast de oude uitgevoerd. Je stuurt het een klein percentage van het echte verkeer, vergelijkt de resultaten en vergroot het aandeel stap voor stap totdat het iedereen bedient. De naam komt van de kanaries die mijnwerkers ooit gebruikten als een vroege waarschuwing voor gevaar.

Blauwgroen versus kanarie naast elkaar

Aspect Blauwgroen Kanarie
Verkeersverschuiving Allemaal tegelijk Geleidelijk
Gebruikers blootgesteld aan een slechte release Allemaal, totdat je terugschakelt Alleen het kanarie-aandeel
Terugdraaien Schakel het verkeer terug Stel het kanarie-aandeel in op nul
Laat snelheid los Snelle overstap Langzamer, in fasen
Infrastructuurkosten Tot het dubbele tijdens de release Een klein extra aandeel
Verkeersroutering nodig Een simpele schakelaar Op percentages gebaseerde routering
Toezicht nodig Goed Uitstekend, met statistieken per versie
Versies leven samen In het kort, of helemaal niet Voor de gehele uitrol
Feedback van echte gebruikers vóór de volledige release Nee Ja

Hoe blauw-groene implementatie werkt

  1. Blue is live en bedient al het verkeer.
  2. Implementeer de nieuwe versie naar groen, die geen gebruikersverkeer ontvangt.
  3. Test groen grondig, in de echte productieomgeving, met behulp van rooktesten en interne gebruikers.
  4. Schakel de router, load balancer of DNS om verkeer naar groen te sturen.
  5. Let goed op, terwijl blauw nog steeds loopt en klaar is.
  6. Als er iets mis is, schakel dan terug. Als alles goed is, wordt blauw de volgende inactieve omgeving.

In Kubernetes kunt u de overstap maken door de selector van een service te wijzigen, zodat het verkeer naar verschillend gelabelde pods gaat:

apiVersion: v1
kind: Service
metadata:
  name: shop
spec:
  selector:
    app: shop
    version: green   # was: blue
  ports:
    - port: 80
      targetPort: 8000

Sterke punten: Het is conceptueel eenvoudig: u kunt de exacte productie-instellingen testen voordat gebruikers deze zien, en het terugdraaien is vrijwel onmiddellijk mogelijk. Zwakke punten: Dubbele infrastructuur kan duur zijn, een bug die langs je tests glipt, bereikt iedereen tegelijk, en open sessies en werk tijdens de vlucht hebben tijdens de overstap zorg nodig. Als u DNS voor de overstap gebruikt, kunnen in de cache opgeslagen records dit vertragen. Nieuw bij de concepten? Bekijk onze Kubernetes-tutorial voor beginners.

Hoe kanarie-inzet werkt

  1. Implementeer de nieuwe versie naast de stabiele versie.
  2. Leid een klein deel van het verkeer, bijvoorbeeld 5%, naar de kanarie.
  3. Vergelijk foutpercentages, latentie en zakelijke statistieken met de stabiele versie.
  4. Als u gezond bent, verhoog dan naar 25%, dan 50% en dan 100%.
  5. Als er iets verslechtert, stuur dan al het verkeer terug naar de stabiele versie.

Veel teams beginnen met een kanarie met intern personeel, dan met een laagrisicoregio, en dan pas met het bredere publiek.

Sterke punten: Een slechte release treft slechts een kleine groep, en je leert van echt verkeer dat geen enkele testomgeving deze volledig kan reproduceren. Zwakke punten: Je hebt op percentages gebaseerde routing en statistieken per versie nodig, implementaties duren langer en twee versies werken een tijdje samen. Een kleine kanarie kan ook te stil zijn om een ​​betekenisvol signaal te geven, vooral op tijden met weinig verkeer.

Stabiele gebruikersroutering

Het willekeurig kiezen van een versie bij elk verzoek geeft gebruikers een verwarrende ervaring, omdat ze tussen oud en nieuw kunnen stuiteren. Een veel voorkomende oplossing is om een stabiel gebruikers-ID in een bucket te hashen, zodat elke gebruiker altijd hetzelfde antwoord krijgt:

import hashlib

def bucket(user_id):
    digest = hashlib.sha256(user_id.encode()).hexdigest()
    return int(digest, 16) % 100

def version_for(user_id, canary_percent):
    return "v2" if bucket(user_id) < canary_percent else "v1"

users = [f"user-{i}" for i in range(10000)]
for percent in (5, 25, 50, 100):
    share = sum(version_for(u, percent) == "v2" for u in users) / len(users)
    print(percent, round(share * 100, 1))

# 5 5.0
# 25 24.5
# 50 49.9
# 100 100.0

Het daadwerkelijke aandeel volgde nauwgezet de doelstelling. Deze methode heeft nog twee nuttige eigenschappen, en onze run bevestigde beide. Dezelfde gebruiker ontving altijd dezelfde versie. En iedereen in de 5%-groep zat nog steeds op 25%, dus niemand die de nieuwe versie al had, werd teruggezet naarmate de uitrol groeide.

In echte systemen zorgt een service mesh, load balancer of een tool zoals Argo Rollouts of Flagger meestal voor deze routing, dus je hoeft het niet zelf te schrijven. Het is nog steeds nuttig om te begrijpen wat ze doen.

Automatisering van de beslissing

Een kanarie werkt alleen als iemand de versies daadwerkelijk vergelijkt. Geautomatiseerde controles zijn betrouwbaarder dan iemand die naar grafieken kijkt. Hier is het kernidee, waarbij het foutenpercentage van de kanarie wordt vergeleken met dat van de stabiele versie:

def should_rollback(canary_errors, canary_total, base_errors, base_total,
                    tolerance=1.5, min_requests=500):
    if canary_total < min_requests:
        return False   # not enough data to decide
    return (canary_errors / canary_total) > (base_errors / base_total) * tolerance

should_rollback(3, 100, 10, 5000)        # False: too few requests
should_rollback(30, 1000, 100, 10000)    # True:  3% against 1%
should_rollback(12, 1000, 100, 10000)    # False: 1.2% is within tolerance

Let op het eerste geval. Het foutenpercentage lijkt hoog, maar met slechts 100 verzoeken is dit nog niet voldoende bewijs. Echte tools passen zorgvuldiger statistieken toe en kijken samen naar verschillende signalen:

Signaal Voorbeeld
Fouten Percentage van 5xx reacties
Latentie p95 en p99, zoals uitgelegd in belastingtesten versus stresstesten
Verzadiging CPU, geheugen, verbindingspools
Zakelijk Aanmeldingen, afrekenen, betalingssucces

Tip: Vergelijk de kanarie met de stabiele versie over hetzelfde tijdsbestek, in plaats van met de cijfers van vorige week. Verkeer en gedrag veranderen elk uur, dus een vergelijking naast elkaar geeft u een veel eerlijker signaal.

Het databaseprobleem

Applicatiecode kan binnen enkele seconden worden verwisseld, maar gegevens niet. Beide strategieën delen doorgaans één database, dus tijdens een implementatie en na een rollback moeten de oude en nieuwe versie beide met hetzelfde schema werken.

Het standaardantwoord is het patroon uitbreiden en inkrimpen. Stel dat u name wilt hernoemen naar full_name:

  1. Uitbreiden: voeg de nieuwe kolom toe. De oude code blijft onaangetast.
  2. Migreren: code vrijgeven die naar beide kolommen schrijft en oude rijen aanvult.
  3. Schakelaar: geeft code vrij die uit de nieuwe kolom leest.
  4. Contract: zodra niets de oude kolom gebruikt, verwijdert u deze in een latere release.

Hiervoor zijn meerdere releases nodig, maar elke stap kan veilig worden teruggedraaid. Het in één keer uitvoeren van RENAME COLUMN zou elke versie kapot maken die de andere naam verwachtte. Wees ook voorzichtig met langlopende schemawijzigingen, omdat deze blokkeringen kunnen veroorzaken. Lees voor meer informatie over SQL-transacties.

Rollen en andere strategieën

Strategie Hoe het werkt Goed voor
Herscheppen Stop met het oude en begin dan opnieuw, met downtime Interne tools, batchsystemen
Rollend Vervang exemplaren een paar tegelijk Een veel voorkomende standaard, ook in Kubernetes
Blauwgroen Schakel tussen twee omgevingen Snelle omschakeling en terugdraaiing
Kanarie Breid een klein aandeel geleidelijk uit Veel verkeer, hoog risico
Schaduw Kopieer verkeer naar de nieuwe versie en verwijder de reacties ervan Testen met echte belasting, zonder impact voor de gebruiker

Een Kubernetes-implementatie voert standaard een rolling update uit, wat bij veel services past. Een voortschrijdende update verschuift ook geleidelijk, maar het aandeel ervan is afhankelijk van het aantal exemplaren en analyseert niet zelf de resultaten of pauzeert niet bij slechte statistieken.

Hoe zit het met feature flags?

Bij de implementatie wordt code op servers geplaatst en release maakt een functie beschikbaar voor gebruikers. Functievlaggen houden deze gescheiden, doordat u een functie kunt inschakelen voor gekozen gebruikers zonder iets te implementeren. Ze werken heel goed met beide strategieën: inzetten met de vlag uit en vervolgens geleidelijk inschakelen. Ze vervangen deze strategieën niet, omdat een vlag je niet kan beschermen tegen een release die crasht bij het opstarten. Vergeet niet om oude vlaggen te verwijderen, aangezien deze zich ophopen als technische schulden.

Hoe te kiezen

Jouw situatie Redelijke keuze
Eenvoudige app en weinig gebruikers Rollende update
Zeer snelle cutover en rollback nodig Blauwgroen
Wilt u testen in productie vóór de overstap Blauwgroen
Veel verkeer en hoge faalkosten Kanarie
Sterke monitoring en statistieken per versie Kanarie
Weinig verkeer Blauw-groen, omdat de signalen van de kanaries te zwak zijn
Strak infrastructuurbudget Kanarie of rollend

Ze kunnen ook gecombineerd worden. Sommige teams zetten een groene omgeving in en verplaatsen het verkeer er vervolgens geleidelijk naartoe, waardoor ze een schone omgeving en een beperkte explosieradius krijgen. Wat je ook kiest, automatiseer het via je CI/CD-pijplijn, zoals onze GitHub Actions-gids uitlegt.

Veel voorkomende fouten

  • Schakelwijzigingen doorvoeren. Terugdraaien helpt niet als de oude code de gegevens niet kan lezen.
  • Er zijn geen terugdraaicriteria. Bepaal wat ‘slecht’ betekent voordat de release begint, en niet tijdens een incident.
  • De omgevingen laten veranderen. Als groen verschilt van blauw, bewijzen je tests minder. Definieer beide met infrastructuur als code.
  • Alleen technische statistieken worden gemeten. Een release kan foutloos zijn en toch het afrekenproces verstoren.
  • Oefen nooit met terugrollen. Oefen het, zodat het werkt als je onder druk staat.
  • Achtergrondtaken vergeten. Werknemers en geplande taken hebben ook een plan nodig tijdens een overstap.

Tot slot

Blauw-groen geeft u een schone, snelle omschakeling. Canary geeft je een kleine, afgemeten belichting. Als uw monitoring nog steeds eenvoudig is, begin dan met rolling updates of blauw-groen, en investeer in statistieken per versie voordat u canaries uitprobeert. Oefen vervolgens een rollback voor uw volgende release, inclusief de database. Die ene oefening heeft de neiging om te onthullen wat er echt moet worden opgelost.

Veelgestelde vragen

Wat is het verschil tussen blauwgroene en kanarie-implementatie?

Blauw-groen schakelt al het verkeer in één keer van de ene volledige omgeving naar de andere. Canary stuurt een klein deel van het verkeer naar de nieuwe versie en breidt dit geleidelijk uit.

Wat is veiliger: blauwgroen of kanarie?

Canary beperkt hoeveel gebruikers een slechte release treft, en blauwgroen biedt een zeer snelle terugdraaiing. De veiligere keuze hangt af van uw verkeer, tooling en monitoring.

Is blauw-groene inzet duur?

Dat kan, aangezien u tijdens een release twee volledige omgevingen kunt gebruiken. Het automatisch schalen van de cloud en het afsluiten van de inactieve omgeving kunnen de kosten verlagen.

Met welk percentage moet een kanarie beginnen?

Teams beginnen doorgaans met ongeveer 1 tot 5 procent, zolang dat maar voldoende verkeer oplevert voor een betekenisvol signaal. Systemen met weinig verkeer hebben mogelijk een groter aandeel nodig.

Hoe gaan Canary en Blue-Green om met databasewijzigingen?

Meestal met achterwaarts compatibele wijzigingen zoals expand en contract, omdat beide versies één database mogen delen en beide moeten werken tijdens de uitrol.

Blijf leren

Werk met Stack Quora

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.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

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 →
DevOps

Omgevingsvariabelen 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 →
Softwareontwikkeling

API-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 →
Testautomatisering

Spotten 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 →
Softwaretesten

Codedekking 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 & SQL

DELETE 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 & SQL

SQL-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 →
Softwareontwikkeling

TypeScript-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 →
Softwareontwikkeling

Python *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 →
Softwareontwikkeling

Python 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 intelligentie

Wat 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 →
DevOps

Monitoring 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 →
DevOps

Docker-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 →
Testautomatisering

TDD 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 →
Softwaretesten

Gebruikersacceptatietesten (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 & SQL

SQL 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 & SQL

SQL 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 →
Softwareontwikkeling

Wat 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 →
Softwareontwikkeling

JavaScript-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Implementatie 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 →
Testautomatisering

Schilferige 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 →
Softwaretesten

Belastingtesten 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 →
Softwaretesten

Testcase 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 & SQL

Optimalisatie 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 & SQL

SQL 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 →
Softwareontwikkeling

JavaScript 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 →
Softwareontwikkeling

Python-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Linux-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 →
Testautomatisering

Selenium 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 →
Softwaretesten

Equivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden

Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…

Lees artikel →
Softwaretesten

Ernst 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 & SQL

Tutorial 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 & SQL

SQL-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 →
Softwareontwikkeling

Git 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 →
Softwareontwikkeling

Python 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 & SQL

SQL 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 →