Привет, команда!
У нас в SQT проекте 98.5% покрытие интеграционными тестами (193/196), полный E2E с Playwright, Clean Architecture — в общем, все как надо. Но недавно случился интересный кейс, который показал новую проблему AI-driven разработки.
## 💥 Парадокс: крутые тесты + AI = новые проблемы
Контекст: Разрабатываем с AI-агентом в 10x скорости → агент обновил схему БД → 22 интеграционных теста упали одномоментно
Не про качество тестов (они у нас отличные), а про maintenance overhead при сверхбыстрой разработке с AI.
Корень проблемы: Когда код меняется в 10 раз быстрее, классические подходы к maintenance тестов перестают работать.
## 🔍 Анатомия проблемы AI-driven разработки
Что произошло конкретно:
# AI агент рефакторил Assessment модель:
# ❌ Убрал прямые поля: Assessment.user_id, Assessment.store_id
# ✅ Оставил только FK: Assessment.configuration_id
# Но тестовые фабрики не синхронизировались автоматически:
class AssessmentFactory:
def create_assessment_data(
user_id=None, # ❌ AttributeError!
store_id=None, # ❌ AttributeError!
):
return {"user_id": user_id, "store_id": store_id} # 💥
Классический подход: вручную исправить 22 теста за несколько часов
AI-разработка: такое происходит каждый день, ручками не успеваешь
## 🧠 Почему это принципиально новая проблема
Traditional Development:
- Схема меняется редко → тесты стабильны месяцами
- Изменения планируются → можно подготовить тесты заранее
- Человек помнит контекст → легко понять что сломалось
AI-Driven Development:
- Схема меняется каждый день → тесты ломаются постоянно
- AI принимает решения автономно → неожиданные изменения
- Контекст изменений не очевиден → сложно быстро починить
## 🛡️ Решения для AI-driven maintenance (не базовые, а продвинутые)
### 1. Автоматическая синхронизация фабрик с моделями
# Реальный-time детекция изменений схемы в CI
@pytest.fixture(autouse=True)
def verify_factory_schema_sync():
"""Автоматически проверяет синхронизацию при каждом тесте"""
detector = SchemaEvolutionDetector()
violations = detector.detect_schema_drift()
if violations:
auto_fix_factories(violations) # Пытаемся исправить автоматически
pytest.fail(f"Schema drift detected and auto-fixed: {violations}")
### 2. AI-Agent Schema Awareness система
# AI агенты получают контекст о зависимостях
class AIAgentContext:
def modify_model(self, model_class):
dependent_factories = self.find_dependent_factories(model_class)
dependent_tests = self.find_dependent_tests(model_class)
# AI агент знает что нужно обновить
return ModificationPlan(
model_changes=changes,
factory_updates=dependent_factories,
test_updates=dependent_tests
)
### 3. Schema Evolution в рамках Continuous Integration
# GitLab CI с автоматическим исправлением
schema-evolution-check:
script:
- python scripts/detect_schema_drift.py
- if [ $? -eq 1 ]; then python scripts/auto_fix_factories.py; fi
- pytest tests/schema/ --auto-fix-mode
allow_failure: false # Ломаем пайплайн, если не можем автоисправить
### 4. Property-based test generation для быстрых изменений
# Тесты генерируются из схемы автоматически
@pytest.mark.parametrize("model_class", get_all_models())
def test_factory_model_contract(model_class):
"""Этот тест автоматически адаптируется к изменениям любой модели"""
factory = get_factory_for_model(model_class)
assert_factory_matches_model(factory, model_class)
# Бонус: автоматически тестируем все CRUD операции
test_instance = factory.create()
assert_can_save_and_load(test_instance)
### 5. Real-time schema monitoring в production
# Мониторинг изменений схемы в реальном времени
class SchemaMonitor:
def on_model_change(self, model_class, changes):
# Уведомляем команду о критических изменениях
if changes.is_breaking:
slack.send(f"🚨 Breaking schema change in {model_class.