Тип работы:
Предмет:
Язык работы:


Рекомендация улучшений кода на Java в IntelliJ IDEA

Работа №126351

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы37
Год сдачи2021
Стоимость4550 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
33
Не подходит работа?

Узнай цену на написание


Введение 4
1. Обзор 6
1.1. Рекомендация преобразований кода 8
1.1.1. Эвристические методы 8
1.1.2. Методы машинного обучения 9
1.2. Сравнение вариантов кода 10
1.2.1. Подход на основании метрик 11
1.3. Модели машинного обучения 12
1.4. Компоненты IntelliJ IDEA 13
1.5. Выводы 15
2. Подготовка модели 16
2.1. Инструмент для извлечения намерений 16
2.2. Подготовка данных для обучения 18
2.2.1. Цепочки намерений 19
2.3. Векторизация кода 20
2.4. Метрики качества 23
2.5. Модели 24
3. Плагин к IntelliJ IDEA 26
3.1. Особенности реализации плагина 26
3.2. Интеграция с инструментом предпросмотра 28
4. Апробация 29
4.1. Методология 29
4.2. Отзывы пользователей 30
Заключение 32
Список литературы 33

Интегрированные среды разработки (Integrated Development Environments, IDEs) на сегодняшний день являются одним из важней­ших инструментов для программистов [1]. С течением времени пада­ет число пользователей, использующих простые текстовые редакторы, и растет число пользователей, использующих среды разработки [2]. В частности, программисты активно используют средства автоматическо­го рефакторинга кода, предоставляемые ими [3, 4].
В среде разработки IntelliJ IDEA [5] существует механизм под назва­нием “Intention Actions”, название которого можно перевести как “на­мерения”. Намерения позволяют программисту применять некоторые часто выполняемые преобразования кода в автоматическом режиме. Например, такие действия могут оптимизировать код или делать его более читаемым, что экономит время и усилия программиста, позволяя не совершать монотонную работу вручную.
Данный механизм имеет несколько особенностей. Первая из них за­ключается в том, что намерения не всегда улучшают код: например, некоторые из них созданы для того, чтобы подготовить код к даль­нейшим преобразованиям. Вторая особенность заключается в том, что иногда для получения наилучшего варианта кода приходится приме­нять несколько намерений одно за другим. В результате программист может остановиться, применив одно намерение, но не получить при этом оптимальный вариант кода. Кроме того, само понятие качества кода субъективно: разные люди могут по-разному относиться к приме­ненному к коду преобразованию.
Чтобы учесть данные особенности, предлагается научиться распо­знавать целые цепочки намерений, которые делают код лучше. Так как количество комбинаций цепочек, а также участков кода, к которым они могут применяться, очень велико, предлагается использовать для решения этой задачи методы машинного обучения.
Постановка задачи
Целью данной работы является разработка плагина для IntelliJ IDEA, способного классифицировать намерения и цепочки намерений, выда­вая пользователю те из них, которые могут быть полезны в выбранной им позиции. Для достижения этой цели необходимо выполнить следу­ющие задачи:
• Разработать инструмент, способный извлекать необходимые дан­ные из кода, а именно, все возможные варианты кода, которые можно получить в выбранной позиции применением любого числа намерений. Применить данный инструмент к некоторой кодовой базе и привести полученные данные к подходящему для разметки виду.
• Обучить на полученных данных несколько моделей машинного обучения с различной архитектурой и выбрать из них наиболее точную. Модели должны определять, какие из вариантов кода, полученных с помощью механизма намерений, улучшают код.
• Разработать плагин для среды разработки IntelliJ IDEA, в кото­рый будет встроена обученная модель.
• Провести его апробацию на пользователях.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе данной работы было разработано расширение для среды раз­работки IntelliJ IDEA, предлагающее программисту наиболее подходя­щие изменения кода в выбранной позиции. Ключевым нововведением данной работы является использование для этого методов машинного обучения, а также возможность применять сразу цепочки намерений. Это позволяет программисту работать быстрее и эффективнее.
В процессе работы были достигнуты следующие результаты:
• Разработан инструмент для извлечения вариантов кода из кодо­вой базы. С его помощью удалось обработать несколько проектов и подготовить данные для разметки.
• Проведены эксперименты с несколькими моделями и выбрана наи­лучшая. Полученная модель была интегрирована в решение.
• Разработан плагин, предлагающий пользователю возможные ва­рианты преобразований. Реализована интеграция с механизмом предпросмотра.
• Проведена апробация на пользователях. Получены в целом поло­жительные отзывы, по результатам опроса локализованы некото­рые недостатки плагина, которые планируется исправить в буду­щем.
Код проекта доступен по ссылкам:
• Инструмент для извлечения вариантов кода — https://github.com/SacredArrow/idea-intentions-plugin
• Плагин — https://github.com/SacredArrow/usableIntentionsPlugin


