Метод автоматизації рефакторингу програмного коду з використанням бази знань
dc.contributor.advisor | Булах, Б. В. | |
dc.contributor.author | Ткачук, Андрій Віталійович | |
dc.date.accessioned | 2024-07-01T14:01:25Z | |
dc.date.available | 2024-07-01T14:01:25Z | |
dc.date.issued | 2024 | |
dc.description.abstract | Ткачук. А. В. Методи автоматизації рефакторингу програмного коду з використанням бази знань. – Кваліфікаційна наукова праця на правах рукопису. Дисертація на здобуття наукового ступеня доктора філософії за спеціальністю 122 «Комп’ютерні науки». – Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського», Київ, 2024. Метою дисертаційного дослідження є розробка методу аналізу початкового коду та його подальшого автоматизованого рефакторингу, який спирається на використання бази знань про цей код. Об'єктом дисертаційного дослідження є процеси збору, представлення і обробки інформації про початковий код програмних продуктів. Предметом дисертаційного дослідження виступають методи аналізу, представлення та обробки інформації для рефакторингу початкового коду з урахуванням його семантики, які базуються на використанні формалізованих знань про код. У ході роботи над дисертацією було використано такі методи дослідження: спостереження, порівняння, аналіз, формалізація, абстрагування, моделювання, експеримент. Зазначені методи були обрані зважаючи на мету та завдання дослідження, а також на практичність їх використання при вирішенні проблем автоматизованого аналізу та рефакторингу початкового коду прикладних програм. У дисертації вперше запропоновано метод автоматизації рефакторингу програмного коду, який відрізняється від існуючих тим, що здійснює перетворення коду на рівні сутностей бази знань, створеної на основі запропонованої моделі формалізації знань про синтаксис і семантику коду, для автоматичного виявлення і виправлення розповсюджених антишаблонів програмування. Вперше запропоновано метод модифікації проміжного представлення програмного коду в процесі рефакторингу, що уможливлює виправлення нетривіальних антишаблонів, який відрізняється від існуючих тим, що застосовує механізми логічного виведення до знань про код, сформульованих з використанням описових логік і правил логічного виведення. Удосконалено модель формалізації знань про програмний код для його рефакторингу на основі онтології об’єктно-орієнтованої мови програмування, що відрізняється від існуючих тим, що представляє не лише базові відомості про синтаксис, отримані від синтаксичного аналізатора, а й семантику складних конструкцій, шаблонів та антишаблонів з можливою прив'язкою до функцій програмного продукту. Розроблений метод дозволяє перевикористовувати схему бази знань із накопиченими знаннями про шаблони та антишаблони під час аналізу та рефакторингу початкового коду різними мовами програмування, що дозволяє зменшити час та витрати на розробку систем рефакторингу, розробляючи лише частину системи, що пов'язана із перетворення початкового коду в сутності бази знань і навпаки. Запропонований підхід до формалізації знань про початковий код дозволяє отримувати метадані про зміст початкового коду, порівнювати наповнення репозиторіїв (шукати семантичні дублікати), створювати документацію про програмний продукт з допомогою вже існуючих засобів для роботи із семантичними даними, описувати шаблони і антишаблони для проведення аналізу і рефакторингу без втручання розробника. Запропоновано застосування розробленого методу для побудови програмного прототипу системи аналізу і рефакторингу початкового коду для мови програмування Swift з описом онтології мовою OWL-DL, а правил логічного виводу та запитів до онтології – мовою S(Q)WRL, що дало змогу значно пришвидшити процес здійснення рефакторингу. Таким чином досягається суттєве зменшення витрат на розробку та підтримку програмних продуктів. Дисертація складається із семи розділів. У першому розділі розглянуто автоматизовані системи рефакторингу. Дано визначення системи автоматизованого рефакторингу, порівняно такі системи за побудовою і принципом роботи, розглянуто їх переваги і недоліки. Розглянуто можливість застосування і використання семантичних підходів до вирішення задач рефакторингу. Сформульовано висновок про те, що ефективне функціонування інструментів автоматизованого рефакторингу значною мірою залежить від автоматизованого аналізу початкового коду. Аналіз дає необхідне уявлення про структуру та семантику коду, гарантуючи безпечність і послідовність рефакторингу. Зазначено, що включення семантичного розуміння в статичний аналіз коду та рефакторинг забезпечує глибоке й точне розуміння поведінки коду, що призводить до більш точних і надійних результатів. У другому розділі детально розглянуто поняття онтології та її застосування в якості основи бази знань. Дано визначення описових (дескриптивних) логік та мови OWL на їх основі, а також описано версії та профілі мови, її основні поняття та особливості, концентруючись на можливостях представлення семантики і способах логічного виведення засобами OWL. Дано визначення системи логічного виведення, розглянуто і порівняно алгоритми, що застосовуються такими системами. Розглянуто можливості доповнення виразності OWL у вигляді правил SWRL та запитів SQWRL. Було зроблено висновок, що коли необхідно проаналізувати велику кодову базу або знайти шаблони в ній, онтологія, описана в OWL, та пов'язані з нею можливості логічного виведення можуть бути надзвичайно цінними. Використання системи логічного виведення (англ. reasoner) дозволяє створити логічно узгоджені та максимально інформативні онтології, тим самим максимізуючи їх корисність у таких застосуваннях як відкриття знань, інтеграція даних та семантичний пошук. У третьому розділі досліджено можливості вбудованого рефакторингу у мові Swift. Розглянуто можливості додавання нових дій рефакторингу до мови програмування, а також оцінено можливість масштабування. Проведено оцінку отриманих результатів. У результаті експериментів було встановлено, що для додавання лише одної відносно простої дії рефакторингу необхідно написати близько 300 рядків коду. І немає причин вважати, що в інших випадках потрібно буде написати суттєво меншу кількість рядків коду. Таким чином, існує актуальна потреба в удосконаленні та автоматизації процесу розширеного рефакторингу, що дозволила б розробнику уникнути написання чималої кількості «інфраструктурного» коду, більше зосередившись на кінцевій меті рефакторингу. У четвертому розділі розглянуто застосування формалізованих знань про початковий код для здійснення рефакторингу у мові Swift. Досліджено можливість подолання існуючих перепон при додаванні нових дій рефакторингу із застосуванням формалізованих знань. Запропоновано формальне представлення початкового коду у вигляді окремої бази знань. У результаті проведеного дослідження встановлено, що використання запропонованого методу дозволяє виконувати складні завдання рефакторингу за допомогою простої вербальної формалізованої команди. У п’ятому розділі доведено, що онтології можна використовувати, щоб ефективно зберігати знання зокрема про початковий код. Розглянуто кілька підходів до перетворення кодової бази в базу знань про код як сукупність фактів про код, що спираються на онтологію. У шостому розділі проведено розширення можливостей здійснення аналізу та рефакторингу за допомогою описових правил. До пропонованої моделі додано набір правил, що описують певні дії рефакторингу, і здійснено перевірку їх застосування для доведення ефективності. У сьомому розділі описано ряд проведених експериментів із застосуванням запропонованого методу та моделі для перевірки справедливості їх теоретичних очікуваних властивостей та характеристик. Здійснено аналіз статистичних даних, отриманих шляхом опитування експертів щодо швидкодії та взаємодії і роботи із запропонованими методом і моделлю. Проведено перевірку роботи методу і моделі на різних наборах вихідних даних, а також якісне порівняння із існуючими програмними рішеннями для рефакторингу. Ці розділи разом підкреслюють практичне застосування та ефективність використання онтологій та формалізованих знань у розробці програмного забезпечення, зокрема в контексті рефакторингу та аналізу коду. Дослідження демонструє потенціал цього підходу у підвищенні ефективності процесів розробки програмного забезпечення. У дисертації запропоновано метод аналізу та рефакторингу початкового коду прикладних програм, який через використання бази знань про початковий код на основі онтології, дозволяє абстрагуватись від конкретної мови програмування в проекті і здійснювати складні маніпуляції із початковим кодом шляхом маніпуляції його семантичним представленням. Основна ідея методу полягає у роботі із представленням коду на семантичному рівні, що відрізняється від існуючих способів використанням онтології та засобів OWL/S(Q)WRL для роботи із семантикою. У ході експериментальних досліджень було доведено можливість відносно просто описувати правила рефакторингу в онтології та здійснювати аналіз і рефакторинг різної складності, а також показано зменшення витрат часу на виконання таких завдань на 36% у порівнянні із іншими підходами аналізу і рефакторингу. | |
dc.description.abstractother | Tkachuk A. Method of source code refactoring automation using a knowledge base. – A qualifying scientific work as a manuscript. Thesis for the degree of Doctor of Philosophy in specialty 122 “Computer Science”. – National Technical University of Ukraine “Igor Sikorsky Kyiv Polytechnic Institute”, Kyiv, 2024. The aim of the dissertation research is the development of a method for analyzing source code and further automated refactoring, based on the utilization of knowledge about that code. The object of the dissertation research is the processes of analysis, representation, and processing of information about the source code of software products. The subject of the dissertation research is the methods of analysis, representation, and processing of information for refactoring of source code, considering its semantics, which is based on the utilization of formalized knowledge about the code. In the course of working on the dissertation, the following research methods were used: observation, comparison, analysis, formalization, abstraction, modeling, experiment. These methods were chosen considering the goal and tasks of the research, as well as the practicality of their use in solving problems of automatic analysis and refactoring of the source code of application programs. The dissertation introduces, for the first time, a method for automating code refactoring, which differs from existing ones in that it performs transformations on the level of entities of knowledge base, which is based on proposed model for formalizing knowledge about the syntax and semantics of source code, for the automatic detection and correction of common programming anti-patterns, considering the semantics of the code. A method for modifying the intermediate representation of the code during refactoring is proposed for the first time, enabling the correction of non-trivial anti-patterns, which differs from existing ones in that it applies logical inference mechanisms to the knowledge about the code formulated using descriptive logics and rules of logical inference. The model for formalizing knowledge about the source code for its refactoring based on the ontology of the object-oriented programming language is improved. This model differs from existing ones in that it represents not only basic information about syntax obtained from the syntax analyzer, but also the semantics of complex constructions, patterns, and anti-patterns with possible linkage to the functions of the software product. The developed method enables the reuse of the knowledge base schema with accumulated knowledge about patterns and anti-patterns during the analysis and refactoring of the source code in different programming languages, which reduces the time and costs of developing refactoring systems by only developing the part of the system related to converting the source code into knowledge base entities and vice versa. The proposed approach to formalizing knowledge about the source code allows for obtaining metadata about the content of the source code, comparing repository contents (searching for semantic duplicates), creating documentation about the software product using existing tools for working with semantic data, and describing patterns and anti-patterns for analysis and refactoring without developer intervention. The developed method is proposed to be applied for building a software prototype of a system for the analysis and refactoring of source code for the Swift programming language utilizing: ontology which is described using the OWL-DL language, the rules for logical inference and querying the ontology which are expressed using the S(Q)WRL language, which provided the ability to reduce the time required to conduct the refactoring. This approach achieves a significant reduction in costs for the development and maintenance of software products. The dissertation consists of seven chapters. In the first chapter, automated refactoring systems are discussed. A definition of an automated refactoring system is provided, comparing such systems in terms of structure and operating principles, and examining their advantages and disadvantages. The possibility of applying and using semantic approaches to solve refactoring tasks is considered. It is concluded that the effective functioning of automatic refactoring tools largely depends on the automatic analysis of the source code. This analysis provides the necessary understanding of the code's structure and semantics, ensuring the safety and consistency of refactoring. It was noted that incorporating semantic understanding into static code analysis and refactoring provides a deep and accurate understanding of code behavior, leading to more precise and reliable results. In the second chapter, the concept of ontology and its application as a knowledge base foundation is thoroughly examined. A definition of description logics OWL (Web Ontology Language) on their basis is provided, along with descriptions of its versions and profiles, its main concepts, and features, focusing on the capabilities for representing semantics and the ways of logical reasoning with OWL tools. A definition of a logical reasoning system is given, and algorithms used by such systems are discussed and compared. The possibilities of enhancing OWL's expressiveness in the form of SWRL (Semantic Web Rule Language) rules and SQWRL (Semantic Query-Enhanced Web Rule Language) queries are considered. The conclusion is drawn that when it's necessary to analyze a large code base or find patterns within it, an ontology described in OWL, along with associated logical reasoning capabilities, can be extremely valuable. The use of a logical reasoning system (reasoners) allows for the creation of logically coherent and maximally informative ontologies, thereby maximizing their usefulness in applications such as knowledge discovery, data integration, and semantic search. In the third chapter, the possibilities of built-in refactoring in the Swift programming language are explored. The chapter examines the potential for adding new refactoring actions to the programming language, as well as the feasibility of scaling these additions. An evaluation of the obtained results is conducted. As a result of the experiments, it was found that to add just one relatively simple refactoring action, it was necessary to write about 300 lines of code. And there is no reason to believe that significantly fewer lines of code would be required in other cases. Thus, there is a current need for the improvement and automation of the extended refactoring process, which would allow developers to avoid writing a substantial amount of “infrastructure” code, focusing more on the ultimate goal of refactoring. This indicates a gap in the efficiency of the refactoring process in Swift, emphasizing the necessity for more streamlined and automated solutions. In the fourth chapter, the application of formalized knowledge about source code for refactoring in the Swift programming language is considered. The chapter investigates the possibility of overcoming existing barriers in adding new refactoring actions through the application of formalized knowledge. A formal representation of the source code in the form of a separate knowledge base is proposed. As a result of the conducted research, it was established that the use of the proposed method allows for the execution of complex refactoring tasks using simple verbalized formalized commands. This approach significantly streamlines the refactoring process, enabling more efficient and effective manipulation of the source code, and potentially reducing the need for extensive coding to implement new refactoring actions. In the fifth chapter, it was proven that ontologies can be effectively used to store knowledge, particularly about source code. Several approaches to transforming a codebase into a knowledge base about code (as a collection of facts about the code base), which comprise on an ontology, have been considered. In the sixth chapter, the capabilities of conducting analysis and refactoring using descriptive rules were expanded. A set of rules describing certain refactoring actions was added to the proposed model, and their application was tested to prove effectiveness. The seventh chapter involved a series of experiments using the proposed method and model to verify the accuracy of their theoretical expected properties and characteristics. An analysis of statistical data was conducted, obtained through surveys of experts regarding the performance and interaction with the proposed method and model. The functionality of the method and model was tested on different data sets, and a qualitative comparison with existing software products for refactoring was made. These chapters collectively highlight the practical application and effectiveness of using ontologies and formalized knowledge in software development, particularly in the context of refactoring and code analysis. The research demonstrates the potential of this approach in enhancing the efficiency and accuracy of software development processes. In the dissertation, a method for analyzing and refactoring the source code of application programs is proposed, which, through the use of knowledge base about the source code (supported by an ontology), allows abstraction from the specific programming language used in the project and enables complex manipulations of the source code by manipulating its semantic representation. The main idea of the method is to work with the representation of code at a semantic level, which differs from existing methods by using ontology and OWL/S(Q)WRL tools for working with semantics. During experimental research, it was proven that it is possible to relatively easy describe refactoring rules in ontology and perform analysis and refactoring of various complexities. Moreover, it was shown that the time needed to perform such tasks is reduced by 36% compared to other approaches to analysis and refactoring. | |
dc.format.extent | 166 с. | |
dc.identifier.citation | Ткачук, А. В. Метод автоматизації рефакторингу програмного коду з використанням бази знань : дис. … д-ра філософії : 122 – Комп’ютерні науки / Ткачук Андрій Віталійович. – Київ, 2024. – 166 с. | |
dc.identifier.uri | https://ela.kpi.ua/handle/123456789/67666 | |
dc.language.iso | uk | |
dc.publisher | КПІ ім. Ігоря Сікорського | |
dc.publisher.place | Київ | |
dc.subject | програмне забезпечення | |
dc.subject | рефакторинг | |
dc.subject | синтаксичний аналіз коду | |
dc.subject | інженерія програмного забезпечення | |
dc.subject | інверсія залежностей | |
dc.subject | комп’ютерне моделювання | |
dc.subject | модель представлення знань | |
dc.subject | база знань | |
dc.subject | класифікатор | |
dc.subject | онтологія | |
dc.subject | описові логіки | |
dc.subject | мова OWL | |
dc.subject | семантичні правила SWRL | |
dc.subject | продукційні системи | |
dc.subject | механізми логічного виведення | |
dc.subject | software | |
dc.subject | refactoring | |
dc.subject | syntactic code analysis | |
dc.subject | software engineering | |
dc.subject | dependency inversion | |
dc.subject | computer modeling | |
dc.subject | knowledge representation model | |
dc.subject | knowledge base | |
dc.subject | classifier | |
dc.subject | ontology | |
dc.subject | descriptive logics | |
dc.subject | OWL language | |
dc.subject | SWRL semantic rules | |
dc.subject | production systems | |
dc.subject | logical inference mechanisms | |
dc.subject.udc | 004.4ʼ23:004.4ʼ24:004.43:004.82 | |
dc.title | Метод автоматизації рефакторингу програмного коду з використанням бази знань | |
dc.type | Thesis Doctoral |
Файли
Контейнер файлів
1 - 1 з 1
Ліцензійна угода
1 - 1 з 1
Ескіз недоступний
- Назва:
- license.txt
- Розмір:
- 8.98 KB
- Формат:
- Item-specific license agreed upon to submission
- Опис: