С распространением мобильных устройств и магазинов специальных приложений разработка их приобретает беспрецедентную популярность. В 2013 году Google Play Store загрузил более 50 миллиардов приложений.
- Несмотря на огромное множество доступных мобильных приложений, качество этих приложений сильно варьируется.
- К сожалению, конечные пользователи часто сталкиваются со сбоями и ошибками в работе некоторых приложений, установленных на их устройствах, что подтверждается отзывами пользователей.
Большинство жалоб пользователей связаны со сбоями в работе приложений.
Хотя разработчики мобильных приложений могут использовать широкий спектр инструментов тестирования для обнаружения таких сбоев еще до выпуска, многие из них могут появиться после установки конечным пользователям. Когда пользователи сообщают о дорожно-транспортном происшествии, разработчики должны быстро выявлять и устранять проблемы.
В противном случае из-за острой конкуренции они рискуют потерять клиентов из-за конкурирующих мобильных приложений и быть вытесненными с рынка. Любой разработчик программного обеспечения знает, что воспроизведение сбоев, с которыми сталкиваются пользователи в естественных условиях, является серьезной проблемой. Эта задача еще более усложняется в мобильных средах, которые страдают от фрагментации устройств и различных условий эксплуатации.
- В качестве примера можно привести недавние сбои в работе приложения Android Wikipedia, которое произошло при нажатии кнопки меню. Однако это падение произошло только на устройствах LG под управлением Android 4.1.
Таким образом, разработчикам приложений необходимо знать взаимодействие с пользователем и контекст выполнения (т.е. конфигурацию программного и аппаратного обеспечения), приводящее к сбоям, чтобы точно воспроизвести такие сбои.
Целью данного исследования является кардинальное повышение качества мобильных приложений путем дополнения существующих решений тестирования новыми механизмами мониторинга и отладки приложений после их внедрения в природе. В частности, мы ориентируемся на совместный подход, чтобы помочь разработчикам воспроизвести неудачи, основываясь на опыте, с которым сталкивается множество людей.
Мы выбрали платформу Android, потому что, согласно недавнему исследованию, 70% разработчиков мобильных приложений нацелены на Android.
Для оценки MOTIF мы случайным образом выбрали 5 приложений для Android, для которых пользователи сообщали о сбоях. Мы предварительно установили MOTIF и набор тестируемых приложений на 5 различных устройствах Android с различными характеристиками, чтобы имитировать разнообразную толпу.
Поскольку привлечение пользователей к участию в краудсорсинговых экспериментах является сложной задачей, мы разработали эксперимент как конкурс с премией в качестве стимула для пользователей. Цель конкурса заключалась в том, чтобы попытаться разбить 5 приложений-кандидатов как можно огромным количеством различных методов в течение 60 минут.
В итоге в конкурсе приняли участие 10 человек.
Каждый раз, когда появляется необработанное исключение, трассировка исключения и информация о состоянии передается на сервер MOTIF вместе с событиями взаимодействия с пользователем, произошедшими до аварии. Участники смогли сгенерировать 52 сбоя в пяти приложениях, распределенных по различным устройствам. Кроме того, для оценки воздействия шума мы используем прибор для тестирования обезьян для увеличения количества следов. Обезьяна генерирует псевдослучайные пользовательские события (т.е. клики, касания) в приложениях, запущенных на устройстве.
- Мы позволили Monkey отправить 50 000 событий в одно из приложений из нашего набора данных, и мы повторили этот процесс 50 раз.
Третий и заключительный этап MOTIF заключается в обновлении приложений во избежание сбоев. Мы случайным образом выбрали одно из багги-приложений, использовавшихся в эксперименте - приложение PocketTool. Для того чтобы автоматически избежать отмеченных сбоев, мы реализовали базовую стратегию исправления, которая заключается в вставке блоков try/catch в код приложения в различных подозрительных местах.
Эти местоположения являются различными методами, которые появляются в исключительных трассах. Стратегия исправления осуществляется путем переписывания байт-кода приложений и обновления приложений в устройствах. После установки исправленных приложений мы наблюдаем, перестают ли они посылать исключения, и узнаем, какие исправления позволяют избежать ошибок в каких контекстах.
В данном примере мы сгенерировали два патча, и только один из них фактически предотвращает аварию.
- Хотя этот подход фокусируется на ошибках, которые проявляются при авариях, концептуальные основы нашего подхода могут быть расширены для решения других типов проблем (например, ошибки в работе или энергопотреблении).
Например, мы также использовали возможности толпы разработчиков, чтобы помочь им определить еще одну важную проблему для качества мобильных приложений: регрессию производительности пользовательского интерфейса.