Разработка программного обеспечения представляет собой сложный и долгий процесс, включающий в себя координацию команды (иногда и нескольких команд) разработчиков, оценку рисков, планирование, решение сложных технических задач и другие аспекты. Поскольку чаще всего над одним проектом или модулем работает команда разработчиков, разработка осуществляется с использованием системы контроля версий. Это позволяет контролировать изменения, производимые разными членами команды в коде проекта. Для улучшения качества кода применяются различные техники и практики, такие как статический анализ кода и код ревью. Однако, несмотря на это, некоторые ошибки всё же остаются незамеченными.
Ряд исследований показывает связь между частотой нахождения ошибок в фрагментах кода и тем, как часто данные фрагменты изменяются ([13], [3], [6]). Метод или функция может часто изменяться из-за различных технических (часть параметров могут быть вынесены в файл конфигурации), архитектурных или внешних (слишком частые изменения бизнес-логики) проблем проекта. Так, в статье [5] говорится о том, что если в фрагменте кода была найдена ошибка, то с высокой вероятностью в этом же фрагменте могут быть и другие ошибки. Также успешное исправление ошибки может произойти не с первой попытки: например, результаты статьи [7] показывают, что в 25% случаев исправление ошибки было неправильным и требовало повторного исправления.
Таким образом, можно сделать вывод о том, что часто изменяемые фрагменты кода заслуживают повышенного внимания со стороны разработчиков. Если привлечь внимание разработчика к такому фрагменту кода, то он сможет более пристально его изучить и исправить потенциальные проблемы в нём. Применение такой практики на регулярной основе позволит улучшить качество как отдельно взятых частей проекта (благодаря исправлению локальных ошибок), так и всего проекта в целом (изменение архитектуры проекта при необходимости). Чтобы такое стало возможно, необходимо, чтобы инструмент, позволяющий осуществить это, был интегрирован в среду разработки, которую используют разработчики. Иначе вероятность его использования сильно понижается, поскольку, как показывает исследование [11], разработчики не склонны к использованию других инструментов (документация, трекеры задач), кроме среды разработки.
В ходе данной работы были достигнуты следующие результаты:
• реализован плагин для сбора и визуализации статистики о частоте изменений методов в системе контроля версий;
— https://github.com/ml-in-programming/topias;
— https://github.com/ml-in-programming/topias/releases/tag/v1.0-beta;
• решение интегрировано с RefactoringMiner для отслеживания ре- факторингов;
• собранная статистика отображается в виде текстовых меток и графиков частоты изменений;
• сделан доклад на конференции SEIM-2019.
[1] Accurate and efficient refactoring detection in commit history / Nikolaos Tsantalis, Matin Mansouri, Laleh M Eshkevari et al. // Proceedings of the 40th International Conference on Software Engineering / ACM. — 2018. — P. 483-494.
[2] Automatic detection of refactorings for libraries and frameworks / Danny Dig, Can Comertoglu, Darko Marinov, Ralph Johnson // Proceedings of Workshop on Object Oriented Reengineering (WOOR’05). — 2005.
[3] Classifying code changes and predicting defects using changegenealogies / Kim Herzig, Sascha Just, Andreas Rau, Andreas Zeller // Technical Report, Tech. Rep. — 2013.
[4] Consortium SQLite. SQLite // SQLite web-site. — Access mode: https://www.sqlite.org/index.html (online; accessed: 20.05.2019).
[5] Detect related bugs from source code using bug information / Deqing Wang, Mengxiang Lin, Hui Zhang, Hongping Hu // 2010 IEEE 34th Annual Computer Software and Applications Conference / IEEE. —2010. —P. 228-237.
[6] Giger Emanuel. Fine-grained Code Changes and Bugs: Improving Bug Prediction : Ph. D. thesis / Emanuel Giger ; Verlag nicht ermittelbar. — 2012.
[7] How do fixes become bugs? / Zuoning Yin, Ding Yuan, Yuanyuan Zhou et al. // Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering / ACM. —2011. —P. 26-36.
[8] JFree. JFreeChart // JFree web-site. -- Access mode: http://www. jfree.org/jfreechart/ (online; accessed: 20.05.2019).
[9] Janes Andrea, Mairegger Michael, Russo Barbara. code_call_lens: raising the developer awareness of critical code // Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering / ACM. — 2018. — P. 876-879.
[10] JetBrains. Git4Idea // Git4Idea Github repository. — Access mode: https://github.com/JetBrains/intellij-community/tree/ master/plugins/git4idea (online; accessed: 20.05.2019).
[11] Johnson Philip M. You can’t even ask them to push a button: Toward ubiquitous, developer-centric, empirical software engineering // The NSF Workshop for New Visions for Software Design and Productivity: Research and Applications. — 2001.
[12] Ref-Finder: a refactoring reconstruction tool based on logic query templates / Miryung Kim, Matthew Gee, Alex Loh, Napol Rachatasumrit // Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering / ACM. —2010. —P. 371-372.
[13] What is the connection between issues, bugs, and enhancements?: lessons learned from 800+ software projects / Rahul Krishna, Amritanshu Agrawal, Akond Rahman et al. // Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Practice / ACM. -- 2018. -- P. 306-315.
[14] Xing Zhenchang, Stroulia Eleni. The JDEvAn tool suite in support of ob ject-oriented evolutionary development // Companion of the 30th international conference on Software engineering / ACM. -- 2008. -P. 951-952.
[15] Суворов Егор Фёдорович. Улучшение структурной замены кода в IntelliJ IDEA.