Зачем нужен фаззер
Обычные юнит-тесты проверяют happy-path: функция «не падает» на типовых входных данных. Логические баги — clamp возвращает максимум вместо минимума, percentage забыл умножить на 100, функция мутирует вход — такие ошибки happy-path тесты пропускают. Фаззер генерирует агрессивные входные данные и сверяет фактическое поведение с контрактом функции.
LLM генерирует тесты
DeepSeek анализирует сигнатуру и семантику функции и создаёт до 10 adversarial-кейсов: границы, неверные типы, переполнение, мутации, повторы.
Независимый oracle
Ожидаемый результат пересчитывается по контракту без тела функции — фаззер не «зеркалит» баг из реализации.
Песочница исполняет
Код выполняется изолированно: RestrictedPython, отдельный процесс, лимиты CPU/памяти, таймаут, права nobody. import os не пройдёт.
Вердикт — детерминированный
PASS / VULNERABILITY / ERROR выносит код-компаратор по structured expected. LLM пишет только объяснение — она не решает, уязвимость это или нет.
Как это работает
Как пользоваться
- Вставьте Python-функцию в редактор (или загрузите пример кнопкой).
- Нажмите Запустить фаззинг — займёт ~20–90 секунд.
- Смотрите вердикты: PASS — поведение соответствует контракту; VULNERABILITY — фактический результат отклоняется от ожидаемого (неправильное значение, неверный тип исключения, мутация входа); ERROR — ошибка окружения/песочницы, не тестируемой функции.