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


Автоматическая рекомендация имен методов в IntelliJ IDEA

Работа №130030

Тип работы

Дипломные работы, ВКР

Предмет

информатика

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

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


Введение 4
1. Обзор 6
1.1. Алгоритмы рекомендации имен методов 6
1.1.1. ConvAttention 6
1.1.2. Code2vec 7
1.1.3. Code2seq 9
1.2. Метрики для оценки качества предсказания 11
1.3. Компоненты IntelliJ Platform 13
1.3.1. PSI 13
1.3.2. Inspection 15
1.4. Выводы из обзора 15
2. Разработанное решение 17
2.1. Архитектура плагина 17
2.2. Алгоритм работы инспекции 20
2.3. Модуль сбора статистики 23
3. Апробация 24
Заключение 26
Список литературы 27


При разработке программного обеспечения большое внимание уделяется качеству кода. Важно, чтобы программный код не только решал поставленную задачу, но и был понятен другим разработчикам [5]. Со временем кодовая база растет, каждый раз вникать в логику классов и методов затруднительно, поэтому стоит ответственно подходить к именованию всех идентификаторов, особенно при разработке API (Application Program Interface) библиотек.
В последние годы активно развиваются и внедряются во многие сферы методы машинного обучения. Анализ программного кода является интересной областью для исследований [15], поскольку содержит в себе огромное количество данных и множество различных задач. Например, обнаружение ошибок [7], поиск плагиата [8], предсказание имен идентификаторов [13].
Исследователи разрабатывают алгоритмы предсказания имени идентификатора, основываясь на контексте вокруг него. Эта задача интересна и актуальна, поскольку имена идентификаторов влияют на читаемость кода. Было замечено, что низкое качество имен приводит к дефектам в работе программ [9].
Для повышения качества кода разработчики используют инструменты для анализа кода в интегрированных средах разработки. Некоторые из них работают как автоматические инспекции: в фоновом режиме анализируют код и предоставляют подсказки о том, что можно улучшить. Например, поиск дублирующихся фрагментов кода, поиск опечаток, упрощение синтаксических конструкций. С помощью автоматических инспекций можно значительно упростить работу программистов, частично переложив заботу о поиске недостатков на среду разработки.
На данный момент для среды разработки IntelliJ IDEA нет плагинов, решающих задачу автоматической рекомендации имен методов. В данной работе предлагается решение в виде автоматической инспекции, которая рекомендует имена для методов.
Постановка задачи
Целью работы является разработка плагина для IntelliJ IDEA, который автоматически рекомендует имена для методов. Для достижения этой цели были поставлены следующие задачи:
• провести обзор предметной области;
• выбрать алгоритм рекомендации имен методов;
• разработать архитектуру и реализовать плагин;
• выполнить апробацию.


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

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

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


В ходе работы были достигнуты следующие результаты.
• Проведен обзор предметной области. Рассмотрены алгоритмы рекомендации имен методов, описаны метрики для оценки их качества и проведено сравнение описанных алгоритмов.
• Выбран алгоритм рекомендации имен методов, демонстрирующий высокое качество предсказаний.
• Разработана архитектура и выполнена реализация плагина к IntelliJ IDEA. Плагин в фоновом режиме анализуерт код и предлагает рекомендации имен для методов.
• Проведена апробация плагина. Плагин протестирован пользователями, которые в основном дали положительную оценку. Проведен анализ собранной статистики использования и было замечено, что на методах короче тридцати символов плагин генерирует наиболее релевантные рекомендации.
Таким образом, в результате данной работы был создан плагин для среды разработки IntelliJ IDEA, который рекомендует имена для методов. Код проекта доступен по ссылке.



[1] Allamanis Miltiadis, Peng Hao, Sutton Charles. A convolutional attention network for extreme summarization of source code // International Conference on Machine Learning. — 2016. — P. 20912100.
[2] Alon Uri, Levy Omer, Yahav Eran. code2seq: Generating sequences from structured representations of code // arXiv preprint arXiv:1808.01400. — 2018.
[3] Bahdanau Dzmitry, Cho Kyunghyun, Bengio Yoshua. Neural machine translation by jointly learning to align and translate // arXiv preprint arXiv:1409.0473. --2014.
[4] A Comparison of Sequence-to-Sequence Models for Speech Recognition. / Rohit Prabhavalkar, Kanishka Rao, Tara N Sainath et al. // Interspeech. — 2017. — P. 939-943.
[5] Fowler Martin. Refactoring: improving the design of existing code. — Addison-Wesley Professional, 2018.
[6] Learning phrase representations using RNN encoder-decoder for statistical machine translation / Kyunghyun Cho, Bart Van Merriёnboer, Caglar Gulcehre et al. // arXiv preprint arXiv:1406.1078. --2014.
[7] Pradel Michael, Sen Koushik. DeepBugs: A Learning Approach to Name-based Bug Detection // arXiv preprint arXiv:1805.11683.— 2018.
[8] Ragkhitwetsagul Chaiyong, Krinke Jens, Clark David. A comparison of code similarity analysers // Empirical Software Engineering. — 2018. — Vol. 23, no. 4. — P. 2464-2519.
[9] Relating identifier naming flaws and code quality: An empirical study / Simon Butler, Michel Wermelinger, Yijun Yu, Helen Sharp // Reverse Engineering, 2009. WCRE’09. 16th Working Conference on / IEEE.— 2009. —P. 31-35.
[10] Russell Stuart, Norvig Peter, Intelligence Artificial. A modern approach // Artificial Intelligence. Prentice-Hall, Egnlewood Cliffs. — 1995. —Vol. 25, no. 27. —P. 79-80.
[11] Sequence to sequence-video to text / Subhashini Venugopalan, Marcus Rohrbach, Jeffrey Donahue et al. // Proceedings of the IEEE international conference on computer vision. — 2015. — P. 4534-4542.
[12] Sutskever Ilya, Vinyals Oriol, Le Quoc V. Sequence to sequence learning with neural networks // Advances in neural information processing systems. — 2014. — P. 3104-3112.
[13] Vasilescu Bogdan, Casalnuovo Casey, Devanbu Premkumar. Recovering clear, natural identifiers from obfuscated JS names // Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering / ACM. — 2017. — P. 683-693.
[14] code2vec: Learning Distributed Representations of Code / Uri Alon, Meital Zilberstein, Omer Levy, Eran Yahav // arXiv preprint arXiv:1803.09473. — 2018.
[15] A survey of machine learning for big code and naturalness / Miltiadis Allamanis, Earl T Barr, Premkumar Devanbu, Charles Sutton // ACM Computing Surveys (CSUR). — 2018. — Vol. 51, no. 4. — P. 81.



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



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


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