Приведи примеры кейсов прерывания
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Примеры кейсов прерывания (Interruption Test Cases) в тестировании программного обеспечения
Прерывание (Interruption) в контексте QA — это ситуация, когда выполнение основного сценария работы приложения или системы внезапно прерывается внешним событием. Тестирование на устойчивость к прерываниям — критически важная часть проверки отказоустойчивости, стабильности и пользовательского опыта. Цель — убедиться, что приложение корректно обрабатывает эти события: либо сохраняет состояние и позволяет продолжить, либо безопасно завершает операцию, не теряя данные и не вызывая критических сбоев.
Ниже приведены категории и конкретные примеры кейсов для различных типов приложений.
1. Прерывания, связанные с оборудованием и ОС (для мобильных и десктоп-приложений)
Мобильные приложения:
- Входящий/исходящий звонок: Проверка поведения приложения во время совершения или получения звонка.
* **Кейс:** Пользователь заполняет длинную форму в приложении. В это время поступает входящий звонок. После разговора приложение должно либо:
* Сохранить заполненные данные в форме и отобразить их после возврата.
* Предупредить о возможной потере данных перед переходом на звонок.
- Уведомления (SMS, Push, других приложений): Появление уведомления поверх активного приложения.
* **Кейс:** Во время онлайн-видеоконференции приходит важное SMS. Тап по уведомлению открывает мессенджер. После возврата в приложение конференция должна продолжиться без разрыва соединения, либо должно быть предложено переподключиться.
- Изменение ориентации устройства: Поворот экрана.
* **Кейс:** Пользователь просматривает ленту новостей в социальной сети. Поворот устройства с портретной на альбомную ориентацию (и обратно) не должен приводить к сбросу позиции прокрутки, потере введенного текста в поле комментария или крашу.
- Потеря/восстановление подключения к сети: Самый частый и важный кейс.
* **Кейс:** Приложение загружает большой файл (например, обновление). В середине процесса Wi-Fi отключается.
```gherkin
Feature: Устойчивость к потере сети при загрузке
Scenario: Загрузка файла прерывается потерей соединения
Given Пользователь начал загрузку файла размером 100 МБ
When Соединение с интернетом пропадает на 30 секунд
Then Приложение отображает сообщение "Соединение потеряно"
And Загрузка приостанавливается (таймер останавливается)
When Соединение восстанавливается
Then Приложение автоматически возобновляет загрузку с точки останова (если поддерживается докачка)
Or Запрос на повторную загрузку отображается пользователю
```
- Разрядка батареи / переход в режим энергосбережения.
- Подключение/отключение периферии (наушники, зарядное устройство, внешний дисплей).
Десктоп-приложения:
- Переход ПК в спящий режим/гибернацию и выход из него.
- Отключение/переподключение к сети.
- Внезапное извлечение USB-носителя, если приложение с ним работает.
- Срабатывание системного брандмауэра/антивируса, блокирующего доступ приложения к сети или файлам.
2. Прерывания, вызванные другими приложениями или системными событиями
- Запуск другого ресурсоемкого приложения, вызывающего нехватку памяти (Out of Memory).
* **Кейс:** Графический редактор обрабатывает тяжелое изображение. Пользователь запускает видеоигру. Система выгружает фоновые процессы. Приложение редактора должно либо сохранить временный файл и корректно завершиться, либо, при возврате к нему, восстановить сессию.
- Всплывающие системные диалоги (обновление ОС, запрос разрешений UAC в Windows).
- Переключение на другое приложение (Alt+Tab / App Switcher) и возврат.
- Блокировка устройства (экран блокировки на мобильном или ПК).
3. Прерывания в веб-приложениях
- Потеря и восстановление сетевого соединения во время AJAX-запроса или работы с WebSocket.
- Закрытие/обновление вкладки браузера (event
beforeunload).
* **Кейс:** Пользователь редактирует документ в веб-интерфейсе и случайно закрывает вкладку. Браузер должен показать стандартное предупреждение "Вы уверены, что хотите уйти?" или приложение должно автоматически сохранить черновик.
```javascript
// Пример кода, который может быть протестирован
window.addEventListener('beforeunload', function (event) {
if (formDataHasUnsavedChanges()) {
event.preventDefault();
event.returnValue = 'У вас есть несохраненные изменения. Вы уверены, что хотите уйти?';
}
});
```
- Нажатие кнопок "Назад"/"Вперед" в браузере во время выполнения операции.
- Истечение срока жизни сессии (Session Timeout) во время активной работы пользователя.
* **Кейс:** Пользователь готовится отправить форму, но сессия истекает из-за бездействия. После отправки система должна перенаправить на страницу логина, а после аутентификации — восстановить контекст (например, вернуть к заполненной форме).
4. Прерывания, специфичные для бизнес-логики
- Изменение данных извне во время их редактирования (конфликт изменений).
* **Кейс (система бронирования):** Агент A и агент B одновременно смотрят один и тот же номер в отеле. Агент A начинает процесс бронирования. В это время агент B (через API или другой интерфейс) помечает этот номер как "недоступный". Система агента A должна получить актуальный статус и уведомить его, что бронирование невозможно, до завершения транзакции.
- Отзыв/изменение прав доступа пользователя в реальном времени.
- Внеплановое обслуживание или перезагрузка серверной части (бэкенда) во время активности на клиенте.
Общий шаблон тест-кейса на прерывание
- Предусловие: Приложение находится в определенном, часто "небезопасном", состоянии (процесс выполнения, ввод данных, загрузка).
- Действие: Имитация события-прерывания (например, отключение сети, входящий звонок, системный диалог).
- Ожидаемый результат (Postconditions):
* **Безопасность:** Приложение не падает, не зависает окончательно.
* **Управление состоянием:** Данные либо сохранены, либо утеряны предсказуемо (с уведомлением пользователя).
* **Восстановление:** После устранения причины прерывания (возврат в приложение, восстановление сети) поведение приложения предсказуемо: продолжает работу, предлагает повторить или выходит в безопасное состояние.
* **Логирование:** Критическая ошибка или событие прерывания залогированы для последующего анализа.
Важность такого тестирования невозможно переоценить, так как в реальной жизни прерывания происходят постоянно. Устойчивое к ним приложение значительно выигрывает в надежности и пользовательском доверии.