Тип работы:
Предмет:
Язык работы:


Обнаружение устаревших комментариев в коде

Работа №140596

Тип работы

Бакалаврская работа

Предмет

информатика

Объем работы60
Год сдачи2022
Стоимость4250 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
16
Не подходит работа?

Узнай цену на написание


Введение 4
Цель и задачи 6
Достигнутые результаты 6
Глава 1. Обзор предметной области 8
1.1. Постановка задачи 8
1.2. Типы комментариев 9
1.3. Обзор литературы 10
1.3.1 Узконаправленные методы 10
1.3.2 Векторная семантика 11
1.3.3 Механизмы сопоставления кода и комментария .... 12
1.3.4 Классическое машинное обучение 13
1.3.5 Глубокое обучение 13
1.3.6 Данные 16
1.4. Выводы 17
Глава 2. Инструмент для сбора данных 18
2.1. Подходы к разметке 18
2.1.1 Классический подход 19
2.1.2 Проблемы классического подхода 20
2.1.3 Прыжки 21
2.1.4 Испорченные не устаревшие примеры 22
2.1.5 Незначительные изменения комментариев 23
2.2. Реализация 23
2.2.1 Headless Plugin 24
2.2.2 PostProcessing 26
2.3. Результаты сбора 27
2.4. Выводы 28
Глава 3. Ручная разметка данных 30
3.1. “Золотой” набор данных 30
3.1.1 Кластеризация устаревших комментариев 31
3.1.2 Кластеризация не устаревших комментариев 32
3.2. Модель Deep JIT на новых данных 33
3.3. Выводы 34
Глава 4. Краудсорсинг 36
4.1. Яндекс.Толока 36
4.1.1 Return 37
4.1.2 Param 39
4.1.3 Summary 41
4.2. Модель Deep JIT на данных после краудсорсинга 42
4.3. Выводы 44
Глава 5. Инструмент CommentUpdater 45
5.1. Использование 45
5.2. Реализация 46
5.3. Выводы 50
Заключение 51
Благодарность 52
Приложение 53
Список литературы

