Articoli tecnici

Un workflow conforme a ISO 26262 per applicazioni di guida autonoma con MATLAB: linee guida e best practice

Di Lars Rosqvist, MathWorks


L'uso di Simulink® e Stateflow® per lo sviluppo di software ISO® 26262 è ben consolidato per le centraline elettroniche automobilistiche. Esiste una tendenza crescente, in particolare nelle applicazioni di guida automatizzata, verso l’implementazione di progetti software utilizzando le funzioni MATLAB® così come blocchi Simulink e grafici Stateflow . Questo articolo offre le best practice per utilizzare un workflow incentrato su MATLAB per verificare la conformità agli standard software ISO 26262 [1]. Queste best practice completano il workflow di riferimento ISO 26262 utilizzando la progettazione Model-Based illustrata in IEC Certification Kit.

Modello di modellazione consigliato

In questo articolo utilizziamo un modello di sviluppo software in cui un modello Simulink incorpora un blocco funzione MATLAB (Figura 1). Il modello Simulink di livello superiore contiene tutte le impostazioni di configurazione per la generazione del codice. Il blocco funzione MATLAB richiama funzioni MATLAB esterne.

Screenshot MATLAB di un modello di modellazione utilizzando codice MATLAB esterno.

Figura 1. Modello di modellazione utilizzando codice MATLAB esterno.

Questo modello di modellazione sfrutta tutti gli strumenti di verifica e validazione disponibili per i modelli Simulink, consentendo al contempo l'implementazione delle funzionalità utilizzando il linguaggio MATLAB [2]. Sfrutta inoltre le ampie funzionalità disponibili in MATLAB. Ad esempio, lo sviluppo ADAS viene generalmente implementato utilizzando MATLAB perché funzionalità matematiche complesse possono essere espresse in modo conciso ed elegante.

Esistono modi alternativi per utilizzare MATLAB [3] in un ambiente di sviluppo prodotto critico per la sicurezza, che non è menzionato in questo articolo.

Workflow di riferimento MATLAB ISO 26262: Panoramica

Come accennato in precedenza, il workflow descritto in questo articolo si basa sul workflow di riferimento ISO 26262 nel IEC Certification Kit (Figura 2).

Un diagramma che mostra un workflow dei requisiti di sistema con creazione dei requisiti, sviluppo dell'architettura, modellazione, generazione di codice e compiler con i prodotti utilizzati per ciascun processo.

Figura 2. Attività di verifica e validazione specificate in IEC Certification Kit.

Il workflow basato su MATLAB include ulteriori suggerimenti per le seguenti attività di verifica e convalida:

  • Creazione dei requisiti e verifica dell'architettura
  • Analisi del modello statico
  • Test MIL e test SIL o PIL back-to-back
  • Analisi statica del codice
  • Documentazione

Creazione dei requisiti e verifica dell'architettura

La norma ISO 26262 richiede la prova che tutti i requisiti siano stati implementati e testati. Nel workflow di riferimento ISO 26262, le attività di verifica dell'architettura e di creazione dei requisiti evidenziate nella Figura 3 forniscono questa prova.

Lo stesso diagramma della Figura 2 che evidenzia le attività di collegamento dei requisiti: verifica dell'architettura e creazione dei requisiti.

Figura 3. Attività di collegamento dei requisiti.

Collegamento dei requisiti al codice MATLAB

Utilizzando i Requirements Toolbox™, puoi collegare i requisiti alle righe di codice nelle funzioni MATLAB nello stesso modo in cui colleghi i requisiti ai blocchi Simulink. La differenza è che il controllo esistente per i requisiti mancanti non controlla il codice MATLAB esterno. Il suggerimento è di implementare un controllo Model Advisor che cerchi contenitori MATLAB non collegati a un requisito. Un contenitore è in genere il file MATLAB esterno o una funzione MATLAB, a seconda della dimensione del file.

LA BEST PRACTICE per il workflow di MATLAB

