Когда попарное тестирование (Pairwise) не следует применять?

Ответ

Попарное тестирование (метод ортогональных массивов) эффективно для сокращения комбинаций, но не подходит для случаев:

  1. Высококритичные системы (safety-critical): В медицине, авиации, финансах часто требуется полный перебор комбинаций, так как стоимость пропущенного дефекта крайне высока.
  2. Сильная зависимость между параметрами: Если значения одного параметра логически ограничивают значения другого, Pairwise может пропустить важные или создать невалидные комбинации.
  3. Малое количество параметров или значений: Когда общее число всех возможных комбинаций невелико (например, 2 параметра по 3 значения = 9 комбинаций). Выгода от сокращения минимальна.
  4. Высокая стоимость подготовки одного теста: Если настройка тестового окружения для одного сценария занимает много времени, сокращение числа прогонов может не окупить рисков.

Пример зависимых параметров (логика в коде):

def set_access_level(user_type, action):
    """
    user_type: 'guest', 'user', 'admin'
    action: 'read', 'write', 'delete'
    """
    rules = {
        'guest': ['read'],
        'user': ['read', 'write'],
        'admin': ['read', 'write', 'delete']
    }
    if action not in rules[user_type]:
        raise PermissionError
# Pairwise-комбинация ('guest', 'delete') будет невалидной и может быть пропущена,
# но ее важно проверить на обработку ошибок.

Ответ 18+ 🔞

А, ну это ж классика, блядь! Попарное тестирование — это как взять огромный, ебаный, многомерный пирог и пытаться его съесть, откусывая по два кусочка от каждого слоя. Вроде всё попробовал, но целостного вкуса, сука, не почувствовал. И иногда это пиздец как опасно.

Вот смотри, когда этот метод накрывается медным тазом, ёпта:

  1. Системы, где баг = труп. Ну, то есть буквально. Медицина, авиация, финансы — там, где сбой это не «ой, кнопка не того цвета», а «ой, все умерли». Тут, блядь, никаких компромиссов. Нужен полный перебор, ебать его в сраку. Каждую, сука, комбинацию, каждый чих-пых. Потому что если пропустишь одну — а она как раз и окажется той самой, из-за которой самолёт ебнется в гору, — то потом будешь всю жизнь думать: «Что же я, мудак, сделал?».

  2. Когда параметры друг за друга держатся, как пидары в бане. Один параметр диктует, что можно другому. Pairwise может нагенерить хуйни нереальной. Вот смотри на код, я тебе ща покажу, какая мартышлюшка получается:

def set_access_level(user_type, action):
    # Код не трогаем, он святой, блядь
    rules = {
        'guest': ['read'],
        'user': ['read', 'write'],
        'admin': ['read', 'write', 'delete']
    }
    if action not in rules[user_type]:
        raise PermissionError

Pairwise-генератор такой: «О, надо проверить комбинацию ('guest', 'delete')!». А эта комбинация — чистой воды пиздец, она невалидная по логике! И если он её пропустит, то мы так и не узнаем, как наша функция на такое безобразие реагирует. А вдруг она вместо PermissionError просто всем админские права нахуй раздаст? Волнение ебать!

  1. Когда и так всё дохуя маленькое. Ну вот представь: 2 параметра, по 3 значения. Всего-то 9 комбинаций, ёпта! Зачем тут хитрожопый алгоритм применять, который сократит их до 6? Ты что, 3 лишних теста такие дорогие, что на них потратиться жалко? Да похуй! Проще всё проверить и спать спокойно.

  2. Когда один запуск теста — это отдельный пиздец. Если чтобы подготовить окружение для одного сценария, нужно, блядь, полдня танцев с бубном, сервера поднимать, конфиги править — то экономия на 20-30% прогонов просто не окупит риска что-то пропустить. Тут уже не до оптимизации, тут бы основные сценарии успеть впердолить.

Короче, суть в чём: Pairwise — это охуенный инструмент, когда у тебя параметров овердохуища и они в основном независимые. Но как только появляется хоть капля логики, зависимости или сверхвысокая цена ошибки — надо включать голову, а не слепо доверять алгоритму. А то получится как с Герасимом: вроде всё по инструкции сделал, а в итоге — Муму, блядь.