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


Ассистент для разработчиков в среде IntelliJ IDEA

Работа №125285

Тип работы

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

Предмет

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

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

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


Введение 5
1. Обзор литературы 7
1.1. Существующие решения 7
1.1.1. Selene 7
1.1.2. Seahawk 8
1.1.3. Prompter 8
1.1.4. Bing Developer Assistant 9
1.1.5. NLP2Code 10
1.1.6. Иные решения 10
1.1.7. Выводы 11
1.2. Метрики для оценки качества ранжирования 13
1.2.1. Normalized discounted cumulative gain 14
1.2.2. Expected reciprocal rank 14
2. Алгоритм рекомендации 16
2.1. Форма предоставляемых данных 16
2.2. Получение данных 17
2.3. Удаление дубликатов 17
2.4. Ранжирование полученных данных 18
2.4.1. Ранжирование фрагментов кода 18
2.4.2. Ранжирование обсуждений 20
3. Архитектура инструмента 21
4. Пользовательский интерфейс 22
4.1. Функциональность 22
5. Апробация 24
5.1. Анализ результатов 24
5.2. Границы применимости 25
Заключение 26
Список литературы 27

С каждым годом сложность разработки программных продуктов неуклонно возрастает, усложняются проекты и задачи. В связи с этим всё более востребованными становятся инструменты, облегчающие раз­работку и повышающие производительность труда программистов. Со­временные среды разработки (Integrated Development Environment, IDE) включают множество различных инструментов: средства автодопол­нения, исправления ошибок, автоматического рефакторинга и многие другие. Они призваны сделать процесс разработки более эффективным путём автоматизации и предоставления различного рода подсказок.
Но часто существующих инструментов оказывается недостаточно. Разработчики, особенно начинающие, зачастую не обладают необходи­мыми знаниями для работы с API (Application Programming Interface) различных библиотек и фреймворков. Встроенные средства IDE спо­собны показать лишь список возможных методов, но не пример их ис­пользования. Поэтому приходится покидать среду разработки и искать нужную информацию в других источниках, таких как GitHub1 и Stack Overflow2. Однако частые переключения между различными окнами нежелательны, поскольку они негативно сказываются на продуктивно­сти разработчиков [1, 2].
Решить данную проблему можно, если полезная информация будет доступна непосредственно в среде разработки. Это позволит повысить продуктивность работы, а также использовать дополнительные дан­ные, недоступные вне IDE. Собранный таким образом контекст может улучшить релевантность (т.е. соответствие) предлагаемой информации текущим задачам пользователя [3].
Выделяют два принципиальных способа получения полезной инфор­мации: генеративный и ранжирующий. Первый способ заключается в преобразовании некоторого формального описания задачи в полезные данные. Примером могут служить системы для автоматического созда­ния исходного кода, решающего поставленную задачу [4]. Второй способ предполагает поиск, оценку и переиспользование подходящих данных, ранее созданных другими людьми. Он лежит в основе различных реко­мендательных систем [5, 6].
На текущем уровне развития технологий второй подход кажется бо­лее предпочтительным из-за универсальности. Он позволяет предостав­лять решения типичных задач, возникающих в работе программистов, по описанию на естественном языке, может быть применён для раз­ных языков программирования, а также не налагает дополнительных ограничений на форму представления полезной для пользователя ин­формации.
Существующие на сегодняшний день реализации систем, использу­ющих данных подход [7, 8], недостаточно удобны и функциональны. Для некоторых платформ, например, IntelliJ IDEA3, расширений с ука­занной функциональностью совсем немного, а качество их рекоменда­ции оставляет желать лучшего.
Постановка задачи
Целью данной работы является создание расширения для IntelliJ IDEA, предоставляющего пользователю подсказки и релевантные фраг­менты кода из различных источников. Для достижения поставленной цели были сформулированы следующие задачи:
• провести анализ предметной области и существующих решений;
• реализовать алгоритм рекомендации полезной информации;
• разработать архитектуру инструмента;
• реализовать пользовательский интерфейс;
• провести апробацию разработанного решения.

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

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

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


