ГлавнаяБлогDeployProof: ловим пустые тесты ИИ до деплоя
Python

DeployProof: ловим пустые тесты ИИ до деплоя

DeployProof — инструмент для проверки тестов, написанных ИИ. Ловит пустые тесты, галлюцинированные зависимости и утечки секретов за секунды до пуша. Попробуйте сейчас!

Al
Редакция Algolitalgolit.ru
8 мин чтения30 августа 2026 г.

Почему зелёный тест-ран не гарантирует качество

Если вы последние месяцы строили проекты с ИИ-ассистентами (Antigravity, Claude Code, Cursor, Copilot), то наверняка сталкивались с этой болью: агент пишет тесты, вы запускаете pytest, видите 100% покрытие строк и уверенно пушите в прод. А после деплоя обнаруживаете, что тесты были пустышками и пропустили критические edge-кейсы.

Покрытие строк показывает, что код выполнился, но не то, что его логика проверена утверждениями. Чтобы решить эту проблему, я создал и открыл DeployProof — детерминированный инструмент пред-проверки для Python, который ловит пустые тесты, галлюцинированные зависимости и ловушки безопасности за секунды до того, как код покинет вашу локальную машину.

Иллюзия зелёного покрытия строк

Рассмотрим простой калькулятор скидок с ограничением порога 50%:

# calculator.py
def calculate_discount(price: float, rate: float) -> float:
    if rate > 0.5:
        return price * 0.5
    return price * (1.0 - rate)

Попросите LLM написать юнит-тесты — и она может сгенерировать такое:

# test_calculator.py
from calculator import calculate_discount

def test_calculate_discount_standard():
    assert calculate_discount(100.0, 0.2) == 80.0

Этот тест покрывает каждую ветку стандартной скидки и даёт 100% покрытие строк. Однако, если мутировать логику:

  • Заменить rate > 0.5 на rate > 1.5
  • Заменить return price * 0.5 на return price * 1.5
  • Заменить * на /

Тест всё равно пройдёт на 100% зелёным. Он никогда не проверял порог или граничные условия.

Почему существующий мутационный тест слишком медленный

Традиционные инструменты мутационного тестирования (например, mutmut или cosmic-ray) мощные, но обычно запускаются на всей кодовой базе. На проекте с сотнями тестов полный мутационный прогон может занять 5–20 минут — слишком долго для хуков git commit или pre-push.

DeployProof решает это с помощью Diff-Scoped AST Mutation:

Вместо мутации всего репозитория DeployProof анализирует ваш активный git diff (или незакоммиченные файлы сессии) и применяет AST-мутации строго к строкам, которые вы только что написали или изменили.

Это сокращает время проверки с минут до 2–4 секунд.

$ deployproof check

DeployProof - LOCAL PRE-CHECK
====================================================================
Target Scope (1 file evaluated): * calculator.py

Local Pre-Check Mutation Verification:
  Score: 57.1% (4/7 mutants killed)
Status: FAILED (score 57.1% below 80.0%) (threshold: 80.0%)
Time: 2.27s

Surviving Mutants (3 unverified changes):
[1] calculator.py:2
      Mutation: Replace numeric constant '0.5' with '1.5'
Original: if rate > 0.5:
      Mutated: if rate > 1.5:
[2] calculator.py:3
      Mutation: Replace numeric constant '0.5' with '1.5'
Original: return price * 0.5
      Mutated: return price * 1.5
[3] calculator.py:3
      Mutation: Replace binary operator '*' with '/'
Original: return price * 0.5
      Mutated: return price / 0.5
====================================================================
Pre-check FAILED: Score 57.1% is below threshold 80.0% (3 surviving mutants).

Как только вы добавите тесты для порога (rate = 0.8) и точной границы (rate = 0.5), все мутанты будут убиты, и пред-пуш гейт пройдёт на 100%.

Пять дополнительных проверок

Помимо пустых тестов, ИИ-код часто содержит смежные сбои. DeployProof запускает 5 дополнительных статических проверок вашего активного диффа:

Защита от галлюцинированных зависимостей и сквоттинга PyPI

Запрашивает живой реестр PyPI, чтобы убедиться, что каждый новый импортированный модуль существует, защищая от выдуманных имён пакетов.

Ловушки симлинков GhostApproval (CWE-61)

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

Контроль потока и обработка ошибок

Помечает пустые блоки except Exception: pass и мёртвый код, генерируемый для подавления ошибок.

Аудит внедрения моков

Помечает вновь введённые @patch и использование unittest.mock, маскирующие сломанную бизнес-логику.

Сканер секретов

Ловит незакавыченные секреты в .env и захардкоженные API-ключи (OpenAI, Anthropic, AWS, Stripe).

Быстрый старт

DeployProof бесплатен, с открытым исходным кодом (MIT) и устанавливается через pip:

pip install deployproof

Инициализируйте его в вашем репозитории (создаёт .deployproof.json и настраивает гейт .git/hooks/pre-push для блокировки пушей при провале проверок):

deployproof init

Запускайте проверку по требованию в любое время:

deployproof check

Для CI/CD пайплайнов (GitHub Actions, GitLab CI) доступен структурированный JSON-вывод:

deployproof check --json

Коды выхода

  • 0PASSED: все проверки пройдены.
  • 1FAILED: сработал гейт качества или безопасности (мутационный счёт ниже порога, утечка секретов, фейковые зависимости, побег симлинка).
  • 2ERROR: сбой тестового окружения (тестовый набор не собрался до начала мутационного тестирования).

Ссылки и вклад

Я создал DeployProof как независимый соло-разработчик после того, как неоднократно сталкивался с тонкими регрессиями в ИИ-тестах в своих проектах.

Если вы используете ИИ-агентов в повседневной работе, буду рад, если вы попробуете инструмент, оставите issue, поставите звезду репозиторию или внесёте свой вклад:

  • 💻 GitHub (MIT): https://github.com/SVSPraveen/DeployProof
  • 📦 PyPI: https://pypi.org/project/deployproof/
  • 🧪 Проверенный набор тестов: 88/88 pytest юнит-тестов и 11/11 стресс-тестов на запуске, воспроизводящих каждый посаженный edge-кейс.

Практический вывод

Не доверяйте слепо зелёным проверкам. Прямо сейчас установите DeployProof и запустите deployproof check в своём проекте. Убедитесь, что ваши тесты убивают мутантов, а не просто исполняют код. Это займёт меньше минуты, но сэкономит часы отладки после деплоя.

Какие тонкие сбои или пустые тесты вы замечали в своих ИИ-рабочих процессах? Поделитесь в комментариях!

#тестирование#ИИ-агенты#мутационное тестирование#DeployProof#качество кода
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →