Выполняя исследования и разработки, я часто нахожу себя пишущим программы, которые имеют некоторую степень случайности в своем поведении. Например, когда я работаю в генетическом программировании, я часто пишу программы, которые генерируют и выполняют произвольный произвольный исходный код.
Проблема с тестированием такого кода заключается в том, что ошибки часто бывают прерывистыми и их очень трудно воспроизвести. Это выходит за рамки простого задания случайного начального числа на то же значение и начала выполнения заново.
Например, код может прочитать сообщение из кольцевого буфера ядра и затем выполнить условные переходы по содержимому сообщения. Естественно, состояние кольцевого буфера изменится, если позже попытаться воспроизвести проблему.
Несмотря на то, что такое поведение является функцией, оно может вызывать другой код неожиданным образом и, таким образом, часто выявляет ошибки, которых не обнаруживают юнит-тесты (или тестировщики).
Существуют ли лучшие практики для тестирования систем такого рода? Если это так, некоторые ссылки будут очень полезны. Если нет, любые другие предложения приветствуются!