Tihana Galinac Grbac and Goran Mausa, University of Rijeka
Bojana Dalbelo–Basic, University of Zagreb
Прогнозирование дефектов программного обеспечения считается одним из самых действенных методов повышения эффективности разработки ПО. Основная идея этого подхода заключается в том, что предсказание областей сосредоточения дефектов в системе позволит выработать более эффективные методики их выявления — нанести точечный удар по болевым точкам вместо ковровой бомбардировки всей системы.
Этой проблеме было посвящено ряд исследовательских работ (например, [Hall et al. 2012]), но не было найдено хорошо работающее решение. Основная сложность заключается в построении математической модели, а именно в том, что имеющиеся данные не ложатся на какое-либо из известных вероятностных распределений. Причина тому — сильные искажения, сводящие на нет общепринятые подходы машинного обучения.
Для борьбы с несбалансированностью данных было предложено ряд решений, которые оказались немасштабируемыми на все области применения. Описываемая в этой статье работа ставит перед собой цель продвинуться в этом направлении. Ниже разобрана стратегия исследования зависимости производительности моделей прогнозирования дефектов ПО от степени несбалансированности данных. Заранее условимся, что стратегия будет базироваться на метриках статического анализа кода [McCabe 1976]. В работе используются массив данных программы NASA MDP.
Основная задача прогнозирования дефектов ПО — выявление модулей системы (компонент, файлов, классов, методов), склонным к превышению заранее заданного порога дефектов. Несбалансированность данных в этом контексте означает численное преобладание модулей, не склонных к превышению этого порога, над противными. При этом доля первых может варьироваться от 1% до 94% в зависимости от задачи. Такой широкий разброс обосновывает разбиение степени несбалансированности данных на уровни, о чём подробнее будет рассказано в статье.
Как уже было упомянуто выше, измеряемые величины, необходимые для прогнозирования дефектов, могут не попадать под какое-либо известное распределение, что ограничивает применение классического математического аппарата, но открывает дорогу машинному обучению. Помимо прочих методов обучения будет рассмотрена мультивариативная бинарная логистическая регрессия.
Цель подхода заключается изучении устойчивости оценочных метрик для прогнозирования дефектов ПО в зависимости от различных уровней несбалансированности данных. Помимо этого ставится цель выявления потенциальных источников отклонений с помощью варьирования одного параметра модели. Исследуемые параметры перечисляются позже.
Предлагается выполнить следующие шаги для достижения поставленных целей:
Несбалансированность данных находится в центре внимания этой работы, потому как эта проблема сильно влияет на эффективность обучения. Особенность задачи заключается в анализе классов-меньшинств (такими чаще оказываются классы объектов, склонных к дефектам, и именно они интересны с точки зрения прогнозирования дефектов). Также стоит учитывать, что цена ложноположительного срабатывания классификатора много больше ложноотрицательного (действительно, если классификатор сообщает, что модуль не имеет склонности к дефектам, то стратегия обнаружения дефектов скорее всего пропускает этот модуль и ошибка просачивается на сторону пользователя; в то время как в другом случае происходит всего лишь лишняя проверка модуля).
Практика показала, что использование искуственно полученных сбалансированных данных [Wang and Yao 2013] может как помочь, так и навредить [Kamei et al. 2007]. Другая проблема состоит в том, что массивы данных запутанны, нерепрезентативны, чрезмерно многомерны и имеют перекрытия.
Одна из проблем машинного обучения при работе с несбалансированными массивами данных заключается в использовании неподходящих метрик оценивания. Обычно они выводятся из так называемой матрицы неточностей. В них используются счетчики правильных положительных (TP), правильных отрицательных (TN), ложноположительных (FP) и ложноотрицательных (FN) срабатываний. Самые распространённые метрики: достоверность ACC = (TP+TN)/(TP+FP+TN+FN), чувствительность TPR = TP/(TP+FN), точность PR = TP/(TP+FP).
Для иллюстрации применения описываемого подхода и верификации стратегии и определения целей дальнейшей работы был рассмотрен следующий пример.
В статье рассмотрена задача повышения качества автоматического обнаружения дефектов в программном обеспечении на основе метрик статического анализа. Одна из основных проблем в этой задаче это несбалансированность данных. Авторы статьи исследуют зависимость устойчивости классификаторов склонности модулей к дефектам от степени несбалансированности данных.