Перейти к содержанию

Использование Ocarina с AI

Рабочая конфигурация: полный цикл тестирования, собранный связкой Claude Code и Ocarina, против публичного демо Katalon CURA.

📖 Возьмите за образец AI-пример.

Три духовных камня

  1. CLAUDE.md в корне проекта.
  2. skills/ с одним <name>/SKILL.md на каждую процедуру.
  3. Правило проверки: каждое утверждение о SUT идёт от наблюдения (probe, gh api, curl -v), а не от домысла.

CLAUDE.md

Два варианта. CLAUDE.md — полный (правила + структура проекта, иерархия, соглашения, устройство CI, шаблон PR). CLAUDE.slim.md — только правила. Slim — когда контекст перегружен; полный — для онбординга и ревью. При расхождении побеждает полный.

Шаги онбординга (venv, pip install, набор скиллов, скопированный в Claude Code, ruff / mypy / pre-commit, smoke-проверка раннера) описаны в setup-environment.

Правила:

Тестирование безопасности функциональное и статичное — никогда активное. Никаких пейлоадов, никаких сфабрикованных запросов, никаких манипуляций с DOM через DevTools. Сценарии чёрных шляп идут через обычный пользовательский интерфейс.

Используйте константы. Именованные значения не вписывают прямо в код.

Наборы данных — это решения людей. Предложить — не значит запустить.

Проверяйте поведение SUT эмпирически. Probe, gh api или curl -v. Никогда не домысел. Выводите заново каждый раз: probe отвечает только за то, что он реально прогнал; прежний диагноз — только для того прогона.

У каждого правила есть однострочное «почему».

skills/

Один файл Markdown на каждый навык, YAML-frontmatter + тело. Десять семейств.

Ревью (14)

Статическое чтение; выносят находки на поверхность.

  • review-spec-gaps — уточняющие вопросы по FRD.
  • review-watcher-misuse — watcher.report(...) вопреки соглашению «только негатив».
  • review-compartmentalisation-leaks — URL, селекторы, магические числа не на своём месте.
  • review-dead-code — неиспользуемые connectors / POM / сценарии / suites / фрагменты / константы; для каждой находки: удалить, инкубировать (<source-root>/incubator/, дерево зависимостей сохранено) или оставить.
  • review-hierarchy-naming — родитель ⊃ потомок с тем же именем в дереве цикла (чаще всего Campaign("X") ⊃ Suite("X")); переименовать потомка под его реальный сегмент (иерархия строгая — сплющивание невозможно).
  • review-report — классифицировать каждый FAIL / SKIP за один прогон.
  • Плюс: review-type-ignore, review-match-candidates, review-unverified-transitions, review-submit-dispatchers, review-comment-drift, review-suite-stability, review-intent-collisions, review-watcher-emissions.

Анализ (4)

  • analyse-flakiness — расширить сеть transient-error; хронические падения — это настоящие flakes.
  • analyse-fixture-flakiness — инструментировать setup/teardown; вынести на поверхность перекрёстное загрязнение тестов.
  • analyse-watcher-flakiness — с каждым watcher и без него, перебор интервалов.
  • analyse-screenshot-flakiness — сгруппировать по (test, step, browser), выявить различия.

Чёрная шляпа (6)

  • business-logic-vulnerability-ideation — обрушить продукт.
  • incoherence-attack-ideation — каждый шаг легален, набор невозможен.
  • persistence-attack-ideation — упорные повторы заблокированных действий.
  • permission-appropriateness-audit — уместна ли сама модель доступа?
  • bfcache-exposure-ideation — атаки на BFCache.
  • lateral-resource-ideation — IDOR только через адресную строку.

Понимание (4)

  • assess-test-base — каталогизировать тестовую базу.
  • assess-ecosystem — ограниченное исследование публичных источников, с потолком по бюджету токенов.
  • understand-sut-constraints — ограничения SUT, которые ломают параллельные тесты.
  • understand-ocarina — пройтись по документации.

Выбор (3)

По mtime — никогда по имени файла.

  • pick-screenshots, pick-logs, pick-reports.

Авторство (9)

