Как статистика приложений помогла устранить ошибку в моем мобильном приложении
9 марта 2023 г.Создание мобильных приложений — одна из самых интересных профессий, когда-либо существовавших в области разработки программного обеспечения. Внедрение новых функций при решении сложных проблем — процесс, который приносит удовлетворение и не может быть заменен. Кроме того, получение 5-звездочных отзывов от ваших пользователей вознаграждает вас и заставляет вас чувствовать себя героем дня.
Что ж, все вышесказанное остается верным до тех пор, пока в ваше приложение не закрадется маленькая, но грозная ошибка. Ваши глаза краснеют, шляпа для вечеринки теряется, а когда-то спокойное приложение Slack погружается в хаос. Я не большой поклонник фильмов ужасов, но я лучше посмотрю «Заклятие», чем проснусь от этого хаоса. Независимо от того, насколько вы хороши, судный день неизбежно настигнет вас, и начнется гонка по поиску и избавлению от ошибки.
Наращивание
Проработав три месяца, подающий надежды младший разработчик для Android берет на себя ответственность за команду из трех человек и делает все возможное, чтобы приложение, над которым он работает, соответствовало высоким стандартам. В сочетании с желанием учиться и подражать своим старшим, он считает себя неудержимым. До сих пор все его изменения были одобрены и объединены с незначительными проблемами. Если вы когда-либо были джуниором (конечно, были😀), такая плавная работа — редкость, и поэтому он заслужил доверие всех старших инженеров.
Днём в пятницу на доске всплывает крошечная, но высокоприоритетная задача, и, поскольку младший разработчик работал над небольшими изменениями, его переназначили на эту задачу с примечанием: «Чтобы сделать её, требуется исправление. к производству в конце дня».
Простая задача
Одной из важнейших концепций разработки программного обеспечения является хранение данных. Несмотря на то, что существует много эффективных способов сделать это, реляционные данные по-прежнему превалируют. В разработке для Android распространенным способом сохранения данных является использование SQLite, а room предоставляет прекрасную абстракцию для взаимодействия с .
Простая задача заключалась в переименовании столбца, а также в добавлении нового столбца, который мог бы содержать нулевое значение. Хотите верьте, хотите нет, но это было единственное, что нужно было сделать, и через несколько минут все было в порядке. Запрос PR задачи был объединен, как только он приземлился. Пока он шел к производству, все остальные готовились к веселым выходным.
Хаос
Сегодня был прохладный субботний день, и я решил, что сейчас самое время посмотреть мой любимый сериал "Черный список", когда мой телефон стал беспокойным, а уведомления начали сыпаться. Нельзя перепутать звуки уведомлений Slacks, которые становятся пугающими, когда вы получаете так много из них в быстрой последовательности. Это всегда похоже на призыв «СБОР МСТИТЕЛЕЙ».
«Пользователи не могут открыть приложение». Это сообщение вызвало хаос во всем мире. Поэтому я снова быстро установил приложение, и, к моему удивлению, приложение у меня работало нормально. Еще двое коллег сделали то же самое, и все было в порядке, пока другой коллега тоже не сообщил о проблеме.
Не знать, насколько глубока проблема, обычно хуже, чем не знать, в чем она заключается. Внезапно я подумал, что, возможно, это связано с конкретными устройствами, но было так много разных устройств, сообщающих о проблеме, что это не устранено. Это проблема, связанная с версией Android? — спросил я, пытаясь провести мозговой штурм, что происходит во время последних изменений кода. На это был дан ответ «Маловероятно», так как почти все версии Android сообщали о проблеме.
Глядя на журналы трафика и доступа к приложению, было совершенно ясно, что некоторые пользователи все еще могут использовать приложение, в то время как другие не могут его открыть. Быстрый запуск кода не помог выявить проблему, поскольку приложение работало должным образом.
Статистика приложения спасает положение
На 30-й минуте битвы я решил просмотреть всю информацию, которую мы получили, пытаясь найти болевые точки. За последние несколько часов у приложения уже было несколько сотен удалений. Проверив количество пользователей, которые обновились до последней версии, это было больше, чем общее количество удалений приложения. Само по себе это не было чем-то из ряда вон выходящим, но для приложения с несколькими тысячами пользователей цифры были довольно высокими, учитывая, что все эти действия произошли в течение короткого промежутка времени.
Быстрая беседа с бэкэнд-парнем прояснила ситуацию. У них было необычно большое количество запросов на вход от приложения, что было необычно, поскольку приложению требовалось, чтобы пользователь выполнил вход только один раз.
И тут мне в голову пришла мысль, а что, если текущие пользователи будут вынуждены переустанавливать приложение и, следовательно, должны снова войти в систему? Поскольку предыдущая версия приложения работала, это должно происходить с пользователями, которые только что обновили приложение. Я быстро пробежался по архивам релизов, установил предыдущую версию и обновил приложение. И ВУАЛЯ, неуловимая авария произошла у меня на глазах.
Глядя на журналы сбоев, все встало на свои места. И вы все можете догадаться, чья это была вина. Я забыл написать миграции для базы данных комнаты после добавления и переименования столбца. Кроме того, я не писал комплексных тестов для проверки этой ситуации. Ведь нельзя проверить то, чего не знаешь. Подробнее об этой проблеме можно прочитать здесь.
Влияние
Более половины от общего числа активных пользователей обновили приложение, и большинству пришлось переустановить приложение, чтобы получить доступ к службам приложения. Некоторые полностью удалили приложение и больше не возвращались. В Play Store также появилось несколько негативных отзывов и оценок в 1 звезду. В целом, это были разрушительные выходные, и пострадал не только я, но и бизнес.
В дальнейшем пороговое значение охвата тестами было увеличено с 60 % до полных 100 %, чтобы улавливать такие экстремальные сценарии, а позже пользователям начали выпускаться пакеты обновлений, чтобы гарантировать, что проблемы не затрагивают всех одновременно.
Лично это была моя первая серьезная ошибка программиста, и она до сих пор не дает мне покоя. К счастью, я работал с отличной командой, которая поддерживала меня весь период. Наконец, НЕ ПЕРЕДАВАЙТЕ КОД В ПРОДУКЦИЮ В ПЯТНИЦУ — это не просто мантра Twitter, но и потенциальное проклятие для любого инженера, который решит ее нарушить.
Оригинал