Nel lavoro di ricerca e sviluppo, mi trovo spesso a scrivere programmi con un certo grado di casualità nel loro comportamento. Ad esempio, quando lavoro nella programmazione genetica, scrivo spesso programmi che generano ed eseguono codice sorgente casuale arbitrario.
Un problema con il test di tale codice è che i bug sono spesso intermittenti e possono essere molto difficili da riprodurre. Questo va oltre la semplice impostazione di un seme casuale sullo stesso valore e l'inizio dell'esecuzione.
Ad esempio, il codice potrebbe leggere un messaggio dal buffer dell'anello kernal e quindi eseguire salti condizionali sul contenuto del messaggio. Naturalmente, lo stato del buffer dell'anello sarà cambiato quando si tenta in seguito di riprodurre il problema.
Anche se questo comportamento è una caratteristica , può innescare altri codici in modi inaspettati, e quindi spesso rivela bug che i test unitari (o tester umani) non trovano.
Esistono buone pratiche stabilite per testare sistemi di questo tipo? In tal caso, alcuni riferimenti sarebbero molto utili. In caso contrario, qualsiasi altro suggerimento è il benvenuto!