Оригинал: Bassey Isong, Obeten Ekabua State-of-the-art in empirical validation of software metrics for fault proneness prediction: systematic review. International Journal of Computer Science & Engineering Survey (IJCSES) Vol.6, No.6, December 2015 4
При современных размере и сложности программных систем, а также ограничениях навязанных при разработке, становится неизбежным тот факт, что продукт не дойдет до пользователя без ошибок. Но несмотря на это, раннее обнаружение дефектов снижает цену и повышает качество конечного продукта. Для этого применяются в том числе метрики программного обеспечения. Из существующих метрик выделяют традиционные и OO-метрики. Принято считать, что в объектно-ориентированных системах большая часть ошибок сконцентрирована в малом количестве классов, и метрики помогают акцентировать на них внимание на ранних стадиях разработки. А также сконцентрировать усилия при тестировании и верификации на подобных классах. Однако, для того метрики могли быть использованы для поиска ошибок, они должны быть исследованы опытным путем. То есть должно быть установлено наличие корелляции с важными внешними атрибутами класса - такими как частота появления ошибок(FP).
Исследованы метрики из набора CK и одна из метрик размера(SLOC).
Исследование направлено на то, чтобы дать ответ на следующие вопросы:
Были рассмотрены результаты за период с января 1995 до декабря 2012. Также, каждая работа проверялась дважды, и все результаты проверялись дополнительно. При этом, авторы строго придерживались принципов обзора литературы, сформулированных в ([26],[39]).
Вопрос 1: какие из рассматриваемых метрик имеют отношение к FP?
Работы [10],[40],[17],[1],[22],[6],[25], [23],[3],[4],[8],[2],[24],[27], [11],[29],[12],[31],[32], [35],[36],[37] подтверждают связь WMC и FP. Работы [10],[19],[21],[17],[1],[22],[6],[25],[23], [3],[4],[2],[24],[27], [11],[29],[12],[9], [30],[31],[32],[36],[37] подтвердили важность парных метрик(CBO, RFC). Мера сцепления признана связанной с FP в 14 работах: [19],[21],[17],[25],[23],[3],[4],[24], [27],[11],[9],[32],[35],[34],[37]. Меры наследования(DIT, NOC) признаны связанными с наличием дефектов в относительно малом количестве работ([19],[22],[6],[25],[5],[2],[27],[9],[37],[17]), что позволяет сделать вывод о слабой корелляции с FP. SLOC же по результатам исследований даже более сильно связана с наличием ошибок чем все рассмотренные OO-метрики, что подтверждают [17],[1],[22],[25],[3],[4],[2],[24],[27], [28],[11],[29],[30],[31],[32],[33],[36].
Вопрос 2: какие методы использовались для валидации метрик и какие из них лучше?
Во всех выбранных работах используются свои методы и почти все из них используют машинное обучение. В 76% работ используется логистическая регрессия. Также, все исследователи подчеркивают, что метод сбора данных сильнее всего влияет на точность модели.
Вопрос 3: насколько глубоко исследованы метрики?
Исследование показало, что более исследована коммерческая разработка(47% работ), чуть менее исследованы открытые проекты(33%) и наименее популярная категория – студенческие проекты(20%). При этом, наиболее популярные языки это Java и C++(97% работ).
Вопрос 4: насколько релевантны исследования?
Во всех работах было упомянуто что опытные данные критически важны для применения метрик при поиске ошибок. Также, часто упоминается что метрики влияют на сложность системы, которая уже и связана с подверженностью ошибкам. Однако, большая часть работ имеют проблемы с повторяемостью результатов(79%).
Вопрос 5: существуют ли универсальные метрики для нахождения нахождения ошибок?
В данном обзоре, было показано что метрики из набора CK и SLOC влияют на FP. Ниже приведена диаграмма, на которой отражены количества работ, в которых соответствующие метрики показали себя полезными и/или бесполезными. metrics_validation_1.png
Из приведенных данных очевидно, что не существует универсальных метрик для поиска ошибок.
Главными результатами обзора являются следующие утверждения:
На основе полученных результатов можно сформулировать следующие рекомендации
Разработчики должны постоянно использовать метрики для оценки выявления узких мест в своих системах, требующих повышенного внимания.