В процессе написания и чтения кода разработчики оставляют к нему комментарии. Читаемость кода во многом зависит от качества комментариев. В исследовании Вудфилда и др. [1] проведен один из первых экспериментов, демонстрирующий положительное влияние комментариев на читаемость программного кода. В дальнейшем это было подтверждено другими исследователями [2, 3].
В то же время, исследования показывают, что сопровождение программного обеспечения - это одна из самых важных частей процесса раз-работки программного обеспечения (ПО) [4]. Значительную часть сопровождения и написания ПО занимает чтение и понимание уже написанного кода. Например, исследования Пигоски и др. [4], а также Пфлегера и др. [5], сообщают, что от 40 до 60 процентов времени сопровождения ПО тратится на его изучение. Улучшая читаемость кода, качественные комментарии упрощают поддержку ПО. Однако, чтобы поддерживать должное качество комментариев, разработчик должен прикладывать усилия и при необходимости вносить соответствующие правки при каждом обновлении кода, что происходит не всегда [6, 7].
Изменение кода без соответствующих изменений в комментарии может привести к противоречивости кода и комментария. Такие противоречивые комментарии негативно влияют на читаемость кода, принося неоднозначность [6, 8], увеличивая возможность программных ошибок [9]. Чтобы помочь программистам следить за качеством комментариев, исследователи предлагают системы автоматического обнаружения устаревших комментариев.
Устаревшие комментарии (также называемые inconsistent comments) - комментарии, описывающие фрагмент программного кода, но сообщающие об этом фрагменте неверную информацию. Часто такие комментарии возникают, когда разработчик при изменении функциональности кода забывает внести соответствующие правки в комментарий.
На Рисунке 1 приведен пример кода на Java из реального проекта seppuku [10]. Комментарий над функцией не соответствует логике ее кода. В комментарии сказано, что метод удаляет существующий файл или создает новый. Если посмотреть на код, становится ясно, что новый файл создается в любом случае. Таким образом, комментарий противоречит коду.
В этой дипломной работе исследуются способы обнаружения таких устаревших комментариев, а также проблема разметки и сбора примеров устаревших комментариев из существующих проектов. Данная работа полностью посвящена комментариям формата JavaDoc(см. раздел 1.2) к коду на языке программирования Java. Выбор языка программирования обусловлен тем, что Javaявляется одним из самых популярных языков программирования [11] и большинство статей в этой области исследуют именно комментарии к коду на Java. Кроме этого, формат JavaDoc, который используют разработчики на Java, облегчает анализ комментариев и алгоритмов.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В рамках данной работы были достигнуты следующие результаты:
• Разработан инструмент для обнаружения устаревших комментариев в виде плагина для IntelliJ IDEA. Плагин использует механизм инспекций и IntelliJ Platform для извлечения информации из методов с комментариями, которая подается на вход глубокой нейронной сети, обученной для обнаружения устаревших комментариев. Устаревшие комментарии подсвечиваются в коде, обращая на себя внимание разработчика.
• С целью дальнейшего улучшения качества моделей был разработан инструмент для сбора и автоматической разметки примеров для задачи обнаружения устаревших комментариев. Инструмент также использует преимущества IntelliJ Platform и, помимо необходимой информации о методах с комментариями, собирает дополнительную (информацию о рефакторингах, метриках схожести для векторных представлений и т.д.).
• Собран набор данных, содержащий более двух миллионов примеров из 4000 проектов на Java. Автоматическая разметка примеров произведена новым способом, разработанным в данной работе для умен¬шения числа некорректных примеров.
• Кластеризован золотой набор данных. Набор из 1000 примеров, содержащий детальную информацию о природе изменений и причинах возникновения устаревших комментариев. Используя золотой набор данных, было проанализировано качество модели, обученной на различных данных (авторских и предложенных ранее).
• Разработан метод ручной разметки данных для задачи обнаружения устаревших комментариев, использующий краудсорсинг. Для этого созданы интерфейс, инструкции, контрольные и обучающие задания. В результате эксперимента размечено 1000 примеров и задействовано несколько тысяч пользователей.
Дальнейшая работа возможна в следующих направлениях:
• Собранный набор данных можно использовать для обучения новых моделей с отличной архитектурой, рассчитанной на большее число данных.
• Дополнительную информацию о рефакторингах, доступную как в собранном наборе данных, так и для новых примеров из плагина, можно использовать как входные признаки для будущих моделей.
• Инструмент для сбора и автоматической разметки данных можно использовать для извлечения примеров из другого набора проектов, формируя тем самым еще больший набор данных для задачи.
• Методику разметки примеров с помощью краудсорсинга можно масштабировать и применить для большего числа примеров.



