Какие мобильные операционные системы вы знаете?

«Какие мобильные операционные системы вы знаете?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные современные мобильные ОС для тестирования:

Доминирующие платформы:

  1. Android (Google)
    • Основа: Модифицированное ядро Linux, открытый исходный код (AOSP).
    • Особенности для QA: Множество производителей, фрагментация версий и устройств, кастомные оболочки (One UI, MIUI). Требует тестирования на разных разрешениях, версиях ОС и аппаратных конфигурациях.
  2. iOS (Apple)
    • Основа: Darwin (XNU), закрытая экосистема.
    • Особенности для QA: Ограниченный набор устройств, строгие гайдлайны App Store, высокая степень оптимизации. Тестирование преимущественно на симуляторах и реальных устройствах.

Другие значимые ОС:

  1. HarmonyOS (Huawei)
    • Мульти-устройственная ОС, предназначенная для замены Android в экосистеме Huawei, с акцентом на IoT.
  2. KaiOS
    • Легкая ОС на базе Firefox OS для кнопочных телефонов (feature phones) с поддержкой 4G, WhatsApp и базовых веб-приложений.

Устаревшие/нишевые: Windows Phone (не поддерживается), BlackBerry OS, Tizen (в основном для телевизоров и носимых устройств Samsung).

Пример проверки ОС в автотесте (Appium/Java):

import io.appium.java_client.AppiumDriver;

public class OSTest {
    public static void main(String[] args) {
        AppiumDriver driver = new AppiumDriver(...);
        // Получение информации о платформе
        String platformName = driver.getCapabilities().getCapability("platformName").toString();
        String platformVersion = driver.getCapabilities().getCapability("platformVersion").toString();

        System.out.println("Testing on: " + platformName + " " + platformVersion);

        // Условная логика для разных ОС
        if (platformName.equalsIgnoreCase("Android")) {
            // Использование Android-specific локаторов или жестов
            driver.findElement(By.id("android.widget.Button"));
        } else if (platformName.equalsIgnoreCase("iOS")) {
            // Использование iOS-specific локаторов (доступность)
            driver.findElement(By.id("LoginButton"));
        }
    }
}