EMB_83

EMBEDDED 83 • FEBBRAIO • 2022 60 Il requisito REQ-nochange discende dalla dichiarazio- ne di s2 come array costante, ma questo non garantisce che un’implementazione di strncpy() non scriva su s2. Per ogni requisito viene quindi sviluppata una specifi- ca di test, che definisce come un test verifica che il re- quisito sia vero. Una singola specifica di test si traduce solitamente in diversi casi di test che coprono le aree di input e output della funzione. I casi di test vengono implementati dal test. La specifica di test collega il re- quisito ai test. Adesempio, le specifichedi test per i requisitiREQ-copy- string e REQ-nomore sono le seguenti: Specifica di test per REQ-copystring: Chiama la funzio- ne strncpy() con diversi valori per il parametro n (incluso n==0) uguale alla e maggiore della lunghezza della strin- ga di origine. Verificare che la stringa di origine venga copiata nell’array di destinazione fino al carattere nullo di terminazione. Specifica di test per REQ-nomore: Per tutti i casi di test, verificare che il carattere con indice n nell’array di desti- nazione s1 non sia modificato. Se coincide con il test, ve- rificare anche che nessun carattere oltre n sia modificato. Qui, la specifica di test REQ-nomore viene implemen- tata nello stesso file di test come gli altri casi di test per strncpy().Poiché il requisito deve reggere incondiziona- tamente per ogni chiamata a strncpy(), invece di creare nuovi test per questa specifica di test, essa viene imple- mentata semplicemente aggiungendo un controllo ulte- riore su ogni test di caso per gli altri requisiti, invece di creare nuovi test. Gestire file di intestazione e funzioni come macro Non tutte le funzioni nella Libreria Standard del C ven- gono implementate solo come codici binari precompila- ti. Molte dipendono anche dalle informazioni contenute nei file di intestazione sorgente. Questi definiscono tipi, variabili globali e macro, e fanno parte della libreria tan- to quanto le funzioni (precompilate) della libreria. Molte funzioni vengono implementate sia come funzioni reali, sia come macro. Ai fini della velocità e dell’efficienza, è abitudine comune utilizzare le implementazioni macro. SuperGuard testa entrambe. Diversamente dai codici binari corrispondenti, funzioni come le macro non sono precompilate, ma generate dal compilatore del SDK con il codice sorgente dell’appli- cazione. Pertanto, è vitale che, insieme ad altri contenu- ti del file di intestazione, esse vengano verificate per il caso d’uso specifico di una data applicazione. Analisi della copertura del codice In SuperGuard, particolare attenzione viene prestata alla copertura del codice ottenuta per un’implementazio- ne open-source matura e popolare della Libreria Stan- dard del C, per soddisfare il requisito ASIL D del com- ma 12.4.2.3. Per molte funzioni presenti in quella libreria, SuperGuard raggiunge una copertura del 100%, oltre a un’elevata copertura MC/DC. Ogni implementazione di libreria è diversa, ma tutte ge- stiscono un’analisi dei casi simile. L’elevata copertura del codice di Standard Library offre benefici per tutte le im- plementazioni della Libreria Standard del C. Casi anomali I test di SuperGuard gestiscono i casi anomali in due modi. Il primo riguarda un comportamento definito de- rivante da un input anomalo; ad esempio, passare un nu- mero negativo alla funzione sqrt() deve restituire il valo- re NaN (presumendo IEC 60559 aritmetica). Per quanto anomalo, il comportamento della funzione è pienamente definito e può essere verificato. Il secondo modo riguarda i requisiti che il compilatore può verificare. Ad esempio, se una funzione deve avere un tipo di ritorno vuoto, un test può provare a utilizzare il valore di ritorno attendendosi che generi un errore del compilatore. SuperGuard definisce queste prove X-Test. Gli X-Test VENGONOSUPERATI se il compilatore rileva un errore in compilazione, mentre FALLISCONO in caso contrario. Gli X-Test non vengono mai eseguiti. Gli sviluppatori software non devono dare per scontato che strumenti e componenti di terze parti e/o standard (COTS), come compilatori e librerie standard, siano privi di errori, o che la prequalificazione dia questa certezza. SuperGuard offre la tracciabilità necessaria per ricolle- gare i risultati dei test basati su requisiti alla specifica della Libreria Standard del C. La piena tracciabilità vie- ne garantita scomponendo le specifiche funzionali della Libreria Standard ISO C in requisiti chiaramente defi- niti, sviluppando specifiche di test idonee e implemen- tandole secondo lo standard richiesto. Inoltre, consente agli sviluppatori di eseguire test nello stesso ambiente di sviluppo, alle stesse condizioni di caso d’uso e sullo stes- so hardware di destinazione utilizzato nella loro applica- zione, con una copertura del codice strutturale vicina al 100%. Generando un report di qualificazione completo ritagliato sulle esigenze degli enti di certificazione, Su- perGuard aiuta a dimostrare l’integrità dei componenti della libreria utilizzati in applicazioni safety-critical. SOFTWARE | SOFTWARE LIBRARIES

RkJQdWJsaXNoZXIy Mzg4NjYz