Застосування формалізованих знань про вихідний код для здійснення рефакторингу у мові Swift
DOI:
https://doi.org/10.15587/2706-5448.2022.267160Ключові слова:
мова програмування Swift, база знань, засоби аналізу та рефакторингу, вихідний кодАнотація
Об’єктом дослідження у роботі є вихідний код програмного продукту, написаний мовою програмування Swift. Більшість програм як продукт певного проєкту протягом життєвого циклу потребують внесення змін і правок, що є затратним чи неможливим у разі поганої якості коду. Одним із варіантів вирішення проблеми якості коду є своєчасне застосування принципів рефакторингу. Існуюча проблема полягає в тому, що здійснення високорівневого рефакторингу повинне проводитись самостійно розробником без використання автоматизованих засобів, оскільки вбудовані рішення не працюють через архітектурну складність продукту.
Для зменшення кількості помилок, внесених під час виконання рефакторингу, спрощення самого процесу виконання рутинних дій пропонується використовувати новий програмний продукт для рефакторингу. Він працює із високорівневими командами користувача на основі формалізованого опису вихідного коду разом із базою знань, що містить опис сутностей коду та їх властивостей (які конкретні дії можна виконати із ними). У роботі рефакторинг вихідного коду здійснено на прикладі мови програмування Swift. Запропонований підхід компонентної архітектури (база знань, програмний двигун) в подальшому дозволяє розширити функціонал програмного продукту на інші мови програмування.
Робота була направлена на розробку прототипу програмного продукту із використанням запропонованого підходу для перевірки та порівняння результатів з іншими засобами рефакторингу. Розроблено утиліту командного рядка, яка приймає на вхід вербальну команду та здійснює вивід результатів обробки та аналізу вихідного коду (пошук складних конструкцій у коді) або застосовує запропоновану зміну. У результаті проведеного тестування встановлено, що використання запропонованого підходу дозволяє виконувати складні завдання рефакторингу за допомогою простої вербальної формалізованої команди. Виконання такого ж завдання із використанням тільки вбудованих засобів рефакторингу вимагає значно більше часу та зусиль або ж взагалі неможливе.
Посилання
- Swift Documentation. Swift Local Refactoring. Available at: https://www.swift.org/blog/swift-local-refactoring/
- Lacerda, G., Petrillo, F., Pimenta, M., Guéhéneuc, Y. G. (2020). Code smells and refactoring: A tertiary systematic review of challenges and observations. Journal of Systems and Software, 167. doi: https://doi.org/10.1016/j.jss.2020.110610
- Almogahed, A., Omar, M., Zakaria, N. H. (2022). Refactoring Codes to Improve Software Security Requirements. Procedia Computer Science, 204, 108–115. doi: https://doi.org/10.1016/j.procs.2022.08.013
- Code refactoring best practices. Available at: https://www.altexsoft.com/blog/engineering/code-refactoring-best-practices-when-and-when-not-to-do-it/
- Kaur, S., Singh, P. (2019). How does object-oriented code refactoring influence software quality? Research landscape and challenges. Journal of Systems and Software, 157. doi: https://doi.org/10.1016/j.jss.2019.110394
- Fowler, M. (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley, 63.
- Morales, R., Soh, Z., Khomh, F., Antoniol, G., Chicano, F. (2017). On the use of developers’ context for automatic refactoring of software anti-patterns. Journal of Systems and Software, 128, 236–251. doi: https://doi.org/10.1016/j.jss.2016.05.042
- Don, R., Brant, J. Refactoring tools. Available at: http://www.laputan.org/pub/patterns/fowler/Roberts-Brant.doc
- De Nicola, R., Di Stefano, L., Inverso, O., Uwimbabazi, A. (2022). Automated replication of tuple spaces via static analysis. Science of Computer Programming, 223. doi: https://doi.org/10.1016/j.scico.2022.102863
- Hammad, M., Babur, Ö., Basit, H. A., van den Brand, M. (2022). Clone-Writer: An effective editor for developing code by using code clones. Software Impacts, 13. doi: https://doi.org/10.1016/j.simpa.2022.100323
- Al Dallal, J. (2012). Constructing models for predicting extract subclass refactoring opportunities using object-oriented quality metrics. Information and Software Technology, 54 (10), 1125–1141. doi: https://doi.org/10.1016/j.infsof.2012.04.004
- Swift Syntax Command Line Tool (2019). Available at: https://www.pointfree.co/episodes/ep55-swift-syntax-command-line-tool
- Almeida, L. (2019). An Overview of SwiftSyntax. Available at: https://medium.com/@lucianoalmeida1/an-overview-of-swiftsyntax-cf1ae6d53494
- Mattt (2018). SwiftSyntax. Available at: https://nshipster.com/swiftsyntax/
- SwiftSyntax Documentation. Available at: https://github.com/apple/swift-syntax/tree/main/Documentation
- A set of Swift bindings for the libSyntax library. Available at: https://iosexample.com/a-set-of-swift-bindings-for-the-libsyntax-library/
##submission.downloads##
Опубліковано
Як цитувати
Номер
Розділ
Ліцензія
Авторське право (c) 2022 Andrii Tkachuk, Bogdan Bulakh
Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License.
Закріплення та умови передачі авторських прав (ідентифікація авторства) здійснюється у Ліцензійному договорі. Зокрема, автори залишають за собою право на авторство свого рукопису та передають журналу право першої публікації цієї роботи на умовах ліцензії Creative Commons CC BY. При цьому вони мають право укладати самостійно додаткові угоди, що стосуються неексклюзивного поширення роботи у тому вигляді, в якому вона була опублікована цим журналом, але за умови збереження посилання на першу публікацію статті в цьому журналі.