Corso di Programmazione I Asserzioni Testing di un

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