Aan de slag met continue integratie met Matlab en Simulink

Continue integratie wordt meer en meer een integraal onderdeel van model-based design. Dit artikel beschrijft hoe Matlab en Simulink kunnen worden geïntegreerd in CI-pijplijnen om de ontwikkelefficiëntie te verbeteren, het risico op defecten te verkleinen en de oplevering te versnellen.

Mohamed Anas en Dmitry Samarkanov zijn werkzaam bij Mathworks.

6 december 2022

Vele softwareontwikkelteams hebben al met succes continuous integration (CI) en deployment (CD) ingevoerd in hun workflows. Uit een behoefte aan betere codekwaliteit door automatisering wint CI/CD aan populariteit in uiteenlopende industrieën. Gereglementeerde sectoren zoals de automobielsector, de luchtvaart en de medische sector zijn typische voorbeelden waar verplichte striktheid leidt tot een toenemende toepassing van CI/CD, Agile en DevOps. Ook in andere domeinen automatiseren bedrijven meer en meer, onder meer als gevolg van allerlei initiatieven op het gebied van de digitale transformatie maar ook om hun concurrentievermogen te verbeteren.

Een typische CI-workflow

CI ondersteunt agile principes door middel van automatisering en stimuleert softwareontwikkelteams om de productiviteit van hun processen dagelijks te verhogen. Vanuit geautomatiseerde tests en builds genereren CI-pijplijnen rapporten, metrieken en artefacten, die eerst een reeks geautomatiseerde verificatie- en validatiestappen doorlopen voordat ze naar de test- en productieomgeving gaan. Deze werkwijzen leiden tot een betere productkwaliteit, een hoger innovatietempo en een grotere klanttevredenheid.

Met de opkomst van CI in kritische softwareontwikkelprojecten is er meer belangstelling gekomen voor modelgebaseerde activiteiten, zoals het controleren van modellen op richtlijnen, het analyseren van modellen op fouten, dynamisch testen en het genereren van code. CI wordt dus een integraal onderdeel van model-based design. Maar hoe kunnen we model-based design integreren in een CI-platform?

Configuratie voor CI

Een handig hulpmiddel in de testfase is het Matlab Unit Testing Framework voor Matlab en Simulink. Hiermee zijn simulatiegebaseerde tests te definiëren, te beheren en uit te voeren. Het framework kan rapporten genereren in JUnit, pdf, html en andere formaten.

Een van de best practices van DevOps is vroeg en vaak verifiëren en valideren. Het is essentieel dat deze taken binnen de CI-pijplijn op dezelfde manier worden uitgevoerd als op de machine van de ontwikkelaar; dit garandeert voorspelbare en reproduceerbare resultaten. Daarnaast is het belangrijk om alle bestanden, inclusief die voor ontwerp, eisen, tests en configuratie, in een goed gedefinieerde scope te houden, zodat afhankelijkheden altijd in een coherente staat aanwezig zijn. Dit wordt mogelijk gemaakt door Matlab Projects.

 advertorial 

Nieuw testcenter voor high purity-reinigingstoepassingen

Ecoclean bouwt capaciteit voor reinigingstests in het hoogreinheidssegment uit: nieuw testcenter voor high purity-reinigingstoepassingen. Lees meer.

Zodra een project is aangemaakt, moeten de te automatiseren taken worden gedefinieerd en gescript. De gescripte taken kunnen twee doelen dienen: verificatie voorafgaand aan een commit en CI. Voor pre-commit-verificatie is het essentieel dat de taak gemakkelijk is te starten, toegespitst op wat momenteel wordt ontwikkeld. Een tool zoals Process Advisor App is hiervoor heel geschikt. Dit gereedschap biedt een grafische frontend geïntegreerd in Simulink waarmee wijzigingen lokaal zijn te prekwalificeren om bouw- en testfouten in het CI-systeem te voorkomen.

Voor CI heeft Mathworks onlangs het ondersteuningspakket CI/CD Automation for Simulink Check geïntroduceerd, dat opties biedt om een model-based design-proces te stroomlijnen door een bestaande of nieuw gecreëerde CI-workflow te optimaliseren. Hiermee zijn veelvoorkomende uitdagingen aan te pakken, waaronder het opzetten van een pijplijn op maat voor model-based design, het verkorten van de bouwtijd, het verminderen van bouwfouten, het debuggen van bouwfouten en het uitrollen van een model-based design-workflow naar het team en CI-systeem. Het buildsysteem kan wijzigingen in artefacten detecteren en incrementele builds draaien die alleen taken uitvoeren met verouderde resultaten om de bouwtijd te verkorten.

Bedrijfskritische software wordt vaak ontwikkeld volgens functionele veiligheidsstandaarden zoals ISO 26262 of IEC 61508. Om aan de bijbehorende eisen te voldoen, bestaan er goed gedocumenteerde workflowbeschrijvingen. Een daarvan is de ISO 26262-referentieworkflow in de IEC Certification Kit, die een mapping laat zien tussen de items in de tabellen van ISO 26262-6 en model-based design-usecases. Deze referentieworkflow beschrijft verschillende taken voor de CI-pijplijn, waaronder nalevingscontroles (ISO, IEC, coderingsnormen op modellen en gegenereerde C/C++-code), unit- en integratietests, het genereren van C, C++, HDL of Cuda-code uit het model, het compileren en linken van de gegenereerde code, back-to-back-tests om de resultaten van model-, software- en processor-in-the-loop-tests te vergelijken, hardware-in-the-loop-tests en interoperabiliteitscontroles voor meerdere releases.

Integratie in elk CI-platform

CI-platforms kunnen worden onderverdeeld in server- en servicegebaseerde varianten. Servergebaseerde platforms worden doorgaans beheerd door gebruikers of hun it-afdeling en kunnen worden ingericht op (virtuele) machines van het bedrijf. Servicegebaseerde platforms kunnen in de cloud worden gehost. Gebruikers kunnen CI-taken uitvoeren op door de leverancier gehoste agents of zelf een agent aanmaken en die op de eigen lokale systemen uitrollen. Usecases voor deze self-hosted agents zijn back-to-back- of hardware-in-the-loop-tests waarvoor specifieke hardware nodig is.

Afhankelijk van hoe de agent is ingesteld en welk platform wordt gebruikt, zijn er verschillende methodes voor het starten van Matlab-taken in CI-pijplijnen. Zo biedt Mathworks integratiecommando’s die Matlab in de pijplijn koppelen aan de CI-oplossingen van grote cloudproviders. In batchmodus is het mogelijk om Matlab te integreren in elk modern CI-platform door de gebruikelijke installatie en configuratie te volgen op de agents van het platform. Door Matlab in een Docker-container te draaien, zijn CI-taken geïsoleerd uit te voeren.

Op deze manier kunnen Matlab en Simulink worden geïntegreerd in platformonafhankelijke, geautomatiseerde CI-pijplijnen. Hiermee kunnen ontwikkelteams hun model-based design-workflows verbeteren en hun productiviteit verhogen en tegelijkertijd het aantal fouten en de ontwikkelkosten en -tijd verlagen. Gebruikers van Matlab-gebaseerde pijplijnen kunnen deze uitbreiden met continuous delivery, waardoor ze wendbaarder worden en de beschikking krijgen over volwassen DevOps-workflows waarmee ze hoogwaardige en volledig gedocumenteerde code geautomatiseerd kunnen opleveren.