Изложение статьи Yuming Zhou and Hareton Leung,Empirical analysis of object-oriented design metrics for predicting high and low severity faults, IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 32, NO. 10, OCTOBER 2006 ======Введение====== В статье рассматривается задача выявления дефектов (определение вероятности того, что в классе содержится дефект архитектурного решения). Для решения данной задачи используются метрики Чидамбера и Кемерера(было выбрано 6 метрик), которые оценивают структурные характеристики классов. Для исследования используются четыре различных метода машинного обучения: * Логистическая регрессия * Наивный байесовский классификатор * Случайный лес * Метод ближайшего соседа В статье рассматриваются следующие вопросы: 1. Как метрики, связанны с возникновением ошибок высокой и низкой сложности в классах? 2. Какие метрики сильнее связаны с возникновением ошибок высокой и низкой сложности в классах? 3. Насколько точно метрики предсказывают ошибки высокой степени тяжести? 4. Насколько точно метрики предсказывают ошибки низкой степени тяжести? ====== Используемые метрики и датасеты ====== В статье рассматриваются следующие метрики: * Weighted Methods per Class (WMC) - количество методов, имплементируемым классом * Depth of Inheritance (DIT) - расстояние от класса до корня в дереве насследования * Response for a Class (RFC) - WMC плюс количество наследованных методов * Number of Children (NOC) - число непосредственных детей в дереве насследования у данного класса * Coupling between Objects (CBO) - количество классов, с которым связан данный класс (fan-out) * Lack of Cohesion (LCOM) - усредненная по атрибутам доля методов, использующая этот атрибут (LCOM3) * Source Lines Of Code (SLOC) - количество строк кода в классе Для каждой метрики проверяется следующая гипотеза: У класса с высоким значением метрики больше шансов иметь ошибку высокой/ низкой сложности, чем у класса с низким значением метрики. В качестве выборки используется датасет KC1 (NASA), в котором даны измерения по 21 метрике для классов и методов. Для анализа используются только 7 вышеперечисленных метрик. Из него были удалены все случаи не связанные с ошибками в исходном коде. Так же все дефекты были разделены на две группы(ошибки высокой и низкой сложности), вместо 5-ти исходных. ====== Вычислительный эксперимент ====== В рамках вычислительного эксперимента для каждой из моделей оцениваются такие параметры, как полнота (доля отмеченных классов как дефект от общего числа дефективных классов)(Correctness), точность (доля правильно отмеченных дефектов) (Precision), и доля правильно данных предсказаний (Completeness). Методика эксперимента следующая: для каждой модели проводятся измерения на трёх датасетах: * С любыми дефектами(Ungraded severity faults) * Только дефекты высокой сложности(High severity faults) * Только дефекты низкой сложности(Low severity faults) и измеряются необходимые характеристики. Вначале была построена модель логистической регрессии с использованием одной метрики(т.е. изучались связи отдельных метрик с возникновением ошибок). Далее были построены модели для анализа зависимости от комбинации метрик проектирования(все кроме SLOC) и всех метрик с использованием различных методов машинного обучения. ==== Результаты измерений ==== Логистическая регрессия для отдельных метрик {{ :mdd:логистическая_регрессия.png?400 |}} Логистическая регрессия для комбинаций метрик {{ :mdd:логистическая_регрессия_комбинации_.png?400 |}} Методы ML для отдельных метрик и их комбинаций {{ :mdd:ml1.png?650 |}} {{ :mdd:ml2.png?500 |}} Можно заметить, что для ошибок высокой сложности, как одномерные так и многомерные модели логической регрессии имеют достаточно низкую корректность и полноту, хотя они и имеют высокую точность. В частности, из всех метрик, SLOC является лучшим предсказателем. Многомерная модель построенная только с метриками проектирования не опережает даже простую модель, с зависимостью от размера класса. Точность, корректность и полнота моделей машинного обучения также хуже, чем у регрессионной модели. Эти результаты указывают на то, что возможности этих метрик проектирования для предсказания ошибок высокой сложности ограничены, хотя большинство из них статистически связаны с возникновением дефектов высокой сложности.Точность, корректность и полнота для моделей машинного обучения более или менее равны таковым в модели логистической регрессии. Эти результаты свидетельствуют о том, что метрики проектирования работают намного лучше в прогнозировании неисправностей низкой сложности, чем при прогнозировании неисправностей высокой сложности. В итоге используя результаты измерений, были проверены сформированные в начале эксперимента гипотезы. ==== Результаты проверки гипотез ==== {{ :mdd:проверка_гипотез.png?600 |}} ====== Заключение ====== Основные полученные результаты: * Метрики CBO, WMC, RFC и LCOM статистически связаны со склонностью кода к дефектам любой сложности, в то время как DIT не связан с возникновением дефектов. Величина NOC связана с количеством дефектов низкой степени сложности обратной зависимостью(класс с большим значением NOC имеет меньшую вероятность быть дефектным) * Возможности прогнозирования склонности к дефектам этих метрик сильно отличаются в зависимости от серьезности дефекта. Применительно к классификации классов на подверженные и не подверженные ошибкам для ошибок низкой сложности, модели логистической регрессии и машинного обучения смогли достичь показателей производительности, сравнимых с предыдущими исследованиями. Однако, возможности предсказаний с помощью этих показателей для ошибок высокой сложности ограничено.