Зачем нужен фаззер

Обычные юнит-тесты проверяют happy-path: функция «не падает» на типовых входных данных. Логические баги — clamp возвращает максимум вместо минимума, percentage забыл умножить на 100, функция мутирует вход — такие ошибки happy-path тесты пропускают. Фаззер генерирует агрессивные входные данные и сверяет фактическое поведение с контрактом функции.

01

LLM генерирует тесты

DeepSeek анализирует сигнатуру и семантику функции и создаёт до 10 adversarial-кейсов: границы, неверные типы, переполнение, мутации, повторы.

02

Независимый oracle

Ожидаемый результат пересчитывается по контракту без тела функции — фаззер не «зеркалит» баг из реализации.

03

Песочница исполняет

Код выполняется изолированно: RestrictedPython, отдельный процесс, лимиты CPU/памяти, таймаут, права nobody. import os не пройдёт.

04

Вердикт — детерминированный

PASS / VULNERABILITY / ERROR выносит код-компаратор по structured expected. LLM пишет только объяснение — она не решает, уязвимость это или нет.

Как это работает

01
Функциявход
код из редактора
02
LLM-генерация тестовLLM
10 тест-кейсов: input_data + expected + postconditions
03
Валидаторкод
отбрасывает невалидные тесты: типы, сигнатура, неоправданные исключения
04
OracleLLM
пересчёт expected по контракту — без тела функции
05
Песочницакод
RestrictedPython, отдельный процесс, лимиты CPU/памяти, таймаут
06
Компараторкод
детерминированный вердикт: PASS / VULNERABILITY / ERROR
07
ОтчётLLM
объяснение вердиктов — LLM их не принимает

Как пользоваться

  1. Вставьте Python-функцию в редактор (или загрузите пример кнопкой).
  2. Нажмите Запустить фаззинг — займёт ~20–90 секунд.
  3. Смотрите вердикты: PASS — поведение соответствует контракту; VULNERABILITY — фактический результат отклоняется от ожидаемого (неправильное значение, неверный тип исключения, мутация входа); ERROR — ошибка окружения/песочницы, не тестируемой функции.

Лаборатория

функции с багами: корректные: