Facendo un lavoro di R & D, mi trovo spesso a scrivere programmi con un certo grado di casualità nel loro comportamento. Ad esempio, quando lavoro in Genetic Programming, scrivo spesso programmi che generano ed eseguono codice sorgente casuale arbitrario.
Un problema con il test di questo codice è che i bug sono spesso intermittenti e possono essere molto difficili da riprodurre. Questo va oltre l'impostazione di un seme casuale sullo stesso valore e l'avvio 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 uno più tardi tenta di riprodurre il problema.
Anche se questo comportamento è una funzione può attivare altri codici in modi imprevisti, e quindi spesso rivela bug che i test di unità (o tester umani) non trovano.
Esistono best practice consolidate per testare sistemi di questo tipo? Se è così, alcuni riferimenti sarebbero molto utili. In caso contrario, qualsiasi altro suggerimento è benvenuto!