Какой стратегии придерживаться при тестировании изменений в приложении?

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

Ответ

Тестирование изменений требует комплексного подхода, чтобы убедиться в работоспособности новой функциональности и отсутствии регрессий.

Многоуровневая стратегия:

  1. Дымовое тестирование (Smoke Testing):

    • Быстрая проверка самых критичных функций приложения после сборки или деплоя. Цель — определить, стабильна ли сборка для дальнейшего глубокого тестирования.
  2. Тестирование новой функциональности:

    • Глубокое тестирование по чек-листам или тест-кейсам, созданным на основе требований.
    • Проверка позитивных и негативных сценариев, граничных значений.
  3. Регрессионное тестирование (Regression Testing):

    • Целенаправленная проверка областей, которые могли быть затронуты изменениями (зоны влияния).
    • Запуск набора автоматизированных тестов (если есть) для покрытия ключевых сценариев.
  4. Санитарное тестирование (Sanity Testing):

    • Узкая, глубокая проверка конкретных исправлений или изменений после регрессионного тестирования.

Ключевые фокус-области при тестировании изменений:

  • Обратная совместимость: Новые изменения API не должны ломать старых клиентов. Используется версионирование API.
  • Миграция данных: Если изменения связаны со структурой БД, тестируется процесс миграции и целостность данных после него.
  • Интеграция: Проверка взаимодействия измененного модуля со смежными системами.
  • Производительность: Замер времени отклика, использования ресурсов до и после изменений.

Пример регрессионного теста для API:

import requests
import pytest

# Тест проверяет, что старый эндпоинт (v1) все еще работает,
# а новый (v2) возвращает ожидаемую новую структуру.

def test_backward_compatibility():
    # Старый клиент
    response_v1 = requests.get('https://api.example.com/v1/users/1')
    assert response_v1.status_code == 200
    assert 'name' in response_v1.json()  # Старое поле

def test_new_functionality():
    # Новый клиент
    response_v2 = requests.get('https://api.example.com/v2/users/1')
    assert response_v2.status_code == 200
    assert 'full_name' in response_v2.json()  # Новое поле
    assert 'avatar_url' in response_v2.json() # Новое поле

Все обнаруженные дефекты документируются с четкими шагами воспроизведения, ожидаемым и фактическим результатом.