Начните с риска и oracle, затем выберите самый дешёвый уровень теста, который даст полезное доказательство. Название инструмента само по себе не является стратегией.
Вопросы и ответы
9 подробных ответов
02Что такое IDOR и как проверить защиту от него?
middle
Короткий ответ: IDOR (Insecure Direct Object Reference) — уязвимость, когда сервер отдаёт чужой ресурс по прямому идентификатору из запроса, не проверяя, что пользователь имеет на него право (/orders/123 → /orders/124). Проверяют так: под пользователем A подставляют ID ресурса пользователя B и ждут 403/404, а не чужие данные.
Подробно:
- Суть — приложение доверяет ID из URL/тела/параметра и не сверяет владельца объекта с текущей сессией.
- Как тестировать — авторизуйтесь как A, перехватите его запрос, замените ID на принадлежащий B и повторите. Корректная реакция — отказ авторизации, а не 200 с чужими данными.
- Где искать — числовые ID заказов, документов, счетов; параметры
user_id,account; вложенные объекты (/users/B/cards).
GET /api/orders/124 HTTP/1.1
Host: shop.example.com
Cookie: session=<токен пользователя A>
→ ожидаем 403 Forbidden или 404 Not Found
→ уязвимо: 200 OK с заказом пользователя B
⚠️ Частая ошибка: проверять доступ только через интерфейс, где кнопки чужого заказа не видно. IDOR живёт на уровне API — проверять нужно прямыми запросами (Burp/Postman), а не кликами по UI.
03Какие проверки из OWASP Top 10 может сделать обычный тестировщик?
middle
Короткий ответ: Без пентеста и спецтулов тестировщик закрывает уровень awareness: ручные проверки на SQL-инъекцию, XSS, IDOR, отсутствие rate limiting и утечку чувствительных данных в URL/логах. Достаточно 1–2 конкретных проверок на пункт, а не полноценной эксплуатации.
Подробно:
- Инъекции — подставить
' OR 1=1--в поле логина/поиска и смотреть, не ломается ли запрос или не пускает ли внутрь. - XSS — ввести
<script>alert(1)</script>в текстовое поле и проверить, экранируется ли вывод. - Контроль доступа (IDOR) — подмена чужого ID в запросе.
- Аутентификация — брутфорс пароля без блокировки/капчи (нет rate limiting).
- Утечки — токены, пароли, номера карт в URL, логах, ответах API.
| Уязвимость | Быстрая ручная проверка |
|---|---|
| SQL-инъекция | ' OR 1=1-- в поле ввода |
| XSS | <script> в текстовых полях |
| IDOR | подмена ID чужого объекта |
| Нет rate limiting | 100 попыток входа подряд |
| Утечка данных | секреты в URL/логах/ответах |
⚠️ Частая ошибка: уходить в глубокую эксплуатацию и «взлом». От тестировщика ждут не отчёт пентестера, а системную привычку прогонять базовые проверки безопасности по каждой форме.
04Чем тестирование мобильного приложения отличается от веба?
middle
Короткий ответ: Мобилка добавляет целые классы рисков, которых нет в вебе: фрагментация устройств и версий ОС, нестабильная сеть, системные прерывания, работа в фоне и восстановление состояния, permissions, deep links, биометрия и расход батареи. «Экран меньше» — это лишь верхушка.
Подробно:
- Фрагментация — сотни моделей, разные разрешения, версии Android/iOS, вендорные прошивки.
- Сеть — офлайн, 2G, обрывы посреди операции, переключение Wi-Fi↔LTE.
- Прерывания — входящий звонок, будильник, пуш, сворачивание — приложение должно пережить и восстановиться.
- Жизненный цикл — фон/убийство процесса ОС, возврат к сохранённому состоянию.
- Платформенное — permissions, deep links, биометрия, установка/обновление из стора.
- Ресурсы — батарея, память, нагрев, производительность на слабых устройствах.
Веб: браузер + сеть + вёрстка
Мобилка: + фрагментация устройств/ОС
+ прерывания и фон
+ permissions / deep links / биометрия
+ батарея / память / нестабильная сеть
⚠️ Частая ошибка: свести различия к «адаптивной вёрстке под маленький экран». Интервьюер ждёт именно прерывания, жизненный цикл процесса и фрагментацию — это и есть мобильная специфика.
05Как протестировать, что push-уведомление приходит, когда приложение закрыто?
middle
Короткий ответ: Проверять нужно в двух слоях. Вручную: полностью убить приложение (не свернуть), триггернуть пуш, убедиться, что он появился в шторке ОС, и по тапу открыл нужный экран через deep-link из payload с холодным стартом. В автоматизации: замокать пуш-сервис или перехватить доставку тестовым харнессом.
Подробно:
- Убить, а не свернуть — смахнуть из списка задач, чтобы процесс реально завершился; фон и «закрыто» ведут себя по-разному.
- Доставка — уведомление отрисовалось в шторке с корректным заголовком/текстом/иконкой.
- Тап и переход — payload с deep link открывает конкретный экран, а не просто главную, при cold start.
- Автоматизация — мок FCM/APNs или тестовый эндпоинт, чтобы не зависеть от живого пуш-сервиса.
| Состояние приложения | Где видим пуш | Что проверяем |
|---|---|---|
| Закрыто (killed) | шторка ОС | доставка + cold start по тапу |
| Фон (background) | шторка ОС | переход на нужный экран |
| Открыто (foreground) | in-app баннер | обработка без шторки |
⚠️ Частая ошибка: проверить пуш только на открытом приложении. Именно закрытое состояние ловит баги доставки и холодного старта — интервьюер ждёт оба слоя (ручной + автоматизацию).
06Как тестировать deep links и восстановление приложения из фона?
middle
Короткий ответ: Deep link проверяют матрицей состояний приложения: холодный старт, уже запущено, свёрнуто в фон. Отдельно — восстановление: ОС убила процесс, а при возврате состояние (форма, корзина, позиция в списке) не потерялось; невалидная или устаревшая ссылка не роняет приложение, а ведёт на fallback.
Подробно:
- Состояние при переходе — открыть ссылку при закрытом, запущенном и свёрнутом приложении — экран должен быть один и тот же.
- Восстановление после kill — свернуть на середине заполнения формы, дать ОС выгрузить процесс, вернуться — введённые данные на месте.
- Битые ссылки — невалидный/просроченный/чужой deep link ведёт на понятный fallback, а не падает.
| Сценарий | Состояние приложения | Ожидание |
|---|---|---|
| Валидная ссылка | закрыто (cold) | открылся нужный экран |
| Валидная ссылка | в фоне | переход без перезапуска |
| Возврат из фона | процесс убит ОС | состояние восстановлено |
| Битая ссылка | любое | fallback, без краша |
⚠️ Частая ошибка: проверить только «ссылка открывает экран» на запущенном приложении. Баги прячутся в cold start и в восстановлении состояния после того, как ОС выгрузила процесс.
07Как проверить доступность веб-страницы для скринридеров?
middle
Короткий ответ: Проверка идёт по слоям: корректная семантика и ARIA-роли/лейблы в разметке, полная навигация с клавиатуры с логичным порядком фокуса и достаточным контрастом, затем автосканеры (axe-core/Lighthouse) в CI и обязательный ручной проход реальным скринридером (NVDA/VoiceOver).
Подробно:
- Разметка — семантические теги,
aria-label/aria-labelledbyтам, где нет видимого текста, роли для кастомных контролов, живые регионы для динамики. - Клавиатура — всё достижимо через
Tab, порядок фокуса совпадает с визуальным, фокус виден, нет ловушек фокуса. - Инструменты — axe-core/Lighthouse отлавливают часть проблем автоматически и встают в CI.
- Ручной проход — реальный скринридер: озвучиваются ли лейблы, состояния, ошибки формы.
Слой 1 · Разметка → ARIA-роли, лейблы, alt, заголовки
Слой 2 · Клавиатура → Tab-порядок, видимый фокус, без ловушек
Слой 3 · Тулы → axe-core / Lighthouse в CI
Слой 4 · Скринридер → NVDA / VoiceOver вручную
⚠️ Частая ошибка: свести доступность к «проставить alt у картинок». За это дожимают: скринридеру одинаково важны порядок фокуса, лейблы форм, озвучка ошибок и состояний — а не только alt-тексты.
08Что такое кроссбраузерное тестирование и как выбрать матрицу браузеров?
junior
Короткий ответ: Кроссбраузерное тестирование — проверка, что приложение одинаково работает в разных браузерах, версиях и ОС. Матрицу строят не «все браузеры», а от аналитики трафика аудитории и риска: полный перебор браузер × ОС × разрешение нереален, поэтому его сокращают приоритизацией и pairwise-подходом.
Подробно:
- Отталкиваться от данных — аналитика (GA и т.п.) показывает реальные доли браузеров/ОС/устройств у вашей аудитории.
- Приоритет по покрытию и риску — сначала комбинации, покрывающие большинство пользователей и критичные потоки (оплата, регистрация).
- Сокращать перебор — pairwise/попарное тестирование даёт покрытие пар без комбинаторного взрыва.
| Браузер | Доля аудитории | Приоритет |
|---|---|---|
| Chrome (Win) | 58% | P0 |
| Safari (iOS) | 22% | P0 |
| Chrome (Android) | 12% | P1 |
| Firefox / Edge | 6% | P2 |
| IE / прочие | 2% | не тестируем |
⚠️ Частая ошибка: не суметь обосновать выбор матрицы («проверил, где было под рукой»). Интервьюер ждёт логику «данные аудитории + риск + pairwise», а не список любимых браузеров.
09Как тестировать приложение при плохой сети: 2G, обрывы, офлайн?
middle
Короткий ответ: Сеть эмулируют троттлингом (DevTools, Charles/Proxyman) и авиарежимом посреди операции, а проверяют поведение: работают ли ретраи и таймауты, нет ли потери или дублирования данных при повторной отправке, и получает ли пользователь понятную ошибку вместо вечного спиннера.
Подробно:
- Эмуляция условий — throttling до 2G/Slow 3G, потеря пакетов, высокий latency; авиарежим прямо во время запроса.
- Устойчивость запроса — таймаут срабатывает, ретрай повторяет, идемпотентность не создаёт дубль заказа/платежа.
- Обратная связь — вместо бесконечного лоадера — сообщение об ошибке и кнопка «Повторить».
- Офлайн и синхронизация — данные копятся локально и корректно досылаются при возврате сети.
Момент флоу Что проверяем
─────────────────────────────────────────
до запроса → офлайн-баннер, блок кнопки
обрыв в запросе → таймаут + ретрай, нет дубля
медленный ответ → спиннер не вечный, есть отмена
возврат сети → отложенное досылается, синк ок
⚠️ Частая ошибка: тестировать только на идеальном офисном Wi-Fi. Самые злые баги — потеря/дублирование данных и зависший спиннер — воспроизводятся именно на обрыве посреди операции.
Источники
Источники и редакционная политика
Материалы RecallDeck сопоставлены с официальной документацией и открытыми публикациями компаний, когда первичный источник доступен. Мы не связаны с упомянутыми работодателями, не публикуем конфиденциальные задания и не продаём места в подборках. Формат найма может меняться — уточняйте его у рекрутера.
От чтения к воспроизведению
Отрепетируйте полный цикл интервью.
RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.