Deze opdracht gaat over de besturingssoftware voor een geldautomaat. Onlangs nog gaf een geldautomaat in de Drentse plaats Vries aan klanten teveel cash. En meer dan 25 miljoen Duitse bankpasjes hebben sinds nieuwjaarsdag 2010 last van een software-bug. Het is dus niet gezegd dat een geldautomaat het altijd goed doet! Doel van deze opdracht is om een eenvoudig model van een geldautomaat te analyseren en te verbeteren. Natuurlijk is het model in deze opdracht een drastische vereenvoudiging van de werkelijkheid!
Open de onderstaande files in Uppaal:
Dit model beschrijft een hele simpele versie van een systeem met een klant, een pinautomaat en een bank. Er is één Klant, die Klant.geld_op_zak euro op zak heeft, er is één Flappentapper, die Flappentapper.in_kas euro in kas heeft, en er is één Bank, die het saldo van de enige klant administreert. De klant communiceert enkel met de flappentapper, en de flappentapper met de bank. Initiëel heeft de klant 0 euro op zak, staat er 80 euro op haar bankrekening, en zit er 200 euro in de betaalautomaat. Dit kun je zien als je op het symbooltje links van Klant klikt, en daarna op Declarations.
De klant stopt haar pas in de geldautomaat en doet een verzoek om geld op te nemen. De geldautomaat neemt vervolgens contact op met de bank en vraagt of de klant voldoende saldo heeft. Bij een positief antwoord geeft de geldautomaat eerst geld aan de klant en retourneert daarna de pas. Bij een negatief antwoord wordt de pas teruggegeven aan de klant.
Als je dat gedaan hebt, voeg een query toe aan de verifier om te checken of je oplossing werkt. Er mag natuurlijk nog steeds geen deadlock optreden.
A[] Klant.geld_op_zak + Bank.saldo == 80of de iets zwakkere eigenschap
A[] Klant.geld_op_zak + Bank.saldo <= 80gelden.
Denk na wat het gevolg zou zijn als het banksysteem om de een of andere reden crasht op een moment dat deze eigenschappen niet gelden. Kun je begrijpen waarom de bank graag wil dat tenminste één van deze twee eigenschappen geldt?
Probeer het systeem nu te verbeteren zodanig dat een van de bovenstaande eigenschappen geldt. Denk ook na over de vraag of de wijziging realistisch is.
Voeg deze pijl toe, en breid daarna het model van de flappentapper uit zodat de flappentapper het probleem goed herstelt. De automaat moet na zo’n crash in elk geval de pas teruggeven. Je mag zelf kiezen of de automaat alsnog probeert uit te betalen, of de bank een seintje geeft om de afschrijving ongedaan te maken. (Hint: je kunt een extra variabele in de declaraties van de flappentapper toevoegen waarin die kan zien dat-ie gecrasht is.)