Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 7.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.).

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:

Al tempo di esecuzione, se p è nullo, il programma termina con un messaggio del tipo:


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.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion