Softwaretesten voor toestandsautomaten
Er zijn veel verschillende soorten softwaretests die aan populariteit winnen, omdat ontwikkelaars manieren zoeken om de kwaliteit te verbeteren en projectdeadlines te halen – code reviews, unit tests, regressietests, bètatests, test-gedreven ontwikkeling, en meer. Ongeacht de doelstellingen van een project of de programmeertaal die wordt gebruikt, het is algemeen aanvaard dat hoe eerder een fout wordt opgespoord, hoe gemakkelijker, goedkoper en sneller deze kan worden opgelost.
Code generatie vanuit UML-toestandsmachine diagrammen, een nieuwe functie geïntroduceerd in Altova UModel 2011 Release 2, kan worden gebruikt om de conceptuele logica al in een vroeg stadium van de projectontwikkeling te valideren.
Realistisch ontwerp in een diagram van een eindige automaat
Een voorbeeld dat bij UModel wordt geleverd, bevat een eenvoudig en realistisch diagram van een toestandsmachine, samen met een kleine testapplicatie waarmee u zelf kunt ervaren hoe gemakkelijk het kan zijn om de logica van een ontwerp te testen. Het diagram van de toestandsmachine in het project "AirCondition.ump" in de map met voorbeelden van UModel 2011 beschrijft de werking van een typisch verwarmings- en airconditioningsysteem.

Het systeem omvat een aan/uit-knop aan de linkerkant, een functie voor het selecteren van de modus (verwarming of koeling), een functie voor het instellen van de ventilatorsnelheid en een stand-by-knop die het systeem in de stand-by-modus brengt, zoals weergegeven aan de rechterkant. De voorbeeldprojectmap bevat alle code die door UModel is gegenereerd voor het diagram, in Java, C# en Visual Basic. Om de Java-versie uit te proberen, hoeven we alleen de opdracht javac STMTester.java te gebruiken om de code te compileren en java STMTester om deze uit te voeren. De testapplicatie toont een gesimuleerd bedieningspaneel met informatievensters over de verwarmings- en airconditioningsunit. De bedieningsknoppen bevinden zich bovenaan, de huidige status wordt beschreven in het eerste venster, en de uitvoermeldingen die worden gegenereerd door wijzigingen in het systeem verschijnen in het tweede venster.

Zoals hierboven te zien is, start het systeem in de "uit" stand, de modus is ingesteld op "verwarming" en de ventilator is uitgeschakeld. Voordat u het systeem gebruikt, kunt u overwegen om de grootte van het bedieningspaneel en het diagram van de toestandsmachine aan te passen, zodat u de acties van de testapplicatie in het diagram zelf kunt volgen, zoals te zien is in de verkleinde afbeelding hieronder.

Het bedienen van de toestandsmachine
Wanneer we op de aan/uit-knop klikken, wordt het venster met de huidige status bijgewerkt en wordt een gedetailleerde beschrijving van de uitgevoerde bewerkingen weergegeven als "Gebeurtenis 1" in het venster met de debug-uitvoerberichten.

Als het een warme dag is, kunnen we de modus veranderen naar "koelen" en de ventilatorsnelheid verhogen. Dit kunnen we doen door op de knoppen "modus selecteren" en "snelheid selecteren" te klikken. Het venster met de huidige status wordt bij elke klik bijgewerkt, en "Gebeurtenis 2" en "Gebeurtenis 3" worden toegevoegd aan het venster met de uitvoermeldingen.

Nu kunnen we zien hoe de testapplicatie ons in staat stelt om de logica van ons toestandsmachine-diagram volledig te testen. We kunnen dit doen door op elke mogelijke combinatie van knoppen te klikken om te zien of dit de verwachte resultaten oplevert. Bijvoorbeeld, als we het apparaat in de stand-by modus zetten (Event 4 hieronder) en vervolgens op "snelheid selecteren" drukken, zien we in de uitvoermeldingen voor Event 5 dat er geen toestandswijziging optreedt in de subtoestand met de naam "RegionSpeed". Vergelijk Event 5 met Event 3 in het venster met uitvoermeldingen, zoals hieronder weergegeven.

Nu het systeem in de stand-by modus staat en we geen verwarming of koeling meer nodig hebben, kunnen we energie besparen door op de aan/uit-knop te drukken om het apparaat uit te schakelen.

Wacht even, het lijkt alsof er niets is gebeurd. Er heeft geen overgang plaatsgevonden in gebeurtenis 6, en de huidige status in het bovenste venster is nog steeds "Standby"! Als we naar het diagram van de toestandsmachine kijken, zien we dat de enige manier om uit de "Standby"-modus te komen, is om nogmaals op de "Standby"-knop te drukken. Is dit echt het gedrag dat een gemiddelde gebruiker zou verwachten? Zou de aan/uit-knop het systeem niet moeten uitschakelen vanuit de "Standby"-modus?

Stel je voor hoe duur het zou kunnen zijn om dit probleem op te lossen als het pas veel later in de productontwikkeling was ontdekt, toen het prototype door een toezichthoudende instantie werd getest! Hier is een uitdaging die we aan onze lezers willen voorleggen: hoe zou je een andere, directere route ontwerpen van de stand-by-modus naar de uitgeschakelde toestand?
Het testen van uw eigen toestandsautomaten
U kunt de voorbeeldprojecten voor codegeneratie van de UModel-toestandsmachine gebruiken als sjablonen om testapplicaties te maken voor uw eigen ontwerpen. U kunt het UModel-kenmerk gebruiken dat automatisch bewerkingen in een klasse aanmaakt wanneer u namen toevoegt aan overgangen in uw toestandsmachine.

Het UModel-hulpsysteem bevat gedetailleerde informatie over het genereren van code vanuit diagrammen van toestandsautomaten, en gebruikt ook het projectbestand "AirCondition.ump" als voorbeeld.
Ontdek zelf hoe u de projectontwikkeling kunt verbeteren door de logica van uw eigen diagrammen van toestandsautomaten te testen met Altova UModel – download vandaag nog een gratis proefversie van 30 dagen!