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


Основанный на данных синтез кода в IntelliJ IDEA

Работа №130677

Тип работы

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

Предмет

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

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

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


Введение 5
1. Обзор 7
1.1. Обзор концепции BSL-синтезатора . . . . . . . . . . . . . 7
1.2. Обзор альтернативных подходов . . . . . . . . . . . . . . 8
1.2.1. Bing Developer Assistant (BDA) . . . . . . . . . . . 9
1.2.2. Synthesizing API usage examples (SAU) . . . . . . . 10
1.3. Bayou
1.3.1. Evidence Embedding Layer . . . . . . . . . . . . . . 12
1.3.2. Evidence Encoder Layer
1.3.3. Evidence Decoder Layer . . . . . . . . . . . . . . . . 13
1.3.4. Combinatorial Concretization Layer . . . . . . . . . 14
1.3.5. Технологические особенности реализации . . . . . 15
1.3.6. Выводы из обзора
2. Архитектура конфигурируемого BSL-синтезатора 18
2.1. Input Layer
2.2. Embedding Layer
2.3. AST Synthesis Layer
2.4. Quality Measurement Layer
2.5. Concretization Layer . . . . . . . . . . . . . . . . . . . . . . 21
3. Реализация конфигурируемого BSL-синтезатора 22
3.1. Экспорт моделей . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Реализация слоев . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.1. Input Layer . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2. Embedding Layer . . . . . . . . . . . . . . . . . . . . 23
3.2.3. AST Synthesis Layer . . . . . . . . . . . . . . . . . . 24
3.2.4. Quality Measurement Layer . . . . . . . . . . . . . . 25
3.2.5. Concretization Layer . . . . . . . . . . . . . . . . . . 25
4. Реализация плагина к IntelliJ IDEA 27
34.1. Интеграция BSL-синтезатора с IntelliJ IDEA . . . . . . . 27
4.2. Реализация пользовательского интерфейса . . . . . . . . 28
4.2.1. Аннотирование метода . . . . . . . . . . . . . . . . 28
4.2.2. Предметно-ориентированный язык . . . . . . . . . 30
5. Апробация 32
5.1. Границы применимости
Заключение 35
Список литературы

Задача автоматического синтеза кода — предмет множества исследований в области информатики и программирования на протяжении десятилетий. Под задачей автоматического синтеза кода понимается задача генерации описания некоторого алгоритма на определенном языке программирования из неполной спецификации данного алгоритма.
В зависимости от подхода спецификацией может быть описание алгоритма на некотором предметно-ориентированном языке (domain specific language, DSL), описание на естественном языке, набор входов и выходов алгоритма, набор системных вызовов, происходящих при выполнении алгоритма и т.д.
В последние годы все больше исследователей обращаются к данной проблеме, а на рынке появляются первые промышленные образцы автоматических синтезаторов кода [6]. Однако, большинство современных инструментов синтеза кода слабо применимы в промышленности, так как они требуют от программиста освоения совершенно нового и практически всегда оторванного от основной области знаний программиста формализма. К примеру, DSL-подход требует изучения отдельного языка спецификаций.
В этом плане коренным образом отличается подход Bayesian Sketch Learning (BSL-подход), предложенный группой исследователей из Университета Райса в их статье [10]. BSL-подход позволяет использовать в качестве такого предметно-ориентированного языка идентификаторы языка и библиотек, используемых программистом. Это позволяет сократить разрыв между языком спецификации, используемым синтезатором кода, и кодом, синтезируемым системой и используемым в дальнейшем программистом.
У такого подхода есть весомый плюс: так как синтезатор, использующий данный подход, работает с библиотеками и языком, используемым программистом, и более ничем, то его возможно внедрить в интегрированную среду разработки (IDE) программиста, не изменяя
при этом обычных паттернов использования этой IDE. Используя такой синтезатор, IDE может предлагать более интеллектуальные контекстные подсказки (Auto-Completion) и даже в некоторых случаях синтезировать части разрабатываемой системы.
Постановка задачи
Исходя из вышесказанного была поставлена цель интегрировать подход BSL-синтезаторов как один из наиболее интересных современных подходов к синтезу кода с IntelliJ IDEA — ведущей IDE для JVM платформы. Для достижения цели потребовалось:
• разработать архитектуру конфигурируемого BSL-синтезатора;
• реализовать BSL-синтезатор на JVM платформе;
• создать интерфейс для взаимодействия пользователя и синтезатора;
• воспроизвести результаты эталонной реализации Bayou (см. [10]), таким образом продемонстрировав эквивалентность полученного синтезатора эталонной реализации.

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

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

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


