TGViewer
Протестировал Протестировал @sqaunderhood · 1.89K subscribers
Post #474 1.23K
Интересная статья про использование сравнительного тестирования для приложений с состоянием - "Vive la Différence: Practical Diff Testing of Stateful Applications".

При обновлении stateful-приложений работающих с БД часто возникают трудноуловимые ошибки и традиционные методы (канареечные релизы, роллинг-обновления, cине-зелёное развёртывание) плохо эти ошибки выявляют из-за разделяемого состояния. Стандартные тесты (юнит- и интеграционные) не проверяют взаимодействие разных версий во время обновления.

В статье предлагается использование фреймворка для сравнительного тестирования двух версий приложения (v1​ - текущая, v2​ - новая) на идентичность поведения. Фреймворк работает поверх существующего Postgres без модификации кода СУБД, его работа разделяется на три этапа:

- Ветвление - создание лёгких, изолированных веток исходной базы данных без её физического копирования. Ветвление реализовано для PostgreSQL с помощью вспомогательных таблиц вставки, удаления и представлений с триггерами. Создание ветки занимает <100 мс независимо от размера БД.
- Воспроизведение - выполнение последовательностей клиентских запросов (а не отдельных запросов) с чередованием между версиями v1​ и v2​. Это позволяет обнаружить ошибки совместимости (обратной и прямой).
- Сравнение - вычисление различий в ответах сервера и в состояниях базы данных. Введены трёхстороннее сравнение (исходное состояние, состояния после v1​ и v2​), которые нагляднее двухстороннего. Алгоритм работает за время, пропорциональное размеру изменений (а не всей БД).

Типы выявляемых ошибок:

- Повреждение данных (data corruption) - например, усечение сериализованных protobuf.
- Несовместимость данных (data incompatibility) - разная интерпретация одних и тех же данных разными версиями.
- Ложные предположения о данных (false data assumptions) - например, жёстко заданный лимит на размер таблицы, который превышен в продакшене.

Результаты экспериментов:

- Фреймворк успешно находит все три категории ошибок в приложении Bank of Anthos.
- Ветвление в 10-100 раз быстрее физического копирования базы данных
- Сравнение до 1000 раз быстрее наивных SQL-запросов на Postgres, время не растёт с размером БД.
- Чтение/запись: небольшое накладное время (до 3 раз по сравнению с обычным Postgres).
- Для обнаружения ошибок потребовалось 2-4 перемежения запросов и 55-110 секунд времени.
  • 👍 5
  • 🔥 4
  • 🤝 1
More from @sqaunderhood
  1. Sep 3, 2026Finding bugs across the Python ecosystem with Claude and property-based testing We develop…
  2. Jul 9, 2026A collaborative bibliography of papers related to property-based testing https://github.co…
  3. Jul 7, 2026В Github UI появился автоматический дедупликатор тикетов, во время создания нового тикета,…
  4. Jun 13, 2026CirrusCI всё: Cirrus CI will shut down effective Monday, June 1, 2026. Перейдут под крыло…
  5. Apr 23, 2026Раньше ведь как было: изучаешь теорию языков программирования и формальные методы, формаль…
  6. Mar 19, 2026Sashiko мониторит список рассылки с патчами в ядро Linux (LKML) и запускает ревью этих пат…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →