Сценарий 07: Покрытие тестами

Сценарий 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]?”

Связанные сценарии