Wat is het verschil tussen Model Based Testing en Model Driven Engineering?
- 29 november 2021
- 3 minuten
De complexiteit van software intensieve systemen neemt steeds verder toe. Model Driven Design technologieën en code generatie hebben het potentieel om de complexiteit te beheersen en de efficiëntie van software ontwikkeling te verhogen. Model Driven Engineering (MDE) en Model Based Testing (MBT) zijn methoden om software sneller, goedkoper en efficiënter te ontwerpen.
Het verschil
Op basis van de systeemvereisten maakt u een abstract model. Dit model dient als gemeenschappelijke taal voor alle belanghebbenden om de begrijpelijkheid te verbeteren en de complexiteit van het systeem te verminderen. Tools genereren vervolgens automatisch de code voor het systeem (MDE) of voor de test (MBT). Het resultaat: meer innovatieve producten die u sneller op de markt kunt brengen. Als een van de eerste softwarebedrijven die zich specialiseert in deze relatief nieuwe benaderingen van softwareontwerp, kijkt ICT Group ernaar uit om u te helpen door onze knowhow, expertise en ervaring met u te delen.
Vanwege de belangstelling in deze technologieën, werd Julien Schmaltz (Principal Consultant) gevraagd wat het verschil is tussen Model Based Testing en Model Driven Engineering. Hij legt dit uit aan de hand van het V-Model.
Een uitleg gebaseerd op het V-Model
Model Based Testing automatiseert het genereren en uitvoeren van testgevallen vanuit een model. Op het V-model automatiseert dit het werk van links naar rechts. Model gestuurde engineering gaat over het automatiseren van het genereren van code vanuit een model. Op het V-model automatiseert dit het werk van boven naar beneden. Dit is het zeer korte antwoord ! Laten we nog wat verder gaan.
Een model voor testgeneratie is een precieze voorstelling van wat een systeem verondersteld wordt te doen. De modelgebaseerde testtools genereren en voeren dan automatisch tests uit die zullen slagen als en slechts als het geteste systeem conform is aan het model. Dergelijke modellen kunnen op verschillende abstractieniveaus worden gemaakt. Men kan een model maken van een vereiste en de acceptatietest automatiseren. Op codeniveau kan men een model van een methode maken en unit testing automatiseren. Elk niveau daartussen is ook mogelijk. Een leuke eigenschap van Model Based Testing is de mogelijkheid om slechts delen van een systeem te modelleren - zeg, een kleine set van requirements - en toch al de voordelen van geautomatiseerd testen te verkrijgen. Modelgebaseerd testen bestaat uit het creëren van een precieze representatie van wat wordt verwacht. De feitelijke controle of een te testen systeem daadwerkelijk aan de verwachtingen voldoet, wordt geautomatiseerd.
Een model voor het genereren van code is een nauwkeurige voorstelling van hoe een systeem wordt geïmplementeerd. Op basis van zo'n model wordt de eigenlijke code gegenereerd - in om het even welke taal, meestal Java of C++. Een fundamenteel verschil tussen modellen voor testgeneratie en modellen voor codegeneratie is het vereiste niveau van details en volledigheid. Het is voldoende om te weten dat een verbindingsverzoek kan slagen of mislukken om te beginnen met het testen van een serverapplicatie. Dit is niet voldoende om de eigenlijke serverapplicatie te genereren. We hebben details nodig over hoe deze server werkt. Voor het genereren van code moeten modellen voldoende informatie bevatten, zodat code kan worden gegenereerd. Veel trends en initiatieven werken hard aan het verhogen van het abstractieniveau waarop codegeneratie mogelijk is. Het ontwerpniveau is vaak het hoogste abstractieniveau waarop geautomatiseerde codegeneratie wordt toegepast.
Beide benaderingen zijn complementair en kunnen gecombineerd worden. U kunt bijvoorbeeld Model Based Testing gebruiken voor acceptatietests van een applicatie die is gegenereerd met behulp van low-code platforms. De enige beperking is dat je niet hetzelfde model kunt gebruiken om code te genereren en om testen voor die code te genereren. In het algemeen moet men code generatoren testen en niet gegenereerde code. Het hoofddoel is om gegenereerde code correct te achten door constructie.