EMB_83

EMBEDDED 83 • FEBBRAIO • 2022 59 nell’array puntato da s1, fino a che non sono stati scritti n caratteri in tutto. Ritorno 4 La funzione strncpy restituisce il valore di s1. Il punto chiave è che il Paragrafo 2 specifica che cosa non fa strncpy().Come abbiamo letto in precedenza: “ copia non più di n caratteri ”. Non viene mai richiesto che ven- gano copiati caratteri da s2 a s1. Il Paragrafo 3 stabilisce un’azione, cioè che s1 venga completata con caratteri nul- li. Un’implementazione letteralmente corretta secondo questa indicazione sarebbe scrivere n caratteri nulli in s1. Tuttavia non è questo ciò che la funzione dovrebbe fare. Il principio generale è che la funzione copi il maggior nu- mero di caratteri possibile da s2 a s1 fino a esaurimento della stringa s2 o di n. Ma, per definire requisiti, bisogna essere più precisi. Il primo passo nello sviluppo di test è estrarre un set di requisiti (REQ) da questa descrizione, considerando ciò che la funzione dovrebbe realmente fare. Nel dettaglio: REQ-copystring: Se s2 punta a una stringa con lunghezza ‘l2’ (definita da strlen()) inferiore a n, strncpy() deve copia- re l2 caratteri, in sequenza, dall’array s2 all’array s1. REQ-copyn: Se s2 non punta a una stringa con lunghezza inferiore a n, strncpy() deve copiare i primi n caratteri, in sequenza, dall’array s2 all’array s1. REQ-shorter: Se s2 punta a una stringa con lunghezza in- feriore a n, strncpy() deve aggiungere caratteri nulli (‘\0’) dopo i caratteri copiati nell’array s1 finché non sono stati scritti n caratteri in totale. REQ-nomore: strncpy() non deve scrivere nell’array di de- stinazione s1 oltre i primi n caratteri. REQ-nochange: strncpy() non deve modificare l’array s2. REQ-return: strncpy() deve restituire il valore di s1. Esempio di report di SuperGuard SOFTWARE LIBRARIES | SOFTWARE

RkJQdWJsaXNoZXIy Mzg4NjYz