Implementa i controlli di Model Advisor per cercare contenitori MATLAB non collegati ai requisiti.

Analisi del modello statico

È necessario verificare la leggibilità, la comprensibilità e la testabilità di ogni componente del modello di implementazione (Figura 4). Simulink Check™ viene utilizzato per valutare la conformità del modello alle linee guida ad alta integrità di ISO 26262 e MathWorks.

Lo stesso diagramma della Figura 2 che evidenzia le attività di analisi del modello statico.

Figura 4. Attività di analisi del modello statico specificate nel IEC Certification Kit.

Subset del linguaggio

La programmazione in MATLAB può comportare l'uso di funzioni da diversi toolbox diversi. Poiché MATLAB è un linguaggio potente con un elevato grado di astrazione, puoi sviluppare funzionalità complesse con poche righe di codice. In alcuni casi, una singola riga di codice MATLAB può risultare in molte righe di codice C, rendendo difficile la verifica del codice generato con una copertura completa. È importare sapere che la funzionalità che stai implementando è testabile. La norma ISO 26262 prevede l'uso di un subset di linguaggi (Tabella 1 nella norma ISO 26262) in base al tipo di funzioni che si sta utilizzando.

Ti consigliamo di effettuare le seguenti operazioni per soddisfare i requisiti del subset di linguaggi:

  • Valuta le funzioni MATLAB utilizzate per garantire che nessuna di esse richieda uno sforzo di verifica elevato. Model Advisor può essere utilizzato per identificare l'utilizzo di funzioni non consigliate a causa della complessità del codice.
  • Sostituisci le funzioni MATLAB non consigliate con implementazioni più semplici. Queste funzioni più semplici saranno più facili da tracciare e testare.

LA BEST PRACTICE per il workflow di MATLAB

Quando esamini i modelli, cerca le operazioni o le funzioni MATLAB contrassegnate dal controllo Model Advisor himl_0013. Se possibile, sostituiscili con altre funzioni.

Se le funzioni non possono essere sostituite, devono essere testate separatamente.

  • Verifica il funzionamento eseguendo unit test separati con copertura elevata. Una volta raggiunta la copertura, giustificare l'utilizzo di queste funzioni facendo riferimento ai test delle unità esterne.

LA BEST PRACTICE per il workflow di MATLAB

Se vengono identificate operazioni o funzioni MATLAB che generano molto codice C e non possono essere sostituite, testa le funzioni esternamente con test unitari. Scrivi le giustificazioni collegate al luogo in cui vengono utilizzate le funzioni e collega il luogo in cui vengono archiviati i risultati dei test.

Forte digitazione dei dati

ISO 26262 richiede che tutte le variabili siano fortemente tipizzate. Model Advisor controlla i modelli Simulink per blocchi fortemente tipizzati, inclusa l'interfaccia al blocco funzione MATLAB, ma non controlla le funzioni MATLAB esterne. Per superare questo ostacolo, scrivi un assegno per verificare che tutte le funzioni MATLAB siano fortemente tipizzate. È particolarmente importante controllare il tipo e la dimensione dei dati.

LA BEST PRACTICE per il workflow di MATLAB

Aggiungi un controllo Model Advisor per garantire che tutte le variabili nel tuo codice MATLAB siano fortemente tipizzate.

Test MIL e test SIL o PIL back-to-back

I test back-to-back (equivalenza ) consentono di dimostrare che il codice generato si comporta allo stesso modo del modello, come raccomandato dalla Tabella 7 della norma ISO 26262, Metodi per la verifica dell'unità software. Per il codice oggetto, utilizza i test PIL (processor-in-the-loop) e per il codice C generato, utilizza SIL (software-in-the-loop) (Figura 5). I casi di test dovrebbero essere gli stessi utilizzati nei test MIL (model-in-the-loop). Per la verifica dell'unità, utilizza SIL. Per i test di integrazione, si consiglia di eseguirli anche sull'hardware di destinazione per verificare l'intera toolchain di sviluppo.

