Что такое тестирование методом белого ящика (white-box testing)?

«Что такое тестирование методом белого ящика (white-box testing)?» — вопрос из категории Тестирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование белого ящика (white-box/structural/glass-box testing) — это метод, при котором тестировщик проектирует тестовые сценарии, основываясь на знании внутренней структуры, реализации и кода тестируемого приложения. Фокус смещен на проверку корректности внутренних путей выполнения, условий и структур данных.

Основные характеристики:

  • Доступ к коду: Тестировщик имеет доступ к исходному коду.
  • Цель: Проверка внутренней логики, покрытие ветвлений (branch coverage), путей выполнения (path coverage).
  • Уровень: Применяется преимущественно на уровне модульного (unit) и интеграционного (integration) тестирования.

Пример модульного теста (белый ящик) в XCTest:

// Тестируемая функция (логика известна тестировщику)
func calculateDiscount(price: Double, isPremium: Bool) -> Double {
    let baseDiscount = 0.1
    let premiumBonus = 0.05
    var discount = baseDiscount
    if isPremium {
        discount += premiumBonus // Эта ветвь должна быть проверена
    }
    return price * discount
}

// Тест, проверяющий внутреннюю логику
class DiscountTests: XCTestCase {
    func testDiscountForPremiumUser() {
        let result = calculateDiscount(price: 100.0, isPremium: true)
        // Проверяем, что бонус для premium был учтен: 100 * (0.1 + 0.05) = 15
        XCTAssertEqual(result, 15.0)
    }

    func testDiscountForRegularUser() {
        let result = calculateDiscount(price: 100.0, isPremium: false)
        // Проверяем только базовую скидку: 100 * 0.1 = 10
        XCTAssertEqual(result, 10.0)
    }
}

Преимущества: Позволяет находить скрытые ошибки в сложной логике, обеспечивает высокое покрытие кода. Недостатки: Требует глубоких знаний системы, может быть затратным, не проверяет соответствие внешним требованиям (для этого используется черный ящик).