автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.01, диссертация на тему:Метод прогнозирования дефектов в компонентах программного обеспечения на основе метрик исходного кода

кандидата технических наук
Кирносенко, Семён Игоревич
город
Волгоград
год
2012
специальность ВАК РФ
05.13.01
Диссертация по информатике, вычислительной технике и управлению на тему «Метод прогнозирования дефектов в компонентах программного обеспечения на основе метрик исходного кода»

Автореферат диссертации по теме "Метод прогнозирования дефектов в компонентах программного обеспечения на основе метрик исходного кода"

005010067

На правах рукописи

Кирносенко Семён Игоревич

Метод прогнозирования дефектов в компонентах программного обеспечения на основе метрик исходного кода

05.13.01 - Системный анализ, управление и обработка информации (промышленность)

АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата технических наук

Волгоград - 2012

005010067

Работа выполнена на кафедре «ЭВМ и системы» Волгоградского государственног технического университета.

Научный руководитель

доктор технических наук, профессор Лукьянов Виктор Сергеевич.

Официальные оппоненты: доктор технических наук, профессор

Шевчук Валерий Петрович;

кандидат технических наук Стрельников Олег Иванович.

Ведущая организация

Пензенский государственный университет.

Защита состоится 1 марта 2012 г. в 15:00 на заседании диссертационного совета Д 212.028.04 при Волгоградском государственном техническом университете по адресу: 400005, г. Волгоград, пр-т им. В.И. Ленина, 28, аудитория 209.

С диссертацией можно ознакомиться в библиотеке Волгоградского государственного технического университета.

Автореферат разослан января 2012 г.

Ученый секретарь диссертационного совета

Водопьянов В. И.

Общая характеристика работы

Актуальность работы. Современные технологические подходы к разработке программного обеспечения носят сложный, часто итерационный характер. Такие виды деятельности, как проектирование, кодирование, тестирование и эксплуатация в этих подходах часто совмещены, либо сменяют друг друга циклически при переходе от итерации к итерации. Процесс тестирования может осуществляться непрерывно, поскольку в исходный код постоянно вносятся новые функции и исправления. Чем больше объём исходного кода, тем больше трудозатрат необходимо для поддержания качества такой программной системы на должном уровне. Для решения этой проблемы применяются различные практики и методологии программирования, автоматизированное тестирование, методы обнаружения и прогнозирования дефектов. Применение методологий разработки нацелено на снижение числа вносимых в исходный код дефектов. Целью автоматизированного тестирования является также снижение числа вносимых дефектов и недопущение повторного появления ранее обнаруженных и исправленных дефектов. В выявлении уже внесённых в исходный код ефектов, кроме ручного тестирования, могут помочь только средства обнаружения прогнозирования дефектов. Средства обнаружения дефектов работают на основе татического анализа исходного кода. При этом осуществляется поиск дефектов, оответствующих типичным ошибочным паттернам, таким как использование неи-ициализированной переменной, Поэтому такими средствами можно выявить лишь еболыиую долю дефектов.

Для прогнозирования дефектов в компонентах программного обеспечения суще-твуют программные средства: AgenaRisk, AID, SCULLY, Software Evolution Project i Другие. К сожалению, ббльшая часть этих программных средств не доступна для вободного использования и предоставляется только вместе с услугами консалтинга, ругие программные средства либо дорого стоят, либо требуют реализации дополни-ельных утилит для сбора данных. Кроме того, применяемым в них методам прогно-ирования дефектов свойственны серьёзные недостатки. Методы на основе Байесов-ких сетей доверия требуют для работы получения экспертных оценок, что означает еобходимость привлечения персонала, обладающего специальной квалификацией, етоды на основе регрессионных моделей и алгоритмов машинного обучения часто используют метрики исходного кода, зависимые от языка программирования, что ребует реализации средств синтаксического разбора исходного кода. Также про-нозирование с использованием этих методов представляет собой «чёрный ящик», хотя прогнозы таких методов могут быть достаточно точными, на основе этих про-нозов нельзя сделать выводы о том, что является причиной конкретных дефектов какие меры можно предпринять для улучшения ситуации в будущем.

Это обуславливает актуальность работы по повышению точности прогнозиро-ания дефектов в компонентах программного обеспечения.

Целью диссертационной работы являлось повышение точности прогно рования дефектов в компонентах программного обеспечения.

Для достижения поставленной цели решены следующие задачи:

• анализ существующих методов прогнозирования дефектов в компонентах п

граммного обеспечения, их ограничений и требований; •

• формулирование гипотез о закономерностях эволюции исходного кода пр граммного обеспечения на стадии разработки;

• разработка метода прогнозирования дефектов в компонентах программно обеспечения на основе сформулированных гипотез;

• разработка набора программных утилит, обеспечивающих прогнозирование д фектов в компонентах программного обеспечения на основе предложенно метода;

• проведение вычислительных экспериментов с целью проверки гипотез о зак номерностях эволюции исходного кода в программном обеспечении на стади разработки;

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

В работе использовались методы теории вероятностей и математической стат стики, системного анализа, теории принятия решений, сигнальной теории, линейно алгебры, регрессионного анализа, основные принципы проектирования объекта ориентированных приложений.

Научная новизна. На защиту выносятся результаты, обладающие научно новизной.

1. Предложен новый метод прогнозирования дефектов в компонентах программ ного обеспечения, который является независимым от языка программировани и не требует экспертных оценок.

2. Предложен новый метод оценки вероятности нахождения дефектных стро в исходном коде, написанном отдельным разработчиком в отдельном компо ненте, на основе измеренных относительных частот нахождения дефектны строк в исходном коде отдельных разработчиков и компонентов, который м< жет быть использован как для прогнозирования дефектов, так и для получе ния непосредственно метрик.

3. Предложены новые численные метрики исходного кода: время стабилизации, востребованность, специализация разработчика и другие.

Практическая значимость. Разработанный в рамках диссертации набор утилит MSR Tools позволяет прогнозировать в каких компонентах программного обеспечения имеются необнаруженные дефекты, каково общее количество необнаруженных дефектов; каково распределение дефектов между отдельными программными подсистемами; кто из разработчиков внёс исходный код, ставший причиной отдельного дефекта и т. п. Эта информация может быть использована для принятия проектных решений различного уровня сложности: распределения ресурсов тестирования; принятия решения о завершении стадии тестирования; распределения задач между разработчиками; оценки квалификации персонала; выявления уровня компетенции разработчиков, в зависимости от вида выполняемых ими работ; выявления проблемных участков исходного кода, нуждающихся в рефакторинге и т. п.

Набор утилит MSR Tools является относительно простым, не требует от пользователя наличия специальных знаний и рассчитан на широкий круг пользователей: разработчиков, менеджеров, QA-специалистов.

Апробация работы. Основные результаты диссертации докладывались на XIII-XIV региональных конференциях молодых исследователей Волгоградской области (2009-2010), на конференциях «Технологии Microsoft в теории и практике программирования» (2008-2009), г. Нижний Новгород, на всероссийской научной конференции «Наука. Технологии. Инновации.» (2008), г. Новосибирск, на 6-й межрегиональной научно-технической конференции студентов и аспирантов (2009), г. Смоленск, на конференции «Приоритетные направления современной российской науки глазами молодых учёных» (2009), г. Рязань, на конференции «Актуальные вопросы современной техники и технологии.» (2010), г. Липецк, на всероссийской научнопрактической конференции «Теоретические вопросы разработки, внедрения и эксплуатации программных средств» (2011), г. Орск.

Внедрение результатов работы. В рамках диссертации разработан набор утилит MSR Tools, который был использован в научно-исследовательской работе «Разработка программного комплекса расчетов задач динамики систем многих тел сверхбольшой размерности на основе параллельных алгоритмов для вычислительного кластера» (тема №34-53/170-09) на этапе «Повышение качества системы FRUND посредством локализации дефектов в исходном коде». Эта работа выполняется на кафедре высшей математики Волгоградского государственного технического университета. Применение набора утилит MSR Tools к исходному коду системы FRUND позволило выявить компоненты, нуждающиеся в дополнительном тестировании; оценить сложность исходного кода различных подсистем; сделать выводы о квалификации, трудозатратах, производительности труда и других характеристиках отдельных разработчиков. На основе полученных результатов были даны рекомендации относительно распределения ресурсов тестирования в ближайшей перспективе. Также выполнено внедрение набора утилит MSR Tools в учебный процесс на кафедре «ЭВМ и системы» Волгоградского государственного технического университета по курсу «Технологии программирования».

Достоверность результатов исследования обусловлена корректным испол зованием применяемого математического аппарата и подтверждается экспериме тально установленной высокой прогностической способностью предложенного м тода прогнозирования дефектов, а также согласием с известными результатам полученными другими авторами.

Публикации. Материалы диссертации опубликованы в 12 печатных работах из них 3 в изданиях, включённых в Перечень ВАК. Также имеется свидетельств № 2011614559 о государственной регистрации программы для ЭВМ «Набор утили для расчёта метрик надёжности исходного кода».

Структура и объем диссертации. Диссертация состоит из введения, четь рёх глав и заключения. Содержание работы изложено на 169 страницах машинопи ного текста. Работа иллюстрирована. 16 рисунками и содержит 35 таблиц. Списо литературы включает 131 наименование, в том числе 19 отечественных.

Содержание работы

Во введении обоснована актуальность диссертационной работы, сформули рованы цели и задачи исследования, научная новизна, практическая значимост полученных результатов.

В первой главе приводится обзор литературы, касающейся задачи прогн зирования дефектов в компонентах программного обеспечения. Отмечается, что з последние двадцать лет широкое распространение и применение получили методы прогнозирования дефектов на основе анализа эволюции исходного кода. Информа ция об эволюции исходного кода может быть получена из различных программных репозиториев: систем контроля версий, систем учёта дефектов и других. Активная работа по данному направлению ведётся в Колледже королевы Марии Лондонского университета, Американском национальном институте статистики, университете За падной Вирджинии, а также в лабораториях ряда корпораций: Microsoft Research, AT&T Labs Research и других. Большой вклад в разработку методов прогнозир вания дефектов и работу по развитию смежных направлений исследований внес ли следующие специалисты: Norman Е. Fenton, Todd L. Graves, Ahmed E. Hassan, Taghi M. Khoshgoftaar, Tim Menzies, Audris Mockus, Nachiappan Nagappan, Martin Neil, Thomas J. Ostrand, Thomas Zimmermann. В нашей стране данной темой занимаются в Санкт-Петербургском государственном политехническом университете, Санкт-Петербургском государственном университете информационных технологий, механики и оптики, Институте проблем управления им. В.А. Трапезникова РАН. Однако большая часть отечественных работ посвящена методам обнаружения дефектов посредством статического анализа исходного кода.

Приводится ряд определений дефекта в программном обеспечении из различных источников. Перечисляются причины дефектов, которые являются наиболее существенными в соответствии с рассмотренной литературой. Рассматриваются раз-

личные методы прогнозирования дефектов. Приводятся достоинства и недостатки методов различных типов, типичные сценарии их применения.

Описываются два подхода к прогнозированию дефектов в компонентах программного обеспечения. Первый подход ставит задачей метода классификацию отдельных компонентов программного обеспечения, как содержащих необнаруженные дефекты или не содержащих таковых. Чаще всего классификация осуществляется на основе оценок вероятностей нахождения необнаруженных дефектов, полученных для каждого отдельного компонента. В качестве значения «порога отсечения» используется число 0,5. Соответственно, если оценка вероятности наличия необнаруженных дефектов для компонента оказывается не меньше 0,5, то компонент классифицируется как содержащий необнаруженные дефекты, в противном случае - не содержащий таковых. Второй подход ставит задачей метода выборку минимального множества компонентов, содержащих максимальное число необнаруженных дефектов. При этом для отдельных компонентов также может вычисляться вероятность нахождения в них необнаруженных дефектов. Выполняется выборка 20% компонентов, для которых оценки этой вероятности оказались наиболее высоки. Попавшие в эту выборку компоненты классифицируются как содержащие наибольшее число необнаруженных дефектов. Это обосновывается соблюдением принципа Парето для соотношения числа компонентов и числа дефектов в них, что нашло экспериментальное подтверждение согласно ряду публикаций. Отмечается, что второй подход нельзя считать оптимальным, так как его точность будет снижаться в тех случаях, когда распределение необнаруженных дефектов в компонентах программного обеспечения близко к равномерному. Такая ситуация наиболее вероятна на ранних этапах разработки, а также в случаях быстрого роста объёма исходного кода или выполнения крупных рефакторингов, что может происходить в проекте даже после многих лет разработки. Поэтому делается вывод о предпочтительности использования первого подхода к прогнозированию дефектов в компонентах программного обеспечения.

Описываются три потенциальных источника данных для получения информации об эволюции исходного кода программного обеспечения на стадии разработки: системы контроля версий, системы учёта дефектов и листы почтовой рассылки. Системы контроля версий являются наиболее предпочтительным источником информации, поскольку используются чаще остальных. Даётся объяснение ряда понятий, связанных с организацией данных в системах контроля версий.

Выделены наиболее актуальные, современные проблемы при решении задач прогнозирования дефектов: недостаток инструментальных средств, недостаток экспериментальных данных и сложность их получения, сложность методов прогнозирования и ограниченность их применения. Делаются выводы о том, что несмотря на множество существующих методов прогнозирования дефектов, ряд проблем остаётся нерешённым. Эти проблемы делают применение существующих методов затруднительным и не всегда возможным.

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

1. Метод должен быть применим к любому программному обеспечению вне зави симости от языка программирования, на котором оно реализовано. '

2. Метод не должен требовать экспертных оценок или какой-либо другой информации, которая не может быть получена из системы контроля версий.

3. Метод должен давать прогноз, в каких компонентах программного обеспечения содержатся необнаруженные дефекты, с точностью, достаточной для использования прогнозов при решении задач управления процессом разработки.

4. Метод должен быть применим вне зависимости от наличия и количества версий программного обеспечения.

На основании имеющегося эмпирического опыта исследований процессов разработки программного обеспечения формулируются различные гипотезы о закономерностях процесса эволюции исходного кода в программном обеспечении на стадии разработки. Формулируется гипотеза о том, что написание отдельной строки исходного кода можно считать независимым испытанием с некоторой неизвестной вероятностью успеха Pis и вероятностью неудачи Pip = 1 - Pis', причём успехом считается написание строки исходного кода, не содержащей дефектов, а неудачей -написание строки исходного кода, содержащей дефекты.

Формулируются различные гипотезы о распределении дефектных строк по объёму исходного кода, включая гипотезы о том, что это распределение является равномерным для всего исходного кода программного обеспечения; зависит только от квалификации разработчиков, которая может быть принята постоянной для каждого отдельного разработчика; зависит только от сложности исходного кода, которая может быть принята постоянной для каждого отдельного компонента; зависит одновременно от квалификации разработчика и сложности исходного кода. Последняя гипотеза уточняется различными вариантами вычисления вероятности нахождения дефектных строк в исходном коде, написанном отдельным разработчиком в отдельном компоненте. Предлагается метод вычисления этой вероятности, основанный на использовании измеренных относительных частот нахождения дефектных строк в исходном коде отдельных разработчиков и отдельных компонентов.

Пусть программное обеспечение состоит из Nc компонентов и его исходный код написан при участии Na разработчиков. Тогда для исходного кода каждого компонента можно записать уравнение вида:

где Plfc ~ неизвестная вероятность написания дефектной строки исходного кода в данном компоненте; PlfAi — неизвестная вероятность написания дефектной строки исходного кода г-ым разработчиком; Wlfc — измеренная относительная частота появления дефектных строк в исходном коде данного компонента; ЬОСа0 — измеренное общее число строк исходного кода, добавленных в данный компонент; LOCaa. — измеренное общее число строк исходного кода, добавленных в данный компонент г-ым разработчиком.

Для исходного кода каждого разработчика аналогично можно записать уравнение вида:

LOCAc

wlfa = Plfa + XJ Plfc, ■ TocZ ’ (2)

где Plfa — неизвестная вероятность написания дефектной строки исходного кода данным разработчиком; PlfCj ~ неизвестная вероятность написания дефектной строки исходного кода в j-ом компоненте; Wifa — измеренная относительная частота появления дефектных строк в исходном коде данного разработчика; ЬОСАа — измеренное общее число строк исходного кода, добавленных данным разработчиком; LOCac, — измеренное общее число строк исходного кода, добавленных данным разработчиком в j-й компонент.

Для всего исходного кода в программном обеспечении можно записать уравнение вида:

*4 ЮСАл ^ LOCao.

I — 1 J —1

где Wlft ~~ измеренная относительная частота появления дефектных строк во всём исходном коде программного обеспечения; ЬОСАт — измеренное общее число строк исходного кода, добавленных в программное обеспечение. Получаем систему из Nc+ Na+1 линейных уравнений с Nc+NA неизвестными. Посредством метода наименьших квадратов составляется новая система из Nc + Лд нормальных уравнений, которая в свою очередь решается по обыкновенным правилам алгебры. В результате решения получаем оценки вероятностей написания дефектной строки в исходном коде отдельных компонентов и отдельных разработчиков, которые можно использовать для оценки вероятности написания дефектной строки исходного кода определённым разработчиком в определённом компоненте.

Формулируются гипотезы о различных видах зависимости между вероятностью обнаружения отдельного дефекта и временем внесения дефектных строк исходного кода, которые являются его причиной; о различных видах связи между вероятностью наличия необнаруженных дефектов в отдельном компоненте программного обеспечения и вносимыми в компонент модификациями; о точности прогнозирования, выполненного на основе оценок вероятности наличия необнаруженных дефектов в компонентах и на основе оценок числа необнаруженных дефектных строк в

них, а также ряд других гипотез.

Предлагается метод прогнозирования дефектов, основанный на сформулир ванных гипотезах о закономерностях эволюции исходного кода программного обес печения на стадии разработки. Метод заключается в оценке вероятности наличи необнаруженных дефектов в отдельных компонентах программного обеспечения При этом исходный код каждого компонента разбивается на подмножества. Каждо такое подмножества включает исходный код, написанный отдельным разработчике и добавленный в отдельном изменении системы контроля версий. Для исходного ко да отдельных подмножеств выполняется измерение ряда метрик: количество стро исходного кода, добавленных в подмножестве при его создании; количество строк ис ходного кода, удалённых из подмножества; относительная частота дефектных стро исходного кода для исходного кода компонента, в котором находится подмножество и разработчика, которым подмножество написано; а также другие метрики. На осн ве измеренных метрик и принятых гипотез об эволюции исходного кода в программ ном обеспечении на стадии разработки, выполняется расчёт вероятности наличия необнаруженных дефектов сначала в отдельных подмножествах исходного кода, затем и во всём компоненте. На основе вычисленной оценки вероятности нахожд ния необнаруженных дефектов, каждый отдельный компонент классифицируется либо как содержащий необнаруженные дефекты, либо как не содержащий таковых. Результатом прогнозирования является выборка компонентов программного обесп чения, которые в соответствии с прогнозом содержат необнаруженные дефекты.

Все вычисления, на основе которых работает предложенный метод, не требуют измерения зависимых от языка программирования метрик, наличия экспертных оц нок или версий программного обеспечения. Делаются выводы о том, что этот метод удовлетворяет всем сформулированным требованиям к нему, и лишь выполнение требования о точности требует экспериментального подтверждения.

В третьей главе описываются методы и алгоритмы, используемые в программ ной реализации. Обосновывается необходимость применения промежуточного представления информации, хранимой в системе контроля версий. Формулируются требования к такому представлению, исходя из потребностей предложенного метода прогнозирования дефектов. Рассматриваются ранее предложенные представления аналогичного назначения. Объясняются причины, по которым существующие представления не могут быть использованы для выполнения поставленных задач, что и стало причиной использования нового представления.

Описывается процесс извлечения необходимой информации из системы контроля версий. Это возможно посредством выполнения различных команд систем контроля версий и последующего синтаксического разбора их вывода. Ббльшая часть необходимой информации извлекается с помощью трёх основных команд: вывод списка изменений, сравнение файлов и аннотация исходного кода в отдельном файле. Для системы контроля версий Subversion эти команды имеют наименования «log», «diff» и «Ыате» соответственно. Поясняется принцип идентификации дефек-

тов и дефектного исходного кода. Для подтверждения корректности полученного промежуточного представления используются специально разработанные автором алгоритмы контроля. Эти алгоритмы позволяют выявлять любые несоответствия промежуточного представления и информации в системе контроля версий. Благодаря этому, можно утверждать, что вычисленные на основе промежуточного представления метрики полностью соответствуют действительности.

Отмечаются важные моменты, связанные с особенностями извлечения необходимой информации из систем контроля версий Subversion и Git. Описывается методика расчёта основных метрик исходного кода, которые необходимы для применения предложенного метода прогнозирования дефектов. В состав этих метрик входят как общеизвестные метрики: число строк исходного кода, число строк дефектного исходного кода, число исправленных дефектов, плотность дефектов, относительная частота дефектных строк исходного кода, время жизни дефекта; так и предлагаемые новые метрики: время стабилизации исходного кода, востребованность исходного кода, специализация разработчика.

Отмечается, что разработанный автором набор утилит MSR Tools включает следующие утилиты:

1. Mapper — утилита для выполнения перевода информации из системы контроля версий в промежуточное представление для последующего расчёта метрик на его основе. Также позволяет выполнять контроль корректности такого перевода. Имеет расширяемую архитектуру, позволяющую дополнять промежуточное представление различной информацией.

2. StatGenerator — утилита для получения различных метрик исходного кода в виде html-отчётов. Имеет расширяемую архитектуру, позволяющую управлять процессом формирования отдельных страниц отчёта и добавлять новые страницы.

3. Visualizer — утилита для построения графиков, гистограмм и других визуальных представлений информации об эволюции исходного кода. Имеет расширяемую архитектуру, позволяющую добавлять дополнительные алгоритмы визуализации.

4. Predictor — утилита для прогнозирования наличия дефектов в компонентах программного обеспечения. Позволяет получать прогнозы о наличии необнаруженных дефектов в отдельных компонентах и выполнять оценку точности таких прогнозов с использованием различных численных характеристик. Имеет расширяемую архитектуру, позволяющую добавлять дополнительные методы прогнозирования дефектов.

Делаются выводы о том, что разработанный набор утилит даёт возможность расчёта метрик и прогнозирования дефектов с использованием как предложенного,

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

В четвёртой главе описываются методика и результаты проведённых вычис лительных экспериментов. Приводятся сведения о программных системах, исходны код которых был использован для прогнозирования дефектов и проверки точно ста прогнозов. Основные метрики рассмотренных программных систем приведены Таблице 1. Выборка программных систем является репрезентативной по различны аспектам: назначение программной системы, используемые в процессе разработк методологии и языки программирования, объём исходного кода, длительность пери ода разработки, число активных разработчиков, число выпущенных версий и т.д. Для каждой из десяти программных систем рассматривается от 4 до 13 версий, что в сумме даёт 70 наборов экспериментальных данных.

Приводится описание наиболее распространённых характеристик, которые мо гут быть использованы для оценки точности предложенного метода прогнозирова ния дефектов. Все эти характеристики могут быть вычислены на основе четырёх

Программная система Тысяч строк кода Версий Файлов Дефектов Язык программирования

couchdb 30 6 175 337 Erlang

django 185 4 2052 6810 Python

frund 287 4 1695 142 Fortran, C++, C#

gnome-terminal 48 13 1571 598 С

gnuplot 126 10 313 929 С

httpd 238 4 843 2927 с

nhibernate 354 4 4718 1090 C#

pgadmin3 190 8 Г 796 1209 C++

subtle 29 6 131 652 с

wordpress 204 11 1198 6837 РНР

Таблица 1. Рассмотренные программные системы

Реальные данные

Прогноз Дефектный Недефектный

Дефектный TP (true positive) FP (false positive) ошибки 1-города

Недефектный FN (false negative) ошибки 2-города TN (true negative)

Таблица 2. Метрики по результатам проверки прогноза

метрик. Каждая из этих метрик вычисляется как число компонентов, для которых результат проверки прогноза соответствует одному из четырёх возможных вариантов, приведённых в Таблице 2. Для оценки точности прогнозирования используются четыре общепринятые характеристики.

1. Общая точность (Accuracy) — есть вероятность того, что компонент будет классифицирован верно:

A™raq/‘Tp-+Fptm+FN- <4>

2. Точность (Precision) отражает какую долю выборки составляют действительно дефектные компоненты:

ТР

Precision = —------—(S)

ТР + FP [0)

3. Полнота (Recall) отражает какова доля дефектных компонентов, попавших в выборку:

ТР

Recall = ———. ffi)

ТР + FjV w

4. ЛС/С — есть вероятность того, что для случайно выбранного компонента из множества компонентов, действительно содержащих дефекты, оценка вероятности наличия дефектов в нём будет выше, чем для случайно выбранного компонента из множества компонентов, действительно не содержащих дефекты. Имеет сложный алгоритм вычисления. Пригодна для сравнения результатов прогнозирования, полученных на разных наборах экспериментальных данных.

Характеристики AUC и общая точность (Accuracy) выбираются в качестве основных для оценки точности прогнозирования, а точность (Precision) и полнота (Recall) — в качестве дополнительных. Приводится аргументация выбора данных характеристик.

Описывается методика проведённых экспериментов. В ходе каждого эксперимента рассматривается отдельный набор экспериментальных данных. Каждый такой набор соответствует некоторой версии программной системы и включает исходный код, находившийся в соответствующей версии. Все измеряемые метрики вычисляются на этом множестве исходного кода. Вычисляются вероятности нахождения дефектов в отдельных компонентах и выполняется классификация, в ходе которой каждый компонент классифицируется либо как содержащий необнаруженные дефекты, либо как не содержащий таковых. Далее на основе информации об эволюции исходного кода после выпуска рассматриваемой версии устанавливается в каких компонентах действительно были обнаружены дефекты. Эта информация используется для оценки точности прогнозирования.

Выполняется проверка сформулированных гипотез о закономерностях эвол ции исходного кода программного обеспечения на стадии разработки. Для кажд такой гипотезы выполняется прогнозирование дефектов с использованием двух в риантов предложенного метода прогнозирования дефектов. Первый вариант мето строится, исходя из предположения о верности гипотезы, а второй - о неверност Отдельные гипотезы формулируются по каждой из четырёх используемых характ ристик точности: одна нулевая о том, что характеристика статистически значимо изменяется и две альтернативные о том, что характеристика либо повышается, ли понижается. Для проверки статистических гипотез используется двух-выборочны ^критерий Стьюдента для зависимых выборок с уровнем значимости 0,05. Анал гичным образом формулируются и проверяются гипотезы для сравнения различны методов прогнозирования между собой. На основе полученных результатов, форм руется окончательный вариант метода прогнозирования дефектов, основанный н гипотезах, верность которых получила экспериментальное подтверждение.

Выполняется сравнение предложенного метода прогнозирования с двумя ал тернативными методами. Эти методы являются авторской реализацией часто упом наемых в литературе методов прогнозирования дефектов в компонентах програм ного обеспечения. Первый альтернативный метод основан на выборке компоненто содержащих максимальный объём исходного кода. При этом 20% компонентов ма симального размера классифицируются как содержащие необнаруженные дефекть Второй альтернативный метод основан на использовании логистической регресси и следующих метрик эволюции исходного кода: число строк исходного кода в ко поненте на момент прогноза; число строк исходного кода, добавленных в компонен после предыдущей версии; число строк исходного кода, удалённых из компонент после предыдущей версии; число модификаций компонента после предыдущей ве сии. Результаты сравнения приведены на Рисунках 1 и 2. По результатам можн отметить:

• в большинстве случаев предложенный метод оказывается более точным, че альтернативные;

• в тех случаях, когда лучшим оказывается один из альтернативных методов его преимущество над предложенным методом минимально;

• на отдельных наборах данных оба альтернативных метода демонстрируют зна чительное падение точности, чего не наблюдается для предложенного метода.

Выполняется сравнение предложенного метода с наиболее точными из сущ ствующих методов прогнозирования дефектов. Результаты для этих методов были взяты из литературы. Сравнение выполняется только по характеристике АПС, т, к. только она пригодна для сравнения результатов прогнозирования, полученных на различных наборах данных. Результаты сравнения приведены на Рисунке 3. По р зультатам можно отметить:

3 Альтернативный метод i Л _ . . _ . .

а Альтернативный метод 2 о 0,1 0,2 0,3 0,4 0,5 0,8 0,7 0,8 0 9 1 0

" Предложенный метод — -.................——— ------------------- ’ '

couchdb

django

frund

gnome-terminal

gnuplot

httpd

nhibernate

pgadmin3

subtle

wordpress

0,1 0,2 0,3 0,4 0,5 0,8 0,7

Рис. 1. Сравнение с альтернативными методами по общей точности (Accuracy)

3 Альтернативный метод 1 л I Альтернативный метод 2 и • Предложенный метод

couchdb

django

frund

gnome-terminal

gnuplot

httpd

nhibernate

pgadmin3

subtle

wordpress

0.1 0,2 0,3 0,4 0,5 OS 0,7 0,8

0,1 0,2 0,3 0,4 0,5 0,8 0,7 0,8 0,9 1,0

Рис. 2. Сравнение с альтернативными методами по характеристике AUC

• по потенциальной максимальной точности предложенный метод уступает всем рассмотренным методам;

• по потенциальной средней точности предложенный метод можно считать при мерно эквивалентным всем рассмотренным методам;

• по потенциальной минимальной точности предложенный метод превосходит почти все рассмотренные методы;

• диапазон разброса точности для предложенного метода является самым узким по сравнению с рассмотренными методами, что характеризует метод как один из самых стабильных по характеристике АЛ С методов прогнозирования дефектов в компонентах программного обеспечения.

Перечисляются условия, являющиеся обязательными для применения метода:

• использование системы контроля версий при разработке программного обеспечения;

• следование принципам корректного использования системы контроля версий;

• внесение исправлений отдельных дефектов в систему контроля версий в виде отдельных изменений,

Отмечается, что этим условиям удовлетворяет практически любой проект с открытым исходным кодом, что обеспечивает широкую область применимости предложенного метода прогнозирования дефектов. Даются рекомендации относительно потенциальных путей дальнейшего улучшения метода.

I------1----(

мин. сред. макс.

О 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0

Логистическая регрессия Байесовские сети доверия Нейронные сети Машинное обучение (БУМ)

Машинное обучение (С4.5)

Машинное обучение (ЯР)

Предложенный метод

0,1 0,2 0.3 0,4 0,5 0,6 0,7 0,8 0,9 1,0

Рис. 3. Сравнение с наиболее точными существующими методами по характеристике АТ]С

0,1 0,2 0.3 0,4 0,5 0,6 0,7 0,8 0,9 1,

Делаются выводы о том, что на основании экспериментальных результатов, можно утверждать, что точность предложенного метода прогнозирования дефектов находится на уровне наиболее точных существующих методов. При этом предложенный метод является независимым от языка программирования и не требует экспертных оценок.

В Заключении перечисляются основные результаты, достигнутые при работе над диссертацией, и даётся оценка её дальнейших перспектив.

Основные результаты работы

При решении поставленных задач получены следующие результаты:

1. Проведён анализ существующих методов прогнозирования дефектов в компонентах программного обеспечения. Обобщены их недостатки.

2. Выдвинут ряд гипотез о закономерностях эволюции исходного кода в программном обеспечении на стадии разработки.

3. Предложены новые метрики исходного кода, которые могут быть использованы при прогнозировании дефектов и представляют различную информацию об эволюции исходного кода в программном обеспечении на стадии разработки.

4. Предложен новый метод прогнозирования дефектов в компонентах программного обеспечения на стадии разработки, который обладает следующими свойствами: независимость от языка программирования; отсутствие потребности в экспертных оценках и какой-либо другой информации, которая не может быть получена из системы контроля версий; независимость от наличия и количества версий системы.

5. Разработаны новые алгоритмы для извлечения информации из систем контроля версий Subversion и Git, расчёта на её основе различных метрик исходного кода.

6. Разработан набор утилит MSR Tools, включающий платформу (framework) для выполнения анализа эволюции исходного кода программного обеспечения на стадии разработки, а также утилиты для вычисления различных метрик исходного кода, визуализации и прогнозирования дефектов. Данный набор утилит размещён в сети Интернет (http://msr.sourceforge.net) и доступен вместе с исходными кодами под лицензией BSD. Также в сети Интернет размещены использованные в ходе экспериментов наборы данных, что делает все проведённые эксперименты легко воспроизводимыми с целью дальнейшего улучшения предложенного метода прогнозирования дефектов, разработки новых методов

или выполнения любых других исследований, связанных с изучением эволюции исходного кода программного обеспечения на стадии разработки.

7. Проведены вычислительные эксперименты, по результатам которых ряд гипотез о закономерностях эволюции исходного кода программного обеспечения на стадии разработки получил подтверждение.

8. Проведены вычислительные эксперименты, по результатам которых сделаны выводы о том, что точность предложенного метода прогнозирования дефектов является достаточной, для его использования при решении задач управления процессом разработки.

Список публикаций

Публикации в изданиях, включённых в Перечень ВАК:

1. Кирносенко, С. И. Идентификация исправляющих ревизий в системах контроля версий / С. И. Кирносенко, В. С. Лукьянов // Изв. ВолгГТУ. Серия «Актуальные проблемы управления, вычислительной техники и информатики в технических системах». Вып. 9 : межвуз. сб. науч. ст. / ВолгГТУ. - Волгоград, 2010. - № И. - С. 146-149.

2. Кирносенко, С. И. Подсчёт плотности ошибок для различных артефактов кода / С. И. Кирносенко, В. С. Лукьянов // Международный отраслевой журнал «Век качества. Связь: сертификация, управление, экономика» / ООО «Азбука». - Москва, 2011. - № 4. - С. 70-72.

3. Кирносенко, С. И. Прогнозирование обнаружения дефектов в программном обеспечении / С. И. Кирносенко, В. С. Лукьянов // Программные продукты и системы / НТП «Фактор». - Тверь, 2011. - № 3. - С. 67-71.

Прочие публикации:

4. Кирносенко, С. И. Оценка надёжности программного обеспечения на основе итерационной модели / / Технологии Microsoft в теории и практике программирования: матер, конф. (Нижний Новгород, 19-20 марта 2008 г.) / Нижегор. гос. ун-т им. Н.И. Лобачевского. - Н. Новгород, 2008. - С. 166-169.

5. Кирносенко, С. И. Подсчет плотности ошибок кода // Наука. Технологии. Инновации. Материалы всероссийской научной конференции молодых ученых в 7-ми частях. Часть 1. Новосибирск: НГТУ, 2008. — С. 15-16.

6. Кирносенко, С. И. Анализ надёжности программного обеспечения // XIII региональная конференция молодых исследователей Волгоградской области, г. Волгоград, 11-14 нояб. 2008 г.: тез. докл. / ВолгГТУ [и др.]. - Волгоград, 2009. -С. 204-205.

7. Кирносенко, С. И. Подсчёт плотности ошибок кода для различных видов исправляющих модификаций // 6-я Межрегиональная научно-техническая конференция студентов и аспирантов. Сборник трудов. Смоленск: Универсум, 2009. - С. 69-71.

8. Кирносенко, С. И. Подсчёт плотности ошибок кода / С. И. Кирносенко // Технологии Microsoft в теории и практике программирования : матер, конф. (Нижний Новгород, 11-12 марта 2009 г.) / Нижегород. гос. ун-т им. Н. И. Лобачевского. - Н. Новгород, 2009. - С. 193-197.

9. Кирносенко, С. И. Извлечение данных для подсчёта плотности ошибок кода // Приоритетные направления современной российской науки глазами молодых учёных. Рязань: Ряз. гос. ун-т им. С. А. Есенина, 2009. - С. 159-161.

10. Кирносенко, С. И. Коллективная разработка и надёжность / С. И. Кирносенко, В. С. Лукьянов // XIV региональная конференция молодых исследователей Волгоградской области (Волгоград, 10-13 нояб. 2009 г.): тез. докл. / ВолгГТУ [и др.]. - Волгоград, 2010. - С. 204-206.

11. Кирносенко, С. И. Представление истории изменений исходного кода для задач подсчёта метрик // Актуальные вопросы современной техники и технологии. Сборник докладов. Липецк: Издательский центр «Де-факто», 2010. - С. 39-41.

12. Кирносенко, С. И. Классификация ревизий в системах контроля версий // Теоретические вопросы разработки, внедрения и эксплуатации программных средств: материалы Всероссийской научно-практической конференции. Орск: Издательство ОГТИ, 2011. - С. 45-47.

Подписано в печать /1-Ь, #/.2012 г. Заказ № 3£7 . Тираж 100 экз. Печ. л. 1,0 Формат 60 х 84 1/16. Бумага офсетная. Печать офсетная.

Типография ИУНЛ Волгоградского государственного технического университета. 400005, г. Волгоград, просп. им. В.И. Ленина, 28, корп. №7.

Оглавление автор диссертации — кандидата технических наук Кирносенко, Семён Игоревич

Введение

Глава 1. Методы прогнозирования дефектов.

1.1. Методы на основе теории надёжности.

1.1.1. Модель Миллса.

1.1.2. Модель Нельсона.

1.1.3. Модели роста надёжности.

1.1.4. Общие недостатки

1.2. Методы на основе статистических моделей.

1.2.1. Регрессионные модели.

1.2.2. Методы на основе алгоритмов машинного обучения

1.2.3. Методы на основе нечёткой логики и нейронных сетей

1.2.4. Общие недостатки

1.3. Методы на основе специфичных источников данных.

1.3.1. Общие недостатки

1.4. Дефекты и их причины.

1.5. Подходы к прогнозированию дефектов.

1.6. Источники данных

1.7. Актуальные проблемы

1.8. Выводы.

Глава 2. Новый метод прогнозирования дефектов.

2.1. Требования к методу.

2.2. Математическая модель.

2.3. Базовый метод прогнозирования дефектов.

2.4. Модификации базового метода.

2.4.1. Оценка вероятности

2.4.2. Оценка вероятности Р^р.

2.4.3. Получение распределения времени жизни дефектов

2.4.4. Учёт метрик отдельных подмножеств исходного кода

2.4.5. Учёт числа необнаруженных дефектов.

2.5. Выводы.

Глава 3. Программная реализация.

3.1. Промежуточное представление данных.

3.1.1. Требования к промежуточному представлению.

3.1.2. Ранее предложенные промежуточные представления

3.1.3. Проектирование нового промежуточного представления

3.2. Извлечение информации из систем контроля версий

3.3. Формирование сущностей промежуточного представления

3.3.1. Перевод информации об изменении.

3.3.2. Перевод информации об исправлении

3.3.3. Перевод информации о файлах.

3.3.4. Перевод информации о модификациях.

3.3.5. Перевод информации о блоках кода

3.3.6. Контроль корректности

3.4. Расчёт метрик.

3.4.1. Количество строк исходного кода.

3.4.2. Количество строк дефектного исходного кода.

3.4.3. Количество исправленных дефектов.

3.4.4. Плотность дефектов.

3.4.5. Время жизни дефекта.

3.4.6. Время стабилизации исходного кода.

3.4.7. Востребованность исходного кода.

3.4.8. Специализация разработчика.

3.5. Набор утилит MSR Tools.

3.6. Выводы.

Глава 4. Эксперимент.

4.1. Методика эксперимента.

4.1.1. Экспериментальные данные.

4.1.2. Оценка точности прогнозирования.

4.1.3. Формулирование и проверка статистических гипотез

4.2. Оценка точности прогнозирования базового метода.

4.3. Модификации базового метода.

4.3.1. Оценка вероятности P(D'^M(t)).

4.3.2. Оценка вероятности Plf.

4.3.3. Получение распределения времени жизни дефектов

4.3.4. Учёт метрик отдельных подмножеств исходного кода

4.3.5. Учёт числа необнаруженных дефектов.

4.3.6. Выбор «порога отсечения».

4.4. Результирующий метод.

4.4.1. Сравнение с существующими методами

4.4.2. Ограничения применения

4.4.3. Перспективы дальнейшего улучшения метода.

4.4.4. Выводы о точности.

4.5. Выводы.

Введение 2012 год, диссертация по информатике, вычислительной технике и управлению, Кирносенко, Семён Игоревич

Актуальность работы. Современные технологические подходы к разработке программного обеспечения носят сложный, часто итерационный характер. Такие виды деятельности, как проектирование, кодирование, тестирование и эксплуатация в этих подходах часто совмещены, либо сменяют друг друга циклически при переходе от итерации к итерации. Процесс тестирования может осуществляться непрерывно, поскольку в исходный код постоянно вносятся новые функции и исправления. Чем больше объём исходного кода, тем больше трудозатрат необходимо для поддержания качества такой программной системы на должном уровне. Для решения этой проблемы применяются различные практики и методологии программирования, автоматизированное тестирование, методы обнаружения и прогнозирования дефектов. Применение методологий разработки нацелено на снижение числа вносимых в исходный код дефектов. Целью автоматизированного тестирования является также снижение числа вносимых дефектов и недопущение повторного появления ранее обнаруженных и исправленных дефектов. В выявлении уже внесённых в исходный код дефектов, кроме ручного тестирования, могут помочь только средства обнаружения и прогнозирования дефектов. Средства обнаружения дефектов работают на основе статического анализа исходного кода. При этом осуществляется поиск дефектов, соответствующих типичным ошибочным паттернам, таким как использование неинициализированной переменной. Поэтому такими средствами можно выявить лишь небольшую долю дефектов.

Для прогнозирования дефектов в компонентах программного обеспечения существуют программные средства: AgenaRisk, AID, SCULLY, Software Evolution Project и другие. К сожалению, большая часть этих программных средств не доступна для свободного использования и предоставляется только вместе с услугами консалтинга. Другие программные средства либо дорого стоят, либо требуют реализации дополнительных утилит для сбора данных. Кроме того, применяемым в них методам прогнозирования дефектов свойственны серьёзные недостатки. Методы на основе Байесовских сетей доверия требуют для работы получения экспертных оценок, что означает необходимость привлечения персонала, обладающего специальной квалификацией. Методы на основе регрессионных моделей и алгоритмов машинного обучения часто используют метрики исходного кода, зависимые от языка программирования, что требует реализации средств синтаксического разбора исходного кода. Также прогнозирование с использованием этих методов представляет собой «чёрный ящик». И хотя прогнозы таких методов могут быть достаточно точными, на основе этих прогнозов нельзя сделать выводы о том, что является причиной конкретных дефектов и какие меры можно предпринять для улучшения ситуации в будущем.

Это обуславливает актуальность работы по повышению точности прогнозирования дефектов в компонентах программного обеспечения.

Целью диссертационной работы являлось повышение точности прогнозирования дефектов в компонентах программного обеспечения.

Для достижения поставленной цели решены следующие задачи:

• анализ существующих методов прогнозирования дефектов в компонентах программного обеспечения, их ограничений и требований;

• формулирование гипотез о закономерностях эволюции исходного кода программного обеспечения на стадии разработки;

• разработка метода прогнозирования дефектов в компонентах программного обеспечения на основе сформулированных гипотез;

• разработка набора программных утилит, обеспечивающих прогнозирование дефектов в компонентах программного обеспечения на основе предложенного метода;

• проведение вычислительных экспериментов с целью проверки гипотез о закономерностях эволюции исходного кода в программном обеспечении на стадии разработки;

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

В работе использовались методы теории вероятностей и математической статистики, системного анализа, теории принятия решений, сигнальной теории, линейной алгебры, регрессионного анализа, основные принципы проектирования объектно-ориентированных приложений.

Научная новизна. На защиту выносятся результаты, обладающие научной новизной.

1. Предложен новый метод прогнозирования дефектов в компонентах программного обеспечения, который является независимым от языка программирования и не требует экспертных оценок.

2. Предложен новый метод оценки вероятности нахождения дефектных строк в исходном коде, написанном отдельным разработчиком в отдельном компоненте, на основе измеренных относительных частот нахождения дефектных строк в исходном коде отдельных разработчиков и компонентов, который может быть использован как для прогнозирования дефектов, так и для получения непосредственно метрик.

3. Предложены новые численные метрики исходного кода: время стабилизации, востребованность, специализация разработчика и другие.

Практическая значимость. Разработанный в рамках диссертации набор утилит MSR. Tools позволяет прогнозировать в каких компонентах программного обеспечения имеются необнаруженные дефекты, каково общее количество необнаруженных дефектов; каково распределение дефектов между отдельными программными подсистемами; кто из разработчиков внёс исходный код, ставший причиной отдельного дефекта и т. п. Эта информация может быть использована для принятия проектных решений различного уровня сложности: распределения ресурсов тестирования; принятия решения о завершении стадии тестирования; распределения задач между разработчиками; оценки квалификации персонала; выявления уровня компетенции разработчиков, в зависимости от вида выполняемых ими работ; выявления проблемных участков исходного кода, нуждающихся в рефакторинге и т. п.

Набор утилит MSR Tools является относительно простым, не требует от пользователя наличия специальных знаний и рассчитан на широкий круг пользователей: разработчиков, менеджеров, QA-специалистов.

Апробация работы. Основные результаты диссертации докладывались на XIII-XIV региональных конференциях молодых исследователей Волгоградской области (2009-2010), на конференциях «Технологии Microsoft в теории и практике программирования» (2008-2009), г. Нижний Новгород, на всероссийской научной конференции «Наука. Технологии. Инновации.» (2008), г. Новосибирск, на 6-й межрегиональной научно-технической конференции студентов и аспирантов (2009), г. Смоленск, на конференции «Приоритетные направления современной российской науки глазами молодых учёных» (2009), г. Рязань, на конференции «Актуальные вопросы современной техники и технологии.» (2010), г. Липецк, на всероссийской научно-практической конференции «Теоретические вопросы разработки, внедрения и эксплуатации программных средств» (2011), г. Орск.

Внедрение результатов работы. В рамках диссертации разработан набор утилит MSR Tools, который был использован в научно-исследовательской работе «Разработка программного комплекса расчетов задач динамики систем многих тел сверхбольшой размерности на основе параллельных алгоритмов для вычислительного кластера» (тема №34-53/170-09) на этапе «Повышение качества системы FR UND посредством локализации дефектов в исходном коде». Эта работа выполняется на кафедре высшей математики Волгоградского государственного технического университета. Применение набора утилит MSR Tools к исходному коду системы FR UND позволило выявить компоненты, нуждающиеся в дополнительном тестировании; оценить сложность исходного кода различных подсистем; сделать выводы о квалификации, трудозатратах, производительности труда и других характеристиках отдельных разработчиков. На основе полученных результатов были даны рекомендации относительно распределения ресурсов тестирования в ближайшей перспективе. Также выполнено внедрение набора утилит MSR Tools в учебный процесс на кафедре «ЭВМ и системы» Волгоградского государственного технического университета по курсу «Технологии программирования».

Достоверность результатов исследования обусловлена корректным использованием применяемого математического аппарата и подтверждается экспериментально установленной высокой прогностической способностью предложенного метода прогнозирования дефектов, а также согласием с известными результатами, полученными другими авторами.

Публикации. Материалы диссертации опубликованы в 12 печатных работах, из них 3 в изданиях, включённых в Перечень ВАК. Также имеется свидетельство № 2011614559 о государственной регистрации программы для ЭВМ «Набор утилит для расчёта метрик надёжности исходного кода».

Публикации в изданиях, включённых в Перечень ВАК:

1. Кирносенко, С. И. Идентификация исправляющих ревизий в системах контроля версий / С. И. Кирносенко, В. С. Лукьянов // Изв. ВолгГТУ. Серия «Актуальные проблемы управления, вычислительной техники и информатики в технических системах». Вып. 9 : межвуз. сб. науч. ст. / ВолгГТУ. - Волгоград, 2010. - № 11. - С. 146-149.

2. Кирносенко, С. И. Подсчёт плотности ошибок для различных артефактов кода / С. И. Кирносенко, В. С. Лукьянов // Международный отраслевой журнал «Век качества. Связь: сертификация, управление, экономика» / ООО «Азбука». - Москва, 2011. - № 4. - С. 70-72.

3. Кирносенко, С. И. Прогнозирование обнаружения дефектов в программном обеспечении / С. И. Кирносенко, В. С. Лукьянов // Программные продукты и системы / НТП «Фактор». - Тверь, 2011. - № 3. - С. 67-71.

Прочие публикации:

4. Кирносенко, С. И. Оценка надёжности программного обеспечения на основе итерационной модели // Технологии Microsoft в теории и практике программирования: матер, конф. (Нижний Новгород, 19-20 марта 2008 г.) / Нижегор. гос. ун-т им. Н.И. Лобачевского. - Н. Новгород, 2008. -С. 166-169.

5. Кирносенко, С. И. Подсчет плотности ошибок кода // Наука. Технологии. Инновации. Материалы всероссийской научной конференции молодых ученых в 7-ми частях. Часть 1. Новосибирск: НГТУ, 2008. — С. 15-16.

6. Кирносенко, С. И. Анализ надёжности программного обеспечения // XIII региональная конференция молодых исследователей Волгоградской области, г. Волгоград, 11-14 нояб. 2008 г.: тез. докл. / ВолгГТУ [и др.]. - Волгоград, 2009. - С. 204-205.

7. Кирносенко, С. И. Подсчёт плотности ошибок кода для различных видов исправляющих модификаций // 6-я Межрегиональная научно-техническая конференция студентов и аспирантов. Сборник трудов. Смоленск: Универсум, 2009. — С. 69-71.

8. Кирносенко, С. И. Подсчёт плотности ошибок кода / С. И. Кирносенко // Технологии Microsoft в теории и практике программирования : матер, конф. (Нижний Новгород, 11-12 марта 2009 г.) / Нижегород. гос. ун-т им. Н. И. Лобачевского. - Н. Новгород, 2009. - С. 193-197.

9. Кирносенко, С. И. Извлечение данных для подсчёта плотности ошибок кода // Приоритетные направления современной российской науки глазами молодых учёных. Рязань: Ряз. гос. ун-т им. С. А. Есенина, 2009. -С. 159-161.

10. Кирносенко, С. И. Коллективная разработка и надёжность / С. И. Кир-носенко, В. С. Лукьянов // XIV региональная конференция молодых исследователей Волгоградской области (Волгоград, 10-13 нояб. 2009 г.) : тез. докл. / ВолгГТУ [и др.]. - Волгоград, 2010. - С. 204-206.

И. Кирносенко, С. И. Представление истории изменений исходного кода для задач подсчёта метрик // Актуальные вопросы современной техники и технологии. Сборник докладов. Липецк: Издательский центр «Де-факто», 2010. - С. 39-41.

12. Кирносенко, С. И. Классификация ревизий в системах контроля версий // Теоретические вопросы разработки, внедрения и эксплуатации программных средств: материалы Всероссийской научно-практической конференции. Орск: Издательство ОГТИ, 2011. - С. 45-47.

Структура и объем диссертации. Диссертация состоит из введения, четырёх глав и заключения. Содержание работы изложено на 169 страницах машинописного текста. Работа иллюстрирована 16 рисунками и содержит 35 таблиц. Список литературы включает 131 наименование, в том числе 19 отечественных.

Заключение диссертация на тему "Метод прогнозирования дефектов в компонентах программного обеспечения на основе метрик исходного кода"

4.5. Выводы

Из экспериментов стало ясно что, предложенный метод прогнозирования дефектов является достаточно точным для его использования в задачах управления процессом разработки программного обеспечения. Кроме того, метод демонстрирует более стабильные показатели точности по сравнению с рассмотренными лучшими из существующих методов прогнозирования. Следовательно, метод удовлетворяет всем сформулированных во второй главе требованиям к нему, а поставленная в работе цель достигнута.

Заключение

В диссертации получены следующие основные результаты:

1. Проведён анализ существующих методов прогнозирования дефектов в компонентах программного обеспечения. Обобщены их недостатки.

2. Выдвинут ряд гипотез о закономерностях эволюции исходного кода в программном обеспечении на стадии разработки.

3. Предложены новые метрики исходного кода, которые могут быть использованы при прогнозировании дефектов и представляют различную информацию об эволюции исходного кода в программном обеспечении на стадии разработки.

4. Предложен новый метод прогнозирования дефектов в компонентах программного обеспечения на стадии разработки, который обладает следующими свойствами: независимость от языка программирования; отсутствие потребности в экспертных оценках и какой-либо другой информации, которая не может быть получена из системы контроля версий; независимость от наличия и количества версий системы.

5. Разработаны новые алгоритмы для извлечения информации из систем контроля версий Subversion и Git, расчёта на её основе различных метрик исходного кода.

6. Разработан набор утилит MSR Tools, включающий платформу (framework для выполнения анализа эволюции исходного кода программного обеспечения на стадии разработки, а также утилиты для вычисления различных метрик исходного кода, визуализации и прогнозирования дефектов. Данный набор утилит размещён в сети Интернет (http://msr. sourceforge.net) и доступен вместе с исходными кодами под лицензией BSD. Также в сети Интернет размещены использованные в ходе экспериментов наборы данных, что делает все проведённые эксперименты легко воспроизводимыми с целью дальнейшего улучшения предложенного метода прогнозирования дефектов, разработки новых методов или выполнения любых других исследований, связанных с изучением эволюции исходного кода программного обеспечения на стадии разработки.

7. Проведены вычислительные эксперименты, по результатам которых ряд гипотез о закономерностях эволюции исходного кода программного обеспечения на стадии разработки получил подтверждение.

8. Проведены вычислительные эксперименты, по результатам которых сделаны выводы о том, что точность предложенного метода прогнозирования дефектов является достаточной, для его использования при решении задач управления процессом разработки.

Работа обладает большим потенциалом для дальнейшего развития. Существует множество потенциальных направлений как для повышения точности прогнозирования предложенного метода, так и для проектирования новых методов. С помощью разработанного набора утилит возможно осуществлять расчёт огромного числа различных метрик эволюции исходного кода. Прогнозирование дефектов — лишь один из многих возможных способов применения этой информации. Другими потенциальными направлениями являются риск-менеджмент, управление персоналом, внедрение в методологические практики разработки программного обеспечения.

Библиография Кирносенко, Семён Игоревич, диссертация по теме Системный анализ, управление и обработка информации (по отраслям)

1. Catal С., Diri В. Investigating the effect of dataset size, metrics sets, and feature selection techniques on software fault prediction problem // Inf. Sci. 2009. March. Vol. 179. Pp. 1040-1058.

2. Bouktif S., Ahmed F., Khalil I., Antoniol G. A novel composite model approach to improve software quality prediction // Inf. Softw. Technol. 2010. — December. Vol. 52. Pp. 1298-1311.

3. Fenton N. E., Neil M. A Critique of Software Defect Prediction Models // IEEE Trans. Softw. Eng. 1999. Vol. 25, no. 5. Pp. 675-689.

4. Полонников P. И., Никандров А. В. Методы оценки показателей надёжности программного обеспечения. СПб.: Политехника, 1992. 78 с.

5. Майерс Г. Надежность программного обеспечения. Мир, 1980. 359 с.

6. Тейер Т., М. Л., Э. Н. Надежность программного обеспечения. Мир, 1981. 323 с.

7. Lyu М. R. Software Reliability Engineering: A R.oadmap // 2007 Future of Software Engineering. FOSE '07. Washington, DC, USA: IEEE Computer Society, 2007. Pp. 153-170.

8. Farr W. Software reliability modeling survey. Hightstown, NJ, USA: McGraw-Hill, Inc., 1996. Pp. 71-117.

9. Musa J. D., Iannino A., Okumoto K. Software reliability measurement, prediction, application. McGraw-Hill series in software engineering and technology. McGraw-Hill, 1987. Pp. I-XVIII, 1-621.

10. Li N., Malaiya Y. K. ROBUST: a next generation software reliability engineering tool // IEEE Int. Symp. on Software Reliability Engineering. 1995. — October. Pp. 375-380.

11. Malaiya Y. K., Karunanithi N., Verma P. Predictability Of Software Reliability Models. Vol. 12. 1992. Pp. 539-546.

12. Malaiya Y. K., von Mayrhauser A., Srimani P. K. An Examination of Fault Exposure Ratio // IEEE Trans. Softw. Eng. 1993. November. Vol. 19. Pp. 1087-1094.

13. Бек К. Экстремальное программирование: разработка через тестирование. СПб.: Питер, 2003. 224 с.

14. Nagappan N., Williams L. A Software Reliability Estimation Framework for Extreme Programming // International Symposium on Software Reliability Engineering. (ISSRE 2003). Denver, CO, USA: ACM Press, 2007.-November. Pp. 315-316.

15. Мейко А. В. Основные математические модели и методы расчёта функциональной надёжности корпоративных информационных систем // Научно-технический вестник информационных технологий, механики и оптики. СПбГУ ИТМО, 2007. С. 126-136.

16. Sheta A. Parameter Estimation of Software Reliability Growth Models by Particle Swarm Optimization // ICGST International Journal on Artificial Intelligence and Machine Learning, AIML. 2007. Vol. 7. Pp. 55-61.

17. Zimmermann T., Premraj R., Zeller A. Predicting Defects for Eclipse // Proceedings of the Third International Workshop on Predictor Models in Software Engineering. PROMISE '07. Washington, DC, USA: IEEE Computer Society, 2007. P. 9.

18. Mockus A., Zhang P., Li P. L. Predictors of customer perceived software quality // Proceedings of the 27th international conference on Software engineering. ICSE '05. New York, NY, USA: ACM, 2005. Pp. 225-233.

19. Ostrand T. J., Weyuker E. J., Bell R. M. Automating algorithms for the identification of fault-prone files // Proceedings of the 2007 international symposium on Software testing and analysis. ISSTA '07. New York, NY, USA: ACM, 2007. Pp. 219-227.

20. Ostrand T. J., Weyuker E. J., Bell R. M. Programmer-based fault prediction // Proceedings of the 6th International Conference on Predictive Models in Software Engineering. PROMISE '10. New York, NY, USA: ACM, 2010. Pp. 19:1-19:10.

21. Bell R. M., Ostrand T. J., Weyuker E. J. Looking for bugs in all the right places // Proceedings of the 2006 international symposium on Software testing and analysis. ISSTA '06. New York, NY, USA: ACM, 2006. Pp. 61-72.

22. Fenton N. E., Ohlsson N. Quantitative Analysis of Faults and Failures in a Complex Software System // IEEE Trans. Softw. Eng. 2000.— August. Vol. 26. Pp. 797-814.

23. Ostrand T. J., Weyuker E. J., Bell R. M. Where the bugs are // Proc. ACM SIGSOFT Int'l Symp. Software Testing and Analysis (ISSTA). New York, NY, USA: ACM Press, 2004. Pp. 86-96.

24. Schroeter A., Zimmermann T., Premraj R., Zeller A. If Your Bug Database Could Talk. (Short Paper) // Proceedings of the 5th International Symposium on Empirical Software Engineering. Volume II: Short Papers and Posters. 2006.-September. Pp. 18-20.

25. Fenton N. E., Pfleeger S. L. Software Metrics: A Rigorous and Practical Approach. 2nd edition. Boston, MA, USA: PWS Publishing Co., 1998.

26. Graves T. L., Karr A. F., Marron J. S., Siy H. Predicting Fault Incidence

27. Using Software Change History // IEEE Trans. Softw. Eng. 2000. Vol. 26, no. 7. Pp. 653-661.

28. Arisholm E., Briand L. C. Predicting fault-prone components in a java legacy system // Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering. ISESE '06. New York, NY, USA: ACM,2006. Pp. 8-17.

29. Menzies T., Greenwald J., Frank A. Data Mining Static Code Attributes to Learn Defect Predictors // IEEE Trans. Softw. Eng. 2007. — January. Vol. 33. Pp. 2-13.

30. Jiang Y., Cukic B., Menzies T. Fault Prediction using Early Lifecycle Data // Proceedings of the The 18th IEEE International Symposium on Software Reliability. ISSRE '07. Washington, DC, USA: IEEE Computer Society,2007. Pp. 237-246.

31. Neil M. D. Multivariate Assessment of Software Products. Vol. 1. Denver, CO, USA: ACM Press, 1992. Pp. 17-37.

32. Koru A. G., Liu H. An investigation of the effect of module size on defect prediction using static measures // Proceedings of the 2005 workshop on Predictor models in software engineering. PROMISE '05. New York, NY, USA: ACM, 2005. Pp. 1-5.

33. Ma Y., Guo L., Cukic B. Statistical framework for the prediction of fault--proneness // Advances in machine learning application in software engineering. Idea Group Inc., 2007. Pp. 237-265.

34. Guo L., Ma Y., Cukic B., Singh H. Robust Prediction of Fault-Proneness by Random Forests // Proceedings of the 15th International Symposium on Software Reliability Engineering. Washington, DC, USA: IEEE Computer Society, 2004. Pp. 417-428.

35. Drummond C., Holte R. C. C4.5, Class Imbalance, and Cost Sensitivity: Why Under-sampling beats Over-sampling //In Workshop on Learning from Imbalanced Datasets II. Washington, DC, USA: 2003. Pp. 1-8.

36. Drummond C., Holte R. C. Severe class imbalance: Why better algorithms are not the answer // Proceedings of the 16th European Conference of Machine Learning. Porto, Portugal: Springer, 2005. Pp. 539-546.

37. Mahaweerawat A., Sophasathit P., Lursinsap C. Software fault prediction using fuzzy clustering and radial basis function network //In International conference on intelligent technologies. Vietnam: 2002. Pp. 304-313.

38. Thwin M. M. T., Quah T.-S. Application of neural networks for software quality prediction using object-oriented metrics //J. Syst. Softw. 2005.— May. Vol. 76. Pp. 147-156.

39. Sahraoui H., Serhani M. A., Boukadoum M. Extending Software Quality Predictive Models Using Domain Knowledge. Proceedings of the 5th International ECOOP Workshop on Quantitative Approaches in Object-Oriented Software Engineering. 2001.

40. Fenton N. E., Neil M. Software metrics: roadmap // ICSE '00: Proceedings of the Conference on The Future of Software Engineering. New York, NY, USA: ACM, 2000. Pp. 357-370.

41. Bertolino A., Strigini L. On the Use of Testability Measures for Dependability Assessment // IEEE Trans. Softw. Eng. 1996. February. Vol. 22. Pp. 97-108.

42. Diaz M., Sligo J. How Software Process Improvement Helped Motorola // IEEE Softw. 1997.-September. Vol. 14. Pp. 75-81.

43. Jones C. The Pragmatics of Software Process Improvements // Software Process Newsletter, IEEE CS Technical Council on Software Eng. 1996. Vol. 14. Pp. 1-4.

44. Рахманов В. Ю., Тимченко Б. Д. Метрики в современном тестировании // Научно-технический вестник СПбГИТМО (ТУ). Выпуск 10. Информация и управление в технических системах. СПбГУ ИТМО, 2003. С. 108-111.

45. Li М. N., Malaiya Y. К., Denton J. Estimating the Number of Defects: A Simple and Intuitive Approach // Proc. 7th International Symposium on Software Reliability Engineering (ISSR.E). 1998. Pp. 307-315.

46. IEEE. IEEE standard classification for software anomalies. IEEE Std 1044-1993, 1994.

47. Board I. S. T. Q. ISTQB Standard Glossary of Terms used in Software Testing VI. 1. 2005.

48. Program evolution: processes of software change, Под ред. M. M. Lehman, L. A. Belady. San Diego, CA, USA: Academic Press Professional, Inc., 1985. ISBN: 0-12-442440-6.

49. Ко A. J., Myers B. A. A framework and methodology for studying the causes of software errors in programming systems //J. Vis. Lang. Comput. 2005. — February. Vol. 16. Pp. 41-84.

50. Липаев В. В. Программная инженерия. Методологические основы. М.: ТЕИС, 2006. 608 с.

51. Nikora А. P., Munson J. С. Developing Fault Predictors for Evolving Software Systems // Proceedings of the 9th International Symposium on Software Metrics. Washington, DC, USA: IEEE Computer Society, 2003. Pp. 338-350.

52. Menzies T., Milton Z., Turhan B. et al. Defect prediction from static code features: current results, limitations, new approaches // Automated Software Engg. 2010.-December. Vol. 17. Pp. 375-407.

53. Диаконис П., Эфрон Б. Статистические методы с интенсивным использованием ЭВМ // В мире науки. М.: 1993. С. 60-72.

54. Zimmermann Т. Taking lessons from history // Proceedings of the 28th international conference on Software engineering. ICSE '06. New York, NY, USA: ACM, 2006. Pp. 1001-1005.

55. Hassan A. E., Holt R. C. Studying The Evolution of Software Systems Using Evolutionary Code Extractors // Proceedings of the Principles of Software Evolution, 7th International Workshop. Washington, DC, USA: IEEE Computer Society, 2004. Pp. 76-81.

56. Nagappan N., Ball T. Use of relative code churn measures to predict system defect density // Proceedings of the 27th international conference on Software engineering. ICSE '05. New York, NY, USA: ACM, 2005. Pp. 284-292.

57. Hassan А. E., Holt R. C. The Top Ten List: Dynamic Fault Prediction // Proceedings of the 21st IEEE International Conference on Software Maintenance. Washington, DC, USA: IEEE Computer Society, 2005. Pp. 263-272.

58. Ostrand Т. J., Weyuker E. J., Bell R. M. Predicting the Location and Number of Faults in Large Software Systems // IEEE Trans. Softw. Eng. 2005. — April. Vol. 31. Pp. 340-355.

59. Gall H., Jazayeri M., Krajewski J. CVS Release History Data for Detecting Logical Couplings // Proceedings of the 6th International Workshop on Principles of Software Evolution. Washington, DC, USA: IEEE Computer Society, 2003. Pp. 13-23.

60. Kim S., Zimmermann Т., Whitehead Jr. E. J., Zeller A. Predicting Faults from Cached History // Proceedings of the 29th international conference on Software Engineering. ICSE '07. Washington, DC, USA: IEEE Computer Society, 2007. Pp. 489-498.

61. Гайдышев И. Анализ и обработка данных. СПб.: Питер, 2001. 232 с.

62. Барсегян А. А., Куприянов М. С., Степаненко В. В., Холод И. И. Технологии анализа данных: Data mining, Visual Mining, Text Mining, OLAP. СПб.: БХВ-Петербург, 2007. 384 с.

63. Гайсарян С. С., Чернов А. В., Белеванцев А. А. и др. О некоторых задачах анализа и трансформации программ // Труды Института системного программирования РАН. М.: Институт системного программирования РАН, 2004. С. 7-40.

64. Князев Е. Г., Шопырин Д. Г. Методы обнаружения закономерностей эволюции программного кода // Труды XIV Всероссийской научно-методической конференции «Телематика-2007». Т. 2. СПбГУ ИТМО, 2007. С. 435-436.

65. Воробьёв А. В. Метрики как средство оценивания качества программного обеспечения // Авиакосмическое приборостроение. М.: 2007. С. 19-31.

66. Ермаков А. А. Модель оценки эффективности тестирования программного обеспечения // Экономика и производство. М.: 2008. С. 39-42.

67. Gousios G., Kalliamvakou Е., Spinellis D. Measuring developer contribution from software repository data // Proceedings of the 2008 international working conference on Mining software repositories. MSR '08. New York, NY, USA: ACM, 2008. Pp. 129-132.

68. Hassan A. E. The road ahead for Mining Software Repositories // Frontiers of Software Maintenance 2008. Beijing, China: IEEE Computer Society, 2008. Pp. 48-57.

69. Just S., Premraj R., Zimmermann Т. Towards the next generation of bug tracking systems // Proceedings of the 2008 IEEE Symposium on Visual Languages and Human-Centric Computing. VLHCC '08. Washington, DC, USA: IEEE Computer Society, 2008. Pp. 82-85.

70. Bettenburg N., Just S., Schröter A. et al. What makes a good bug report? // Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering. SIGSOFT '08/FSE-16. New York, NY, USA: ACM, 2008. Pp. 308-318.

71. Nagappan N., Murphy B., Basiii V. The influence of organizational structure on software quality: an empirical case study // Proceedings of the 30th international conference on Software engineering. ICSE '08. New York, NY, USA: ACM, 2008. Pp. 521-530.

72. Weyuker E. J., Ostrand T. J., Bell R. M. Do too many cooks spoil the broth? Using the number of developers to enhance defect prediction models // Empirical Softw. Engg. 2008. October. Vol. 13. Pp. 539-559.

73. Mens T., Wermelinger M., Ducasse S. et al. Challenges in Software Evolu- -tion // Proceedings of the Eighth International Workshop on Principles of Software Evolution. Washington, DC, USA: IEEE Computer Society, 2005. Pp. 13-22.

74. Briand L. C., Basiii V. R., Thomas W. M. A Pattern Recognition Approach for Software Engineering Data Analysis // IEEE Trans. Softw. Eng. 1992. — November. Vol. 18. Pp. 931-942.

75. Khoshgoftaar T. M., Munson J. C., Bhattacharya B. B., Richardson G. D. Predictive Modeling Techniques of Software Quality from Software Measures // IEEE Trans. Softw. Eng. 1992. November. Vol. 18. Pp. 979-987.

76. Godfrey M. W., German D. M. The past, present, and future of software evolution // Frontiers of Software Maintenance 2008. Beijing, China: IEEE Computer Society, 2008. Pp. 129-138.

77. Basili V. R., Perricone В. T. Software errors and complexity: an empirical investigationO // Commun. ACM. 1984. — January. Vol. 27. Pp. 42-52.

78. Hudepohl J. P., Aud S. J., Khoshgoftaar T. M. et al. Emerald: Software Metrics and Models on the Desktop // IEEE Softw. 1996. — September. Vol. 13. Pp. 56-60.

79. Sayyad J., Lethbridge C. Supporting Software Maintenance by Mining Software Update Records // Proceedings of the IEEE International Conference on Software Maintenance (ICSM'01). ICSM '01. Washington, DC, USA: IEEE Computer Society, 2001. Pp. 22-31.

80. Фаулер M. Рефакторинг: улучшение существующего кода. СПб.: Символ-Плюс, 2006. 432 с.

81. Гмурман В. Е. Теория вероятностей и математическая статистика. М.: Высшее образование, 2008. 479 с.

82. Kim S., Whitehead Е. J., Jr. How long did it take to fix bugs? // Proceedings of the 2006 international workshop on Mining software repositories. MSR. '06. New York, NY, USA: ACM, 2006. Pp. 173-174.

83. Fischer H., Munchen T. U., Wagner S. et al. Software Reliability Model Based on a Geometric Sequence of Failure Rates // 11th International Conference on R.eliable Software Technologies (Ada-Europe '06). Vol. 4006. Springer, 2006. Pp. 143-154.

84. Higo Y., Murao К., Kusumoto S., Inoue К. Predicting fault-prone modules based on metrics transitions // Proceedings of the 2008 workshop on Defects in large software systems. DEFECTS '08. New York, NY, USA: ACM, 2008. Pp. 6-10.

85. Mockus A., Weiss D. M. Predicting risk of software changes // Bell Labs Technical Journal. 2000. Vol. 5. Pp. 169-180.

86. Malaiya Y. K., Denton J. Module Size Distribution and Defect Density // Proceedings of the 11th International Symposium on Software Reliability Engineering. ISSRE '00. Washington, DC, USA: IEEE Computer Society, 2000. Pp. 62-71.

87. Лоусон 4., Хенсон P. Численное решение задач метода наименьших квадратов. М.: Наука, 1986. 232 с.

88. Kim S., Zimmermann Т., Kim M. et al. TA-RE: an exchange language for mining software repositories // MSR '06: Proceedings of the 2006 international workshop on Mining software repositories. New York, NY, USA: ACM, 2006. Pp. 22-25.

89. Zimmermann T., WeiPygerber P. Preprocessing CVS Data for Fine-grained Analysis // Proceedings of the First International Workshop on Mining Software Repositories. 2004.— May. Pp. 2-6.

90. Zimmermann T. Fine-grained processing of CVS archives with APFEL // Proceedings of the 2006 OOPSLA workshop on eclipse technology eXchange. eclipse '06. New York, NY, USA: ACM, 2006. Pp. 16-20.

91. Antoniol G., Di M., Gall P. H., Pinzger M. Towards the integration of ver-sioning systems, bug reports and source code meta-models // Electr. Notes Theor. Comput. Sci. 2004. Vol. 127. Pp. 83-94.

92. Flatscher R. G. Metamodeling in EIA/CDIF—meta-metamodel and metamodels // ACM Trans. Model. Comput. Simul. 2002. October. Vol. 12. Pp. 322-342.

93. Hindle A., German D. M. SCQL: a formal model and a query language for source control repositories // Proceedings of the 2005 international workshop on Mining software repositories. MSR '05. New York, NY, USA: ACM, 2005. Pp. 1-5.

94. Kiefer C., Bernstein A. Analyzing Software with iSPARQL //In Proc. of the 3rd Int. Ws. on Semantic Web Enabled Software Engineering. Springer, 2007.

95. Mierle K. B., Mierle K. B., Laven K. et al. CVS data extraction and analysis: A case study: Tech. rep.: 2004.

96. Spinellis D., Gousios G., Karakoidas V. et al. Evaluating the Quality of Open Source Software // Electron. Notes Theor. Comput. Sci. 2009. — March. Vol. 233. Pp. 5-28.

97. Gousios G., Spinellis D. A platform for software engineering research // Proceedings of the 2009 6th IEEE International Working Conference on Mining Software Repositories. MSR. '09. Washington, DC, USA: IEEE Computer Society, 2009. Pp. 31-40.

98. Bird C., Rigby P. C., Barr E. T. et al. The promises and perils of mining git // Proceedings of the 2009 6th IEEE International Working Conference on Mining Software Repositories. MSR '09. Washington, DC, USA: IEEE Computer Society, 2009. Pp. 1-10.

99. Voinea L., Telea A. An open framework for CVS repository querying, analysis and visualization // MSR. '06: Proceedings of the 2006 international workshop on Mining software repositories. New York, NY, USA: ACM, 2006. Pp. 33-39.

100. Zimmermann T., Kim S., Zeller A., Whitehead E. J., Jr. Mining version archives for co-changed lines // Proceedings of the 2006 international workshop on Mining software repositories. MSR '06. New York, NY, USA: ACM, 2006. Pp. 72-75.

101. Sliwerski J., Zimmermann T., Zeller A. When do changes induce fixes? // MSR. '05: Proceedings of the 2005 international workshop on Mining software repositories. New York, NY, USA: ACM, 2005. Pp. 1-5.

102. Kim S., Pan K., E. E. James Whitehead J. Memories of bug fixes // SIG-SOFT '06/FSE-14: Proceedings of the 14th ACM SIGSOFT internationalsymposium on Foundations of software engineering. New York, NY, USA: ACM, 2006. Pp. 35-45.

103. Cubranic D., Murphy G. C., Singer J., Booth K. S. Hipikat: A Project Memory for Software Development // IEEE Trans. Softw. Eng. 2005. — June. Vol. 31. Pp. 446-465.

104. Miller W., Myers E. W. A file comparison program // Software Practice and Experience. 1985. Vol. 15. Pp. 1025-1040.

105. Emam K. E., Benlarbi S., Goel N., Rai S. N. Comparing case-based reasoning classifiers for predicting high risk software components // J. Syst. Softw. 2001.-January. Vol. 55. Pp. 301-320.

106. Zhang H., Zhang X. Comments on «Data Mining Static Code Attributes to Learn Defect Predictors» // IEEE Trans. Softw. Eng. 2007. — September. Vol. 33. Pp. 635-637.

107. Menzies T., Dekhtyar A., Distefano J., Greenwald J. Problems with Precision: A R.esponse to «Comments on 'Data Mining Static Code Attributes to Learn Defect Predictors'» // IEEE Transactions on Software Engineering. 2007. Vol. 33. Pp. 637-640.

108. Lessmann S., Baesens B., Mues C., Pietsch S. Benchmarking Classification Models for Software Defect Prediction: A Proposed Framework and Novel Findings // IEEE Trans. Softw. Eng. 2008,-July. Vol. 34. Pp. 485-496.

109. Fawcett T. An introduction to R.OC analysis // Pattern R.ecogn. Lett. 2006.-June. Vol. 27. Pp. 861-874.

110. Provost F., Fawcett T. R.obust Classification for Imprecise Environments // Mach. Learn. 2001.-March. Vol. 42. Pp. 203-231.

111. Khoshgoftaar T. M., Seliya N. Comparative Assessment of Software Quality Classification Techniques: An Empirical Case Study // Empirical Softw. Engg. 2004.-September. Vol. 9. Pp. 229-257.

112. Bradley A. P. The use of the area under the ROC curve in the evaluation of machine learning algorithms // Pattern Recognition. 1997. Vol. 30, no. 7. Pp. 1145-1159.

113. Mende T., Koschke R. R.evisiting the evaluation of defect prediction models // Proceedings of the 5th International Conference on Predictor Models in Software Engineering. PROMISE '09. New York, NY, USA: ACM, 2009. Pp. 7:1-7:10.