05/11/2026

Фундамент и парадигма AI в QA

Смена парадигмы - детерминизм vs вероятность. Базовый словарь, применение AI для Automation Engineer, вопросы с собеседований.

0. Смена парадигмы: детерминизм vs вероятность

Это самый частый вопрос на собеседованиях, чтобы проверить, понимаешь ли ты суть AI.

Классический QA (детерминированный):2 + 2 всегда равно 4. Если автотест ожидает 4, а получает 5 — это баг. Мы ищем точное совпадение.

AI QA (вероятностный): Промпт «Напиши короткое приветствие» может вернуть «Привет!», «Здравствуйте!» или «Добрый день!». Все три варианта правильные. Мы ищем попадание в границы допустимого (confidence score, семантическое сходство), а не точное совпадение строк.

💡 Как это сказать на собеседовании:

«В классической автоматизации мы проверяем детерминированный результат. В AI-системах мы переходим от проверки точного соответствия к оценке вероятности и семантической корректности, используя метрики и N-кратные прогоны для сбора статистики.»


1. Базовый словарь

Скопируй эту таблицу на первый лист твоего файла AI_QA_Preparation.xlsx.

ТерминОпределение своими словамиПример в QAСтатус
ML (Machine Learning)Алгоритм, который учится на данных, а не следует жёстким правилам.Модель предсказывает, упадёт ли автотест, на основе истории коммитов.🔴
LLM (Large Language Model)Большая языковая модель, работающая с текстом (например, GPT, Claude).Генерация 50 тест-кейсов на основе описания пользовательской истории.🔴
Обучающая выборка (Train set)Данные, на которых модель «учится».10 000 размеченных скриншотов с багами и без.🟡
Тестовая выборка (Test set)Новые данные, на которых мы проверяем, чему модель научилась.1 000 скриншотов, которых модель раньше не видела.🟡
Галлюцинация (Hallucination)Уверенный, но фактически неверный ответ модели.Чат-бот поддержки выдумал несуществующую акцию компании.🔴

🔴 — приоритетные термины (обязательно знать)

🟡 — дополнительные термины (познакомиться)


2. Как AI помогает именно Automation Engineer

Не нужно знать всё, достаточно понимать 3 главных применения:

Self-healing (самовосстановление) локаторов

Если id="submit-btn" изменился на id="submit-btn-new", AI-инструмент (например, Testim или Healenium) находит элемент по другим признакам (текст, соседние элементы, CSS) и чинит тест на лету, не ломая прогон.

Генерация тестовых данных

Вместо ручного написания скриптов для создания 100 валидных email-адресов или имён, ты просишь LLM:

Сгенерируй JSON-массив из 10 реалистичных профилей пользователей с пограничными значениями возраста.

Прогнозирование дефектов

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


3. Топ-2 вопроса с собеседования и готовые ответы

Вопрос 1: «Чем автоматизация на основе ИИ отличается от традиционной?»

Ловушка: Начать говорить, что AI «умнее» и «заменит скрипты».

Твой ответ:

«Традиционная автоматизация хрупкая: она ломается при малейшем изменении UI, так как опирается на жёсткие скрипты и локаторы. AI-автоматизация динамична: она использует машинное обучение для адаптации к изменениям (self-healing), анализа визуальных регрессий и генерации данных, что снижает стоимость поддержки тестов.»

Вопрос 2: «Как вы будете тестировать чат-бота, который даёт разные ответы на один и тот же вопрос?»

Твой ответ:

«Поскольку ответ недетерминирован, я откажусь от проверки точного совпадения строк (assert equals). Вместо этого я:

  1. Запущу промпт N раз (например, 10), чтобы собрать выборку ответов.
  2. Проверю ответы на наличие ключевых слов или семантическую близость к эталону.
  3. Проверю ответы на токсичность и соответствие бизнес-правилам (например, через LLM-as-a-Judge или регулярные выражения).»

4. Практическое задание (Hands-on, 15 минут)

Чтобы почувствовать «вероятность» на практике, не усложняя себе жизнь настройкой API-ключей, запусти этот простой Python-скрипт. Он имитирует запрос к LLM, возвращая разные «ответы» на один и тот же промпт, и сохраняет их в CSV (который ты потом откроешь в своём .xlsx).

import random
import csv
from datetime import datetime

def simulate_llm_response(prompt):
    responses = [
        "Привет! Чем могу помочь?",
        "Здравствуйте! Рад вас видеть.",
        "Добрый день! Какой у вас вопрос?",
        "Приветствую! Готов ответить на ваши вопросы.",
        "Здравствуйте! Что вас интересует?",
        "Добрый день! О чём хотите поговорить?",
        "Привет! Я готов к работе.",
        "Здравствуйте! Как я могу быть полезен?",
        "Добрый день! Жду ваших вопросов.",
        "Привет! Давайте обсудим вашу задачу."
    ]
    return random.choice(responses)

# Имитируем 10 запросов с одним и тем же промптом
prompt = "Напиши короткое приветствие"
results = []

for i in range(10):
    response = simulate_llm_response(prompt)
    results.append({
        "run": i + 1,
        "prompt": prompt,
        "response": response,
        "timestamp": datetime.now().strftime("%H:%M:%S")
    })
    print(f"Run {i + 1}: {response}")

# Сохраняем в CSV
filename = "AI_QA_Preparation.csv"
with open(filename, "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=["run", "prompt", "response", "timestamp"])
    writer.writeheader()
    writer.writerows(results)

print(f"\nРезультаты сохранены в {filename}")

🎯 Твоё действие: Запусти этот код, открой полученный файл и добавь в свой трекер вывод:

«Один промпт = множество валидных ответов. Нужна семантическая проверка, а не assert ==».


✅ Чекпоинт Недели 1 (Цель на пятницу)

  • Файл AI_QA_Preparation.xlsx создан, лист «Глоссарий» заполнен (минимум 5 терминов).
  • Ты можешь вслух, без подглядывания, за 60 секунд объяснить разницу между детерминированным и вероятностным тестированием.
  • Практический скрипт запущен, результат увиден и осмыслен.