- Основа подхода: визуальное тестирование
- Тестирование аудио является самой сложной задачей
- XCode-боты на симуляторах
- Показатели
- Совет: не поворачивайте телефон, когда шазамите
- Какие требования к тестировщику в Shazam
- Инструменты и технологии в QA-отделе
Основа: визуальное тестирование
«В Shazam с самого начала принят целостный визуальный подход к QA-процессу. Но всегда были трудности с интеграцией UI-тестов в процесс. Приходилось писать код для закрытия всплывающих окон на JS и прочее. Самые простые тесты становились негодными после самых незначительных изменений. С появлением XCUITest стало, конечно, лучше, но не хватало взаимодействия между приложениями. Для этих целей приходилось использовать CFNotificationCenter, это казалось не совсем правильным, и мы на некоторое время отказались от этой идеи. Уже начиная с 9-й версии XCode мы можем запускать и завершать различные приложения, тестировать взаимодействия между ними, просто ссылаясь на их bundleIdentifier:
let app1 = XCUIApplication(bundleIdentifier: "com.Shazam.app1") app1.launchEnvironment = ["key":"value"] app1.launch() let app2 = XCUIApplication(bundleIdentifier: "com.Shazam.app2") app1.terminate() app2.launch()
Так запускаем несколько приложений. Просто добавляем все приложения в «Target Dependencies» в UITests, и XCode автоматически устанавливает их на девайс или симулятор.
В целом, в Shazam мы стараемся применять простые инструменты и простые подходы.
Тестирование аудио является самой сложной вещью в QA
Сказал Кент Бек, создатель таких методологий разработки ПО как экстремальное программирование и разработка через тестирование, один из подписантов Agile Manifesto. На воркшопах он упоминал тестирование звука как одну из наиболее сложных вещей в QA. Это, безусловно, так. Поэтому у нас разработаны специальные инструменты для тестирования всего что касается звука.
Но мы сейчас смотрим больше с точки зрения UI, то есть пользователя, а не технической. У нас есть специальное приложение для проигрывания тестовых мелодий, PlaybackApp, которому передаем аудио (для загрузки и воспроизведения аудиофайла используем внешний url).

// Starting a playback app and passing an audio file URL let playbackApplication = XCUIApplication(bundleIdentifier: "com.Shazam.TestPlaybackApp") playbackApplication.launchEnvironment =["url":playbackTest.urlString] playbackApplication.launch()
Теперь запускаем само приложение Shazam и начинаем тестирование.
// Starting a playback app and passing an audio file URL let shazam = XCUIApplication(bundleIdentifier: "com.Shazam.***") shazam.launch() let shazamButton = ... shazamButton.tap()
Далее ждем когда оно сработает, то есть появится нужное название (на самом деле мы делаем это немного по-другому, но это долго объяснять).
let artistLabel = shazam.staticTexts["Yusef Lateef"] let titleLabel = shazam.staticTexts["Love Theme From Spartacus"] // oh yes, we have a good taste here let exists = NSPredicate(format: "exists == 1") expectation(for: exists, evaluatedWith: artistLabel, handler: nil) expectation(for: exists, evaluatedWith: titleLabel, handler: nil) waitForExpectations(timeout: 10, handler: nil)
Ручной тест:
XCode-боты на симуляторах
Тестирование включает приближение к реальным условиям, особенно что касается шумов, мы добавляем шумы в тестовые треки. Запускаем множество тестов подряд и параллельно с помощью ботов XCode на различных симуляторах и девайсах, и репортим результаты в баг-трекер.
На основе собранных данных мы периодически оцениваем, какое сейчас среднее время определения мелодии в Shazam. И даже научились предсказывать проблемы с нашей важнейшей функцией раньше, чем они возникнут у пользователей.
У нас есть и другие важные виды UI-тестов, регулярно выполняемые — проверка наиболее важных user flow на разных девайсах, и на разных языках, но это выходит за рамки данной статьи.
Скорость и точность распознавания
Мы очень любим все измерять. Ключевыми показателями для нас являются «Время распознавания» и «Точность распознавания» (какой процент пользователей в итоге узнаЁт название мелодии, которую ищет). Мы постоянно отслеживаем эти показатели, так как они являются основными, ради них Shazam и существует.
Совет
Кроме того, мы измеряем эти показатели в зависимости от условий использования телефона. Когда-то мы, в порядке эксперимента, решили проверить, как пользователи держат свои телефоны до и после «шазаминга».
Как известно, iPhone поддерживает такие ориентации: портретную, перевернутую портретную, альбомную правую и т.д. Если вы когда-нибудь работали с ориентацией, то знаете, что она не очень точно срабатывает, и вот мы решили проверить. Провели небольшое тестирование — и сообщаем, что если постоянно держать телефон в портретной ориентации при пользовании Shazam, то это даст статистически значимый выигрыш в правильности и в скорости определения мелодии!
Поэтому, советуем не поворачивать телефон когда шазамите — потерпите, держите его неподвижно, подождите несколько секунд.»
Какие требования к тестировщикам в Shazam
Shazam принадлежит Apple, хотя команда пользуется большой внутренней автономией. Уровень требований к QA-инженерам соответствующий.
- Тестирование как ручное, так и автоматическое — с упором на очень квалифицированное ручное.
- В компании очень важны софт-скиллы, и список требований к QA Engineer начинается именно с них: нужно «быть креативным и уметь сотрудничать в команде».
- «Умение и желание делиться знаниями и получать знания»
- Далее, требуется большой опыт в тестировании мобильных приложений, имеется в виду ручное тестирование приложений для iOS; знакомство с последними трендами в этой сфере
- Доказанный опыт исследовательского тестирования, знание лучших практик.
- На собеседовании дотошно проверяют умение документировать use-кейсы и продуктовые features и превращать их в «ясные четкие тесты».
- Умение подготовить для руководства «быстрый доклад по тестовому покрытию».
- «Подтвердить умение решать проблемы креативно» прямо на собеседовании
- Умение самостоятельно приоритизировать свои задачи, исходя из «очень агрессивных» рабочих графиков, при этом «не теряя по дороге стандарты качества Apple»
- Умение справляться с изменениями, внесенными в последнюю минуту
- Умение работать по Agile и Lean
Рабочие инструменты и технологии в QA-департаменте Shazam:
- ОС: iOS / (и Android-инструменты конечно же)
- Client debugging tools: Xcode
- Баг-трекер: Jira
- Управление процессом: TestRail
- Прокси: Charles proxy
- Мониторинг: Splunk
- Source control: Git