Роботы приходят к нам на помощь
Мы недавно обнаружили, что Bercut-ET при странных обстоятельствах зависает.
Прошерстив добрую половину кода, стало понятно, что багу нам так просто не найти. Мы убили кучу времени только на то, чтобы воспроизвести ошибку.
В итоге Евгений Горлов написал робота под кодовым названием «Crazy User». Этот робот имитирует нажатие кнопок в псевдослучайном порядке. Причём делает он это очень быстро, успевая «нажимать» около 100 кнопок в секунду. Через некоторое время прибор не выдерживает такой хаотической нагрузки и зависает.
Что же в этом полезного? А то, что последовательность нажатия кнопок псевдослучайна! Это значит, что зависание можно воспроизвести точно, поскольку последовательность всегда инициализируется одним числом и кнопки нажимаются всегда в строго определенной последовательности.
Сейчас гоняем «Crazy User’a», а о результатах — позже ;)
Чтобы иметь возможность проанализировать результат необходимо где-то сохранять последнее значение генератора ПСП при котором операция прошла успешно без зависаний. Но этого мало, т к нужно еще и повторить ту последовательность действий, а она может быть очень длинна, к примеру, несколько часов псевдослучайного перебора. Можно, впрочем, сохранять и все настройки на каждом шаге, но…
Я полагаю, что какой-либо анализ от Crazy User получить проблематично. Разве что тест — зависнет/ не зависнет.
Crazy User нашел багу, которую обычный пользователь никогда бы не нашел. Ну кому придет в голову настроить все интерфейсы в разные подсети, а затем пытаться tcp-клиентом 50-100 раз подряд открыть соединение с неким хостом… А именно эта ситуация приводила к утечке памяти, где-то по 150 байт на каждую попытку соединения.
на самом деле, обычному юзеру в голову запросто придёт настроить все интерфейсы на разные сети. другое дело, что сто раз коннектится в никуда ему, конечно же, надоест.