Тема: Инструментальная поддержка поиска клонов в программном коде
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
ВВЕДЕНИЕ 7
1 КЛОНЫ КОДА 10
1.1 Клоны кода и их виды 10
1.2 Алгоритмы поиска клонов в программном коде 12
1.2.1 Текстовой подход 12
1.2.2 Лексический подход 12
1.2.3 Синтаксический подход 12
1.2.4 Семантический подход 13
1.2.5 Сравнения подходов 13
1.3 Последствия использования клонов кода 15
1.3.1 Ошибки 15
1.3.2 Разрастание кода 15
1.3.3 Затруднение поддержки программы 16
1.4 Инструментарии для поиска клонов кода 17
1.4.1 Simian 17
1.4.2 PMD анализатор 17
1.4.3 CloneDR 17
1.4.4 Visual Studio 18
1.4.5 Duploc 18
1.4.6 DuDe 18
1.4.7 Dup 18
1.5 Выводы по разделу 1 19
2 ПОИСК КЛОНОВ В ТРЕХАДРЕСНОМ КОДЕ 20
2.1 Трехадресный код 20
2.1.1 Четверки 21
2.1.2 Тройки 21
2.1.3 Косвенные тройки 22
2.2 Векторная модель семантики 23
2.2.1 Сходство документов: матрица термин-документ 23
2.2.2 Сходство слов: матрица слово-контекст 24
2.2.3 Сходство отношений: матрица пара-модель 24
2.2.4 Другие варианты векторных моделей 25
2.2.5 Лингвистическая обработка для векторной модели 25
2.2.6 Математическая обработка для векторной модели 28
2.2.7 Сглаживание матрицы 32
2.2.8 Сравнение векторов 33
2.3 VSM как метод поиска клонов в трехадресном коде 36
2.3.1 Матрица термин-документ в трехадресном коде 36
2.3.2 Матрица слово-контекст в трехадресном коде 38
2.3.3 Матрица пара-модель для трехадресного кода 39
2.3.4 Построение матрицы для трехадресного кода 39
2.4 Выводы по разделу 2 47
3 ПРЕДЛОЖЕННЫЙ МЕТОД ПОИСКА КЛОНОВ В ТРЕХАДРЕСНОМ КОДЕ 48
3.1 Разделение кода на фрагменты 48
3.2 Поиск подходящих для анализа фрагментов 50
3.3 Построение векторной модели семантики 52
3.4 Сравнение фрагментов 54
3.5 Выводы по разделу 3 55
4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПОИСКА КЛОНОВ В ТРЕХАДРЕСНОМ КОДЕ 56
4.1 Алгоритмы программы 56
4.1.1 Общая схема построения программы 56
4.1.2 Алгоритм деления исходного кода на фрагменты 57
4.1.3 Алгоритм отыскания из фрагментов потенциальных клонов 59
4.1.4 Алгоритм поиска потенциальных клонов среди отобранных
фрагментов 61
4.1.4 Алгоритм применения VSM для поиска клонов кода 62
4.2 Код программы 63
4.2.1 Реализация деления исходного кода на фрагменты 63
4.2.2 Реализация поиска потенциальных клонов 64
4.2.3 Реализация поиска клонов 65
ЗАКЛЮЧЕНИЕ 66
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 67
📖 Введение
Помимо полезных паттернов, действительно помогающих при написании программ, также существуют и антипаттерны (anti - patterns) - шаблоны, применение которых на первый взгляд может показаться полезным. На практике их использование приводит к появлению большого количества ошибок в коде, код становится малопонятным и нечитабельным. Антипаттерны, в отличие от шаблонов проектирования, представляют собой неправильное решение проблемы [20].
По классификации Уильяма Брауна с дополнениями Нейла и Лапланте, антипаттерны делятся на 4 типа [14, 15, 16]:
- антипаттерны разработки (development anti - patterns) - технические проблемы и решения, с которыми связаны программисты;
- архитектурные антипаттерны (architectural anti - patterns) - проблемы, связанные со структурой системы;
- организационные антипаттерны (managerial anti - patterns) - проблемы, за решение которых отвечают менеджеры или группы менеджеров;
- антипаттерны среды (environmental antipatterns) - проблемы, возникшие по вине доминирующей в организации структуры и социальной моделью, являющейся результатом действующей в организации общественной политики [14].
Один из методологических антипаттернов, относящийся к антипаттернам разработки, является программирование методом копирования-вставки. Программирование методом копирования и модификации существующих фрагментов кода приводит к тому, что на этапе тестирования возникают ошибки, которые трудно отыскать во множестве схожих участков кода. В итоге программисту требуется дополнительное время на отыскание и устранение ошибок, приведение кода в более понятный вид. Более подробно проблемы связанные с применением данного подхода, описаны в разделе 1.3.
Вместо того чтобы реализовать общее решение для схожих по структуре проблем, программисты довольно часто применяют copy-paste подход, который порождает большое количество схожих по структуре и функционалу фрагментов кода. Такие фрагменты принято называть клонами программного кода. По степени схожести фрагментов кода можно выделить три основных типа клонов (полные определения даны в разделе 1.1):
1. Клоны кода первого типа - это точная копия исходного кода без каких - либо изменений.
2. Клоны второго типа - это синтаксическая копия исходного кода с внесением изменений в имена или типы переменной, или идентификаторы функции.
3. Клоны кода третьего типа - в скопированном фрагменте кода вносятся изменения в команды, также программист может добавлять или удалять некоторые команды.
Первые два типа клонов можно отыскать с помощью методов лексического или синтаксического анализа. Клоны кода третьего типа могут отличаться своей реализацией, но иметь одинаковый смысл, поэтому для их поиска необходимо применять семантический анализ. Одним из методов,основанных на семантике, является векторная модель семантики (vector space model, VSM). Данная модель используется в информационном поиске для представления коллекции документов векторами из одного общего для всей коллекции векторного пространства. Векторная модель является основой для решения многих задач информационного поиска, таких как: поиск документа по запросу, классификация документов, кластеризация документов [21]. Применение данного метода для поиска семантически схожих участков кода позволит отыскать клоны кода всех трех типов.
Для создания качественного программного продукта необходимо проводить его анализ на наличие ошибок, в том числе, порождаемых при применении подхода copy-paste programming. Анализируя код на присутствие в нем клонов, можно не только сократить время на исправление ошибок исходного кода во фрагментах - клонах, но и улучшить внутреннюю структуру программы с помощью вынесения схожих по смыслу фрагментов.
Целью данной работы является разработка приложения, основанного на векторной модели семантики и способного отыскать клоны трехадресного кода всех трех типов, возникающих при применении подхода копирования- вставки и модификации исходного кода.
Для достижения данной цели были поставлены и реализованы следующие задачи:
1. Провести обзор существующих инструментальных средств, изучить алгоритмы их работы, выявить положительные и отрицательные качества продукта.
2. Изучить и разработать алгоритм, основанный на векторной модели семантики, проверить его эффективность и применимость для поиска клонов в трехадресном коде.
3. Реализовать приложение на основе предложенного алгоритма, проверить правильность и эффективность его работы.
✅ Заключение
Применение векторной модели семантики для поиска схожих фрагментов подразумевает построение матрицы, на основе которой высчитывается мера схожести фрагментов. Стандартные матрицы VSM не позволяют достаточно полно описать структуру трехадресного кода для дальнейшего анализа. В связи с этим была разработана новая модель матрицы, в которой учитывается специфика трехадресного кода.
Также на основе VSM было предложено решение для предобработки трехадресного кода - разделение исходного графа программы на слабосвязные подграфы. В данном случае векторная модель семантики применялась для отыскания потенциальных клонов, что позволяет более точно найти клоны, затратив на поиск меньше времени.
По завершении достижения поставленных задач, была реализована цель магистерской работы - разработано приложение, основанное на векторной модели семантики, которое способного отыскать клоны трехадресного кода всех трех типов, возникающих при применении подхода копирования-вставки и модификации исходного кода.



