Известно, что интегрированная среда разработки (ИСР) обеспечивает множество функций, таких как компиляция в фоне, автодополнение, навигация по файлам проекта, рефакторинг, отладчик и т.д. Современные ИСР в основном предоставляют текстовые редакторы исходного кода для внесения правок в программный проект, то есть в общем случае разработчик программы работает с символами и строками исходного текста программы. С улучшением программных языков и сред появилась концепция структурных редакторов, когда синтаксическое дерево отображается на экране напрямую [1, 2]. Структурные редакторы позволяют редактировать структуру программы, а не символы и строки текста исход- ного кода. Также известны семантические ре- дакторы [2], проекционные редакторы [3] и синтаксически-ориентированные редакторы. Структурно любая программа представляется в виде иерархии – абстрактного синтаксического дерева (АСД). Это дерево строится на основе исходного текста при помощи сканера и парсера. АСД можно визуально изобразить в виде вложенных блоков. Структурный редактор позволяет пользователю взаимодействовать с АСД напрямую через с эти блоки. В этом случае языковые конструкции становятся новыми неделимыми частями программы в отличие от символов и строк текста.
В ходе анализа [4] было выявлено, что существующие реализации сред разработки с поддержкой структурного редактирования имеют общий недостаток – хранение исходного кода в текстовом представлении, а это приводит к тому, что построение иерархической структуры кода производится каждый раз при загрузке программного проекта, при передаче кода в компилятор или отладчик и т.д. Кроме того, при сохранении кода промежуточное представление транслируется в текстовое, то есть сохраняется в виде текста исходного кода. Такая круговая трансляция сказывается на скорости компиляции и отзывчивости среды разработки – основные параметры, влияющие на эффективность разработки ПО. В ходе исследования было предложено реализовать ИСР с поддержкой структурного редактирования, не обладающую данным недостатком. Создание такой среды дает возможность повысить скорость и эффективность разработки ПО.
Структура ПО
Разработанное программное средство (Свид. о гос. регистр. прогр. для ЭВМ № 2019618051) основано на архитектуре, предложенной в [5]. Представленная ИСР позволяет создавать и редактировать ПО на языке программирования Go, поддерживает отладку, рефакторинг, систему контроля версий и другие инструменты для создания ПО.
Разработка выполнена при помощи языков программирования Go, TypeScript и технологии Electron. Выбор языка Go обусловлен множеством факторов: статическая типизация, строгие правила форматирования (задаваемые на уровне компилятора), а также проработанная стандартная библиотека для разбора исходного кода на Go [6].
Программный комплекс включает в себя три основных функциональных блока:
- внутренний функциональный блок среды разработки – backend, реализующий всю логику работы с исходным кодом ПО, интер- фейс для компилятора и отладчика, систему контроля версий и другие функции ИСР;
- модуль для компилятора и отладчика языка Go, который позволяет компилятору использовать промежуточное представление (CodeDOM) [7] исходного кода в качестве входных данных;
- пользовательский интерфейс для взаимодействия пользователя со средой разработ- ки – frontend, предоставляющий структурный редактор для исходного кода и широкий набор функциональных возможностей для разработки ПО: отладчик, средства рефакторинга, интерфейс для системы контроля версий, навигацию по исходному коду проекта, быстрый поиск, автодополнение и др.
На рисунке 1 показаны структура программной системы и взаимодействие ее с пользователем и компилятором Go.
Пользовательский интерфейс разработан в соответствии с принципами, предложенными в [8]. Внешний вид пользовательского интерфейса представлен на рисунке 2.
На рисунке отображены основные компоненты пользовательского интерфейса.
· В верхней части расположено главное меню приложения. Оно позволяет пользователю запустить все возможные команды в рамках текущего контекста и состоит из набора подменю, сгруппированных по логике действий: Проект, Редактирование, Поиск, Вид, Код, Рефакторинг, Запуск, Помощь.
· В левой части расположен обзор структуры проекта (Solution Explorer). Он позволяет пользователю видеть и редактировать структуру проекта. Возможна организация модулей проекта в виде вложенных папок. При помощи двойного клика можно открыть модуль для редактирования.
· В центральной части размещена основная рабочая область редактора – список вкладок с исходным кодом ПО. В состав каждой открытой вкладки с кодом входят:
- компонент «хлебные крошки» для отображения текущего местоположения курсора в иерархической структуре модуля (доступна навигация при помощи клика по элементам компонента);
- таблица импорта, отображающая список зависимых пакетов для текущего модуля (в основном формируется автоматически, но пользователь может задать альтернативное имя для импорта (алиас), а также создать «безымянный» импорт);
- область редактирования, содержащая сам структурный редактор для АСД модуля (навигацию и действия над грамматическими конструкциями можно выполнять как с клавиатуры, так и мышью).
· В нижней части расположена панель для управления отображением дочерних окон, таких как «Запуск», «Отладка», «Система контроля версий» и «Результаты поиска».
Обоснование эффективности ИСР с использованием структурного редактирования исходного кода
Для определения производительности реа- лизованной ИСР были проведены экспери- менты с использованием реальных данных (исходного кода проектов ПО).
Оценивались время компиляции проекта с использованием стандартного компилятора Go и время компиляции файлов проекта, созданных при помощи разработанной ИСР. Измерение производилось группой экспертов [9] для каждой реализации программного продукта. Результаты эксперимента (среднее арифметическое время выполнения компиляции) приведены в таблице 1.
Произведена оценка времени выполнения рефакторинга «переименование функции» [10]. При выполнении данного рефакторинга среда разработки должна найти все места использования функции (вызовы, ссылки, переопределения) и осуществить переименование. В таблице 2 приведены результаты исследования в ИСР JetBrains GoLand и разработанной ИСР. В результате нескольких десятков измерений получено среднее арифметическое времени выполнения рефакторинга.
Для определения эффективности реализованного в ИСР метода контроля версий был проведен эксперимент с участием 25 начинающих и профессиональных разработчиков ПО. Создана экспериментальная установка – персо- нальный компьютер с установленными ИСР JetBrains Goland и разработанной ИСР. В ходе эксперимента участник должен был попытаться определить семантику изменений в исходном коде проекта при помощи установленной ИСР. Время эксперимента было ограничено 30 минутами, участник должен был ответить на 6 вопросов теста об истории изменений. Результаты эксперимента представлены в таблице 3.
Испытания разработанного программного средства показали:
- уменьшение времени компиляции на 19–23 %;
- уменьшение времени выполнения рефакторинга на 31–34 %;
- более высокую детализацию истории версий исходного кода ПО, что позволяет уско- рить определение семантики изменений программистом на 75 %, а также повысить корректность на 6–13 %.
Полученные результаты демонстрируют эффективность предложенного решения.
Разработанная ИСР внедрена в производственный процесс компаний iSpring и TravelLine, а также в учебный процесс Поволжско- го государственного технического университета.
Заключение
В ходе работы была реализована ИСР с поддержкой структурного редактирования для языка Go. Разработанное программное средство основано на архитектуре, предложенной в [5]. Проведены серии экспериментов, под- твердивших улучшение значений параметров, влияющих на скорость и эффективность разработки промышленного ПО в созданной ИСР с поддержкой структурного редактирования исходного кода.
На данном этапе реализуется поддержка других языков программирования, а также визуального программирования для промышленного применения, что позволит расширить область использования разработанной ИСР.
Литература
1. Князева М.А., Тимченко В.А. Структурные редакторы программ на языках программирования высокого уровня и генератор моделей структурных программ в Банке знаний о преобразованиях программ // Искусственный интеллект. 2005. № 4. С. 200–208.
2. Мучник Т.Г. Языково-настраиваемый структурный редактор со средствами семантического контроля // Программирование. 1990. № 2. С. 10–20.
3. Fowler M. ProjectionalEditing. 2008. URL: https://martinfowler.com/bliki/ProjectionalEditing.html (дата обращения: 20.10.2019).
4. Ванясин Н.В., Сидоркина И.Г. Анализ функциональных возможностей структурных редакторов исходного кода программного обеспечения // Вестн. ПГТУ: Радиотехнические и инфокоммуникационные системы. 2019. № 1. С. 64–77. DOI: 10.25686/2306-2819.2019.1.64.
5. Vaniasin N.V., Sidorkina I.G. Semantic source code editing in integrated development environments. EMIT, 2018, vol. 5, no. 2, pp. 48–53.
6. Donovan A.A., Kernighan B.W. The Go Programming Language. Addison-Wesley, 2015, 380 p.
7. Aho A.V., Lam M.S., Sethi R., Ullman J.D. Compilers: principles, techniques & tools. 2007, Addison Wesley, 1000 p.
8. Voelter M., Siegmund J., Berger T., Kolb B. Towards user-friendly projectional editors. Proc. Intern. Conf. on Software Language Engineering. Springer, Cham, 2014, pp. 41–61. DOI: 10.1007/978-3-319-11245-9_3.
9. Орлов А.И. Экспертные оценки. М., 2002. 486 с.
10. Мартин Р. Чистый код: создание, анализ и рефакторинг. Библиотека программиста. СПб, 2013. 464 с.
References
- Knyazeva M.A., Timchenko V.A. Structural programs editors in the high-level programming languages and generator of structural programs’ models within the knowledge bank of programs’ re-organization. Artificial Intelligence. 2005, no. 4, pp. 200–208 (in Russ.).
- Muchnik T.G. A language-adjustable structure editor with means of semantic control. Programming and Computer Software. 1990, no. 2, pp. 10–20 (in Russ.).
- Fowler M. Projectional Editing. 2008. Available at: https://martinfowler.com/bliki/ProjectionalEditing.html (accessed October 20, 2019).
- Vanyasin N.V., Sidorkina I.G. Analysis of functionality of structure source code editors. Sci. Tech. Volga Region Bull. 2019, no. 1, pp. 64–77 (in Russ.). DOI: 10.25686/2306-2819.2019.1.64.
- Vaniasin N.V., Sidorkina I.G. Semantic source code editing in integrated development environments. EMIT. 2018. vol. 5, no. 2, pp. 48–53.
- Donovan A.A., Kernighan B.W. The Go Programming Language. Addison-Wesley Professional, 2015, 380 p.
- Aho A.V., Lam M.S., Sethi R., Ullman J.D. Compilers: Principles, Techniques & Tools. 2007, 1000 p.
- Voelter M., Siegmund J., Berger T., Kolb B. Towards user-friendly projectional editors. Proc. Intern. Conf. Software Language Engineering. Springer, Cham, 2014, pp. 41–61. DOI: 10.1007/978-3-319-11245-9_3.
- Orlov A.I. Expert Evaluation. Moscow, 2002, 486 p. (in Russ.).
- Martin R. Clean code: A Handbook of Agile Software Craftsmanship. Prentice Hall, Inc., 2008, 462 p. (Russ. ed.: St. Petersburg, 2013, 464 p.).