Schrödinbug — is een uniek type softwarefout die in de code bestaat, maar nooit tot uiting komt totdat de ontwikkelaar dit stuk code leest en zich realiseert dat het een bug bevat. De term is een woordspeling met „de kat van Schrödinger”: de bug is er tegelijkertijd wel en niet, zolang niemand ernaar kijkt. Volgens Wikipedia (2026) wordt deze term voornamelijk gebruikt in professioneel jargon en beschrijft het eerder een psychologisch dan een technisch fenomeen in het werk van de ontwikkelaar.
Belangrijkste punten
Schrödinbug — een term uit het professionele jargon van ontwikkelaars, die een softwarefout aanduidt die jarenlang in de code bestaat, maar nooit tot een storing leidt, totdat iemand dit stuk code leest en begrijpt dat hier een fout zit. Daarna begint de bug zich te manifesteren.
De naam verwijst duidelijk naar het gedachte-experiment van Erwin Schrödinger met de kat, die tegelijkertijd leeft en dood is, totdat de waarnemer de doos opent. In het geval van de bug — hij „werkt” en „is defect” tegelijkertijd, totdat de ontwikkelaar naar de code kijkt.
Het is belangrijk te begrijpen dat Schrödinbug — geen technische eigenschap van programma-uitvoering is, maar een cognitief fenomeen. De code bevat objectief een fout, maar de omstandigheden of kenmerken van de invoergegevens hebben nooit het problematische uitvoeringspad geactiveerd totdat de ontwikkelaar de code heeft geanalyseerd.
Vanuit technisch oogpunt is Schrödinbug een gewoon logisch defect dat nooit in de uitvoeringsstroom van het programma terecht is gekomen, omdat alle aanroepen via het „gelukkige” pad verliepen. Zodra de ontwikkelaar de code leest, verandert hij zijn gedrag of testmodus — en de bug manifesteert zich.
De naam Schrödinbug — een samentrekking van de achternaam van de natuurkundige Erwin Schrödinger en het woord „bug” (fout). Schrödinger stelde in 1935 een gedachte-experiment voor dat het probleem van de Kopenhaagse interpretatie van de kwantummechanica illustreert.
Experiment met de kat: in een gesloten doos bevinden zich een radioactieve stof, een Geigerteller en een flesje met gif. Als de stof vervalt — activeert de teller het mechanisme dat het flesje breekt, en de kat sterft. Zolang de doos gesloten is, is de kat tegelijkertijd levend en dood (superpositie van toestanden).
Analogie met programmeren: zolang niemand het stuk code met de fout heeft gelezen, werkt het programma correct — de bug is tegelijkertijd „levend” en „dood”. Zodra de ontwikkelaar het bestand opent en de code leest, stort de superpositie in en begint de bug zich te manifesteren (het correcte functioneren van het programma „sterft”).
Schrödinbug — is in de eerste plaats een psychologisch fenomeen, geen technische eigenschap van code-uitvoering. Laten we het mechanisme van het ontstaan ervan bekijken vanuit het oogpunt van de cognitieve psychologie van de programmeur.
Wanneer de ontwikkelaar code schrijft, verkeert hij in een staat van „flow” en kan hij een logische fout over het hoofd zien. De code doorloopt review, tests, komt in productie en werkt maandenlang. Vervolgens keert de ontwikkelaar terug naar deze code voor refactoring, leest deze aandachtig en ziet plotseling: „Maar dit is een voor de hand liggende fout!”.
Na het besef van de fout begint de ontwikkelaar doelbewust te zoeken naar scenario's waarin de bug zich zal manifesteren. Hij verandert testgegevens, start de debugger, doorloopt codetakken — en op een gegeven moment veroorzaakt hij daadwerkelijk een storing. De bug wordt „ontdekt” juist omdat de ontwikkelaar nu weet waar hij moet zoeken.
Cognitieve vertekening — confirmation bias — speelt een sleutelrol. De ontwikkelaar, die een fout in de code ziet, begint onbewust te zoeken naar de manifestatie ervan in het gedrag van het programma. Elke ongebruikelijke log of storing wordt onmiddellijk geïnterpreteerd als een gevolg van de gevonden fout, zelfs als de werkelijke oorzaak anders kan zijn.
Laten we een aantal realistische scenario's uit de ontwikkelingspraktijk bekijken die de klassieke Schrödinbug beschrijven.
In een Android-app gebruikte de ontwikkelaar standaard de vlag `isEnabled = true`, hoewel de nieuwe functie uitgeschakeld moest zijn. De code met de verkeerde vlag werkte drie maanden in productie — niemand klaagde, omdat de functie inderdaad ingeschakeld moest zijn. Toen de ontwikkelaar de code las ter voorbereiding van de volgende release, begreep hij de fout, corrigeerde de vlag naar `false` — en kreeg onmiddellijk een bugmelding dat de functie verdwenen was.
Een methode van de bibliotheek bevatte een duidelijke deling-door-nul fout, maar werd nooit aangeroepen in realistische scenario's. De bibliotheek werd in vijf projecten gebruikt en niemand merkte het probleem. Tijdens code-review wees een nieuwe ontwikkelaar op de fout — en na correctie bleek dat een van de projecten afhankelijk was van dit „onjuiste” gedrag.
Schrödinbug neemt een unieke plaats in in de classificatie van softwarefouten. Laten we het vergelijken met andere typen.
| Type bug | Manifestatie vóór het lezen van code | Manifestatie na het lezen van code | Aard |
|---|---|---|---|
| Schrödinbug | Nooit | Begint zich te manifesteren | Psychologisch |
| Bohrbug | Altijd bij dezelfde gegevens | Altijd bij dezelfde gegevens | Deterministisch |
| Mandelbug | Soms, chaotisch | Soms, chaotisch | Systeem |
| Heisenbug | Stabiel | Verdwijnt in debugger | Technisch |
Schrödinbug — het enige type bug waarvan de manifestatie direct afhangt van het feit dat de ontwikkelaar de fout realiseert. Hierin ligt zijn paradoxale aard.
Hoewel Schrödinbug meer een psychologisch fenomeen is, zijn er praktische methoden om de invloed ervan op het project te minimaliseren.
Hoe eerder de fout wordt ontdekt, hoe kleiner de kans dat deze in de categorie Schrödinbug valt. Pair programming en verplichte code-review van elke regel code verminderen het aantal verborgen defecten tot een minimum.
Statische code-analyzers (ESLint, detekt, ktlint, SpotBugs) detecteren potentiële fouten in de compilatiefase, zonder te wachten tot een mens ze opmerkt. Linters kunnen „slapende” bugs in dode codetakken opsporen.
Het testen van alle codetakken, inclusief zelden gebruikte, — is de enige manier om te garanderen dat Schrödinbug niet jarenlang op zijn kans wacht. Hulpmiddelen zoals JaCoCo voor Java helpen bij het volgen van ongedekte vertakkingen.
// Voorbeeld van potentiële Schrödinbug — bug in zelden aangeroepen tak
def processOrder(Order order) {
if (order.isRush()) {
// Deze tak is nooit in productie getest
sendRushNotification(order) // hier kan een bug zitten
}
}
In dit voorbeeld kan Schrödinbug jarenlang bestaan als spoedbestellingen (rush) nooit in het systeem zijn ingevoerd. Zodra de eerste dergelijke bestelling verschijnt — zal de bug zich manifesteren, maar tot dat moment denken ontwikkelaars dat de code correct is.
Veelgestelde vragen
Schrödinbug — is een echt fenomeen uit het professionele jargon, maar het beschrijft eerder een cognitief en psychologisch fenomeen dan een technische categorie van fouten. De term wordt door ontwikkelaars gebruikt om de situatie te beschrijven waarin het besef van een fout in de code leidt tot de eerste manifestatie ervan.
De paradox is dat de bug objectief bestaat, maar zich subjectief niet manifesteert tot het moment van ontdekking. Vóór het lezen van de code werkt het programma correct, hoewel het een fout bevat. Na het lezen — „materialiseert” de bug zich en begint storingen te veroorzaken.
De analogie is direct: net zoals de kat van Schrödinger tegelijkertijd levend en dood is totdat de doos wordt geopend, is Schrödinbug tegelijkertijd „werkt” en „is defect” totdat de ontwikkelaar het bestand met de code opent en leest. Waarneming vernietigt de superpositie.
Ja, Schrödinbug kan gevaarlijk zijn als de verborgen fout zich in een kritiek deel van de code bevindt dat zelden wordt uitgevoerd — bijvoorbeeld bij de verwerking van betalingen onder specifieke omstandigheden of in de herstellogica na een storing. Het ontdekken van zo'n fout op het meest ongelegen moment kan tot ernstige problemen leiden.
De enige betrouwbare methode is het garanderen van 100% code coverage met tests, inclusief alle vertakkingen en randvoorwaarden. Als elke regel code in ten minste één test wordt uitgevoerd, wordt Schrödinbug in de testfase ontdekt, niet na het lezen van de code in productie.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook