AI-система приоритизации тестов (Test Impact Analysis AI)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
AI-система приоритизации тестов (Test Impact Analysis AI)
Средняя
~2-4 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

AI-система приоритизации тестов (Test Impact Analysis AI)

Полный тестовый прогон на крупном проекте занимает 40–90 минут. Запускать все тесты на каждый коммит — дорого и медленно. Test Impact Analysis (TIA) решает обратную задачу: по изменённым файлам определить минимальный набор тестов, который покроет зону изменений и не пропустит регрессию. AI-подход расширяет классический TIA за счёт исторического анализа: какие тесты исторически находили баги в этих компонентах.

Классический TIA vs AI-подход

Классический TIA работает через code coverage mapping: запускает все тесты с инструментацией, записывает какой тест покрывает какой файл, при следующем изменении выбирает только тесты, покрывающие изменённые файлы. Точный, но требует полного coverage-прогона как baseline.

AI-подход добавляет исторический сигнал:

  • Тесты, которые исторически падали при изменениях в данном компоненте
  • Тесты с высокой семантической близостью к изменённому коду (через code embeddings)
  • Тесты, покрывающие функции, использующие изменённые API
class AITestSelector:
    def __init__(self, coverage_db, history_db, code_encoder):
        self.coverage_db = coverage_db      # test → file coverage map
        self.history_db = history_db        # history of test failures by change
        self.encoder = code_encoder         # CodeBERT/UniXcoder embeddings

    def select_tests(self, changed_files: list[str],
                     changed_diffs: list[str]) -> list[str]:
        # Coverage-based candidates
        coverage_tests = self.coverage_db.get_tests_for_files(changed_files)

        # History-based candidates
        history_tests = self.history_db.get_historically_related(changed_files)

        # Semantic similarity candidates
        diff_embedding = self.encoder.encode(changed_diffs)
        semantic_tests = self.find_semantic_matches(diff_embedding)

        # Merge and rank by failure probability
        all_candidates = coverage_tests | history_tests | semantic_tests
        return self.rank_by_failure_probability(all_candidates, changed_files)

Ранжирование тестов по вероятности падения

После формирования набора кандидатов применяем ранжирующую модель (LightGBM), обученную на истории CI. Признаки для ранжирования:

  • Время последнего падения теста при изменении данного компонента
  • Cosine similarity между diff-эмбеддингом и эмбеддингом теста
  • Глубина покрытия: тест покрывает изменённую строку напрямую или через 2–3 вызова
  • Признак «критический тест»: тест связан с платёжным функционалом, аутентификацией и т.д.
  • Исторический flakiness score теста

Тесты ранжируются по убыванию failure_probability, CI запускает их в таком порядке — fast feedback приходит быстрее, так как тесты с высоким риском стартуют первыми.

Адаптивный выбор стратегии

Система автоматически переключается между режимами в зависимости от контекста изменений:

Тип изменения Стратегия
Правка одного файла в известном компоненте TIA-отбор, ~10–30% тестов
Изменение shared utility / common lib Расширенный отбор, ~50–70% тестов
Изменение конфигурации / env variables Полный прогон
Изменение в 10+ файлах (крупный рефакторинг) Полный прогон
Коммит в ветку main/master Полный прогон

Метрики реальных проектов

На проекте с 1200 тестами и средним временем прогона 55 минут после внедрения TIA AI:

  • Среднее время CI для feature-коммитов: 12 минут (было 55)
  • Пропущенных регрессий за 6 месяцев: 0 (safe selection mode)
  • Процент запускаемых тестов на коммит: 22% в среднем

Интеграция

Поддержка GitHub Actions, GitLab CI, Jenkins, Buildkite. Плагины для pytest, JUnit, Go test, Jest. Хранение coverage map и исторических данных в PostgreSQL или ClickHouse.

Тип проекта Срок внедрения
Один язык, один CI 2–3 недели
Несколько языков / микросервисы 4–6 недель
Энтерпрайз (10+ команд) 6–10 недель