Введение 3
Постановка задачи 4
1. Обзор литературы 5
1.1. Типы клонов 5
1.2. Оценивание 6
1.3. Классификация методов 6
1.4. Доступные формальные методы 7
1.5. Доступные методы, основанные на глубоком обучении ... 9
2. Формат гибрида 10
3. Выбор формального метода для гибрида 11
3.1. Собственный инструмент: CCAlignerpy 11
3.2. Какой из формальных методов наиболее подходит для ги¬брида? 11
3.2.1 Полнота 11
3.2.2 Точность 12
3.2.3 Выбор трешхолдов 12
4. Выбор метода, основанного на глубоком обучении 13
4.1. Стратегия вычисления 13
5. Измерения метрик гибридного метода 14
5.1. Результаты 14
5.2. Угрозы валидности 14
5.3. Связанные работы 14
Заключение 15
Список литературы 16
Обнаружение клонов кода (code clone detection) — это устоявшаяся область исследований в анализе программного обеспечения, посвященная продуктивной практике в разработке программного обеспечения: копирования
и переиспользования программного кода. Такие скопированные фрагменты
называют клонами.
Обнаружение клонов кода важно для улучшения качества программного обеспечения, снижения затрат на поддержку и развитие, оптимизации
ресурсов разработки и облегчения рефакторинга кода.
Существующие прикладные инструменты обнаружения клонов кода в
основном используют формальные методы, которые эффективны для выявления клонов c небольшим числом синтаксических изменений, но часто
не справляются с обнаружением семантических клонов из-за присущих им
ограничений в понимании более глубоких, функциональных аспектов кода.
С другой стороны, подходы глубокого обучения демонстрируют высокие показатели в выявлении семантических связей между фрагментами. Подходы
глубокого обучения при этом значительно ограничены в своих способностях
в условиях реальных баз кода.
В данной работе сначала формулируется, а затем и демонстрируется
состоятельность новой типовой архитектуры, объединяющей формальный
метод CCStokener с методом TBCCD, основанным на глубоком обучении,
получая прирост в графе Moderately Type-3 c 53% до 66% на бенчмарке
BigCloneEval не теряя при этом высокой точности.
В данной работе представлено разработка гибридного метода обнаружения клонов программного кода, который объединяет формальные методы
и методы глубокого обучения. Обнаружение клонов кода имеет важное значение в разработке программного обеспечения для улучшения его качества,
снижения затрат на обслуживание и упрощения рефакторинга. Традиционные
инструменты для обнаружения клонов обычно используют формальные методы, которые эффективны для выявления синтаксических клонов (точных
или почти точных копий кода), но недостаточно хороши для обнаружения
семантических клонов (кода с одинаковой функциональностью, но разным
синтаксисом). С другой стороны, методы глубокого обучения показывают хорошие результаты в выявлении семантических клонов, но часто оказываются
непрактичными для применения в реальных условиях из-за высокой вычислительной сложности.
Предложенный гибридный метод использует сильные стороны обоих
подходов, комбинируя формальный метод CCStokener с методом TBCCD, основанным на глубоком обучении. CCStokener используется для обнаружения
клонов с высокой синтаксической схожестью, тогда как TBCCD применяется
для анализа пар фрагментов кода, прошедших начальный порог схожести, но
требующих дальнейшего семантического анализа.
Эксперименты, проведенные с использованием бенчмарка BigCloneEval—
системы для оценки инструментов обнаружения клонов—показали эффективность гибридного метода. Результаты продемонстрировали значительное
улучшение в обнаружении клонов типа Moderately Type-3, увеличив полноту
с 53% до 66%, не снижая при этом точность. Это показывает, что гибридный
подход может эффективно сбалансировать компромиссы между точностью
и полнотой, присущие обнаружению клонов, предоставляя более надежное
решение для реальных сценариев разработки программного обеспечения.
Исследование заключает, что гибридный метод является жизнеспособным и эффективным подходом для улучшения обнаружения клонов кода,
сочетая точность формальных методов с семантическим пониманием, предоставляемым методами глубокого обучения.
Cordy, James R и Chanchal K Roy (2011). «The NiCad clone detector». В: 2011 IEEE 19th International Conference on Program Comprehension. IEEE, с. 219—220.
Golubev, Yaroslav, Viktor Poletansky, Nikita Povarov и Timofey Bryksin (2021). «Multi-threshold token-based code clone detection». В: 2021 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER). IEEE, с. 496—500.
Guo, Daya, Shuai Lu, Nan Duan, Yanlin Wang, Ming Zhou и Jian Yin (2022). UniXcoder: Unified Cross-Modal Pre-training for Code Representation. arXiv: 2203.03850 [cs.CL].
Karthik, S и B Rajdeepa (2022). «A collaborative method for code clone detection using a deep learning model». В: Advances in Engineering Software 174, с. 103327.
Lu, Shuai и др. (2021). CodeXGLUE: A Machine Learning Benchmark Dataset for Code Understanding and Generation. arXiv: 2102.04664 [cs.SE].
Nakagawa, Tasuku, Yoshiki Higo и Shinji Kusumoto (2021). «Nil: large-scale detection of large-variance clones». В: Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, с. 830—841.
Plotnikov, Nikolai (дек. 2023). CCAligner. (датаобр. 11.02.2024). URL: https: //github.com/lokiplot/CCAligner/tree/algo_modification.
Svajlenko, Jeffrey и Chanchal K Roy (2016). «Bigcloneeval: A clone detection tool evaluation framework with bigclonebench». В: 2016 IEEE international conference on software maintenance and evolution (ICSME). IEEE, с. 596— 600.
Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser и Illia Polosukhin (2023). Attention Is All You Need. arXiv: 1706.03762 [cs.CL].
Wang, Pengcheng, Jeffrey Svajlenko, Yanzhao Wu, Yun Xu и Chanchal K Roy (2018). «CCAligner: a token based large-gap clone detector». В: Proceedings of the 40th International Conference on Software Engineering, с. 1066— 1077.
Wang, Wenjie, Zihan Deng, Yinxing Xue и Yun Xu (2023a). «CCStokener: Fast yet accurate code clone detection with semantic token». В: Journal of Systems and Software 199, с. 111618. ISSN: 0164-1212. DOI: https://doi.org/ 10 . 1016/j .jss. 2023.111618. URL: https : //www . sciencedirect. com/science/article/pii/S0164121223000134.
— (2023b). «CCStokener: Fast yet accurate code clone detection with semantic
token». В: Journal of Systems and Software 199, с. 111618.
Yu, Hao, Wing Lam, Long Chen, Ge Li, Tao Xie и Qianxiang Wang (2019). «Neural detection of semantic code clones via tree-based convolution». В: 2019IEEE/ACM 27th International Conference on Program Comprehension (ICPC). IEEE, с. 70—80.