Россия: “Яндекс.Навигатор” для Android постоянно держал микрофон включённым и записывал весь окружающий звук в локальный файл

66

Позавчера компания “Яндекс” обновила свое мобильное приложение для автомобильной навигации “Яндекс.Навигатор”, добавив в него функцию голосовой активации. По задумке разработчиков, таким образом водители могли управлять приложением с помощью голоса, не отвлекаясь от дороги. Однако “что-то пошло не так” и “Яндекс.Навигатор” держал микрофон включенным постоянно, записывая все окружающие звуки в память смартфона. Показательно, что разработчики довольно быстро обнаружили и исправили ошибку и даже успели принести свои извинения пользователям, назвав ситуацию “факапом”. Подробный разбор проблемы представители компании озвучили в официальном блоге Яндекса на HabrHabr:


“Факапы случаются и у больших компаний, с тестировщиками и строгими релизными процедурами. В понедельник такой факап случился у нас – мы выкатили версию Яндекс.Навигатора под Андроид с неприятной ошибкой: приложение постоянно держало включённым микрофон и записывало весь звук в локальный файл. В результате быстро забивалось место на устройстве, да и просто это выглядело подозрительно, хотя содержимое файла по сети никуда и никогда не передавалось.

Сейчас ошибка уже исправлена, в сторе версия, которая её не содержит. Мы обнаружили проблему довольно быстро благодаря нашим пользователям и уже через несколько часов после релиза остановили раздачу обновления и оперативно опубликовали исправление. Как обычно, причиной стало сочетание технологических факторов и дискоммуникации между людьми.” Если коротко, то в продакшн попал ошибочный код, который планировалось использовать исключительно для внутреннего тестирования.

“У отладочной версии были свои особенности – она писала лог ошибок, и это было еще одним небольшим её плюсом, так как позволяло собирать информацию о сбоях на первом запуске. Большое количество тестовых данных критически важно для достижения максимального качества. Например, нужно понимать, когда библиотека не смогла распознать команду, иметь логи для звука.

Ещё возможность такой записи делалась для того, чтобы сотрудники компании могли собирать тестовое окружение в реальных условиях, чтобы обучить на них голосовые технологии. Поэтому в отладочной версии звук записывался на sd-карту. Эта логика включалась define’ами в коде, и в релизной сборке была отключена. Она должна была быть отключена и в дебажной, но нет – был пропущен заголовочный файл, в котором этот макрос определялся.”

Разработчики не заметили небольшое изменение размера приложения во время тестирования, так как при каждом вызове приложения из фона файл переписывался заново, что не позволяло семплу вырасти до заметных значений. Но в процессе движения, когда сессия Навигатора не прекращается достаточно длительное время, семплы могли вырастать до нескольких гигабайт. И пользователи заметили это уже через несколько часов после запуска.

В результате небольших по отдельности ошибок и допущений разработчики получили серьёзную проблему, из-за которой некоторые люди, потеряли доверие к Навигатору и даже в целом к Яндексу. Команда принесла извинения всем, кого эта проблема затронула, разобрала ситуацию в подробностях и составила план действий, которые нужны, чтобы похожее никогда больше не повторилось. (Яндекс/NovostIT)