Как тестировать состояния и переходы между ними с помощью техник тест-дизайна?

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

Ответ

Для тестирования состояний и переходов используется диаграмма состояний и переходов (State Transition Diagram). Это техника тест-дизайна, которая помогает систематически проверить поведение системы в разных состояниях.

Основные шаги:

  1. Определите все состояния системы (например, для корзины: EMPTY, FILLED, PENDING_PAYMENT, PAID).
  2. Постройте граф переходов, где узлы — состояния, а рёбра — события/действия, вызывающие переход.
  3. Спроектируйте тесты, покрывающие:
    • Все валидные переходы (позитивные тесты).
    • Невалидные переходы (негативные тесты — система должна корректно обрабатывать ошибки).
    • Сохранение данных при смене состояния.

Пример теста для корзины интернет-магазина (Python/pytest):

def test_cart_state_transitions():
    cart = ShoppingCart()
    # Начальное состояние
    assert cart.state == "EMPTY"

    # Валидный переход: EMPTY -> FILLED
    cart.add_item("Laptop")
    assert cart.state == "FILLED"

    # Валидный переход: FILLED -> PENDING_PAYMENT
    cart.checkout()
    assert cart.state == "PENDING_PAYMENT"

    # Невалидный переход: попытка оплатить пустую корзину
    empty_cart = ShoppingCart()
    with pytest.raises(InvalidStateError):
        empty_cart.process_payment()

Ключевые проверки:

  • Покрыты ли все возможные переходы из каждого состояния?
  • Корректно ли обрабатываются запрещённые переходы (например, вызов checkout() для пустой корзины)?
  • Сохраняются ли данные (например, товары в корзине) после перехода между состояниями?
  • Восстанавливается ли система после ошибки перехода?