Современный образовательный процесс в инженерной области, как правило, включает в себя сдачу домашних заданий в виде программ, которые затем вручную проверяются преподавателем на корректность и признаки списывания.
В некоторых случаях преподаватель может сделать проверку корректности сданного задания полуавтоматической или автоматической, например, с помощью технологии «GitHub Education Autograding», запускающей автоматические тесты на каждое обновление студенческого git-репозитория. Однако проверка наличия плагиата в сданных работах если и производится, то, как правило, вручную, что не только приводит в потере времени преподавателя, но и не всегда находит существующие случаи плагиата.
В то же время существует активно развивающаяся на протяжении последних трех десятилетий научная область, предлагающая ряд вычислительных методов и алгоритмов для численной оценки схожести исходных программных кодов и идентификации наиболее схожих элементов исходных кодов. С практической точки зрения наиболее актуальным и распространенным применением этих методов является повышение качества программного обеспечения, попытка обнаружения программных ошибок и снижение избыточного повторения программных фрагментов. Однако задача проверки программного кода на плагиат хоть и имеет ряд различий с задачами, возникающими при разработке программ, принципиально может быть решена с помощью тех же алгоритмов.
На данный момент существует ряд сервисов, предоставляющих услугу автоматического поиска плагиата. Часть из них используют закрытые, проприетарные алгоритмы без возможности тонкой настройки механизма поиска под конкретную задачу. Многие такие системы поддерживают один или несколько языков без возможности добавления поддержки новых. Кроме того, многие онлайн-сервисы поиска плагиата как правило в первую очередь ориентирована! на тексты естественного языка, а не языка программирования.
В этой работе будет описано проектирование и реализация расширяемой системы, позволяющей автоматически определять характерные признаки плагиата в решения студенческих заданий.
В ходе работы были получены следующие результаты:
• В результате анализа предметной области были сформулированы основные требования к системе.
• Представлено архитектурное описание системы, позволяющее обеспечить выполнение поставленных требований.
• Реализована открытая, расширяемая система, соответствующая всем поставленным функциональным и нефункциональным требованиям, эффективно решающая поставленную задачу.
• Проведена апробация системы в рамках учебного курса по языку Python, подтвердившая работоспособность и полезность системы.
Весь исходный код доступен в виде репозитория на GitHub.
[1] О N Polovikova и V Е Ivanova. «Clone detection in student programs based on lexical analysis of source codes». B: Journal of Physics: Conference Series 1615.1 (авг. 2020), c. 012021. DOI: 10.1088/1742-6596/1615/1/012021. URL:
https://dx.doi.org/10.1088/1742-6596/1615/1/012021.
[2] Mai Iwamoto, Shunsuke Oshima и Takuo Nakashima. «Token-based code clone detection technique in a student’s programming exercise». B: 2012 Seventh International Conference on Broadband. Wireless Computing. Communication and Applications. IEEE. 2012, c. 650—655.
[3] Jiwen Luo, Feng Lu и Tao Wang. «А multi-dimensional assessment model and its application in E-learning courses of computer science». B: Proceedings of the 21st Annual Conference on Information Technology Education. 2020, c. 187—193.
[4] Morteza Zakeri-Nasrabadi и др. A systematic literature review on source code similarity measurement and clone detection: techniques, applications, and challenges. 2023. arXiv:2306.16171 [cs.SE].
[5] Chan chai Kumar Roy и James R Cordy. «А survey on software clone detection research». B: Queen's School of computing TR 541.115 (2007), c. 64—68.
[6] Andrew Walker, Tomas Cerny и Eungee Song. «Open-source tools and benchmarks for code-clone detection: past, present, and future trends». B: ACM SIGAPP Applied Computing Review 19.4 (2020), c. 28—39.
[7] Chan chai К Roy и James R Cordy. «Towards a mutation-based automatic framework for evaluating code clone detection tools». B: (2008), c. 137-140.
[8] Chan chai К Roy и James R Cordy. «А mutation/injection-based automatic framework for evaluating code clone detection tools». B: 2009 international conference on software testing, verification, and validation workshops. IEEE. 2009, c. 157—166.
[9] Jeffrey Svajlenko и Chanchai К Roy. «The mutation and injection framework: Evaluating clone detection tools with mutation analysis». B: IEEE Transactions on Software Engineering 47.5 (2019), c. 1060—1087.
[10] Stefan Bellon и др. «Comparison and evaluation of clone detection tools». B: IEEE Transactions on software engineering 33.9 (2007), c. 577-591.
[11] Jeffrey Svajlenko и Chanchai К Roy. «Evaluating clone detection tools with bigclonebench». B: 2015 IEEE international conference on software maintenance and evolution (ICSME). IEEE. 2015, c. 131—140.
[12] Akshat Agrawal и Sumit Kumar Yadav. «А hybrid-token and textual based approach to find similar code segments». B: 2013 fourth international conference on computing, communications and networking technologies (ICCCNT). IEEE. 2013, c. 1—4.
[13] Wei Tang, Du Chen и Ping Luo. «Bcfinder: A lightweight and platform-independent tool to find third-party components in binaries». B: 2018 25th Asia-Pacific Software Engineering Conference (APSEC). IEEE. 2018, c. 288-297.
[14] Toshihiro Kamiya, Shinji Kusumoto и Katsuro Inoue. «CCFinder: A multilinguistic token-based code clone detection system for large scale source code». B: IEEE transactions on software engineering 28.7 (2002), c. 654-670.
[15] Robert Tairas и Jeff Gray. «Phoenix-based clone detection using suffix trees». B: Proceedings of the ffth annual Southeast regional conference. 2006, c. 679-684...(21)