Каждый выдаёт готовый результат.

  • empiricism — проверяйте перед кодированием; не перезаписывайте intentional-fail gap-тесты.
  • write-a-probe — одноразовый скрипт, в gitignore.
  • write-test-strategy — сгенерировать документ test-strategy из набора (scope, types, таблицы покрытия, дерево цикла, pass/fail, gaps, CI-матрица).
  • plan-test-effort — наивный, «первый проход» плана усилий по тестированию; критичность (critical/major/minor), лёгкий реестр рисков, веса S / M / L, открытые вопросы для углублённого прохода.
  • extend-coverage — расширить покрытие, опираясь на существующие активы.
  • update-frd-and-tests — протянуть обновление spec во внутрипроектной FRD; вышестоящие системы (Confluence, Jira, …) остаются доступны только для чтения.
  • manual-reproduction-guide — repro, который может выполнить человек.
  • manage-backlog — BACKLOG.md.
  • pr-report — отчёт с учётом типа PR.

Рефакторинг (2)

  • refactor-fragmentation — DRY на усмотрение пользователя.
  • introduce-pom-retries — повторы внутри POM с разбивкой на два теста (first-try + with-retries).

Состояние (1)

  • question-state — опросить окружение, прежде чем доверять результату.

Настройка (2)

  • setup-environment — venv, инструменты разработки, набор скиллов Ocarina, скопированный в директорию скиллов Claude Code, пути к драйверам в CLAUDE.local.md, цикл pre-commit, smoke-проверка раннера.
  • profile-environment — определяет рамки дозволенного на проекте (доступ к исходникам, зондирование вживую, чувствительность данных, конфиденциальность, безопасность, автономия, правки в репозитории) и генерирует дополнение CLAUDE.profile.md, которое лишь ужесточает настройки по умолчанию и никогда их не ослабляет.

Запуск (1)

  • propose-visual-review — перед локальным запуском предлагает выбор: --not-headless (смотреть, как браузер отыгрывает сценарий) или headless (как в CI). Собирает команду; запускает пользователь.

Повторяющиеся цепочки

Набор не зелёный: review-report → analyse-* → write-a-probe → находка ложится в IDENTIFIED_GAPS.md / FRD / комментарий сценария → probe удаляется.

Сценарий чёрной шляпы выглядит многообещающе: empiricism → extend-coverage (часто intentional-fail).

Изменения в spec: update-frd-and-tests (сначала FRD, тесты следом). Gap-тесты переосмысляются, а не переворачиваются.

Нужен новый примитив Ocarina: сначала understand-ocarina, потом писать.

Собираетесь запустить прогон: propose-visual-review — с интерфейсом (--not-headless) или headless (как в CI)? Собирает команду; запускает пользователь.

Дисциплина

Показывайте, а не применяйте. Навыки выдают результат — решает пользователь.

Эмпирика, а не утверждения. Каждое утверждение о SUT — наблюдённое, процитированное, датированное. Ритуальная фраза: "Fair point, I'm assuming. Let me verify empirically."

Gap-тесты переосмысляют, а не перекрашивают в зелёный. Инвертируйте утверждение, переименуйте, перенесите строку в strategy-doc, занесите решение в IDENTIFIED_GAPS.md. Одно движение — через update-frd-and-tests.

Эмиссии watcher'ов — только негативные сигналы. Watcher, выпускающий "login succeeded", нарушает контракт.

Распределённо — когда дефицит общий. Если воркеры борются за ограниченный на стороне SUT ресурс (сессии, слоты, квоты), координируйте их через распределённые примитивы. Иначе worker-local in-memory cache вполне подойдёт — при условии, что ключи не могут столкнуться, а их генерация потокобезопасна.

Рамки можно только сужать. По умолчанию всё открыто, как на демо: чтение исходников, зондирование вживую, публичные учётные данные. profile-environment подстраивает их под конкретный проект, никогда не ослабляя правила безопасности.

Mtime, а не имя файла. UUID-суффиксы случайны; pick-* сортирует по mtime.

Чего эта схема не делает

  • Не генерирует тесты автономно.
  • Не замазывает галлюцинации в CI; сбой запускает review-report + analyse-*.
  • Не переписывает spec; это делает только update-frd-and-tests — со строкой ревизии.
  • Не запускает активные тесты безопасности. Никогда.

Открытые ресурсы


Mojo играет на окарине

Ого!
Ты здорово его доработал, читатель Mojo.


"On Earth and Space, he has all the tricks."

― ▒▒█𝚃𝙾𝙿 𝚂𝙴𝙲𝚁█𝚃 // 𝚂𝙲𝙸 // 𝙽▒▒▒▒𝙾𝙵𝙾𝚁𝙽

Последнее обновление: