Дата публикации
coding

Как предсказать баги по истории коммитов: исследование Microsoft про code churn

Что нового

Исследователи Microsoft — Начиаппан Нагаппан и Томас Болл — в 2004–2005 годах предложили способ заранее оценивать «забагованность» системы по истории изменений кода (code churn).

Ключевые факты из работы:

  • Вместо абсолютного churn (сколько строк кода поменяли) они используют относительные метрики: изменения в привязке к размеру компонента и ко времени.
  • Для прогноза они применяют статистические регрессионные модели.
  • На кейсе Windows Server 2003 их набор метрик смог рано предсказать плотность дефектов в компонентах системы.
  • Метрики позволили разделять бинарники на fault‑prone и не склонные к ошибкам с точностью 89,0%.
  • Исследование опубликовано Ассоциацией вычислительной техники (ACM), полная версия доступна в ACM Digital Library.

Главное изменение подхода: не просто считать, сколько кода поменяли, а соотносить это с масштабом компонента и периодом, за который произошли изменения.

Как это работает

Что такое code churn

Code churn — это количественная оценка того, как часто и насколько сильно меняется код:

  • сколько строк добавили;
  • сколько удалили;
  • сколько переписали за определённый период.

Microsoft смотрит на churn по компонентам (например, по бинарникам в Windows Server 2003) и связывает историю изменений с тем, сколько дефектов нашли в этих компонентах.

Абсолютные vs относительные метрики

Авторы проверили два подхода:

  1. Абсолютные метрики churn:

    • общее число изменённых строк;
    • общее число изменений в файле/компоненте за период.
  2. Относительные метрики churn:

    • churn, нормированный на размер компонента (например, изменённые строки / общее число строк);
    • churn в привязке к времени (на каком этапе жизненного цикла продукта происходили изменения);
    • другие соотношения, которые связывают объём и скорость изменений с характеристиками компонента.

Дальше они строят регрессионные модели и проверяют, как хорошо каждая группа метрик предсказывает плотность дефектов (defect density) — сколько багов приходится на единицу размера компонента.

Результат:

  • абсолютный churn плохо объясняет, где будут баги;
  • относительные метрики churn дают сильную предсказательную силу и позволяют заранее понять, какие бинарники потенциально проблемные.

Кейc Windows Server 2003

Microsoft взяла реальные данные по Windows Server 2003:

  • история изменений бинарников;
  • размер компонентов;
  • данные о дефектах.

На этом датасете исследователи проверили свои модели и показали, что:

  • относительные метрики churn действительно коррелируют с плотностью дефектов;
  • по ним можно классифицировать бинарники на «склонные к ошибкам» и «относительно безопасные» с точностью 89,0%.

Что это значит для вас

Если вы тимлид или инженер по качеству

  1. Не полагайтесь на голые числа по коммитам.

    • «Мы изменили 10 000 строк» само по себе почти ничего не говорит о риске багов.
    • Важно, какой это процент от компонента и когда эти изменения произошли.
  2. Вводите относительные метрики churn в отчёты. Примеры полезных показателей:

    • изменённые строки / общий размер компонента;
    • частота изменений в критичных модулях за релизный цикл;
    • всплески churn ближе к релизу.
  3. Используйте churn для приоритизации тестирования.

    • Компоненты с высоким относительным churn — кандидаты на более плотное тестирование и code review.
    • Это особенно полезно в больших системах, где нельзя протестировать всё одинаково тщательно.

Если вы разработчик

  1. Смотрите на историю файла перед тем, как в него лезть.

    • Часто меняющийся файл с большим относительным churn — сигнал, что там выше риск сломать что‑то ещё.
  2. Будьте осторожнее с поздними большими изменениями.

    • Исследование связывает интенсивные изменения и высокую плотность дефектов.
    • В конце релизного цикла лучше дробить доработки и тщательнее ревьюить.
  3. Используйте churn как аргумент в дискуссиях.

    • «Этот компонент стабилен, churn низкий, менять его рискованно» — это уже не ощущение, а метрика, подтверждённая исследованием Microsoft.

Если вы занимаетесь инженерной аналитикой

  1. Стройте регрессионные модели вокруг относительных метрик churn.

    • Авторы показали, что такие модели реально предсказывают плотность дефектов.
  2. Используйте churn для ранних сигналов.

    • Это не замена баг‑репортам, а способ заранее увидеть зоны риска и перераспределить ресурсы.

Исследование не требует VPN или доступа к закрытым сервисам Microsoft. Полный текст доступен в ACM Digital Library; для некоторых сценариев может понадобиться подписка или доступ через университет.

Место на рынке

Работа Нагаппана и Болла — это не продукт, а научное исследование, которое легло в основу многих современных практик инженерной аналитики в индустрии.

По факту, оно конкурирует не с конкретным инструментом, а с другими подходами к предсказанию дефектов:

  • простые метрики сложности кода;
  • количество найденных багов в прошлом релизе;
  • субъективные оценки риска.

Отличительные моменты подхода Microsoft:

  • упор на историю изменений вместо статичного снимка кода;
  • использование относительных показателей вместо сырых чисел по строкам;
  • подтверждение на крупном промышленном проекте Windows Server 2003 с измеримой точностью 89,0% при разделении бинарников на fault‑prone и нет.

Если вы строите свои внутренние дашборды или системы предсказания дефектов, эта работа — хороший ориентир, какие метрики churn реально имеют смысл и как их использовать в статистических моделях.


Читайте также

Как предсказать баги по истории коммитов: исследование Microsoft про code churn — VogueTech | VogueTech