В ходе данной работы были получены следующие результаты.
• Проведён анализ предметной области. Сделан обзор функциональ­ности аналогичных решений, используемых в них алгоритмов, а также метрик для оценки качества их работы.
• Реализован алгоритм рекомендации полезной информации. Он ос­нован на техниках обработки естественного языка и простом ана­лизе кода, благодаря чему может быть использован для разных языков программирования.
• Разработана архитектура инструмента, в основе которой лежит шаблон проектирования Presentation Model.
• Реализован пользовательский интерфейс. Инструмент позволяет находить релевантные данные по текстовому запросу, а также предлагает помощь с ошибками компиляции.
• Выполнена апробация разработанного решения. В ходе проведён­ного эксперимента алгоритм показал высокую точность рекомен­дации.
Таким образом, в данной работе представлен инструмент для по­мощи с распространёнными проблемами, возникающими в ходе разра­ботки программного обеспечения. Ассистент будет полезен в первую очередь студентам, а также начинающим разработчикам, которые ра­ботают над проектами с открытым исходным кодом. Код инструмента доступен по ссылке15.


[1] Monsell S. Task switching // Trends in Cognitive Sciences 7 (3). 2003. P. 134 - 140.
[2] Proksch S., Bauer V., Murphy G. C. How to build a recommendation system for software engineering // Springer International Publishing. 2015.
[3] Kersten M., Murphy G. C. Using task context to improve programmer productivity // FSE 2014: Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering. ACM Press, 2006. P. 1 - 11.
[4] Neural Sketch Learning for Conditional Program Generation / V. Murali, L. Qi, S. Chaudhuri et al. // arXiv. 2017.
[5] Prompter: A Self-Confident Recommender System / L. Ponzanelli, G. Bavota, M. D. Penta et al. IEEE, 2014. P. 577 - 580.
[6] Bing developer assistant: improving developer productivity by recommending sample code / H. Zhang, A. Jain, G. Khandelwal et al. // FSE 2016: Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. ACM, 2016. P. 956 - 961.
[7] Takuya W., Masuhara H. A spontaneous code recommendation tool based on associative search // SUITE ’11: Proceedings of the 3rd International Workshop on Search-Driven Development: Users, Infrastructure, Tools, and Evaluation. ACM, 2011. P. 17 - 20.
[8] Campbell B. A., Treude C. NLP2Code: code snippet content assist via natural language tasks // arXiv. 2017.
[9] Ponzanelli L., Bacchelli A., Lanza M. Seahawk: stack overflow in the IDE // ICSE ’13: Proceedings of the 2013 International Conference on Software Engineering. IEEE Press, 2013. P. 1295 - 1298.
[10] Mining StackOverflow to turn the IDE into a self-confident programming prompter / L. Ponzanelli, G. Bavota, M. D. Penta et al. // MSR 2014: Proceedings of the 11th Working Conference on Mining Software Repositories. ACM, 2014. P. 102 - 111.
[11] Expected reciprocal rank for graded relevance / O. Chapelle, D. Metlzer, Y. Zhang et al. // Proceedings of the 18th ACM conference on Information and knowledge management. ACM, 2009. P. 621 - 630.
[12] What makes a good code example? A study of programming Q&A in StackOverflow / S. M. Nasehi, J. Sillito, F. Maurer et al. IEEE, 2012. P. 25 - 34.
[13] Zilberstein M., Yahav E. Leveraging a corpus of natural language descriptions for program similarity // Proceedings of the 2016 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software. ACM, 2016. P. 197 - 211.
[14] Manning C. D., Raghavan P., Schutze H. Introduction to Information Retrieval. Cambridge University Press, 2008.
[15] IntelliJ Platform SDK DevGuide. PSI Elements. URL: http://www.jetbrains.org/intellij/sdk/docs/basics/ architectural_overview/psi_elements.html.
...


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




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