EMB 91

EMBEDDED 91 • FEBBRAIO • 2024 57 FUNCTIONAL SAFETY | SOFTWARE programma t32cast analizza i file sorgenti C/C++ e gene- ra un file di analisi del codice esteso (.eca) per ciascun file sorgente, che fornisce i dettagli sulle decisioni. Criterio n. 2: ogni decisione è composta da una o più con- dizioni (atomiche). Ogni condizione nel codice sorgente deve essere rappresentata da un’istruzione di salto con- dizionato o da una istruzione condizionale a livello di co- dice oggetto. Criterio n. 3: è richiesta una mappatura esatta delle deci- sioni nel codice sorgente rispetto ai salti/istruzioni condi- zionali nel codice oggetto. Criterio n. 4: partendo dai salti/istruzioni condizionali presenti nella traccia del flusso del programma registra- to, deve essere possibile osservare se una condizione del codice sorgente è stata valutata vera o falsa. Fin qui il concetto di base. Lo screenshot di figura 2 illu- stra quanto descritto finora. GLOSSARIO • Una CONDIZIONE (in grigio nella figura qui sopra) è un’espressione logica indivisibile e atomica. Può assumere solo i valori “vero” o “falso”. • Una DECISIONE (incorniciata da un rettan- golo azzurro) è un’espressione logica che può essere composta da diverse condizioni (ato- miche) separate da operatori logici come “o”, “e”, “non”. Può essere vera o falsa. Gap di osservabilità e loro motivazioni La pratica ha dimostrato che i criteri n. 2, n. 3 e n. 4 non sono sempre soddisfatti in ogni scenario di test. In queste situazioni Lauterbach parla di gap di osservabilità. Con questa espressione si vuole indicare che TRACE32 non è in grado di rilevare se una condizione è stata valutata come vera o falsa in un determinato punto della traccia del flusso del programma. In questo caso non sarà possi- bile visualizzare alcun risultato di copertura MC/DC per la corrispondente decisione. Qui di seguito sono riportate le cause più probabili dei gap di osservabilità e le contro- misure da adottare: 1. Nessun supporto dedicato da parte del compilatore Prima di tutto sarebbe opportuno scrivere un codice che fin da subito risulti adatto alle analisi di copertura. Deci- sioni nidificate o semplici in un contesto di assegnazione, come return a==b, possono causare gap di osservabilità. Infatti non si può garantire che ogni compilatore rappre- Fig. 1 – Visualizzazione del flusso di programma registrato Fig. 2 – Decisione nel codice sorgente e corrispondente mappatura rispetto ai salti condizionati

RkJQdWJsaXNoZXIy Mzg4NjYz