Аннотация:В рамках данной работы рассматривается задача разработки и реализации алгоритма анализа истории изменений текста программы в процессе разработки с использованием системы контроля версий. Этот алгоритм нацелен на отслеживание по дереву версий клонов кода некоторых изначально отмеченных при помощи статического анализатора и вручную проблемных фрагментов текста программы.
Был проведён обзор способов представления исходного кода и средств статического анализа, разработан алгоритм, позволяющий отследить, начиная с некоторой версии, изменения, происходившие с помеченными в этой начальной версии фрагментами исходного кода, и разработано средство, реализующее этот алгоритм для работы с репозиториями проектов на языке С в системе контроля версий Git.
Данный алгоритм позволяет отслеживать клоны целевых фрагментов исходного кода заданного размера, которые отличаются от указанных целевых фрагментов в произвольных подвыражениях. Для сравнения фрагментов исходного кода используется представление в виде абстрактного синтаксического дерева с последующим формированием наиболее специализированного общего шаблона и вычислением расстояния между фрагментами по этому шаблону.