温彦 张峰 仇丽青 赵卫东
摘 要:Java Web是计算机专业核心实践课程。传统课程管理方法需要教师手动逐个部署、运行并检查学生项目程序,效率极低且极易发生错误,实现Java Web课程项目自动管理和分析势在必行。近年来飞速发展的在线教育、云计算及程序在线评判系统为该类需要复杂分布式部署和运行环境的课程项目管理提供了新思路。因此,设计并实现一个基于云环境的Java Web课程管理系统。该系统可实现学生提交课程项目的云端在线自动部署和运行,解决其中负载均衡、命名冲突等问题,并提供项目相似性检测等分析功能。与人工评阅方法相比,该系统可节省至少57%的评阅时间,同时可提供准确性达97%的项目相似性检测功能,大幅提高Java Web课程管理自动化程度和教师工作效率。
关键词:在线教育;Java Web;云平台;课程管理
DOI:10. 11907/rjdk. 201284 开放科学(资源服务)标识码(OSID):
中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)007-0103-05
Online Deployment and Analysis System of Java Web Course Projects Based on Cloud Environment
WEN Yan, ZHANG Feng, QIU Li-qing, ZHAO Wei-dong
(College of Computer Science and Engineering, Shandong University of Science and Technology, Qingdao 266590,China)
Abstract: Java Web is a core practical course for computer-related majors. Traditional course management methods require teachers to manually deploy, run, and check student programs one by one, which is extremely inefficient and prone to errors. It is imperative to implement the automatic management and analysis of Java Web course projects. In recent years, the rapid development of online education, cloud computing, and online judge systems have provided new ideas for such course project management that requires complex distributed deployment and operating environments. Hence this article designs and implements a Java Web course management system based on the cloud environment. This system implements the cloud-based automatic online deployment and operation of Java Web projects submitted by students, resolves the problems of load balancing, naming conflicts, and provides projects analysis functions such as similarity detection. Compared with the manual review method, the system can save at least 57% of the review time, and detect the similarity between projects with an accuracy of 97%. This system greatly improves the automation degree of Java Web course management and teachers work efficiency.
Key Words: online education; Java Web; cloud platform; curriculum management
0 引言
互聯网和云计算的普及与发展极大推动了教育事业的发展,使在线教育成为教育发展新动力与教育改革趋势及发展方向。在线教育作为一种“云服务”,突破了时间和地理局限性,也突破了对教师、学生身份的限制,使优质教学资源可在全球范围内共享,使教学满足个性化需求,极大提高了教学效率[1]。在线教育经过十多年的发展,在教育体系中扮演着重要角色,涌现出包括超星、雨课堂、中国Mooc等优质平台。计算机专业存在一项特殊的云服务——程序在线评判系统(Online Judge,OJ),它被广泛应用于程序设计相关课程的作业管理中,可自动完成程序提交、编译和执行,并通过预先设计的测试数据检验程序源代码正确性[2]。OJ系统一方面切实提高了学生编程实践能力,另一方面提高了教师工作效率和正确率。然而传统OJ系统局限性较大,如仅能评判逻辑和结构简单的玩具项目,无法处理涉及用户图形界面、文件操作、数据库和Web交互等功能的程序;仅支持单文件评判,不支持复杂项目结构;对程序书写格式要求较为严格;评判方式较为单一,仅支持通过输出字符串比对形式进行评判等。因此OJ系统对于一些大型程序的评判能力几乎为0。
Java Web及其相关课程如Web前端设计、Java EE框架技术是高校计算机专业中重要的实践技术课程,以Java Web为核心的技术体系是当前企业级信息管理系统的主流技术[3],学好这门课程对于学生了解分布式系统运行机制、提高实践能力具有重要作用[4]。在该课程中,学生提交的作业项目需要复杂的分布式物理部署环境,包含复杂的文件结构且需应用服务器、数据库服务器和其它Web组件支撑。传统Java Web作业管理所需的教师人工成本过高:①教师需手动将项目和数据部署至应用服务器和数据库服务器上,并进行必要的系统配置,启动服务器,并逐个运行文件,检查结果。该过程需要大量时间和精力,且配置过程的细微差错会影响程序运行甚至导致程序无法启动;②Java Web作业一般代码量较大、文件结构也相对复杂,教师需逐个查看源文件,且很难判断学生独立完成情况。
为了解决上述问题,对Java Web课程作业进行在线管理、自动部署和自动分析十分必要。因此,本文提出针对Java Web课程项目的在线自动部署与分析系统,可实现在线作业管理、在线远程自动部署作业项目、多文件项目相似度分析等功能,优化作业管理中重复繁琐的工作,并依靠数据分析,为杜绝作业抄袭等不良现象提供参考。
1 相关技术与系统
1.1 OJ系统
在线判题(Online judge,OJ)系统起源于ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest)和信息学奥林匹克竞赛(Olympiad In Informatics),OJ系统负责自动判题和排名。经过近 40 年发展,ACM 国际大学生程序设计竞赛已发展成为全球最具影响力的大学生程序设计竞赛[5-6]。当前,国内外高校部分计算机程序设计相关课程作业和实验采用OJ系统进行考核[7]。用户可在线编辑、提交程序,而后系统对源代码进行编译和执行,通过预先设计的测试数据检验程序正确性。其中,在线自动判题是核心功能,依赖于服务器端编译器。此外,大多数OJ系统包含实现代码相似度检测,以避免抄袭现象。
国内外有诸多知名的OJ系统[8],西班牙Valladolid大学OJ系统(UVA)是全球最大最老牌的OJ之一,题目数量堪称之最;POJ是北京大学的在线评测系统,题目数量很多,难度不一,OJ各项功能也很完善,还提供免费的OJ系统下载,学生可以自行搭建OJ;ZOJ是浙江大学的在线评测系统,是国内起步最早的OJ之一,系统友好性不如POJ,但功能并不差;HUSTOJ是华中科技大学的在线评测系统,其中以Virtual Judge功能最为著名,它无需测试数据,可直接使用其它OJ上的题目。
目前各高校在线OJ系统仅能处理较为简单的程序,仅支持单文件评判,对提交程序的格式要求也较为严格,对于Java Web这类分布式环境下包含诸多组件和复杂文件结构的大型程序的处理能力非常有限。
1.2 应用程序自动部署
对普通Web项目实现自动部署相对常见,已有较成熟的技术和方法[9-10],如最常见的持续集成技术Jenkins[11-12],使用Jenkins可编写脚本关联Git、SVN等代码托管工具及Maven、Ant等依赖管理和项目构建的工具。一个典型方案是Jenkins集成Git和Maven,代码通过Git发布版本,之后拉取Git中相应版本代码,使用Maven编译并发布到Tomcat,Jenkins再重启Tomcat,完成自动部署。
当前主流持续集成技术大多是对已知文件结构项目进行部署或对已部署好的项目进行更新,若待部署项目的属性(项目名、目录结构等)未知,则不能采用该技术。
1.3 程序相似度检测
程序相似度检验的目的是发现程序文本、结构、语义、功能等方面的相似性,是在GitHub、SourceForge等大型代码库上进行代码检索的核心功能,也是判断程序是否具有抄袭现象的主要依据[13],主要包含两大类方法[14]。一种是属性计数(Attribute counting)技术,它是最早的程序代码相似性检测技术,其主要思想是对程序的一些统计属性进行处理,而不考虑程序内部结构[15]。另一种是结构度量技术,根据对程序建模粒度的不同,可分为3种方法:①基于Token的检测方法[16-17],即将代码看作Token(词)序列,并对其中的标识符进行统一处理,利用最长公共子序列、后缀树匹配等算法计算相似度,能够发现标识符重命名等代码复制情况,实现效率较高,但因缺乏程序逻辑信息,准确率有限;②基于语法树的相似性检测方法[18-19],包含程序语法逻辑,效果优于前两种方法,但由于语法树结构庞大,运行树的匹配运算复杂度很高;③基于程序依赖图的检测方法[20-21],根据语法结构和数据流转关系构建程序依赖关系图,通过子图匹配、程序片段运行结果匹配等方法检测程序相似性,包含程序从语法和语义层面的逻辑信息,具有较好的准确率,但复杂度非常高。结构度量是目前的主流技术,并配有MOSS、SIM等成熟工具。
综上所述,OJ系统为程序设计类课程自动化管理提供了思路,Java Web课程项目可通过在线自动部署和运行的方式节省人力成本。当前对Web项目的自动部署以及程序相似性检测技术已积累一定的研究,但如果待部署项目的属性未知,则已有部署方法适用性有限;且学生数量多,提交项目量大,对系统性能要求较高,需要考虑项目部署环境和部署方式,并解决负载均衡等问题。在对Java Web项目进行相似性检测时,需要在已有程序相似性检测算法基础上,针对复杂目录结构设计多文件项目相似性检测算法,这些是本文系统设计面临的挑战。
2 系统功能与架构设计
本文系统基本功能和架构如图1所示。该Java Web类课程管理系统提供的业务功能包括用户管理、课程管理、通知管理、项目管理等,其中项目管理是系统核心,包括动态部署学生提交项目、项目相似度检验等。系统包含客户端、本地服务器、远程服务器。由于学生提交项目需要动态装载、运行和卸载,与本文课程管理系统彼此独立运行,因此使用本地和远程双应用程序服务器,并搭载本地和远程双数据库服务器。远程服务器主要运行学生提交的应用;本地服务器主要运行课程管理系统,并作为学生提交应用的元数据引擎和动态部署引擎。由于待部署项目数量较多,测试时服务器访问量较大,使用单个Tomcat实例部署所有学生的项目不能满足系统性能和稳定性要求,因此使用云平台作为远程服务器,在其上搭建Tomcat集群和MySQL服务器以满足应用访问的性能需求。本地服务器则根据远程云主机上Tomcat集群的實际运行情况,对应用程序进行动态部署,实现负载均衡。同时需要处理目录合法性校验、应用程序命名冲突、应用程序和数据库关联等问题。此外,还为教师用户提供一些辅助功能,包括浏览器端查看代码、入口web页面检测等功能,以协助教师高效评价学生程序。
課题组对该系统进行了一个学期两个平行班的试用和对比分析。在原工作环境下,教师一学期布置9个小型项目和1个大型项目,对于小型项目,无异常情况下手动部署项目和数据库的时间约为6分钟,运行和查看项目的时间约为5分钟,查看源文件的时间约为10分钟;对于大型项目,运行和查看项目的时间约为10分钟,查看源文件的时间约为20分钟。学生提交程序出现异常的概率约为40%,调试异常需要10~30分钟时间不等。因此,对于一个学生所有项目评阅时间约为305分钟。此外,教师还需花大量时间进行项目相似性比对以发现抄袭现象,这段时间无法定量描述。而采用该课程项目自动管理系统后,项目和数据库被自动部署,因此这段时间被节省;学生可以直观查看项目运行状态,程序在教师端出现异常的概率为0,教师调试时间被节省。教师仅需运行和查看项目,还可以直接在线查看源文件,不需要操作文件系统,因此这段时间可节省30%,则此时一个学生所有项目修改时间约为132分钟,节约了近57%的时间。
3 基于Tomcat集群的远程分布式自动部署过程实现
3.1 项目远程自动部署流程
当学生提交作业时,上传应用程序的打包文件(WAR文件)及数据库脚本文件(SQL文件)。为了有效利用主机资源,Tomcat集群采用单主机多实例方式,即一台机器允许多个Tomcat实例,为每个Tomcat实例配置不同的端口。应用的主机地址、端口号、webapp路径等参数被保存在本地数据库中,作为远程应用的元数据。部署WAR文件时,根据各实例实际运行情况采用一定的负载均衡策略选择目标实例。为了使项目及其数据库能有效关联,采用单数据库实例方式,并要求学生在编写代码时使用本地数据库及标准端口。为了防止学生上传同名项目造成命名冲突和项目覆盖,对应用程序进行统一命名管理。具体指采用学生标识+作业标识以重命名项目,可保障每位学生每次作业项目具有全局唯一标识。为了防止学生频繁上传项目导致服务器崩溃,应当及时卸载旧版本应用程序。选择主机后,获取目标Tomcat服务器的应用部署目录,使用基于SSH2协议的JSch框架远程执行部署前的校检脚本,主要检测部署目录合法性,即是否已有相同项目的目录存在,如有则清空目录;然后上传项目WAR包,执行自动部署脚本,解压WAR包,部署项目并重启Tomcat;最后,如果项目需要使用数据库,则在数据库服务器上为程序创建数据库,数据库与应用实现一一对应,而后使用MyBatis中的ScriptRunner远程批量执行SQL脚本,将数据导入远程数据库中。
3.2 负载均衡策略
为有效应用分配Tomcat实例是该系统的核心需求,其关键在于制定合适的负载均衡策略。负载均衡主要用于处理Tomcat服务器同时部署多个项目的情况,而非解决项目在运行期间需处理大量用户访问的情况,其主要解决应用均衡部署的问题,因此不存在session共享和资源负载等问题。此外,部署应用时需上传项目文件并重启服务器,然而服务器重新启动和应用的装载需一定时间,数秒至数十秒不等。当多个应用同时部署时,该延时是无法接受的,甚至还会影响系统正常运行。因此需要采取一定策略避免多个应用在同一Tomcat实例上同时执行部署任务。具体策略为:①查看各个Tomcat实例的运行情况,找到其中空闲资源较多的。主要监控Tomcat实例进程的内存和CPU使用情况,若使用率大于某一阈值,则认为满负荷运转,新的应用则不在该实例上部署;②筛选出没有执行部署任务的Tomcat实例集合,初始时所有实例均为非部署状态;③基于哈希算法选择一个实例,进行部署。部署开始后,将该主机设置为正在部署状态。部署过程中,运行检测脚本程序轮询式检查部署是否完成。完成后,设置部署状态为非部署。检测脚本主要进行两方面的检查,使用云主机监控程序检测Tomcat进程是否启动,使用HTTP请求访问查看Tomcat是否已经开启特定端口并进行服务;④如果没有可以服务的Tomcat实例,则使用脚本程序新建一个Tomcat实例,并修改其服务端口。
4 多目录项目相似度分析设计
在教师进行学生项目评阅时,除了查看运行页面,代码查阅也是主要工作,抄袭分析是其中的重要环节。抄袭分析的核心为代码相似度分析,然而主流工具如SIM主要计算单文件相似性,无法直接用于Web项目的复杂目录结构。本文在SIM的基础上进行改进,使其可用于Web项目相似性计算。首先将层次目录进行扁平化,得到项目文件集合;然后,计算文件集合相似度,是典型的最佳匹配问题,可采用Gale-Shapley算法[22]计算,然而该算法复杂度为O(n2),复杂度较高,因此本系统采用贪心思想,简化文件集合相似度算法。首先利用SIM计算两集合间单个文件的两两相似度;然后找到相似度最大的一对文件,对相似度进行累加;而后将此文件从原始集合中删除,并继续从剩余文件集合中寻找相似度最大的文件对,累加相似度直至某个项目文件集合为空,最后进行归一化处理,具体如算法1所示。该算法匹配过程为第5~10行的while循环,只要对文件集合相似度进行排序则可以较快实现,因此匹配过程复杂度为NlogN。
算法1:文件集合相似度算法
输入:文件集合S1、S2;两个集合的大小M、N
输出:文件集合S1和S2的相似度SIM
BEGIN
FOR EACH si in S1
FOR EACH sj in S2
compute simi,j
END FOR
END FOR
WHILE S1 or S2 is not null
sum += simi,j
S1 -= {si}
S2 -= {sj}
END WHILE
SIM = 2 * sum / (M+N)
END
当用算法1计算出的SIM值大于规定阈值q时,认为两个项目存在抄袭现象。将阈值q设定为0.8,对学生已有项目进行相似值计算,并通过人工比对发现上述算法准确性可达97%以上,这是由于Java Web项目中跨文件的各类数据和逻辑关联较为复杂,学生在抄袭时如果进行部分修改,很可能会引起项目无法运行的错误,因此单文件相似度本身可较真实地反映抄袭情况,从而在该基础上的多文件相似度计算也较为准确。
5 结语
为了克服传统手动管理效率低下问题,本文设计并实现了一个在线Java Web课程项目自动管理和分析系统,该系统将学生提交的项目自动部署至位于远程云主机Tomcat集群和MySQL服务器上,部署过程处理负载均衡、命名冲突等问题,同时提供基于多文件项目相似度分析的抄袭检测等功能。通过一学期试用对比发现,与人工评阅方法相比,该系统能节省至少57%的评阅时间,同时可提供准确性达97%的项目相似性检测功能。因此,该系统大幅提高了Java Web课程管理自动化程度和教师工作效率,具有较高的实用和推广价值。
后续工作重点一方面是提高该系统对各类Web组件的扩展能力,另一方面考虑如何提供更为全面和深度的数据分析能力,包括代码质量分析、学生行为分析、学生知识能力分析等能力。
参考文献:
[1] 周唯,邹东升,牛宝君. 基于移动云计算的高校教学资源整合系统[J]. 计算机应用,2016(S1):33-36.
[2] 杜祥军,李建波,李敏,等. 基于Online Judge的计算机类课程教学评价方法研究[J]. 计算机教育,2019,304(3):55-57.
[3] 于海平. Java Web 课程教学改革探索[J],软件导刊,2014,13(5):191-192.
[4] 冯永安,王永贵,邱云飞,等. “链”式教学模式下Java Web课程教学改革与实践[J]. 计算机教育,2020(3):145-147,152.
[5] 陈志,李梦泽,马嫣,等. 基于ACM程序设计竞赛的常规教学改革[J]. 电气电子教学学报,2011,33(6):18-20.
[6] WANG G P,CHEN S Y,YANG X,et al. OJPOT: online judge & practice oriented teaching idea in programming courses[J]. European Journal of Engineering Education,2016,41(3):16.
[7] 陈灯,张彦铎,王海晖,等. C语言程序设计基础课程教赛融合教学方法研究[J]. 软件导刊,2019,18(4):206-209.
[8] 国内外有哪些好的刷题网站[EB/OL]. https:. www.nowcoder.com/discuss/20147?type=1&order=0&pos=6&page=1.
[9] 李超,花磊,宋云奎. 面向云计算的分布式应用自动部署框架[J]. 计算机技术与发展,2018(6):12-16.
[10] 王海侠,吴爱华,曾卫明. 基于JBoss和Tomcat的自动化部署研究[J]. 现代计算机(专业版),2015(13):38-42.
[11] 赵杰昌,张良宇. 基于Jenkins构建持续集成系统[J]. 电脑编程技巧与维护,2014(9):9-10.
[12] 周莹,欧中红,李俊. 基于Jenkins的持续集成自动部署研究[J]. 计算机与数字工程,2016,44(2):267-270.
[13] 张丹,罗平. 代码相似性检测方法与工具综述[J]. 计算机科学,2020,47(3):5-10.
[14] 程金宏, 刘东升. 程序代码相似度自动度量技术研究综述. 内蒙古师范大学学报(自然科学汉文版),2006, 35(4):457-461.
[15] VERCO K L,WISE M J. Software for detecting suspected plagiarism: comparing structure and attribute-count systems[C]. Conference on Computer Science Education, 1996:86-95.
[16] DUCASSE S, RIEGER M , DEMEYER S . A language independent approach for detecting duplicated code[C]. IEEE International Conference on Software Maintenance, 1999:109-118.
[17] GITCHELL D, TRAN N. SIM: a utility for detecting similarity in computer programs[C]. Thirtieth Sigcse Technical Symposium on Computer Science Education, 1999:266-270.
[18] KIM Y C, CHO Y Y, MOON J B. A plagiarism detection system using a syntax-tree[C]. International Conference on Computational Intelligence, 2004:23-26.
[19] JIANG L, MISHERGHI G, SU Z, et al. DECKARD: scalable and accurate tree-based detection of code clones[C]. Minneapolis: International Conference on Software Engineering, 2007.
[20] PHAM N H, NGUYEN H A, NGUYEN T T, et al. Complete and accurate clone detection in graph-based models[C]. IEEE International Conference on Software Engineering, 2009:276-286.
[21] SHENEAMER A, ROY S, KALITA J. A detection framework for semantic code clones and obfuscated code[J]. Expert Systems with Applications,2018,97(1):405-420.
[22] DUBINS L E,FREEDMAN D A. Machiavelli and the Gale-Shapley algorithm[J]. American Mathematical Monthly,1981(88):485-494.
(責任编辑:江 艳)