Сценарий 07: Покрытие тестами¶
Инженер по обеспечению качества, выявляющий непротестированные участки кода и определяющий приоритеты разработки тестов.
Быстрый старт¶
# Выберите сценарий "Покрытие тестами"
/select 07
Поиск пробелов в покрытии¶
Выявление непротестированных функций¶
> Какие функции не покрыты тестами?
╭─────────────── Пробелы в покрытии ─────────────────╮
│ Функции без прямых тестов: │
│ │
│ Критические (executor): │
│ - ExecParallelHashJoinNewBatch() │
│ - ExecReScanGather() │
│ │
│ Высокий приоритет (storage): │
│ - heap_lock_updated_tuple() │
│ - heap_abort_speculative() │
│ │
│ Всего непротестированных: 234 функции │
│ Оценка покрытия: 78% │
╰──────────────────────────────────────────────────╯
Определение приоритетов тестирования¶
> Какие непротестированные функции оказывают наибольшее влияние?
╭─────────────── Список приоритетов ─────────────────╮
│ Высокое влияние + отсутствие тестов: │
│ │
│ 1. heap_lock_updated_tuple() │
│ Влияние: Целостность транзакций │
│ Количество вызовов: 23 │
│ │
│ 2. ExecParallelHashJoinNewBatch() │
│ Влияние: Корректность параллельных запросов │
│ Количество вызовов: 8 │
│ │
│ 3. AtEOXact_RelationCache() │
│ Влияние: Согласованность кэша │
│ Количество вызовов: 4 │
╰───────────────────────────────────────────────────╯
Поиск непротестированных путей обработки ошибок¶
> Найти непротестированные пути обработки ошибок
> Показать точки входа без тестов
Генерация тестовых случаев¶
> Сгенерировать тестовые случаи для heap_insert
╭─────────────── Тестовые случаи ────────────────────────────────╮
│ │
│ Функция: heap_insert() │
│ Файл: src/backend/access/heap/heapam.c:2156 │
│ │
│ 1. Обычная вставка │
│ Вход: Корректная таблица, корректный кортеж, корректный CommandId │
│ Ожидаемое: Возвращён OID, кортеж виден │
│ │
│ 2. NULL таблица │
│ Вход: Указатель на таблицу равен NULL │
│ Ожидаемое: Сбой утверждения или корректное сообщение об ошибке │
│ │
│ 3. Слишком большой кортеж │
│ Вход: Кортеж больше BLCKSZ │
│ Ожидаемое: Ошибка с понятным сообщением │
│ │
│ 4. Параллельная вставка │
│ Вход: Несколько потоков выполняют вставку │
│ Ожидаемое: Все вставки успешны, нет повреждений данных │
│ │
│ 5. Откат транзакции │
│ Вход: Вставка, за которой следует ROLLBACK │
│ Ожидаемое: Кортеж не виден после отката │
│ │
╰───────────────────────────────────────────────────────────────╯
Примеры запросов¶
- “Какие функции не покрыты тестами?”
- “Какие критические функции нужно протестировать в первую очередь?”
- “Найти непротестированные пути обработки ошибок”
- “Сгенерировать тестовые случаи для [function_name]”
- “Какие граничные случаи следует протестировать в [function_name]?”
Связанные сценарии¶
- Код-ревью — Проверка изменений в коде
- Рефакторинг — Поиск мёртвого кода для удаления