Качество и безопасность: тесты, рефакторинг, проверка AI-ответов
Зачем качество и безопасность в vibe-coding
Vibe-coding — это скорость, но скорость
без контроля быстро превращается в хаос: “вчера работало, сегодня сломалось, почему — непонятно”. Когда ты используешь Cursor, есть дополнительный риск: ИИ может уверенно предложить решение, которое:
работает не так, как ты хотел
ломает старые сценарии
добавляет небезопасные решения (например, опасные команды или хранение секретов в коде)Твоя цель как новичка — не “писать идеально”, а выстроить короткий, повторяемый процесс:
маленькое изменение
быстрая проверка
только потом следующее изменение!Цикл "попросил → изменил → проверил" помогает не потерять контроль в vibe-coding
Как проверять AI-ответы, чтобы не принимать “магию”
ИИ в Cursor удобный, но он не несёт ответственность за результат. Проверка — это не недоверие, а нормальная инженерная привычка.
Быстрый чеклист проверки перед тем, как принять изменения
Совпадает ли результат с задачей
- Если ты просил “добавь команду
del”, а тебе переписали половину проекта — это сигнал остановиться.
Какие файлы меняются и зачем
- Проси: “покажи список файлов и что в них меняется”.
Нет ли лишних зависимостей
- Новичку лучше начинать со
стандартной библиотеки Python.
Нет ли опасных мест
- Ищи в предложенном коде:
eval,
exec,
os.system,
subprocess, неожиданные удаления файлов, запись в странные пути.
Обязательный запуск
- После каждого изменения: запусти проект и убедись, что ключевые команды работают.
Что делать, если ответ кажется сомнительным
Используй
Chat не только для генерации, но и для
аудита.
Пример промпта для проверки кода:
> Посмотри на этот фрагмент кода и оцени риски для новичка: безопасность, удаление файлов, выполнение команд, обработка ввода. Если есть риск — предложи более безопасную альтернативу на стандартной библиотеке.
Тесты: что это такое и почему они ускоряют
Тесты — это маленькие программы, которые проверяют, что твой код работает правильно.
Для новичка тесты ценны тем, что:
ловят поломки сразу после правки от ИИ
помогают рефакторить без страха
делают поведение программы более предсказуемымВажно: тесты не обязаны быть “идеальными”. Достаточно 5–10 проверок на ключевые сценарии.
Какие проверки нужны новичку: три уровня
| Уровень | Что проверяем | Как выглядит | Когда достаточно |
|---|---|---|---|
| Ручная проверка | 2–5 команд в терминале |
python app.py add "..." | на раннем MVP |
| Дымовой тест | “Запускается и не падает” | запуск
help,
list | почти всегда после больших правок |
| Мини-юнит тесты | отдельные функции |
python -m unittest | когда код стал больше и страшно ломать |
Дымовой тест — это простая проверка “не дымит ли”: приложение стартует и выполняет базовые команды.
Мини-тесты на стандартной библиотеке: unittest
В Python есть встроенный модуль
unittest — он позволяет писать тесты без сторонних библиотек.
Официальная документация:
unittest — Unit testing frameworkПодготовка проекта к тестам: маленький рефакторинг
Проблема консольных приложений (как наш
vibe-notes) в том, что логика часто смешана с вводом/выводом. Тестировать проще, если вынести логику в функции.
Рефакторинг — это улучшение структуры кода без изменения поведения. То есть пользователь не должен заметить разницу, но тебе станет проще поддерживать проект.
Примеры рефакторинга:
вынести работу с файлом в load_notes() и save_notes()
вынести операции в add_note(notes, text) и delete_note(notes, index)
сделать функцию format_notes(notes) которая возвращает строкуПример структуры файлов
Теперь у проекта будет минимум два файла:
app.py — приложение
test_app.py — тестыЭто нормальное расширение проекта: тесты живут отдельно, а приложение остаётся чистым.
Пример: тесты для vibe-notes
Ниже пример того, как ты можешь попросить Cursor помочь,
не теряя контроль.
Промпт для Composer: подготовить код к тестам
> Задача:
> - Подготовь мой
app.py к простым тестам: вынеси логику работы с заметками в функции.
>
> Контекст:
> - Это консольное приложение заметок на Python, хранит список строк в
notes.json.
> - Команды:
add,
list,
del,
help.
>
> Ограничения:
> - Не меняй поведение команд с точки зрения пользователя.
> - Стандартная библиотека.
> - Покажи изменения только для
app.py.
> - Сначала коротко перечисли, какие функции добавишь.
После этого ты запускаешь ручную проверку команд.
Пример промпта для Composer: написать test_app.py
> Задача:
> - Создай
test_app.py для
unittest.
> - Протестируй функции: добавление заметки, удаление заметки, форматирование списка.
>
> Контекст:
> - Логика вынесена в функции в
app.py.
>
> Ограничения:
> - Не тестируй работу с реальным
notes.json на диске.
> - Тесты должны быть понятны новичку.
> - Покажи код целиком только для
test_app.py.
Как запускать тесты
В терминале из папки проекта:
Если у тебя Python запускается как python3:
Что означает команда:
python -m unittest — просит Python запустить модуль unittest
unittest сам найдёт файлы вида test*.py и выполнит проверкиКак правильно рефакторить с Cursor, чтобы ничего не сломать
Рефакторинг для новичка должен быть маленьким и проверяемым.
Безопасная схема рефакторинга
Зафиксируй текущее поведение
- Прогони 3–5 команд, которые точно должны работать.
Сделай маленький рефакторинг
- Например, вынеси одну функцию.
Сразу запусти проверку
- Сначала ручные команды, затем тесты.
Только потом следующий шагХорошие запросы для Edit при рефакторинге
“Вынеси этот блок чтения notes.json в функцию load_notes(). Логику не меняй. Меняй только выделенный фрагмент.”
“Переименуй переменные так, чтобы новичку было понятнее. Поведение не меняй. Новые файлы не добавляй.”Безопасность: базовые правила для проектов новичка
Под “безопасностью” здесь мы понимаем практичные вещи: не удалять лишние файлы, не выполнять команды из строки, не хранить пароли в коде.
Что чаще всего опасно в коде от ИИ
Выполнение кода из текста
-
eval(...),
exec(...)
Выполнение команд операционной системы
-
os.system(...),
subprocess.run(...) без строгих ограничений
Случайное удаление/перезапись файлов
- запись в абсолютные пути
- удаление без подтверждения
Работа с пользовательским вводом без проверок
- например, номер для
del, который не является числом
Если ты видишь подобное — остановись и попроси альтернативу.
Правила безопасности для vibe-notes
Храни данные только в файле проекта (например, notes.json рядом с app.py)
Не выполняй команды из ввода пользователя
Всегда проверяй ввод
- для
del проверять, что индекс — число и в диапазоне
Не добавляй сетевые запросы “просто так”
- если ИИ внезапно добавил работу с интернетом — уточни, зачем
Как просить Cursor так, чтобы он улучшал качество, а не усложнял
Главная ошибка новичка: попросить “сделай профессионально”, и получить лишнюю архитектуру.
Рабочие ограничения, которые удерживают результат простым:
“Стандартная библиотека, без сторонних пакетов”
“Не добавляй больше 1 нового файла”
“Не меняй поведение команд”
“Сначала план из 3–5 шагов, затем изменения шаг за шагом”
“Покажи только конкретные изменения / только один файл целиком”Если ты соблюдаешь задачу, контекст, ограничения из прошлой статьи, качество растёт без потери скорости.
Итог
Чтобы vibe-coding оставался
лёгким, тебе нужна простая дисциплина:
проверять AI-ответы по чеклисту
рефакторить маленькими шагами
добавить минимальные тесты на unittest
после каждой правки запускать проект и тестыТак ты сохраняешь скорость Cursor, но перестаёшь зависеть от случайных “магических” изменений.