Какие сценарии стоит учесть при тестировании кэша в мобильных приложениях?
Что проверяют
Понимаете ли вы, откуда в мобильном приложении берётся кэш и в каких состояниях устройства он ломается. Хороший кандидат сразу уточняет, что именно кэшируется: HTTP-ответы, картинки, данные в локальной базе. Следом обычно просят рассказать, как проверить, что после выхода из аккаунта не осталось чужих данных.
Как отвечать
Сгруппируйте сценарии по состояниям, так ответ не превратится в список из двадцати пунктов:
- пустой кэш: первый запуск, переустановка, очистка. На Android в настройках есть отдельные «Очистить кэш» и «Очистить хранилище», а
adb shell pm clear <package>сбрасывает все данные; - актуальность: данные поменялись на сервере, истёк TTL, сервер ответил
304 Not ModifiedпоETag. Пользователь видит новое и не видит устаревшее дольше допустимого; - офлайн и плохая сеть: авиарежим с заполненным кэшем, обрыв посреди загрузки, медленный канал. Приложение показывает сохранённое и честно сообщает, что оно не свежее;
- пользователь и безопасность: выход и вход под другим аккаунтом, персональные данные и токены, которые попадают на диск в открытом виде;
- жизненный цикл: убийство процесса, уход в фон, обновление версии с изменённой моделью данных и миграция локальной базы;
- ресурсы: мало места на устройстве. iOS вправе чистить
Library/Caches, Android чиститcacheDir, и приложение не должно падать от внезапно пропавших файлов; - время: перевод часов на устройстве, если TTL считается по локальному времени.
Инструменты: Charles или Proxyman для подмены ответов и заголовков кэширования, Network Link Conditioner на iOS, настройки сети эмулятора Android, Device File Explorer в Android Studio и выгрузка контейнера приложения из Xcode, чтобы увидеть, что реально лежит на диске.
Где спотыкаются
Проверяют только «второй раз загрузилось быстрее». Скорость ничего не говорит о корректности данных.
Забывают про смену аккаунта. Лента или корзина прошлого пользователя после нового входа это дефект безопасности, а не косметика.
Не отделяют кэш от постоянного хранения: черновик, который пользователь писал полчаса, не должен лежать там, откуда система удалит его при нехватке места.