Перейти к основному содержимому

Сценарий 07: поиск и приоритизация тестовых пробелов

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

Руководства

Используйте этот сценарий, чтобы совместить измеренное покрытие со структурными данными: вызывающим кодом, точками входа и ссылками на тесты. Это помогает выбрать следующий тест с учётом поведения продукта и риска ошибки.

Просмотр измеренного покрытия

Подготовьте окружение по руководству CLI. Выполняйте команды в PowerShell из корня репозитория CodeGraph. Нужны существующий CPG, доступный GoCPG gRPC и артефакт покрытия, сформированный тестовым инструментом проекта. Пути артефактов выбирает настройка runtime_coverage_artifact_paths оркестратора аудита установленной версии.

python -m src.cli coverage show --db "<cpg-path>" --uncovered-only

Замените <cpg-path> на базу выбранного проекта. Команда читает диапазоны строк методов через GoCPG, сопоставляет их с артефактом покрытия и выводит результат в терминал. --uncovered-only выбирает методы без исполненных строк.

При наличии данных вывод содержит путь и идентичность артефакта, формат, сводку Methods и строки методов. Ревизия в поле source_revision относится к CPG выбранного проекта. Сопоставьте её с ревизией, на которой запускались тесты. Строки UNMATCHED coverage source показывают файлы отчёта, которые не удалось сопоставить с методами выборки; проверьте пути этих файлов.

Если артефакт не найден, выводится:

No coverage data found: runtime coverage artifact is missing.

Для этого случая код возврата — 0, но покрытие не измерено. Другие причины недоступности печатаются как Coverage data unavailable: <reason> с кодом 1; ошибка запроса даёт Coverage query failed: <error> и код 1. Для измерения покрытия сформируйте артефакт штатным тестовым инструментом и проверьте его путь, ревизию и сопоставление с методами.

Как подготовить и прочитать данные

Сформируйте отчёт покрытия тестовым инструментом своего проекта и сохраните его под зарегистрированным корнем исходников. Команда ищет артефакты этого проекта по runtime_coverage_artifact_paths. В текущей конфигурации указаны coverage.json, coverage.xml и lcov.info, в том числе во вложенных каталогах. Рабочий каталог, из которого запущен CLI, не определяет корень поиска. Сверьте путь исходников и базу проекта через python -m src.cli projects info <project-name>.

Строка Methods показывает отношение методов с хотя бы одной исполненной строкой к методам, сопоставленным с исполняемыми строками артефакта. Например, метод с двумя исполненными строками из десяти учитывается как покрытый метод; его строковое покрытие составляет 20%. Для проверки поведения изучите утверждения соответствующих тестов.

Команда анализирует выборку методов, упорядоченную по файлу и номеру строки. В текущей конфигурации в неё входят первые 500 методов. Размер выборки задаёт sql_query_limits.race_condition. Сводка относится к методам этой выборки, которые удалось сопоставить с отчётом покрытия. Для оценки всего проекта используйте также полный отчёт тестового инструмента.

Типизированное исследование QA

Настройте проект и LLM-провайдер по руководству программного вызова. Запрос ниже — шаблон для существующей задачи QA. Замените область, идентификатор задачи, пути и ссылки на доступные свидетельства этой ревизии.

Для приоритизации пробелов по графу вызовите обязательный сценарий QA:

from src.digital_employees.runtime.scenarios import (
    RoleBoundScenarioInvocationRequest,
    invoke_role_bound_scenario_request,
)

request = RoleBoundScenarioInvocationRequest(
    query="Приоритизируй непроверенное поведение в согласованной области изменения.",
    employee_id="codegraph_qa",
    scenario_id="scenario_07",
    event_type="qa_start",
    context={
        "project_key": "codegraph",
        "namespace": "default",
        "task_id": "<task-id>",
        "file_paths": ["<changed-source>", "<related-tests>"],
        "source_refs": ["<coverage-artifact-ref>", "<acceptance-criterion-ref>"],
    },
)

result = invoke_role_bound_scenario_request(request)
if result.get("error"):
    raise RuntimeError(result["error"])
print(result["scenario_id"])
print(result.get("answer") or "")

При отсутствии project_key, namespace или task_id вызов выдаёт RuntimeError с role_bound_scenario_contract_missing. Для отрицательной проверки передайте context={}, затем восстановите область задачи.

При успешном исследовании результат содержит scenario_07, ответ в answer и сведения о вызове в metadata.role_bound_scenario_invocation. Прочитайте рекомендации вместе с отчётом покрытия: для каждого предложенного теста определите проверяемое поведение, участок кода и связь с критерием приёмки. Сохраните ответ и ревизию исходников рядом с артефактом покрытия.

Приоритизируйте поведение и риск

Проверьте каждого кандидата с учётом:

  • активных критериев приёмки и изменённой ревизии;
  • публичных точек входа и границ авторизации;
  • ошибок, повторов, тайм-аутов и отката;
  • контрактов хранения и сериализации;
  • вызывающего кода с высоким влиянием и ранее пропущенных дефектов;
  • актуальности покрытия и фактического присутствия файла в артефакте.

Покрытая строка показывает, что тест исполнил этот участок кода. Проверяемое поведение определяют утверждения теста. Исключения для сгенерированного кода и защитных ветвей зафиксируйте в настройках покрытия и согласуйте при ревью.

Рабочий цикл от теста

  1. Выберите одно отсутствующее поведение, связанное с критерием приёмки или явным риском.
  2. Добавьте тест, который падает по ожидаемой причине.
  3. Внесите минимальное изменение продукта, только если падение выявило пробел реализации.
  4. Запустите точечный тест и соседний регрессионный набор.
  5. Повторно сформируйте артефакт покрытия штатным тестовым инструментом проекта.
  6. Обновите данные поддерживаемым путём проекта и снова запустите команду просмотра.
  7. Зафиксируйте выполнение теста, ревизию, основу артефакта и оставшиеся пробелы.

Приложите отчёт покрытия к результатам QA. Для приёмки зафиксируйте Pass/Fail по каждому активному критерию и решение ответственного за QA.

Связанные материалы

Если обнаружен пробел реализации, используйте разработку функции, а для структурного ревью ревизии — проверку кода.