При создании современного программного обеспечения зачастую возникает потребность в использовании специальных средств, позволяющих программистам контролировать ход разработки, получать отзывы
от пользователей и поддерживать связь с другими членами команды, особенно в больших распределенных проектах.
Одним из таких средств является система отслеживания ошибок.
Эта система позволяет команде разработчиков учитывать и контролировать ошибки, найденные в ходе эксплуатации программного обеспечения. Каждый, кто имеет доступ к системе, может создать специальный запрос, затем внутри команды этот запрос будет обработан, будет выделен человек или команда, ответственные за решение поставленной задачи или исправление допущенных исключительных ситуаций. Запрос получит уникальный номер, состояние, символизирующее статус работы, и может служить местом обсуждения проблемы внутри команды или между командой разработчиков и пользователем.
В связи с выше сказанным, в системах отслеживания ошибок можно выделить ряд прикладных задач, позволяющих упростить процесс работы создателей программного обеспечения. Один из примеров - задача
объединения сообщений в кластеры для нахождения дубликатов.
Отдельного упоминания заслуживает задача определения ответственного за устранение неисправности, описанной в сообщении. В больших проектах возможны ситуации, когда ежедневно к отслеживанию добавляются тысячи новых ошибок и предложений к улучшению, требующих назначения ответственного. В особенности это касается отчетов об исключительных ситуациях - во многих крупных проектах имеется возможность автоматической отправки такого типа сообщений, из-за чего система отслеживания ошибок будет подвергаться огромной нагрузке. Также стоит отметить, что данные отчеты генерируются автоматически и очень часто не содержат дополнительной информации от пользователя. Ручное определение разработчика в таком случае может занимать еще больший объем времени, даже в случае, если человек, обрабатывающий запросы, обладает достаточными знаниями о всех деталях разрабатываемого программного обеспечения.
Таким образом, можно сделать заключение, что необходима автоматизация данного процесса, позволяющая переложить большую часть работы с разработчика на машину. Методы машинного обучения, позволяющие решать многие задачи классификации и кластеризации, могут быть эффективными и для проблемы классификации отчетов об исключительных ситуациях.
В данной работе была рассмотрена задача автоматического назначения ответственного за отчет об исключительных ситуациях проекта ReSharper. Были рассмотрены различные способы преобразования данных, была рассмотрена возможность применения различных классификаторов, в том числе и составных. Были проведены сравнение и анализ результатов.
Исходя из полученных данных, был выбран классификатор на основе метода логистической регрессии, реализованного в библиотеке scikitlearn, обладающий лучшими показателями усредненной по всем классам F1-меры, выбранной в качестве оценки точности - при помощи него удалось достичь значения в 0.63. При этом данный классификатор также показал лучшие результаты при измерении процента правильно
предсказанных отчетов - он верно определял разработчика в 74% случаев, что является хорошим результатом в рассматриваемой области (см. Рис. 1), а также новым результатом для более конкретной задачи классификации отчетов об исключительных ситуациях, показывающим, как уточнение области может влиять на способ подготовки данных и применяемые алгоритмы классификации.
На основе данного метода был реализован анализатор, позволяющий определять разработчика, который вероятнее всего ответственен за данный отчет об ошибке. Данный компонент встраивается в сервер,
занимающийся обменом сообщений с системой отслеживания ошибок.
Для уменьшения вероятности выдачи неверного предсказания было добавлено игнорирование результатов предсказания, обладающих недостаточно высокими вероятностными показателями. Это позволило снизить вероятность ошибки до 16% от общего размера тестовой выборки при общем размере количества проигнорированных элементов в 17%.
Также, была добавлена возможность предсказания нескольких наиболее вероятных, по мнению классификатора, разработчиков с их числовыми оценками вероятностей. Так, процент попаданий настоящего
разработчика в список из трех наиболее подходящих для тестовой выборки равен 85%, поэтому данная статистика может использоваться как дополнительная информация для команды разработчиков.
[1] Anvik J., Hiew L., Murphy G.C. Who should fix this bug? // ICSE. ––
2006. –– P. 361–370.
[2] Automated bug assignment: Ensemble-based machine learning in large
scale industrial contexts / L. Jonsson, M. Borg, D. Broman et al. //
Empirical Software Engineering. –– 2014.
[3] Bhattacharya P., Neamtiu I., Shelton C.R. Automated, highlyaccurate, bug assignment using machine learning and tossing graphs //
The Journal of Systems and Sofstware. –– 2012. –– Vol. 85, no. 10. ––
P. 2275–2292.
[4] Breiman L. Random forests // Machine learning. –– 2001. –– Vol. 45,
no. 1. –– P. 5–32.
[5] Chen T., Guestrin C. XGBoost: A Scalable Tree Boosting System. ––
2016.
[6] Cubranic D., Murphy G.C. Automatic bug triage using text
categorization // SEKE. –– 2004. –– P. 92–97.
[7] Freund Y., Schapire R.E. A Short Introduction to Boosting // Journal
of Japanese Society for Artificial Intelligence. –– 1999. –– P. 771–780.
[8] Genkin A., Lewis D.D., Madigan D. Sparse Logistic Regression for Text
Categorization. –– 2004.
[9] Gunn S.R. Support Vector Machines for classification and regression //
Technical report, University of Southampton, Faculty of Engineering,
Science and Mathematics; School of Electronics and Computer
Science. –– 1998.
[10] McCallum A., Nigam K., Mitchell T. Semi-supervised text
classification using EM // MIT Press. –– 2006.
35[11] Ramos J. Using TF-IDF to Determine Word Relevance in Document
Queries // Technical report, Department of Computer Science, Rutgers
University. –– 2003.
[12] Russell N., Cribbin L., Murphy T.B. Updated Classification
Methods using Unlabeled Data. –– 2013. –– URL: https://
cran.r-project.org/web/packages/upclass/upclass.pdf (online;
accessed: 11.03.2016).
[13] Scikit-learn: Machine Learning in Python / F. Pedregosa,
G. Varoquaux, A. Gramfort et al. // Journal of Machine Learning
Research. –– 2011. –– Vol. 12. –– P. 2825–2830.
[14] Sokolova M., Lapalme G. A systematic analysis of performance
measures for classification tasks // Information Processing and
Management 45. –– 2009. –– P. 427–437.
[15] A Study on Mutual Information-based Feature Selection for Text
Categorization / Y. Xu, G. Jones, J. Li et al. // Journal of
Computational Information Systems. –– 2007. –– P. 1007–1012.
[16] Yang Y., Pedersen J. O. A comparative study on feature selection
in text categorization // ICML-97, 14th International Conference on
Machine Learning. –– 1997. –– P. 412–420.
[17] A comparative study of decision tree ID3 and C4.5 / B. Hssina,
A. Merbouha, H. Ezzikouri, M. Erritali // International Journal of
Advanced Computer Science and Applications. –– 2014. –– P. 13–19.
[18] An empirical study on bug assignment automation using Chinese bug
data / Z. Lin, F. Shu, Y. Yang et al. // 3rd International Symposium on
Empirical Software Engineering and Measurement. –– 2009. –– P. 451–
455.
[19] Воронцов К.В. Лекции по метрическим алгоритмам классификации. –– 2008. –– URL: http://www.ccas.ru/voron/download/
MetricAlgs.pdf (online; accessed: 03.02.2016).
36[20] Воронцов К.В. Лекции по линейным алгоритмам классификации. –– 2009. –– URL: http://www.machinelearning.ru/wiki/
images/6/68/voron-ML-Lin.pdf (online; accessed: 29.12.2015).