Bijna iedereen heeft wel eens te maken gehad met een bug of zelfs meerdere bugs, want elk stukje software heeft er ooit wel eens één of zelfs veel meer. Ikzelf ben programmeur en weet dan ook uit ervaring dat bugs nagenoeg niet te voorkomen zijn. Echter, er is een flink verschil tussen bugs. Je hebt bugs die dus wel te voorkomen waren en bugs die je pas ontdekt wanneer het product in gebruik genomen gaat worden.
Waar komt de term ‘bug’ en ‘debuggen’ vandaan
De term ‘bug’ en ‘debugging’ is populair geworden dankzij Grace Hopper, een pionier op het gebied van computer wetenschappen en tevens de uitvinder van de eerste ‘compiler’. Tijdens haar werk aan de Mark II te Harvard, ontdekten haar collega’s een mot in de relais van de machine die voor kortsluiting zorgde. Grace maakte toen de opmerking dat ze de machine aan het ‘debuggen’ waren. Het is niet met 100% zekerheid te zeggen dat de term bij haar weg komt, maar zij was zeker degene die de term populair heeft gemaakt. De mot is nog steeds te bewonderen ingeplakt in het logboek van het team in het Naval Surface Weapons Center.
Bug 1: Millenniumbug
We beginnen met één van de allerbekendste bugs, vooral omdat deze bug nog niet zo lang geleden opgelost moest worden. We hebben het over de millenniumbug. In 1960, toen computer programma’s werden geschreven gebruikten de programmeurs 2 cijferige jaarnotaties, oftewel 1980 zou dan zijn 80. Dit werd gedaan omdat data opslag kostbaar was toentertijd en veel ruimte in beslag nam.
Lees ook: Het beste van Geekly in 2015
Dit alles zou natuurlijk geen probleem zijn op 31 december 1999, maar wanneer het dan overgaat op 1 januari 2000 gaat het mooi fout. Veel computers zouden vanaf dat moment namelijk 00 als jaartal gebruiken, wat overeenkomt met 1900. Gelukkig zagen veel programmeurs het al aankomen en begonnen ze te werken aan een oplossing. Vooral banken die de rente dagelijks berekenden zouden veel problemen gaan krijgen, want de computer zou dan een rentepercentage berekenen voor -100 jaar.
Bug 2: De 370 miljoen dollar Ariane 5 crash
De Ariane 5 is een raket en daarmee de opvolger van de Ariane 4 en wordt gebruikt door de Europese ruimtevaartorganisatie (ESA). Het was een ‘integer overflow’ die ervoor zorgde dat het toestel neerstortte tijdens haar eerste vlucht. Een integer overflow is een veelvoorkomende bug en vind plaats wanneer je een nummer op probeert te slaan die groter is dan het plekje waar je het kwijt wilt.
Een mooi voorbeeld is een klik teller. Een klik teller heeft meestal 4 cijfers op rij en het hoogste getal per vakje is het nummer 9. Het hoogste getal haalbaar op de klik teller is dan ook 9999. Wanneer je nog een keer op het knopje drukt zal de teller teruggaan naar 0000, oftewel de klik teller zal overlopen (overflow). Nu weet ik wel dat computers geen decimalen gebruikt, maar het is een goede vergelijking.
Bug 3: IBM Supercomputer Deep Blue V.S. Garry Kasparov
Wereldkampioen schaken Garry Kasparov werd in 1997 verslagen door de IBM Supercomputer Deep Blue dankzij een bug. Het is één van de mooiste gevechten tussen machines en mensen op het vlak van intelligentie en de mens heeft het verloren dankzij een foutje in de software.
De bug stak pas de kop op tijdens de 44e zet van het eerste spel tegen Kasparov. De supercomputer wist geen zet te bedenken dan ging daarom terug naar het laatste redmiddel, namelijk het doen van een compleet willekeurige zet. De willekeurige zet was echter zo geraffineerd en contra-intuïtief dat Kasparov het zag als bewijs van superieure intelligentie van de supercomputer. Hij voelde zich intellectueel te min en verloor daardoor uiteindelijk de wedstrijd.
Bug 4: AT&T netwerk plat in 1990
In 1990 is het netwerk van AT&T plat komen te liggen dankzij een misplaatste ‘break’ statement in een ‘switch’ statement. De switch clausule bevatte een ‘if’ statement en in de ‘else’ stond een ‘break’ die ervoor zorgde dat het complete netwerk plat kwam te liggen. De oplossing was trouwens simpel, ze hoefden enkel de ‘break’ weg te halen.
Bug 5: Softwareprobleem jaar 2038
Dat heb je heel goed gezien, wederom een bug voor een jaartal maar nu één die nog moet komen! Wanneer we het over het probleem van 2038 hebben dan hebben we het over het probleem dat machines en computers zullen hebben op 19 januari 2038. Een timestamp wordt berekend in seconden door een computer en deze seconden zijn gaan lopen om middernacht op 1 januari 1970. Dit getal wordt opgeslagen als 32-bits integer, oftewel een integer die alle kan bevatten tussen -2147483648 en 2147483647.
Wanneer we dan kijken naar 19 januari 2038 om 03:14:07 UTC, dan is dat het moment dat deze 32-bits integer zijn maximale waarde gaat bereiken om vervolgens weer te resetten naar zijn minimale waarde. Deze minimale waarde zal een negatieve waarde zijn en de datum zal dan terecht komen op 1901 in plaats van 2038. Om dit probleem te voorkomen is het van belang computers te voorzien van een 64-bits processor (of zelfs hoger).