Abstract

The paper describes refactoring technics used in Klocwork Insight toolkit for C/C++ programming languages. Being the most popular Extract Function refactoring is chosen to describe all stages of refactoring process. Different language elements and constructions are processed during extraction of a new function and most of them are included as examples. Additionally it's shown that extract function refactoring has to use data-flow analysis to resolve conflicts or different ways of data usage on different conditional branches. Furthermore refactoring has to change and move declarations of variables. So it has to resolve type conflicts and implement declaration order of used types in case type is declared inside function. There are also some points about syntax tree transformations. Such transformations can be automatically mapped to source code changes. Automatically modifying the program’s source code, based on the changes in the syntax tree is commonly known as code transformation, and can be used not only for refactoring purposes. The technic of code transformation used in our approach can be used as a key idea for a new tool for doing non-trivial transformations of source code.

Highlights

  • The paper describes refactoring technics used in Klocwork Insight toolkit for C/C++ programming languages

  • Being the most popular Extract Function refactoring is chosen to describe all stages of refactoring process

  • Different language elements and constructions are processed during extraction of a new function and most of them are included as examples

Read more

Summary

Введение

Задача раннего выявления ошибки в дизайне программы является важной темой для исследования, так как стоимость подобных ошибок впоследствии может оказаться достаточно высокой. Одним из самых распространенных методов улучшения модели программы является рефакторинг программного кода. Он применяется для изменения дизайна программы с целью упрощения исходного кода, улучшения его понимания разработчиком и подготовки к добавлению новой функциональности. При описании нашего подхода и для сравнения с другими решениями мы будем использовать один из самых популярных и распространенных рефакторингов, а именно, «Выделение функции». Как правило, незначительно влияет на изменение исходного кода программы, то программисту легче проследить за их корректностью, и в то же время вся последовательность преобразований может привести к существенной перестройке программы и улучшению её дизайна. Проводя рефакторинг «Выделение функции», программист создает новую функцию из выделенного фрагмента кода, который заменяется вызовом этой функции. Более короткое описание рефакторинга «Выделение функции» звучит так: «У вас есть фрагмент кода, который может быть сгруппирован. Применение рефакторинга «Выделение функции», очевидно, имеет положительный эффект для исходного кода программы. Возможность повторного использования выделенной функции уменьшает повторения одного и того же фрагмента кода; улучшается документация, т.к. имя выделенной функции объясняет ее смысл; более того, т.к. новые функции относительно малы и, как правило, реализуют какую-то законченную функциональность, то программисту легче ими оперировать

Существующие решения
Стадии процесса рефакторинга
Рефакторинг-модуль
Анализ переменных в выделенном фрагменте кода
Использование переменной вне выделенного фрагмента
Обработка переменной-массива
Зависимость от локальных директив и типов
Построение функции
Декларации переменных
Узлы выхода
Проверка выделенного выражения
Модуль трансформации синтаксического дерева
Принцип работы с деревом
Создание набора текстовых изменений для исходного кода
Обработка ошибок компиляции
Сравнительное тестирование существующих решений
Перспективы развития
10. Заключение

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call

Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.