Несколько вещей:
- При случайном тестировании вы не можете точно сказать, насколько хорош фрагмент кода, но вы можете сказать, насколько плохо это.
- Случайное тестирование лучше подходит для вещей, которые имеют случайные входные данные - ярким примером является то, что открыто для пользователей. Так, например, то, что случайно щелкает и печатает по всему вашему приложению (или ОС), является хорошим тестом общей надежности.
- Аналогичным образом, разработчики считаются пользователями. Так что то, что случайным образом собирает GUI из вашей среды, является еще одним хорошим кандидатом.
- Опять же, вы не найдете всех ошибок таким образом - что вы ищете, так это "если я сделаю миллион сумасшедших вещей, не приведет ли ЛЮБОЕ из них к повреждению системы?" Если нет, то вы можете почувствовать некоторую степень уверенности в том, что ваше приложение / OS / SDK / что угодно может выдержать воздействие нескольких дней для пользователей.
- ... Но, что более важно, если ваше тестовое приложение с произвольным верхом может вызвать сбой вашего приложения / OS / SDK примерно за 5 минут, это примерно столько времени, сколько у вас будет до первой пожарной тренировки, если вы попытаетесь отправить эту присоску.
Также обратите внимание: ВОСПРОИЗВОДИТЕЛЬНОСТЬ ВАЖНА В ТЕСТИРОВАНИИ! Следовательно, пусть ваш тестовый инструмент регистрирует случайное начальное число, которое он использовал, и имеет параметр для запуска с того же самого начального числа. Кроме того, он должен начинаться либо с известного «базового состояния» (, т. Е. , переустановить все с образа на сервере и начать с него), либо с некоторого восстанавливаемого базового состояния (, т. Е. , переустановите из этого образа, а затем измените его в соответствии с произвольным начальным числом, которое тестовый инструмент принимает в качестве параметра.)
Конечно, разработчики будут благодарны, если в инструменте есть такие приятные вещи, как «сохранять состояние каждые 20 000 событий» и «останавливаться прямо перед событием №» и «шаг вперед 1/10/100 событий». Это очень поможет им воспроизвести проблему, найти и исправить ее.
Как заметил кто-то другой, серверы - это еще одна вещь, которая предоставляется пользователям. Получите список из 1 000 000 URL-адресов (grep из журналов сервера), а затем отправьте их генератору случайных чисел.
И помните: «система проработала 24 часа случайного удара без ошибок» не означает, что она готова к отправке, она просто означает, что она достаточно стабильна, чтобы начать серьезное тестирование. Прежде чем он сможет это сделать, QA должно смело сказать: «Послушай, твоя POS не может даже длиться 24 часа при реальной симуляции случайного пользователя - ты исправишь это, я собираюсь потратить некоторое время на написание более качественных инструментов».
Ах, да, еще одна вещь: в дополнение к тестам "толкни его так быстро и тяжело, как ты можешь", у тебя есть возможность делать "точно то, что реальный пользователь [который, возможно, был ненормальный, или ребенок, привязывающий клавиатуру / мышь] будет делать. " То есть, если вы делаете случайные пользовательские события; выполняйте их со скоростью, которую может сделать очень быстрая машинистка или очень быстрый пользователь мыши (со случайными задержками, чтобы симулировать МЕДЛЕННОГО человека), в дополнение к «так быстро, как моя программа может выплевывать события». Это два ** очень разных * типа тестов, которые при обнаружении ошибок будут вызывать очень разные реакции.