Автоматизація рефакторингу коду із використанням бази знань і логічних правил
Анотація
Розглянуто завдання автоматизації процесу заміни початкового програмного коду без зміни поведінки програми (рефакторингу), яку запропоновано вирішити шляхом використання бази знань про початковий код та логічних правил для опису процесу перетворення коду. Окреслено актуальність завдання розроблення нових методів і підходів до рефакторингу з урахуванням обмежень наявних систем і ростом потреб безпосередніх користувачів в автоматизації процесів рефакторингу внаслідок зростання обсягу кодових баз. Наголошено на важливості збереження семантики початкового коду для успішного виконання дій рефакторингу. Запропоновано використовувати онтології та засоби роботи із семантикою (зокрема, такі, що стосуються мови OWL (англ. Web Ontology Language) для формалізованого подання початкового коду програмного продукту у базі знань. Запропоновано метод автоматизованого рефакторингу на підставі знань про початковий код, модель подання початкового коду на підставі онтології, метод оброблення моделі на підставі правил, що дають можливість спиратися на семантику початкового коду під час виконання дій рефакторингу. Запропонований метод автоматизованого рефакторингу полягає у його здійсненні з використанням двох перетворень і оброблення проміжного подання коду. Описана модель подання початкового коду складається з двох частин, яку будують на підставі онтології та аксіом, що додають до моделі після проведення синтаксичного аналізу початкового коду. Метод оброблення моделі на підставі правил використовує два типи правил для логічного виведення, що описують додаткові функціональні залежності між сутностями бази знань. Проаналізовано запропоновані методи та моделі, а також описано їх практичне застосування. Проведено ряд випробувань для перевірки теоретичних засад запропонованих моделі та методів на практиці. Встановлено, що програмний інструментарій рефакторингу доцільно реалізувати з використанням клієнт-серверної архітектури для спрощення абстрагування бази знань про код від конкретної кодової бази. Експериментально встановлено поліноміальну залежність необхідного об'єму оперативної пам'яті для виконання завдань від обсягу початкового коду, який обробляють. Продемонстровано пришвидшення до 36 % процесу рефакторингу з використанням розробленого програмного прототипу порівняно з наявними засобами.
Завантаження
Посилання
Aguiar, C. Z., Zanetti, F., & Souza, V. E. (2021). Source Code Interoperability based on Ontology. VII Brazilian Symposium on Information Systems (pp. 1–8). ACM. https://doi.org/10.1145/3466933.3466951
Atzeni, M., & Atzori, M. (2017). CodeOntology: RDF-ization of Source Code. The Semantic Web – ISWC, (pp. 20–28). https://doi.org/10.1007/978-3-319-68204-4_2
Berners-Lee, T., Hendler, J., & Lassila, O. (2001) The Semantic Web: A New Form of Web Content That is Meaningful to Computers Will Unleash a Revolution of New Possibilities. Linking the World's Information: Essays on Tim Berners-Lee's Invention of the World Wide Web (1st ed.). Association for Computing Machinery, New York, NY, USA, 91–103. https://doi.org/10.1145/3591366.3591376
Fernandes, S., Aguiar, A., & Restivo, A. (2023). LiveRef: a Tool for Live Refactoring Java Code. In: Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering (ASE '22). Association for Computing Machinery, New York, NY, USA, Article 161, 1–4. https://doi.org/10.1145/3551349.3559532
Ganapathy, G., & Sagayaraj, S. (2011). To Generate the Ontology from Java Source Code. International Journal of Advanced Computer Science and Applications, 2(2), 111–116. https://doi.org/10.14569/IJACSA.2011.020218
Kesseli, P. (2017). Semantic refactorings [PhD thesis]. University of Oxford. URL: https://ora.ox.ac.uk/objects/uuid:0c74954e-dc83-463f-bcd4-519d98c3dcca
Pailoor, S., Wang, Y., & Dillig, I. (2024). Semantic Code Refactoring for Abstract Data Types. Proc. ACM Program. Lang. 8, POPL, Article 28, 32 pages. https://doi.org/10.1145/3632870
Paydar, S., & Kahani, M. (2012). A Semantic Web based approach for design pattern detection from source code. 2012 2nd International eConference on Computer and Knowledge Engineering (ICCKE), Mashhad, Iran, pp. 289–294. https://doi.org/10.1109/ICCKE.2012.6395394
Reiter, P., Espinoza, A. M., Doupé, A., Wang, R., Weimer. W., & Forrest, S. (2022). Improving source-code representations to enhance search-based software repair. In Proceedings of the Genetic and Evolutionary Computation Conference (GECCO '22). Association for Computing Machinery, New York, NY, USA, 1336–1344. https://doi.org/10.1145/3512290.3528864
Riemer, Y., Pedroso Nogueira, P. M., Matos, S. N., & Bronoski Borges, H. (2023). RMT: A Semi-Automated Tool for Refactoring Design Patterns. In: Proceedings of the XXXVII Brazilian Symposium on Software Engineering (SBES '23). Association for Computing Machinery, New York, NY, USA, 77–82. https://doi.org/10.1145/3613372.3613416
Tkachuk, A., & Bulakh, B. (2022). Research of possibilities of default refactoring actions in Swift language. Technology Audit and Production Reserves, 5(2(67)), 6–10. https://doi.org/10.15587/2706-5448.2022.266061
Tkachuk, A., & Bulakh, B. (2022). Usage of formalized knowledge about source code for refactoring actions in Swift. Technology Audit and Production Reserves, 6(2(68)), 6–10. https://doi.org/10.15587/2706-5448.2022.267160
Tkachuk, A., & Bulakh, B. (2023). Describing the Knowledge About the Source Code Using an Ontology. Infocommunication and Computer Technology, 1(5), 123–133. https://doi.org/10.36994/2788-5518-2023-01-05-14
Vagavolu, D., Swarna, K. C., & Chimalakonda, S. (2022). A mocktail of source code representations. In Proceedings of the 36th IEEE/ACM International Conference on Automated Software Engineering (ASE '21). IEEE Press, 1296–1300. https://doi.org/10.1109/ASE51524.2021.9678551

Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License.



