Что такое Ad Hoc тестирование?
Ad hoc тестирование — незапланированное, неформальное тестирование, движимое интуицией, опытом и знанием приложения. Нет заранее написанных тест-кейсов, формальной документации и структурированного подхода.
Термин «ad hoc» буквально означает «для этого случая» — тесты придумываются на месте для текущей ситуации.
Когда Ad Hoc тестирование приносит пользу
Быстрые проверки. Разработчик заканчивает фикс и просит QA «быстро глянуть.»
Заполнение пробелов. После выполнения всех скриптовых тест-кейсов вы тратите 15 минут на области, не покрытые формальными тестами.
Исследование новичком. Новый сотрудник тестирует приложение без обучения — его свежий взгляд часто обнаруживает проблемы юзабилити.
Smoke после деплоя. После деплоя на staging быстро проверяете критичные потоки.
Ограничения Ad Hoc тестирования
- Не повторяемо — Без документации нельзя повторить те же тесты
- Не измеримо — Нельзя отчитаться о покрытии или прогрессе
- Зависит от навыка — Опытные тестировщики находят баги; неопытные тратят время впустую
- Не прослеживаемо — Нельзя доказать, что было протестировано
- Баги сложнее отчитывать — Без задокументированных шагов воспроизведение затруднено
Что такое Monkey-тестирование?
Monkey-тестирование заключается в подаче случайных, неожиданных или невалидных данных в приложение для проверки на краши и неожиданное поведение. Название происходит от идеи обезьяны, случайно нажимающей клавиши на клавиатуре.
Dumb Monkey
Dumb monkey генерирует полностью случайные события без понимания приложения: случайные нажатия, ввод с клавиатуры, свайпы, навигация.
Сильная сторона: Находит краши от совершенно неожиданных комбинаций ввода.
Слабая сторона: Крайне неэффективен — большинство случайных действий бессмысленны.
Smart Monkey
Smart monkey обладает знанием приложения: знает форматы валидных/невалидных данных, понимает навигацию, может имитировать реалистичное поведение с случайными ошибками.
Сильная сторона: Намного эффективнее. Проникает глубже в приложение.
Слабая сторона: Требует усилий по настройке.
Сравнение
| Аспект | Dumb Monkey | Smart Monkey |
|---|---|---|
| Усилия на настройку | Нет | Умеренные — высокие |
| Знание приложения | Нет | Частичное/полное |
| Эффективность | Очень низкая | Умеренная — высокая |
| Глубина | Поверхностная | Глубокая |
| Типы багов | Краши от случайного ввода | Логические ошибки, проблемы состояния |
| Воспроизводимость | Очень сложная | Лучше (логируемые пути) |
Инструменты Monkey-тестирования
Android Monkey (встроенный)
# Отправить 10,000 случайных событий
adb shell monkey -p com.your.app -v 10000
# С задержкой и типами событий
adb shell monkey -p com.your.app \
--throttle 300 \
--pct-touch 40 \
--pct-motion 25 \
--pct-nav 15 \
-v -v 50000
Gremlins.js (веб-приложения)
// Базовое использование
gremlins.createHorde().unleash();
// Настраиваемая конфигурация
gremlins.createHorde()
.gremlin(gremlins.species.clicker())
.gremlin(gremlins.species.formFiller())
.gremlin(gremlins.species.scroller())
.gremlin(gremlins.species.typer())
.unleash();
Другие инструменты
| Инструмент | Платформа | Тип |
|---|---|---|
| Android Monkey | Android | Dumb monkey |
| Gremlins.js | Web | Dumb/настраиваемый |
| Netflix Chaos Monkey | Инфраструктура | Случайное внедрение сбоев |
| AFL | Любая (бинарный ввод) | Smart fuzzer |
| Burp Suite Intruder | Web API | Smart monkey для безопасности |
Monkey Testing vs. Fuzz Testing
Monkey-тестирование генерирует случайные пользовательские взаимодействия (клики, тапы, навигация). Имитирует хаотичного пользователя.
Fuzz-тестирование (фаззинг) генерирует случайные или повреждённые входные данные (форматы файлов, сетевые пакеты, API payload). Нацелено на обработку данных.
Оба ищут краши и уязвимости через неожиданные данные, но работают на разных уровнях.
Упражнение: Выполните Monkey-тестирование и задокументируйте результаты
Часть 1: Ручное Monkey-тестирование
Выберите любое веб-приложение. Проведите 15 минут «человеческого обезьяньего тестирования»:
- Быстро кликайте по случайным элементам
- Вводите случайный текст (спецсимволы, эмодзи, очень длинные строки) во все поля
- Используйте кнопки назад/вперёд в неожиданные моменты
- Отправляйте формы с пустыми обязательными полями
- Откройте несколько вкладок и взаимодействуйте одновременно
- Быстро изменяйте размер окна браузера
Задокументируйте все краши, ошибки и неожиданное поведение.
Часть 2: Инструментальное тестирование
В тестовом окружении запустите Gremlins.js на 5 минут. Задокументируйте: были ли краши, ошибки в консоли, визуальные глюки?
Часть 3: Анализ
- Какие типы багов нашло monkey-тестирование, которые структурированное тестирование, скорее всего, пропустило бы?
- В чём сложности воспроизведения найденных багов?
- В каком контексте проекта вы бы рекомендовали включить monkey-тестирование в стратегию?
Подсказка
Для Части 1 сосредоточьтесь на быстрых, неожиданных взаимодействиях. Для Части 3 учитывайте соотношение затрат: monkey-тестирование дёшево в запуске, но дорого в расследовании.Решение
Часть 1: Типичные находки
- Ошибки JavaScript в консоли при кликах во время переходов
- Наложение элементов UI при быстром изменении размера окна
- Обход валидации форм при быстрой отправке
- Устаревшее состояние при работе в нескольких вкладках
- Сломанная вёрстка при очень длинных строках ввода
Часть 2: Gremlins.js обычно находит: ошибки консоли, зависшие модальные окна, активацию валидаций от мусорных данных.
Часть 3:
- Race conditions от быстрых взаимодействий, краши от неожиданных комбинаций ввода, баги состояния от необычной навигации
- Точная последовательность действий неизвестна. Решение: использовать DevTools для записи ошибок и действий
- Мобильные приложения: Android Monkey в CI. Consumer-facing веб: перед продакшн-релизами. Всегда как дополнение, никогда как основной метод
Ключевые выводы
- Ad hoc тестирование — незапланированное, интуитивное тестирование, полезное для быстрых проверок, но не прослеживаемое и не повторяемое
- Monkey-тестирование генерирует случайные данные для поиска крашей и необработанных исключений
- Dumb monkey генерирует чисто случайные события; smart monkey понимает приложение
- Инструменты Android Monkey и Gremlins.js автоматизируют генерацию случайного ввода
- Главная проблема — воспроизводимость: случайные данные затрудняют написание шагов воспроизведения
- Monkey-тестирование наиболее ценно как дополнение к структурированному тестированию
- Fuzz-тестирование — «родственник» monkey-тестирования, ориентированный на форматы данных и API