Fazendo trabalho de pesquisa e desenvolvimento, muitas vezes me pego escrevendo programas que têm um grande grau de aleatoriedade em seu comportamento. Por exemplo, quando trabalho em Programação Genética, geralmente escrevo programas que geram e executam código fonte aleatório arbitrário.
Um problema ao testar esse código é que os bugs geralmente são intermitentes e podem ser muito difíceis de reproduzir. Isso vai além de apenas definir uma semente aleatória com o mesmo valor e iniciar a execução novamente.
Por exemplo, o código pode ler uma mensagem do buffer de anel kernal e, em seguida, fazer saltos condicionais no conteúdo da mensagem. Naturalmente, o estado do buffer do anel será alterado quando mais tarde tentar reproduzir o problema.
Embora esse comportamento seja um recurso, ele pode disparar outro código de maneiras inesperadas e, portanto, frequentemente revela bugs que os testes de unidade (ou testadores humanos) não encontram.
Existem práticas recomendadas estabelecidas para testar sistemas desse tipo? Nesse caso, algumas referências seriam muito úteis. Caso contrário, outras sugestões são bem-vindas!