Schrödinbug — är en unik typ av programvarufel som finns i koden men aldrig visar sig förrän utvecklaren läser denna kodsektion och inser att den innehåller en bugg. Termen är en ordlek med “Schrödingers katt”: buggen finns och finns inte samtidigt, tills någon observerar den. Enligt Wikipedia (2026) används denna term främst i professionell jargong och beskriver snarare ett psykologiskt än tekniskt fenomen i utvecklarens arbete.
Huvudpunkter
Schrödinbug — term från utvecklares professionella jargong som betecknar ett programvarufel som funnits i koden i åratal men aldrig leder till ett haveri, tills någon läser denna kodsektion och förstår att här finns ett fel. Därefter börjar buggen visa sig.
Namnet hänvisar tydligt till Erwin Schrödingers tankeexperiment med katten, som samtidigt är levande och död, tills observatören öppnar lådan. När det gäller buggen — den “fungerar” och —r sönder” samtidigt, tills utvecklaren tittar på koden.
Det är viktigt att förstå att Schrödinbug — inte är en teknisk egenskap hos programexekvering utan ett kognitivt fenomen. Koden innehåller objektivt ett fel, men omständigheterna eller egenskaperna hos indata har aldrig aktiverat den problematiska exekveringsvägen förrän utvecklaren analyserade koden.
Ur teknisk synvinkel är Schrödinbug ett vanligt logiskt defekt som aldrig hamnade i programmets exekveringsflöde eftersom alla anrop gick via den ”lyckliga” vägen. Så snart utvecklaren läser koden ändrar han sitt beteende eller testläge — och buggen visar sig.
Namnet Schrödinbug — en sammanslagning av efternamnet på fysikern Erwin Schrödinger och ordet “bug” (fel). Schrödinger föreslog 1935 ett tankeexperiment som illustrerar problemet med Köpenhamnstolkningen av kvantmekaniken.
Experimentet med katten: i en stängd låda finns ett radioaktivt ämne, en Geigerräknare och en flaska med gift. Om ämnet sönderfaller — aktiverar räknaren mekanismen som krossar flaskan, och katten dör. Så länge lådan är stängd är katten samtidigt levande och död (superposition av tillstånd).
Analogi med programmering: så länge ingen har läst kodavsnittet med felet fungerar programmet korrekt — buggen är samtidigt “levande” och “död”. Så snart utvecklaren öppnar filen och läser koden kollapsar superpositionen och buggen börjar visa sig (programmets korrekta funktion ”dör”).
Schrödinbug — är i första hand ett psykologiskt fenomen, inte en teknisk egenskap vid kodkörning. Låt oss undersöka mekanismen för dess uppkomst ur programmerarens kognitiva psykologi.
När utvecklaren skriver kod befinner han sig i ett “flöde” och kanske inte märker ett logiskt fel. Koden går igenom granskning, tester, kommer i produktion och fungerar i månader. Sedan återvänder utvecklaren till denna kod för omfaktorisering, läser den noggrant och ser plötsligt: “Men det här är ju ett uppenbart fel!”.
Efter insikten om felet börjar utvecklaren avsiktligt leta efter scenarier där buggen kommer att visa sig. Han ändrar testdata, startar felsökaren, går igenom kodgrenar — och vid någon tidpunkt orsakar han faktiskt ett haveri. Buggen ”upptäcks” just för att utvecklaren nu vet var han ska leta.
Kognitiv bias — confirmation bias — spelar en nyckelroll. Utvecklaren, som ser ett fel i koden, börjar undermedvetet leta efter dess manifestation i programmets beteende. Varje ovanlig logg eller haveri tolkas omedelbart som en konsekvens av det hittade felet, även om den verkliga orsaken kan vara en annan.
Låt oss titta på några verkliga scenarier från utvecklingspraktiken som beskriver klassisk Schrödinbug.
I en Android-app använde utvecklaren som standard flaggan `isEnabled = true`, även om den nya funktionen skulle vara avstängd. Koden med felaktig flagga fungerade i produktion i tre månader — ingen klagade, eftersom funktionen verkligen skulle vara påslagen. När utvecklaren läste koden inför nästa release förstod han felet, rättade flaggan till `false` — och fick omedelbart en felrapport om att funktionen hade försvunnit.
En metod i biblioteket innehöll ett uppenbart divisionsmed-noll fel, men anropades aldrig i verkliga scenarier. Biblioteket användes i fem projekt och ingen märkte problemet. Vid kodgranskning påpekade en ny utvecklare felet — och efter korrigering visade det sig att ett av projekten var beroende av detta ”felaktiga” beteende.
Schrödinbug intar en unik plats i klassificeringen av programvarufel. Låt oss jämföra den med andra typer.
| Typ av bugg | Manifestation innan kodläsning | Manifestation efter kodläsning | Natur |
|---|---|---|---|
| Schrödinbug | Aldrig | Börjar visa sig | Psykologisk |
| Bohrbug | Alltid med samma data | Alltid med samma data | Deterministisk |
| Mandelbug | Ibland, kaotiskt | Ibland, kaotiskt | Systemisk |
| Heisenbug | Stabilt | Försvinner i felsökaren | Teknisk |
Schrödinbug — den enda typen av bugg vars manifestation direkt beror på att utvecklaren inser felet. Däri ligger dess paradoxala natur.
Även om Schrödinbug är mer ett psykologiskt fenomen finns det praktiska metoder för att minimera dess påverkan på projektet.
Ju tidigare felet upptäcks, desto mindre sannolikhet att det hamnar i kategorin Schrödinbug. Parprogrammering och obligatorisk granskning av varje kodrad minskar antalet dolda defekter till ett minimum.
Statiska kodanalysatorer (ESLint, detekt, ktlint, SpotBugs) upptäcker potentiella fel i kompileringsfasen utan att vänta på att en människa ska märka dem. Linters kan identifiera ”sovande” buggar i döda kodgrenar.
Att täcka alla kodgrenar med tester, inklusive sällan använda, — är det enda sättet att garantera att Schrödinbug inte väntar i åratal på sin stund. Verktyg som JaCoCo för Java hjälper till att spåra otäckta grenar.
// Exempel på potentiell Schrödinbug — bugg i sällan anropad gren
def processOrder(Order order) {
if (order.isRush()) {
// Denna gren har aldrig testats i produktion
sendRushNotification(order) // det kan finnas en bugg här
}
}
I detta exempel kan Schrödinbug finnas i åratal om brådskande beställningar (rush) aldrig har kommit in i systemet. Så snart den första sådana beställningen dyker upp — kommer buggen att visa sig, men fram till dess tror utvecklarna att koden är korrekt.
Vanliga frågor
Schrödinbug — är ett verkligt fenomen från professionell jargong, men det beskriver snarare ett kognitivt och psykologiskt fenomen än en teknisk kategori av fel. Termen används av utvecklare för att beskriva situationen där insikten om ett fel i koden leder till dess första manifestation.
Paradoxen är att buggen objektivt finns, men subjektivt inte visar sig förrän den upptäcks. Före kodläsning fungerar programmet korrekt även om det innehåller ett fel. Efter läsning — ”materialiseras” buggen och börjar orsaka haverier.
Analogi är direkt: precis som Schrödingers katt är samtidigt levande och död tills lådan öppnas, är Schrödinbug samtidigt “fungerar” och ”r sönder” tills utvecklaren öppnar kodfilen och läser den. Observation förstör superpositionen.
Ja, Schrödinbug kan vara farlig om det dolda felet finns i en kritisk kodsektion som sällan körs — till exempel vid betalningsbehandling under specifika förhållanden eller i återställningslogik efter ett haveri. Upptäckten av ett sådant fel i det mest olämpliga ögonblicket kan leda till allvarliga problem.
Den enda pålitliga metoden är att säkerställa 100% kodtäckning med tester, inklusive alla grenar och gränsvillkor. Om varje kodrad körs i åtminstone ett test kommer Schrödinbug att upptäckas i testfasen, inte efter att ha läst koden i produktion.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också