В ходе выполнения данной работы были достигнуты следующие результаты:
• была предложена архитектура конфигурируемого BSL-синтезатора, позволяющего выполнять существующие метамодели и добавлять новые;
• конфигурируемый BSL-синтезатор был реализован на JVM-платформе, что позволило интегрировать его с IntelliJ IDEA;
• был создан плагин, предоставляющий интерфейс к BSL-синтезатору и предложены два пользовательских интерфейса: аннотирование методов и предметно-ориентированный язык;
• была проведена апробация, продемонстрирована эквивалентность полученного BSL-синтезатора эталонному, и определены границы применимости полученного BSL-синтезатора.
В результате данной работы был создан плагин для IntelliJ IDEA, предоставляющий принципиально новые возможности синтеза кода в данной IDE. Кроме того, конфигурируемый BSL-синтезатор, реализованный как часть данной работы, может использоваться в работе [4] как синтезатор из промежуточного представления цепочки API-вызовов в итоговый код, и таким образом представить инструмент, синтезирующий естественный язык в код


[1] Barber David. Bayesian reasoning and machine learning. –– Cambridge
University Press, 2012. –– ISBN: 978-0521518147.
[2] Bing Developer Assistant: Improving Developer Productivity by
Recommending Sample Code / Hongyu Zhang, Anuj Jain,
Gaurav Khandelwal et al. // Proceedings of the 2016 24th ACM
SIGSOFT International Symposium on Foundations of Software
Engineering. –– FSE 2016. –– New York, NY, USA : ACM, 2016. ––
P. 956–961.
[3] Buse Raymond P. L., Weimer Westley. Synthesizing API Usage
Examples // Proceedings of the 34th International Conference on
Software Engineering. –– ICSE ’12. –– Piscataway, NJ, USA : IEEE
Press, 2012. –– P. 782–792.
[4] Deep API Learning / Xiaodong Gu, Hongyu Zhang, Dongmei Zhang,
Sunghun Kim // CoRR. –– 2016. –– Vol. abs/1605.08535. –– 1605.08535.
[5] Hoffman Matthew, Bach Francis R., Blei David M. Online Learning
for Latent Dirichlet Allocation // Advances in Neural Information
Processing Systems 23 / Ed. by J. D. Lafferty, C. K. I. Williams,
J. Shawe-Taylor et al. –– Curran Associates, Inc., 2010. –– P. 856–864.
[6] Inductive Programming Meets the Real World / Sumit Gulwani,
José Hernández-Orallo, Emanuel Kitzelmann et al. // Communications
of the ACM. –– 2015. –– oct. –– Vol. 58, no. 11. –– P. 90–99.
[7] Kaufman L., Rousseeuw P. Finding Groups in Data: An Introduction
to Cluster Analysis. –– Wiley Interscience, 2005. –– P. 68–125. ––
ISBN: 9780471878766.
[8] Kingma Diederik P, Welling Max. Auto-Encoding Variational Bayes. ––
2013. –– arXiv:1312.6114.
36[9] McCabe T. J. A Complexity Measure // IEEE Transactions on
Software Engineering. –– 1976. –– Dec. –– Vol. SE-2, no. 4. –– P. 308–
320.
[10] Murali Vijayaraghavan, Chaudhuri Swarat, Jermaine Chris. Bayesian
Sketch Learning for Program Synthesis // CoRR. –– 2017. –– Vol.
abs/1703.05698. –– 1703.05698.
[11] Rajaraman A., Ullman J.D. Mining of Massive Datasets. –– Cambridge
University Press, 2012. –– P. 1–17. –– ISBN: 978-1-139-05845-2.
[12] Robillard Martin P. What makes APIs hard to learn? Answers from
developers // IEEE software. –– 2009. –– Vol. 26, no. 6.
[13] Solar Lezama Armando. Program Synthesis By Sketching : Ph. D.
thesis : UCB/EECS-2008-177 / Armando Solar Lezama ; EECS
Department, University of California, Berkeley. –– 2008. –– Dec.
[14] Baldoni Roberto, Coppa Emilio, D’Elia Daniele Cono et al. A Survey
of Symbolic Execution Techniques. –– 2016. –– arXiv:1610.00502.
[15] Xingxing Zhang Liang Lu Mirella Lapata. Top-down Tree Long ShortTerm Memory Networks // Proceedings of the Conference of the North
American Chapter of the Association for Computational Linguistics:
Human Language Technologies. –– 2016. –– June. –– P. 310–320.
[16] Ксезнов Михаил. Рефакторинг архитектуры программного обеспечения: выделение слоев. –– 2004. –– URL: http://citforum.ru/SE/
project/refactor/ (online; accessed: 17.12.2016).

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



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


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