Nello sviluppo di un ampio progetto di programmazione C++ con molti sviluppatori, abbiamo riscontrato problemi con l'uso inappropriato di assert() nel codice che risulta in una qualità scadente in cui l'affermazione si verifica effettivamente e il prodotto si blocca.Quando deve essere usato assert()?
La domanda è quali sono i buoni principi da applicare per utilizzare assert() in modo appropriato? Quando è appropriato usare un assert() e quando no? Esiste un elenco di criteri che ogni asserzione deve superare per essere legittimi? Come possiamo incoraggiare un uso corretto di assert()?
Come primo tentativo, direi che assert() deve essere utilizzato solo per documentare una condizione che è ritenuta impossibile da raggiungere e che dovrebbe essere identificata come un assert() fallimento in fase di esecuzione dove mai sorgere perché le ipotesi di programmazione vengono violate.
La gente può fare meglio di così? Qual è la tua esperienza con assert()?
Utilizzare affermare quando si sa che alcune condizioni devono prevalere affinché il codice sia considerato "buono". Se l'assert fallisce, per definizione il codice deve essere corretto. –
@Robert: concordato +1, ma è necessario prendere in considerazione la quantità di lavoro che l'utente perderà se l'attivazione di asserzione interrompe il programma. È fastidioso quando un browser perde un insieme di schede aperte, ma di solito non è un disastro; è un disastro se un word processor perde un giorno di lavoro a causa di un'affermazione. Le parti difficili sono (a) capire se è sicuro fare qualsiasi cosa e (b) mantenere il sistema in uno stato in cui può essere recuperato se qualcosa va storto. –
Chi vive un'intera giornata senza salvare il proprio lavoro ottiene ciò che merita quando si verifica un'affermazione. –