[1] Scott N Woodfield, Hubert E Dunsmore, and Vincent Yun Shen. The effect of modularization and comments on program comprehension. In Proceedings of the 5th international conference on Software engineering, pages 215-223, 1981.
[2] Ted Tenny. Procedures and comments vs. the banker’s algorithm. Acm Sigcse Bulletin, 17(3):44-53, 1985.
[3] Ted Tenny. Program readability: Procedures versus comments. IEEE Transactions on Software Engineering, 14(9):1271, 1988.
[4] Thomas M Pigoski. Practical software maintenance: best practices for managing your software investment. Wiley Publishing, 1996.
[5] Shari Lawrence Pfleeger and Joanne M Atlee. Software engineering: theory and practice. Pearson Education India, 1998.
[6] Fengcai Wen, Csaba Nagy, Gabriele Bavota, and Michele Lanza. A large-scale empirical study on code-comment inconsistencies. In 2019 IEEE/ACM 27th International Conference on Program Comprehension (ICPC), pages 53-64. IEEE, 2019.
[7] Beat Fluri, Michael Wiirsch, Emanuel Giger, and Harald C Gall. Analyzing the co-evolution of comments and source code. Software Quality Journal, 17(4):367-394, 2009.
[8] Yu Zhou, Ruihang Gu, Taolue Chen, Zhiqiu Huang, Sebastiano Panichella, and Harald Gall. Analyzing apis documentation and code to detect directive defects. In 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE), pages 27-37. IEEE, 2017.
[9] Walid M Ibrahim, Nicolas Bettenburg, Bram Adams, and Ahmed E Hassan. On the relationship between comment update practices and software bugs. Journal of Systems and Software, 85(10):2293-2304, 2012.
[10] Seppuku Development. sepuku. https://
github.com/seppukudevelopment/seppuku/blob/227956e97b61f182763ad3b2155bdc60dfa946ba/src/main/java/me/rigamortis/seppuku/api/util/FileUtil.java, 2020.
[11] Tegawende F Bissyande, Ferdian Thung, David Lo, Lingxiao Jiang, and Laurent Reveillere. Popularity, interoperability, and impact of programming languages in 100,000 open source projects. In 2013 IEEE 37th annual computer software and applications conference, pages 303-312. IEEE, 2013.
[12] Sheena Panthaplackel, Junyi Jessy Li, Milos Gligoric, and Raymond J Mooney. Deep just-in-time inconsistency detection between comments and source code. arXiv preprint arXiv:2010.01625, 2020.
[13] Wikipedia. Toloka ai — a crowdsourcing platform and microtasking project launched by yandex.https://toloka.ai/. [Online; accessed 13-April- 2022].
[14] Zhongxin Liu, Xin Xia, David Lo, Meng Yan, and Shanping Li. Just¬in-time obsolete comment detection and update. IEEE Transactions on Software Engineering, 2021.
[15] Fazle Rabbi and Md Saeed Siddik. Detecting code comment inconsistency using siamese recurrent network. In Proceedings of the 28th International Conference on Program Comprehension, pages 371-375, 2020.
[16] Alfonso Cimasa, Anna Corazza, Carmen Coviello, and Giuseppe Scanniello. Word embeddings for comment coherence. In 2019 45th Euromicro Conference on Software Engineering and Advanced Applications (SEAA), pages 244-251. IEEE, 2019.
[17] Anna Corazza, Valerio Maggio, and Giuseppe Scanniello. Coherence of comments and method implementations: a dataset and an empirical investigation. Software Quality Journal, 26(2):751-777, 2018.
[18] Inderjot Kaur Ratol and Martin P Robillard. Detecting fragile comments. In 2017 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE), pages 112-122. IEEE, 2017.
[19] Yu Zhou, Ruihang Gu, Taolue Chen, Zhiqiu Huang, Sebastiano Panichella, and Harald Gall. Analyzing apis documentation and code to detect directive defects. In 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE), pages 27-37. IEEE, 2017.
[20] Shin Hwei Tan, Darko Marinov, Lin Tan, and Gary T Leavens. @ tcomment: Testing javadoc comments to detect comment-code inconsistencies. In 2012 IEEE Fifth International Conference on Software Testing, Verification and Validation, pages 260-269. IEEE, 2012.
[21] Lin Tan, Yuanyuan Zhou, and Yoann Padioleau. acomment: mining annotations from comments and code to detect interrupt related concurrency bugs. In 2011 33rd International Conference on Software Engineering (ICSE), pages 11-20. IEEE, 2011.
[22] Lin Tan, Ding Yuan, Gopal Krishna, and Yuanyuan Zhou. /* icomment: Bugs or bad comments?*. In Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles, pages 145-158, 2007.
[23] Nataliia Stulova, Arianna Blasi, Alessandra Gorla, and Oscar Nierstrasz. Towards detecting inconsistent comments in java source code automatically. In 2020 IEEE 20th International Working Conference on Source Code Analysis and Manipulation (SCAM), pages 65-69. IEEE,
2020.
[24] Ankita Sadu. Automatic detection of outdated comments in open source Java projects. PhD thesis, ETSI_Informatica, 2019.
[25] Zhiyong Liu, Huanchao Chen, Xiangping Chen, Xiaonan Luo, and Fan Zhou. Automatic detection of outdated comments during code changes. In 2018 IEEE 42nd Annual Computer Software and Applications Conference (COMPSAC), volume 1, pages 154-163. IEEE, 2018.
[26] How to write doc comments for the javadoc tool.https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html. Accessed: 2022-03-21.
[27] Bernhard E Boser, Isabelle M Guyon, and Vladimir N Vapnik. A training algorithm for optimal margin classifiers. In Proceedings of the fifth annual workshop on Computational learning theory, pages 144-152, 1992.
[28] Jeffrey Pennington, Richard Socher, and Christopher D Manning. Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP), pages 1532-1543, 2014.
[29] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013.
[30] Matt Kusner, Yu Sun, Nicholas Kolkin, and Kilian Weinberger. From word embeddings to document distances. In International conference on machine learning, pages 957-966. PMLR, 2015.
[31] Tin Kam Ho. Random decision forests. In Proceedings of 3rd international conference on document analysis and recognition, volume 1, pages 278-282. IEEE, 1995.
[32] Kyunghyun Cho, Bart Van Merrienboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, and Yoshua Bengio. Learning phrase representations using rnn encoder-decoder for statistical machine translation. arXiv preprint arXiv:1f06.1078, 2014.
[33] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. Advances in neural information processing systems, 30,
2017.
[34] Sepp Hochreiter and Jurgen Schmidhuber. Long short-term memory. Neural computation, 9(8):1735-1780, 1997.
[35] Intellij idea.https://www.jetbrains.com/idea/. Accessed: 2022-04-01.
[36] JetBrains. Coroutines. https://kotlinlang.org/docs/
coroutines-overview.html.
[37] Nikolaos Tsantalis, Matin Mansouri, Laleh M. Eshkevari, Davood Mazinanian, and Danny Dig. Accurate and efficient refactoring detection in commit history. In Proceedings of the 40th International Conference on Software Engineering, ICSE ’18, pages 483-494, New York, NY, USA,
2018. ACM.
[38] What is refactoring. http://wiki.c2.com/7WhatIsRefactoring.
Accessed: 2022-03-21.
[39] Felipe Pezoa, Juan L Reutter, Fernando Suarez, Martin Ugarte, and Domagoj Vrgoc. Foundations of json schema. In Proceedings of the 25th International Conference on World Wide Web, pages 263-273. International World Wide Web Conferences Steering Committee, 2016.
[40] Github: Where the world builds software.https://github.com/.
[41] Amazon ec2, secure and resizable compute capacity for virtually any workload.https://aws.amazon.com/ec2/.
[42] Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pierric Cistac, Tim Rault, Remi Louf, Morgan Funtowicz, Joe Davison, Sam Shleifer, Patrick von Platen, Clara Ma, Yacine Jernite, Julien Plu, Canwen Xu, Teven Le Scao, Sylvain Gugger, Mariama Drame, Quentin Lhoest, and Alexander M. Rush. Transformers: State-of-the-art natural language processing. In Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations, pages 38-45, Online, October 2020. Association for Computational Linguistics.
[43] Egor Bogomolov Zarina Kurbatova JetBrains Research, Pavlov Ivan.
Commentupdater. https://github.com/JetBrains-Research/
CommentUpdater, 2021.
[44] JetBrains. Code inspection. [Online; accessed 29-april-2022].
[45] Wikipedia. Visitor pattern — Wikipedia, the free encyclopedia. http://en.wikipedia.org/w/index.php?title=Visitor%20pattern&oldid=1077794549, 2022. [Online; accessed 13-April-2022].
[46] ONNX Runtime developers. Onnx runtime.https://onnxruntime.ai/,
2021. Version: 0.1.2.
[47] Adam Paszke, Sam Gross, Francisco Massa, Adam Lerer, James Bradbury, Gregory Chanan, Trevor Killeen, Zeming Lin, Natalia Gimelshein, Luca Antiga, Alban Desmaison, Andreas Kopf, Edward Yang, Zachary DeVito, Martin Raison, Alykhan Tejani, Sasank Chilamkurthy, Benoit Steiner, Lu Fang, Junjie Bai, and Soumith Chintala. Pytorch: An imperative style, high-performance deep learning library. In H. Wallach, H. Larochelle, A. Beygelzimer, F. d'Alche-Buc, E. Fox, and R. Garnett, editors, Advances in Neural Information Processing Systems 32, pages 8024-8035. Curran Associates, Inc., 2019.
[48] Junjie Bai, Fang Lu, Ke Zhang, et al. Onnx: Open neural network exchange.https://github.com/onnx/onnx, 2019.
[49] Netron: Visualizer for neural network, deep learning and machine learning models.https://www.lutzroeder.com/ai.
[50] Precision and Recall. Precision and recall — Wikipedia, the free encyclopedia. [Online; accessed 27-April-2022].


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