AI-система предсказания дефектов в коде с AUC-ROC 0,85+

Как defect prediction помогает находить баги до релиза? Дефекты в коде не случайны. Файлы с высокой цикломатической сложностью, большим количеством авторов и частыми изменениями статистически содержат в 3–5 раз больше багов, чем стабильные модули. Мы строим ML-модель, которая анализирует статичес

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1284
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    696
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982

Как defect prediction помогает находить баги до релиза?

Дефекты в коде не случайны. Файлы с высокой цикломатической сложностью, большим количеством авторов и частыми изменениями статистически содержат в 3–5 раз больше багов, чем стабильные модули. Мы строим ML-модель, которая анализирует статические метрики кода, историю изменений и паттерны коммитов, чтобы заранее указать на зоны риска — до того как баг попадёт в продакшен. Наша система цикломатической сложности (термин Томаса Маккейба) интегрируется в ваш CI/CD и выдаёт предупреждения на каждый Pull Request. Опыт внедрения на 300+ проектах показывает: количество инцидентов снижается на 30–40%, а время на code review сокращается на 20%.

Почему defect prediction — не просто статический анализ?

Статический анализатор находит уже существующие ошибки: неиспользуемые переменные, потенциальные NPE. Но он не предскажет, какой модуль «взорвётся» через месяц. Defect prediction использует историю изменений: если файл меняли 10 раз за 30 дней, в нём 5 авторов и цикломатическая сложность 20, вероятность дефекта в следующем спринте — 80%. Такие паттерны не видны статическому анализатору.

Какие признаки мы используем?

Качество предсказания определяется набором признаков. Используем три группы: Метрики кода (статический анализ):

  • Цикломатическая сложность (McCabe complexity)
  • LOC, LLOC, количество методов на класс
  • Глубина наследования (DIT), связанность (CBO) для OOP
  • Количество параметров методов
  • Halstead Volume, Maintainability Index

Git-метрики (history-based):

  • Количество коммитов за 30/90/365 дней (change frequency)
  • Количество уникальных авторов
  • Возраст файла (days since creation)
  • Количество merge conflicts в истории
  • Code churn: (lines_added + lines_deleted) / LOC

Process-метрики:

  • Количество связанных issues/tickets
  • Время жизни PR до merge
  • Количество review iterations
  • Количество revert-коммитов
import pandas as pd from sklearn.ensemble import GradientBoostingClassifier from sklearn.pipeline import Pipeline def build_defect_predictor(train_df: pd.DataFrame): feature_cols = [ 'cyclomatic_complexity', 'loc', 'num_authors', 'change_frequency_90d', 'code_churn', 'avg_pr_iterations', 'dit', 'cbo', 'halstead_volume' ] pipeline = Pipeline([ ('clf', GradientBoostingClassifier( n_estimators=300, max_depth=5, learning_rate=0.05, subsample=0.8, random_state=42 )) ]) pipeline.fit(train_df[feature_cols], train_df['has_defect_90d']) return pipeline 

Сбор и разметка данных

Разметка — ключевой этап. Определяем «дефектный» файл: файл, к которому привязан хотя бы один commit с сообщением, содержащим fix, bug, defect, hotfix за период наблюдения. Дополнительно — ручная разметка от команды по серьёзным инцидентам.

Для формирования датасета используем PyDriller для извлечения git-метрик и radon для Python-метрик, lizard — универсальный анализатор для Python, Java, Go, C++, JavaScript.

# Сбор метрик через radon и lizard radon cc src/ -j -a > complexity_metrics.json lizard src/ --csv > code_metrics.csv 

Модель на Gradient Boosting показывает AUC-ROC на 10% выше, чем логистическая регрессия, на датасетах с дисбалансом классов. Мы гарантируем точность предсказания: precision в топ-20% рискованных файлов — 0.71–0.78.

Интеграция в Code Review процесс

Модель запускается при открытии Pull Request. В комментарии к PR добавляется предупреждение для файлов с defect_probability > 0.7:

⚠️ High defect risk detected in `src/payment/processor.py` Predicted defect probability: 83% Risk factors: high cyclomatic complexity (18), 5 authors, changed 12 times in last 30 days Recommendation: mandatory 2 reviewers, add integration tests 

Дополнительно система формирует еженедельный отчёт «Технический долг по риску» — топ-20 файлов, требующих рефакторинга или усиленного тестирования.

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

Метрика Значение
AUC-ROC 0.82–0.89
Precision (top 20% risky files) 0.71–0.78
Recall (известные дефекты) 0.74–0.82
Предсказания за 14+ дней до бага 68% случаев

Поддерживаемые языки и репозитории

Java, Python, Go, TypeScript/JavaScript, C++, C#, PHP. Репозитории: GitHub, GitLab, Bitbucket — через API или локальный клон.

Размер кодовой базы Срок внедрения
До 50k строк 2–3 недели
50k–500k строк 3–5 недель
Более 500k строк 5–8 недель

Как внедрение влияет на стоимость поддержки?

По нашим данным, внедрение системы сокращает количество багов, доходящих до продакшена, на 35%. Это уменьшает затраты на горячие фиксы и снижает нагрузку на дежурную команду. Один из клиентов после внедрения сократил время на debugging на 40% за счёт приоритизации рискованных модулей. Мы гарантируем качество: поддержка модели в течение 3 месяцев после внедрения. Свяжитесь с нами для оценки вашего проекта — получите консультацию по внедрению defect prediction в вашу команду. Наш опыт — более 300 проектов в области ML.

Что входит в работу

  • Аудит кодовой базы и сбор метрик (цикломатическая сложность, git-история)
  • Обучение модели с подбором гиперпараметров (AUC-ROC > 0.85)
  • Интеграция в GitHub/GitLab через webhook (комментарии к PR)
  • Дашборд с топ-рисковыми файлами и трендами
  • Документация и обучение команды (2 сессии)
  • Гарантия качества: поддержка 3 месяца, корректировка модели при дрейфе данных

Закажите аудит вашего репозитория уже сегодня.