Введение 5
1. Постановка цели и задач 7
2. Обзор предметной области 8
2.1. Семейства программных продуктов и повторно используемые активы 8
2.2. SRC IDE 10
2.3. IntelliJ Platform 15
2.4. Eclipse JDT 18
2.5. Pydev Plugin 23
3. Архитектура разработанного решения 24
4. Выделение из кодовой модели для языка Java повторно
используемой инфраструктуры и её доработка 28
4.1. Проектная модель 28
4.2. Индексы 35
4.3. Тестовая инфраструктура 40
4.4. Регрессионное тестирование изменений в кодовой модели
для языка Java 44
5. Реализация повторно используемой инфраструктуры для
языка Python 45
5.1. Проектная модель 45
5.2. Индексы 53
5.3. Тестовая инфраструктура 57
6. Тестирование повторно используемой инфраструктуры
и функциональности для языка Python 60
6.1. Проектная модель 60
6.2. Индексы 60
6.3. Возможности SRC IDE 61
7. Апробация разработанного решения на возможностях SRC
IDE для языка Python 62
7.1. Структура проекта 62
7.2. Структура файла 63
7.3. Текстовый поиск 64
7.4. Поиск использований кода 66
7.5. Навигация по коду 67
7.6. Подсказки в коде 68
7.7. Эффективность переиспользования инфраструктуры кодовой модели 70
Заключение 71
Будущее работы 72
Благодарности 73
Список литературы 74
История программирования неразрывно связана с развитием инструментов разработки. От функциональности и удобства использования интегрированных сред разработки (IDE) зависит скорость создания программного обеспечения и его качество. В связи с определяющим влиянием таких средств разработки на процессы технологических компаний, сфера разработки IDE является перспективным направлением бизнеса.
В рамках Saint-Petersburg Research Center (SRC), входящего в состав известной технологической компании, было решено создать собственное окружение для разработки, основой которого является мультиязыковая SRC IDE. На момент начала работы, данная среда разработки поддерживала только язык Java, однако в связи с растущими потребностями компании в выпуске новых продуктов, стало необходимым обеспечить беспрепятственное развитие семейства программных продуктов на её основе. К текущему моменту, SRC IDE предназначена для внутреннего использования в компании, однако в будущем планируется её выпуск в виде продукта.
Язык Python применяется для решения широкого спектра задач, возникающих в различных сферах деятельности бизнеса, в том числе для аналитики, обработки больших данных и машинного обучения. Являясь самым популярным языком программирования в 2022 году по версии IEEE [14], он создает необходимость поддерживать его во всех известных IDE. К тому же, язык Python является динамически строго типизированным, что, с одной стороны, позволяет быстро разрабатывать на нем прикладные программы, но, с другой стороны, оставляет простор для допущения неявных ошибок. В связи с этим, создание продвинутых средств разработки, позволяющих программисту проводить более детальный анализ кода и помогающих при его написании, является актуальной задачей для языка Python. Таким образом, в Saint- Petersburg Research Center было решено обеспечить поддержку языка
Python в собственной среде разработки.
В сфере программной инженерии накоплен большой опыт создания семейств программных продуктов. Одним из наиболее эффективных методов разработки таких решений является создание повторно используемой инфраструктуры (активов), применяющейся во всех продуктах семейства. SRC IDE требуется развивать с применением этого подхода, а в качестве инфраструктуры необходимо создать мультиязыковую платформу, компоненты которой можно переиспользовать для добавления поддержки новых языков.
В SRC IDE за представление проектов, создание индексов, обработку исходного кода и его семантики в удобном для функционирования среды разработки виде отвечает центральный компонент системы — модель кода (Code Model). Она также предоставляет программный ин-терфейс (API) для большинства других частей IDE, обеспечивающих продвинутые возможности работы с кодом, поэтому именно в ней необходимо начинать создание мультиязыковой платформы.
Таким образом, исходя из существующего решения для языка Java, в кодовой модели SRC IDE необходимо подготовить повторно используемую инфраструктуру, пригодную для дальнейшего расширения и поддержки новых языков, а затем на её основе реализовать функциональность для языка Python. При этом требуется не нарушить работоспособность системы для языка Java и сохранить все ключевые технологии проекта. В итоге кодовая модель SRC IDE должна поддерживать уже два языка — Java и Python.
Для создания в кодовой модели SRC IDE повторно используемой инфраструктуры и реализации на её основе функциональности для языка Python в ходе выпускной квалификационной работы были получены следующие результаты.
• Рассмотрены семейства программных продуктов и повторно используемые активы. Проведён обзор кодовых моделей в мультиязыковых платформах (IntelliJ Platform), существующих IDE (SRC IDE, Eclipse IDE) и расширениях к ним (Pydev Plugin).
• Из кодовой модели для языка Java выделена и доработана повторно используемая инфраструктура, а именно: проектная модель, индексы, а также инфраструктура для тестирования. Проведено регрессионное тестирование изменений в кодовой модели для языка Java.
• Выделенная в кодовой модели повторно используемая инфраструктура реализована для языка Python.
• Проведено тестирование повторно используемой инфраструктуры кодовой модели и реализованной на её основе функциональности для языка Python, а именно: проектной модели, индексов и ряда возможностей SRC IDE.
• Выполнена апробация разработанного решения с помощью созданных в SRC IDE возможностей для языка Python, а именно: структуры проекта, структуры файла, текстового поиска, поиска использований кода, навигации по коду и подсказок в коде.
[1] Adams Elizabeth S., Meltzer Arnold C.Trigrams as Index Elementin Full Text Retrieval: Observations and Experimental Results // Proceedings of the 1993 ACM Conference on Computer Science. — CSC ’93. — New York, NY, USA : Association for Computing Machin¬ery, 1993. — P. 433-439. — URL: https://doi.org/10.1145/170791.170891.
[2] IDE компании JetBrains.— Сайт JetBrains.— URL: https://www.jetbrains.com/ru-ru/products/#type=ide (дата обращения: 4 апреля 2023 г.).
[3] IntelliJ Platform. — Документация JetBrains. — URL: https://plugins.jetbrains.com/docs/intellij/welcome.html(дата обращения: 4 апреля 2023 г.).
[4] Northrop Linda M., Clements Paul C. A Framework for Software Prod¬uct Line Practice, Version 5.0.— 2012.
[5] Visual Studio Code API. — Документация Microsoft. — URL: https://code.visualstudio.com/api (дата обращения: 3 апреля 2023 г.).
[6] Божнюк А. С. Система модификации структуры исходного кода для интегрированных сред разработки. — 2023.
[7] Кодовая модель JDT Core. — Документация JDT. — URL: https://help.eclipse.org/latest/topic/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm(дата обращения: 5 апреля 2023 г.).
[8] Мирошников В. И. Статический вывод типов для языка Python в интегрированной среде разработки. — 2023.
[9] Набор разработки Eclipse JDT. — Документация Eclipse. — URL: https://wiki.eclipse.org/JDT(дата обращения: 5 апреля 2023 г.).
[10] Пакетный менеджер Pip.— Документация Pip.— URL: https://pip.pypa.io/en/stable/user_guide/ (дата обращения: 27 апреля 2023 г.).
[11] Поддержка новых языков в Eclipse IDE. — Документация Eclipse. — URL: https://wiki.eclipse.0rg/The_Official_Eclipse_FAQs#Implementing_Support_for_Your_Own_Language (дата обращения: 5 апреля 2023 г.).
[12] Протокол языкового сервера LSP.— Документация Microsoft.— URL: https://microsoft.github.io/language-server-protocol/overviews/lsp/overview/ (дата обращения: 3 апреля 2023 г.).
[13] Расширение Pydev для Eclipse IDE. — Сайт GitHub. — URL: https://github.com/fabioz/Pydev (дата обращения: 5 апреля 2023 г.).
[14] Рейтинг языков программирования. — Редакция Spec¬trum IEEE, 2022.— URL: https://spectrum.ieee.org/top-programming-languages-2022 (дата обращения: 1 апреля 2023 г.).
[15] Спецификация языка Python.— Документация Python.— URL: https://docs.python.org/3/reference/ (дата обращения: 10 апреля 2023 г.).
[16] Эволюция общих активов в семействе средств реинжиниринга программного обеспечения / Т. Н. Попова, Д. В. Кознов, А. Е. Тиунова, К. Ю. Романовский. — 2004. — P. 184-199.
[17] Экосистема разработки.— Исследование JetBrains, 2022.— URL: https://www.jetbrains.com/ru-ru/lp/devecosystem-2022/ (дата обращения: 2 апреля 2023 г.).
[18] Языковой сервер, основанный на JDT.— Сайт GitHub.— URL: https://github.com/eclipse/eclipse.jdt.ls (дата обращения: 5 апреля 2023 г.).