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
 
 
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