Università di Napoli Federico II - Facoltà di Ingegneria - Corso di Laurea in Ingegneria Informatica Corso di Programmazione I Asserzioni Testing di un programma Un programma che non è stato testato non funziona [Stroustrup – The C++ programming language] Per facilitare la localizzazione di un problema è desiderabile avere delle istruzioni di controllo che stampano un messaggio a video nel caso in cui si verifichi una condizione errata a tempo di esecuzione E' desiderabile che queste istruzioni di controllo non siano incluse nell'applicativo finale (aumentano le dimensioni dell'applicazione, ne rallentano l'esecuzione, etc.) 1 La macro assert() I linguaggi C e C++ offrono una soluzione migliore, costituita dalla macro assert() (definita in assert.h o cassert) Una asserzione è un'affermazione relativa ad una condizione che deve essere vera Se la condizione è vera, la assert() non fa nulla Altrimenti, viene generato un messaggio di errore e viene chiamata abort(), che termina il programma La macro assert() Il codice dell'esempio precedente può essere così riscritto assert(p); *p = 10; Al tempo di esecuzione, se p è nullo, il programma termina con un messaggio del tipo: assertion: assertion.c:9: int main(): Assertion `p' failed. Aborted programma modulo riga funzione 2 La macro assert() Come si fa a generare il programma escludendo le asserzioni? assert(p); *p = 10; E' sufficiente definire (nei moduli che includono le assert() o come opzione del compilatore) la macro NDEBUG La assert() è infatti definita in maniera diversa a seconda che la macro NDEBUG sia definita o meno Conclusioni La macro assert() • Consente di controllare il valore di una condizione usando una sola istruzione • Fornisce automaticamente un'indicazione dettagliata della posizione del controllo fallito • Può essere rimossa dal programma finale definendo una macro predefinita Tuttavia, la macro assert() termina il programma in caso di condizione non verificata • utile solo per il testing Per gestire le situazioni di errore, è preferibile usare il meccanismo delle eccezioni 3