Lo stesso diagramma della Figura 2 evidenzia le attività di verifica del modello: Test MIL, test PIL back-to-back e test SIL back-to-back.

Figura 5. Attività di verifica del modello specificate in IEC Certification Kit.

Prevenzione di funzionalità indesiderate

Per dimostrare che durante la generazione del codice non è stata aggiunta alcuna funzionalità indesiderata, misura la copertura dei test sia durante i test del modello che durante quelli del codice. La copertura del test viene generalmente eseguita utilizzando test consecutivi con Simulink Coverage™. La copertura viene utilizzata, secondo la norma ISO 26262, per valutare la completezza della verifica e fornire la prova che gli obiettivi dei test unitari sono stati raggiunti.

Secondo la norma ISO 26262, il codice con copertura mancante deve essere rivisto e giustificato. Quando si sviluppa utilizzando i blocchi Simulink, le giustificazioni possono essere collegate al modello, il che significa che le giustificazioni vengono conservate tra le esecuzioni di verifica. Questa opzione non è disponibile per le funzioni MATLAB esterne. Per giustificare la mancanza di copertura per una funzione MATLAB, aggiungi un filtro di copertura al codice e quindi collegalo al test cablaggio o al file di test in Simulink Test™. Il nostro consiglio è di collegare il file del filtro di copertura al file di test (Figura 6).

Uno screenshot del Test Browser che evidenzia il nome del file del filtro di copertura.

Figura 6. Filtro di copertura collegato al file di test.

LA BEST PRACTICE per il workflow di MATLAB

Tieni traccia delle giustificazioni della copertura mancante nel codice MATLAB esterno tramite un filtro di giustificazione collegato al file di test.

Analisi statica del codice

Come indicato nello standard ISO 26262, le analisi statiche includono attività come la ricerca nel testo del codice sorgente o nel modello, per modelli che corrispondano a guasti noti o per la conformità con le linee guida di modellazione o codifica. Le analisi del codice statico vengono eseguite sul codice generato (Figura 7).

Lo stesso diagramma della Figura 2 che evidenzia l'analisi del codice statico con Polyspace.

Figura 7. Attività di analisi del codice statico specificate in IEC Certification Kit.

Conformità MISRA C

Per valutare la conformità MISRA® C per il codice generato da MATLAB, utilizza uno strumento di analisi del codice statico come Polyspace Bug Finder™ per rilevare codice non conforme a MISRA C ed esaminare i risultati manualmente. Se il codice non conforme proviene da una funzione MATLAB integrata, hai due opzioni:

  • Sostituisci la funzione MATLAB integrata con una funzione riscritta
  • Scrivi una giustificazione per l'avviso MISRA C

La nostra raccomandazione è di sostituire la funzione, se possibile. Per garantire che la funzione sostituita non venga utilizzata da altri sviluppatori, implementa un controllo Model Advisor per le funzioni non consigliate.

LA BEST PRACTICE per il workflow di MATLAB

Quando esamini i report di analisi del codice statico, controlla se gli avvisi MISRA provengono dalle funzioni MATLAB integrate. Se queste funzioni possono essere sostituite, aggiungi un controllo Model Advisor che avvisa quando vengono utilizzate funzioni non consigliate. In caso contrario, giustifica il problema nel report di analisi del codice statico.

Documentazione

Nel safety case finale che fornisce la prova della conformità alla ISO 26262, è necessario documentare ogni fase del processo di verifica, dai requisiti alla verifica. La documentazione dovrebbe includere descrizioni progettuali delle funzionalità. La Figura 8 evidenzia alcune delle attività che devono essere incluse nella descrizione del progetto.

Lo stesso diagramma della Figura 2 che evidenzia la creazione dei requisiti, lo sviluppo dell'architettura e la modellazione.

Figura 8. Attività da includere nella documentazione di progettazione.

