Computer says yes

An article, posted more than 11 years ago filed in test, programming, fail, software, structure, testen, computer, little britain, computer says no, controle & unittesting.

Al weer 7 jaar geleden liet Robert Dijkgraaf in Zomergasten zien hoe alles weer uit van alles bestaat. Kleine onderdelen die samen weer grotere gehelen vormen die samen weer nog grotere gehelen vormen en zo verder, en terug. Hij illustreerde dit aan de hand van een alweer 30 jaar oud filmpje: powers of 10.

Powers of 10: Van 100 tot 1024 naar 10-14

Op hun eigen schaal lijken alle onderdelen waaruit iets bestaat weer mooie afgeronde dingen. En op een afstand lijken al deze onderdelen ook nog eens perfect samen te hangen.

Integrated Circuit (public domain image)

Ook in ontworpen zaken zie je dergelijke herhaling en samenhang. Een chip lijkt in detail wel een metropool. En de printplaat waarop deze bevestigd zit eveneens. En in een echte metropool bevinden zich dan ook weer vele van dit soort elektronische metropolen waar dagelijks ontelbare hoeveelheden elektronen hun werk doen.

Samenwerking op macro en micro niveau

Ook als je kijkt naar samenwerking zie je dat dit plaats vindt op alle niveaus. Overal vindt communicatie plaats. Cellen die communiceren via zenuwbanen en stoffen, vloeistoffen die communiceren, mensen die communiceren, organisaties die communiceren en communicatie tussen volkeren.

Op softwaregebied is het niet veel anders (hoewel het voor de niet ingewijde minder goed zichtbaar is). Wanneer je kijkt naar een besturingssysteem dan zie je software, maar die software bestaat eigenlijk uit allerlei kleine programma’s. Kleine programma’s die deels weer bestaan uit wat men dan bibliotheken noemt: kleine programmaatjes die voor de gemiddelde mens echter niets meer betekend.

“Computer says no”

Het aardige van communicatie in de echte wereld is dat het robuust is en het veelal om weet te gaan met fouten. Alle individuele blokjes opereren redelijk zelfstandig. En fouten, eigenlijk onverwachte gebeurtenissen, worden veelal vanzelf opgelost zonder dat het bewust is ontworpen.

In software is zelfstandigheid vaak ver te zoeken. Software blokjes zeggen al snel: “Maar dat stond niet in de specificatie!” Vervolgens geven ze een foutmelding (of erger: een onverklaarbaar resultaat). De leveranciers van de software praten net zo: zonder ook maar even stil te staan bij klantvriendelijkheid.

Een oplossing om tot een perfecte samenhang te komen is om de specificatie volledig uit te schrijven en vervolgens te accorderen en te bouwen, maar dat is praktisch onmogelijk. Een alternatieve oplossing is om automatisch uitvoerbare testen te maken, die continue in de gaten houdt of alles nog goed gaat. Maar alles in de gaten houden is eigenlijk zoiets als iedere inwoner van een land de hele dag door voorzien van een politie-agent. Deze ‘het is goed of het is fout’-controle maakt nog geen robuuste samenleving, laat staan perfect en volledig vrij van onverwachte gebeurtenissen.

Sociale software?

Zou het anders kunnen? Software die enigszins ‘fouten’ (of gewoon niet helemaal verwachte zaken) accepteert? Software die ‘sociaal’ is en soms iets overneemt wat een ander stukje eigenlijk beter had moeten doen. Zoals een taken in onze hersenen worden overgenomen, zoals waterkracht ingezet kan worden wanneer windenergie tekortschiet. En zoals buren elkaar idealiter helpen wanneer de ander iets even niet kan.

Met het strikte regime moet je er vanuit gaan dat alles en iedereen het bekende spelletje meespeelt. Totdat er toch echt iets faalt. De onverwachte gebruikersinvoer, de koppeling met een systeem dat toch niet zo goed in elkaar zit als de producent ooit heeft beloofd, de database connectie die weg valt. Het netwerk dat toch niet altijd beschikbaar is. De stroom die tijdelijk uit valt. En dan? De eindgebruiker toch maar die foutmelding geven? Kun je er geen rekening mee houden dat zelfs het onverwachte soms gebeurd?

Ook onder gebruikersniveau

Merk op dat ik het hier niet alleen heb over het uiterlijke, de gebruikerservaring. Ook binnen ‘je eigen’ gecontroleerde software wereld zou je misschien eens moeten proberen los te laten dat alles aan strikte regels kan voldoen. De wereld veranderd. Jouw software krijgt straks misschien ook weer andere input. Je hoeft niet bang zijn om het systeem aan te passen wanneer je weet dat het ecosysteem van jouw submodules klappen kan opvangen.

Beperkt loslaten is hoeft niet de weg te zijn naar Chaos

In het plaatje hierboven laat ik drie vormen zien. De linker afbeelding toont een keurige perfecte samenleving, maar als een vierkant veranderd in een driehoek valt het uitelkaar. Aan het einde van het spectrum is complete chaos. Het werkt wellicht, maar het is niet te overzien en niet te onderhouden. Ik ben echter voorstander van een tussenvorm: met beperkte overlap in functies ookal gaan onderdelen daarmee buiten hun verantwoordelijkheden. Het zorgt er echter voor dat de onderdelen in staat blijven om zwakheden van de andere onderdelen beter op te vangen. Het is dan ook niet het pad naar chaos (het rechtse plaatje).

Natuurlijk heb je een bepaalde verantwoordelijkheid en kan een leverancier niet zomaar het uitwisselingsformaat aanpassen omdat hij of zij dat eenmaal nu wat handiger vindt en daarom zijn automatische testen (de politieagenten in de software wereld) zinvol. Maar een ietwat flexibele houding is wel net zo vriendelijk. Wel zo sociaal. De eindgebruiker is de laatste persoon die lastig gevallen moet worden met uit de hand gelopen discussies over specificaties. Laat de computer eens ‘ja’ zeggen.

Op de hoogte blijven?

Maandelijks maak ik een selectie artikelen en zorg ik voor wat extra context bij de meer technische stukken. Schrijf je hieronder in:

Mailfrequentie = 1x per maand. Je privacy wordt serieus genomen: de mailinglijst bestaat alleen op onze servers.