[1] Stack Overflow. Developer Survey Results 2019. — https: //insights.stackoverflow.com/survey/2019. — 2019. — [Online; accessed November 24, 2020].
[2] Pierre Carbonnelle. PYPL index.— https://pypl.github.io/IDE. html. — 2020. — [Online; accessed November 24, 2020].
[3] Murphy G. C., Kersten M., Findlater L. How are Java software developers using the Elipse IDE? // IEEE Software. — 2006. — Vol. 23, no. 4. — P. 76-83.
[4] Amann S., Proksch S., Nadi S., Mezini M. A Study of Visual Studio Usage in Practice // 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER). — Vol. 1. — 2016. —P. 124-134.
[5] JetBrains. IntelliJ IDEA. — https://www.jetbrains.com/ru-ru/ idea/. — 2020. — [Online; accessed November 24, 2020].
[6] Fowler Martin. Refactoring: Improving the Design of Existing Code. — Boston, MA, USA : Addison-Wesley, 1999.-ISBN: 0-201-48567-2.
[7] Haas Roman, Hummel Benjamin. Deriving Extract Method Refactoring Suggestions for Long Methods // Software Quality. The Future of Systems- and Software Development / Ed. by Dietmar Winkler, Stefan Biffl, Johannes Bergsmann. — Cham : Springer International Publishing, 2016. — P. 144-155.
[8] Silva Danilo, Terra Ricardo, Valente Marco. JExtract: An Eclipse Plug­in for Recommending Automated Extract Method Refactorings. — 2015.-06.
[9] Palomba Fabio, Panichella Annibale, De Lucia Andrea et al. A textual­based technique for Smell Detection // 2016 IEEE 24th International Conference on Program Comprehension (ICPC). — 2016. — P. 1-10.
[10] Yue Ruru, Gao Zhe, Meng Na et al. Automatic Clone Recommendation for Refactoring Based on the Present and the Past. — 2018. — 1807.11184.
[11] Schapire Robert E. A Brief Introduction to Boosting // Proceedings of the 16th International Joint Conference on Artificial Intelligence - Volume 2. — IJCAI’99. — San Francisco, CA, USA : Morgan Kaufmann Publishers Inc., 1999. —P. 1401-1406.
[12] Fontana F. A., Zanoni M., Marino A., Mantyla M. V. Code Smell Detection: Towards a Machine Learning-Based Approach // 2013 IEEE International Conference on Software Maintenance. — 2013. — P. 396­399.
[13] Tempero E., Anslow C., Dietrich J. et al. The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies // 2010 Asia Pacific Software Engineering Conference. — 2010. — P. 336-345.
[14] Liu Hui, Xu Zhifeng, Zou Yanzhen. Deep learning based feature envy detection. - 2018. - 09. - P. 385-396.
[15] Mikolov Tomas, Chen Kai, Corrado Greg, Dean Jeffrey. Efficient Estimation of Word Representations in Vector Space. — 2013. — 1301.3781.
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