Descrizione della progettazione del sistema

Simulink Report Generator™ include un modello di report di progettazione del sistema predefinito. Questo modello è solitamente adeguato per documentare un componente sviluppato in Simulink, ma non per documentare le funzioni MATLAB esterne perché non sono incluse nella descrizione della progettazione del sistema predefinita. Consigliamo quindi di personalizzare il modello per includere il codice MATLAB esterno.

LA BEST PRACTICE per il workflow di MATLAB

Personalizza il modello Descrizione progettazione del sistema per includere codice MATLAB esterno.

Considerazioni SOTIF

In sistemi complessi come ADAS, una funzione può comportarsi come previsto ma causare comunque comportamenti pericolosi. Sotto la guida dello standard ISO 21448 sulla sicurezza delle funzionalità previste (SOTIF), è possibile risolvere questo problema integrando ulteriori attività di verifica e convalida nella progettazione Model-Based. Si consiglia di aggiungere test sulle condizioni operative randomizzate per ampliare i test e includere casi d'uso sconosciuti. Questi test casuali dovrebbero verificare il comportamento del modello di implementazione e del codice oggetto integrato rispetto ai requisiti di sistema.

IEC Certification Kit include il supporto per SOTIF. Quando si tratta di SOTIF, non ci sono grandi differenze tra i workflow Simulink e MATLAB. IEC Certification Kit aggiornato include informazioni sull'uso di Automated Driving Toolbox™ per i test del sistema.

Riepilogo

Nello sviluppo di software conforme a ISO, le differenze tra lo sviluppo completamente basato su Simulink e un workflow più incentrato MATLAB non sono significative. La differenza principale è la necessità di evitare l'uso di funzioni non consigliate. Esistono controlli specifici per identificare tali funzioni MATLAB nei controlli ISO 26262 in Simulink Check, garantendo che l'implementazione MATLAB generi codice adatto per applicazioni ad alta integrità. Le altre sfide nell'utilizzo di un workflow incentrato su MATLAB per ISO 26262 possono essere gestite con semplici soluzioni alternative come l'utilizzo di filtri di giustificazione o il collegamento di requisiti a più livelli nel modello.

[1] Le raccomandazioni contenute in questo articolo si basano su MATLAB R2024a. Se utilizzi una versione diversa, contatta il tuo rappresentante MathWorks per conoscere le sue funzionalità per l'utilizzo di MATLAB e Simulink per ISO 26262.

[2] Gli sviluppatori a volte scelgono MATLAB invece di Simulink perché ritengono che Simulink non supporti differenziazioni e unioni. Se lavori in Simulink, puoi utilizzare gli strumenti integrati per gestire differenziazioni e unioni. Se il tuo team utilizza un sistema di controllo della versione distribuito come Git, puoi eseguire un'unione a tre vie, in caso di conflitto.

[3] In MATLAB R2023a è stato rilasciato MATLAB Test™. MATLAB Test fornisce strumenti per sviluppare, eseguire, misurare e gestire test dinamici del codice MATLAB . Ciò offre agli sviluppatori la possibilità di rimanere nell'ambiente MATLAB durante lo sviluppo di software ad alta integrità. MATLAB Test ti consente di soddisfare le specifiche nelle applicazioni regolamentate e fa parte del IEC Certification Kit.

Notizie sull'Autore

Lars Rosqvist è un team leader senior responsabile dell'area Automotive presso MathWorks. Supporta i clienti che utilizzano la progettazione Model-Based e MATLAB in diversi settori. È certificato come Functional Safety Professional da TÜV SÜD e supporta i clienti con la certificazione ISO 26262 da diversi anni. Prima di entrare in MathWorks, Lars ha lavorato come sviluppatore di software nel settore automotive, sviluppando sistemi di controllo del clima. Lars ha conseguito il master in fisica applicata e ingegneria elettrica presso la University of Technology di Linköping, Svezia.

Pubblicato nel 2024