Haciendo trabajo de I + D, a menudo me encuentro escribiendo programas que tienen un alto grado de aleatoriedad en su comportamiento. Por ejemplo, cuando trabajo en programación genética, a menudo escribo programas que generan y ejecutan código fuente aleatorio arbitrario.
Un problema al probar dicho código es que los errores a menudo son intermitentes y pueden ser muy difíciles de reproducir. Esto va más allá de simplemente establecer una semilla aleatoria en el mismo valor y comenzar de nuevo la ejecución.
Por ejemplo, el código puede leer un mensaje del búfer de anillo kernal y luego realizar saltos condicionales en el contenido del mensaje. Naturalmente, el estado del búfer en anillo habrá cambiado cuando uno más tarde intente reproducir el problema.
Aunque este comportamiento es una característica , puede desencadenar otro código de maneras inesperadas y, por lo tanto, a menudo revela errores que las pruebas unitarias (o probadores humanos) no encuentran.
¿Existen mejores prácticas establecidas para probar sistemas de este tipo? Si es así, algunas referencias serían muy útiles. Si no, cualquier otra sugerencia es bienvenida.