En faisant du travail de R&D, je me retrouve souvent à écrire des programmes qui ont un certain degré d'aléatoire dans leur comportement. Par exemple, lorsque je travaille en programmation génétique, j'écris souvent des programmes qui génèrent et exécutent du code source aléatoire arbitraire.
Un problème avec le test d'un tel code est que les bogues sont souvent intermittents et peuvent être très difficiles à reproduire. Cela va au-delà de la définition d'une valeur de départ aléatoire à la même valeur et du redémarrage de l'exécution.
Par exemple, le code peut lire un message à partir du tampon d'anneau kernal, puis effectuer des sauts conditionnels sur le contenu du message. Naturellement, l'état du tampon en anneau aura changé lorsque l'on tentera ultérieurement de reproduire le problème.
Même si ce comportement est une fonctionnalité, il peut déclencher d'autres codes de manière inattendue et révèle ainsi souvent des bogues que les tests unitaires (ou les testeurs humains) ne trouvent pas.
Existe-t-il des meilleures pratiques établies pour tester des systèmes de ce type? Si oui, certaines références seraient très utiles. Sinon, toute autre suggestion est la bienvenue!