Tracciare problemi come questi sono una grande opportunità per applicare le asserzioni. Un'asserzione è semplicemente un controllo su alcune condizioni booleane: "l'insieme dovrebbe essere non vuoto quando viene chiamato pop
". Molti linguaggi di programmazione forniscono supporto diretto alle asserzioni: quando abilitato, le asserzioni annullano il programma o sollevano eccezioni quando falliscono; quando disabilitato, le asserzioni non sono altro che commenti di fantasia.
Questo richiederà un po 'di scavo e reingegnerizzazione da parte tua. Dovrai sparpagliare le parti rilevanti delle asserzioni del programma che ritieni vere. Potresti essere sorpreso nel vedere che alcune condizioni stanno fallendo, quando hai pensato che fosse vero. Quando un programma fa qualcosa del genere, introduce una infezione [nel senso di Andreas Zeller], che potrebbe quindi portare a ulteriori infezioni, che potrebbero infine manifestarsi come difetti [bug].
Per ulteriori suggerimenti, leggi le note di lezione di Zeller dal suo bel libro, Perché i programmi falliscono: link
Ed ecco un link alla sua discussione delle asserzioni .
Infine, dato che il tuo client lo incontra regolarmente, questo primo punto di partenza è con loro! Buona fortuna!