# Покрила генератор 981 тестовим випадком із мінімальним порогом покриття гілок 92%, де попередження вважаються помилками, і перевірила ідемпотентність, двічі запустивши весь пайплайн збірки з порожнього файлу та вимагаючи, щоб другий прохід нічого не змінював.

липень 2026

**Ситуація.** Генератор, який збирає базу даних з нуля, має характерний тип вад: першого разу він працює, а другого — псує дані. Кроки, які вставляють рядки без перевірки; кроки, що залежать від порядку виведення попереднього кроку; кроки, безпечні поодинці, але не разом. Нічого з цього не виявить тест, який починає з порожнього стану й виконується один раз.

**Завдання.** Треба було довести, що збірку можна безпечно повторювати, а не лише те, що вона працює, а набір тестів мав бути достатньо великим і суворим, щоб жодна регресія не прослизнула крізь нього непомітно.

**Дія.** Тест ідемпотентності — найпрямолінійніший і водночас найкорисніший: зібрати всю базу даних із порожнього файлу, зробити знімок, ще раз виконати весь пайплайн із дев'ятнадцяти кроків поверх результату й вимагати, щоб другий прохід нічого не змінив. Кількість рядків, вміст та ідентифікатори — усе має збігатися. Його доповнюють 383 тестові функції — 981 тестовий випадок після розгортання параметризованих, — у сорока п'яти файлах загальним обсягом 7 944 рядки; вони охоплюють пайплайн, рендерери, завантажувачі вмісту, логіку адаптації під читача та скрипти перевірки. Для покриття гілок установлено нижню межу в дев'яносто два відсотки, яку перевіряє сама збірка, а не просто показує у звіті, і зараз набір дає близько 95 відсотків, тож межа має запас, але не декоративна. Попередження налаштовано як помилки, і на практиці саме це налаштування важить найбільше: попередження про застарілість, яке виводиться два роки поспіль, ніхто не читає, а виправляють його саме тоді, коли прогін перетворює його на червоний тест.

**Результат.** Пайплайн можна без побоювань повторно запускати на робочій базі даних, і саме це взагалі уможливлює поступову роботу з вмістом. Нижня межа — це мінімум, а не мета, і варто сказати, що навіть дев'яносто два відсотки покриття гілок усе одно лишають гілки, якими виконання ніколи не проходило: це число обмежує ризик, але не усуває його, а два дефекти, знайдені в проєкті згодом, містилися в коді, який звіт про покриття показував як покритий.

---

- Роль: Python‑інженер
- Категорії: [Бази даних](https://advisory.engineer.company/uk/categories/databases/), [DevOps](https://advisory.engineer.company/uk/categories/devops/), [Автоматизація та CI/CD](https://advisory.engineer.company/uk/categories/automation/), [Надійність і резервне копіювання](https://advisory.engineer.company/uk/categories/reliability/), [Тестування та QA](https://advisory.engineer.company/uk/categories/testing/), [Python](https://advisory.engineer.company/uk/categories/python/)
- Послуги: [Backend- та API‑розробка](https://advisory.engineer.company/uk/services/backend-development/), [DevOps та автоматизація CI/CD](https://advisory.engineer.company/uk/services/devops-cicd/), [Технічне лідерство та консалтинг](https://advisory.engineer.company/uk/services/technical-leadership/)

<https://advisory.engineer.company/uk/portfolio/held-the-generator-to-964-tests-and-a-coverage-floor-145/>
