AI-система предсказания дефектов в коде (Defect Prediction)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
AI-система предсказания дефектов в коде (Defect Prediction)
Средняя
~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-система предсказания дефектов в коде (Defect Prediction)

Дефекты в коде не случайны. Файлы с высокой цикломатической сложностью, большим количеством авторов и частыми изменениями статистически содержат в 3–5 раз больше багов, чем стабильные модули. Defect Prediction — это ML-модель, которая анализирует статические метрики кода, историю изменений и паттерны коммитов, чтобы заранее указать на зоны риска — до того как баг попадёт в продакшен.

Признаки для модели

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

Метрики кода (статический анализ):

  • Цикломатическая сложность (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

Интеграция в 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 недель