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


Автоматический рефакторинг для целостной оптимизации Java-приложений

Работа №65198

Тип работы

Магистерская диссертация

Предмет

информационные системы

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

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


Введение 4
1. Постановка и анализ задачи 6
1.1. Общая идея 6
1.2. Метрики и оценка качества 7
1.3. Разбор исходного кода 9
1.4. Синтаксический анализ методов 11
1.5. Синтаксичекий анализ SQL-запросов 13
1.6. Синтаксический анализ циклов 14
1.7. Анализ «графа вызовов» методов 15
2. Реализация трансформации 16
2.1. Поиск и рефакторинг неэффективных фрагментов про-граммного кода 16
2.1.1. Типичные запросы в цикле 16
2.1.2. Отсутствие агрегирующих функций 20
2.1.3. Вызов в цикле методов, содержащих SQL-запрос . 22
3. Эксперименты 26
4. Оптимизация взаимодействия с базами данных 29
Заключение 31
Список литературы 32


Поддержание программного кода в приличном состоянии зачастую является непростой задачей. Безусловно, существуют различные про¬цедуры и техники для этого, начиная от руководств стиля (style guide), которым должны следовать разработчики, заканчивая статическими анализаторами и строгой инспекцией кода (code review).
В данной работе нас интересует класс приложений, в которых ис-пользуются реляционные базы данных. Не у каждого программиста есть отчётливое представление о работе с системами управления база¬ми данных. Тестируя программный код на небольших объёмах данных, разработчик может получить впечатление, что работа с СУБД практи¬чески не отличается от работы с коллекцией объектов в оперативной памяти. Широко используемая парадигма объектно-ориентированного программирования и различные Object Relational Mapping-библиотеки хорошо вписываются в теорию «идеального» кода, но на практике, на реальных объёмах данных, такое слепое следование общепризнанным концепциям программирования может создать значительные пробле¬мы с производительностью, что можно видеть в работах [1] и [2]. Мы хотим проектировать приложения так, чтобы работа с базами данных была эффективна. Как этого добиться? Об этом и пойдёт речь далее.
Рефакторинг - неотъемлемая часть культуры программирования, и подразумевает как рутинные задачи, так и сложную интеллектуальную аналитическую работу. Многие разработчики ищут золотую середину между идеальным кодом и «техническим долгом». Таким образом, тема автоматического рефакторинга набирает всё большую популярность в виду роста объёма исходного кода приложений.
Мы задались вопросом, можно ли каким-то способом повысить эф-фективность взаимодействия с БД, не переписывая приложение «с ну¬ля». Различные среды разработки, такие как IDEA и Eclipse предлага¬ют мощные инструменты для рефакторинга кода, но они не касаются анализа и оптимизации фрагментов кода, содержащих SQL-запросы. В виду отсутствия подобных решений, было решено исследовать возмож¬ность анализа и автоматического рефакторинга вычислительно неэф¬фективных фрагментов программного кода.
В связи с тем, что наша цель - повысить эффективность приложе¬ния за счёт улучшения взаимодействия с БД, в нашей работе рассмат¬риваются следующие задачи:
• Определить и уметь находить вычислительно неэффективные фраг-менты кода;
• На основе статического и динамического анализа выдавать советы по улучшению исходного кода;
• Производить трансформацию (рефакторинг) в автоматическом ре¬жиме;
Что касается первой подзадачи, то было решено начать с простых вещей, например, однотипных запросов в цикле, постепенно переходя к анализу более сложных случаев. При решении второй подзадачи под динамическим анализом подразумевается замеры времени выполнения методов и общего времени выполнения приложения, а также построе¬ние и простейший анализ «графа вызовов». Третья подзадача являет¬ся не только самой сложной по реализации, но и самой важной. Для её реализации было решено использовать open-source библиотеку Java Parser [9], которая переводит исходный код приложения в абстрактное синтаксическое дерево.
Для решения задач, были выбраны следующие технологии: драй¬вер JDBC и СУБД Oracle 11G. Версия Java не так принципиальна на данном этапе нашего исследования, но использовался JDK версии 1.8.


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

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

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


На основе анализа проблемы для ряда простых шаблонов намечен¬ные задачи были решены. Благодаря open-source инструментам, мы смогли анализировать исходный код Java-приложений как абстрактное синтаксическое дерево, а также вносить необходимые изменения в него. Была исследована и реализована возможность выделения предопреде-лённых вычислительно неэффективых фрагментов программного кода, касающиеся выполнения SQL-запросов в цикле. Исходя из выделенных «проблемных» шаблонов, мы смогли выдавать советы по улучшению программного кода (запись в лог-файл). Были приведены и импле-ментированы алгоритмы по поиску и автоматической трансформации найденных неэффективынх фрагментов. Для оценки полезности и эф-фективности выполненных посредством трансформации изменений мы использовали комплекс из различных оценок, таких как цикломатиче- ская сложность и замеры времени выполнения фрагмента кода (при¬ложения). Для проверки эквивалентности произведённых изменений - использовали JUnit-тесты.
Как показали эксперименты, после произведённых трансформаций ранее наблюдаемый линейный рост времени выполнения «проблемных» фрагментов кода практически сводится к постоянной.
В будущем целесообразно рассмотреть более общие и сложные шаб¬лоны, зависящие от конкретных требований к коду анализируемого приложения.



[1] Cao W., Shasha D. AppSleuth: a tool for database tuning at the application level // EDBT ’13 Proceedings of the 16th International Conference on Extending Database Technology. Pages 589-600.
[2] Dombrovskaya H., Lee R. Talking to the Database in a Semantically Rich Way // Proc. of EDBT/ICDT’17 Joint Conference, March 24-28, 2014, Athens, Greece.
[3] Jeon S.-U., Lee J.-S., Bae D.-H. An Automated Refactoring Approach to Design Pattern-Based Program Transformations in Java Programs // APSEC ’02 Proceedings of the Ninth Asia-Pacific Software Engineering Conference. Pages 337-345.
[4] Moghadam I. H., О Cinneide M. Automated Refactoring Using Design Differencing // 2012 16th European Conference on Software Maintenance and Reengineering (CSMR). Pages 43-52.
[5] Christopoulou A., Giakoumakis E. A., Zafeiris E. V., Soukara V. Automated refactoring to the Strategy design pattern // Journal Information and Software Technology. Volume 54, Issue 11, November 2012. Pages 1202-1214.
[6] McCabe T. J. A Complexity Measure // IEEE Transactions on Software Engineering (Volume:SE-2, Issue: 4). Pages 308-320.
[7] Myers J. G. An extension to the cyclomatic measure of program complexity // ACM SIGPLAN Notices. Volume 12, Issue 10, October
1977. Pages 61-64.
[8] Bowman T.I., Godfrey W. M., Holt C. R. Extracting Source Models from Java Programs: Parse, Disassemble, or Profile? // The 1999 ACM SIGPLAN Workshop on ProgramAnalysis for Software Tools and Engineering
[9] Java Parser with AST generation and visitor support. https:// github.com/javaparser/javaparser
[10] Java Parser Roaster. https://github.com/forge/roaster
[11] Software Complexity Visualizer CyVis. http://cyvis.sourceforge. net/
[12] Eclipse Metrics plugin. https://sourceforge.net/projects/ metrics/
[13] CheckStyle tool. http://checkstyle.sourceforge.net/
[14] WebGraph http://webgraph.di.unimi.it/



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



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


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