一、开题依据
1.1 研究目的
程序语言课程是计算机相关专业的核心教学内容之一,要提高程序语言设计能力必须通过大量的实践练习,在传统的教学过程中,往往通过人工方式对程序的源代码进行评测,这种人工评测方式存在效率不高,容易误判的弊端。本毕业设计课题提出一个基于B / S模式的可扩展在线程序语言评测系统,对系统的设计和主要的实现技术进行分析和探讨。
程序设计类课程,具有实践性强的特点。它不但要求学生掌握基础的理论知识,更重要的是要求学生不断提高自身的编程实践能力。因此,在这类课程中,老师务必会布置大量的程序设计作业,传统通过电子邮件或手写提交作业的方式让老师感到批改作业的任务繁重,让学生感到费时费力,难以提高编程的实践能力。为方便教学,提高学生动手编程的实践能力,开发一个自动化,智能化的评测系统成为需要。随着现代信息化的发展,软硬件的不断升级,使得开发这样一个评测系统成为可能。
Online Judge System(以后简称OJS),则是指一个在线的裁判系统,它可对程序源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。
ACM/ICPC(ACM International Collegiate Programming Contest, 国际大学生程序设计竞赛)是由国际计算机界历史悠久、颇具权威性的组织ACM(Association for Computing Machinery,国际计算机协会)主办的,世界上公认的规模最大、水平最高的国际大学生程序设计竞赛。现在各高校也越来越重视ACM程序设计比赛,都纷纷建立起自己的测评平台供老师和学生使用,但其实我们可以将这个思路继续延续下去,让这个系统功能更加强大,将系统作为辅助引入到实际教学当中,提高学生学习程序设计语言的兴趣,提高学习效率和质量,提供一个完备的反馈系统等等。
毫无疑问,现阶段已经拥有许多优秀的程序语言在线测评系统,许多是随着ACM而生的。 例如北京大学在线测评系统是为训练国际大学生程序设计竞赛北大代表队而设计开发的,在训练的过程中发现,该系统在大学生程序设计类课程的教学中也能发挥重要作用于是将其逐步引入相关课程的教学中,革新了程序设计类课程的教学手段和考试办法,提高了学生的学习积极性,同时也在一定程度上抑制了学生在编写程序时常见的抄袭现象。
仲恺农业工程学院是我的母校,在线测评系统仍在探索当中,为了开发一个可适应强,扩展性好的在线测评系统,我将毕业设计课题方向定在可扩展程序在线测评的研究和设计上面。意在开发一个易用的,实用的在线测评系统,用以提高学生的学习兴趣和学习效率,增进学生、教师之间的知识交流,提高教学质量等。
1.2 研究意义
EPOJS(Extensible Program Online Judge System)是一个学习的好帮手,开发这样一个系统是非常有意义的,下面分点阐述。
(1)学者在线学习程序设计语言
无论是什么样的用户,只要想学习C程序设计语言,就可以在本系统上面实现在线编辑程序,执行程序并查看执行结果,通过测试的情况反馈使用者的学习情况。
(2)提供教学辅助
教师可以利用本系统给学生进行在线测试,并获得测试反馈结果,从而对结果进行分析,以便有针对性的对学生进行授课,提高教学质量。另一方面教师还可以在上面布置作业,审批作业完成情况,评定成绩等。
(3)学员之间交流平台
现有的OJ系统,没有论坛系统功能,学员之间不利于沟通。本系统提供论坛系统和邮件,作为网上的交流平台,学员门可以在上面畅所欲言,发表看法,讨论问题。对于要使用文件,就可以通过邮件的方式。
(4)提供工作流支持
使用单位可以根据单位的具体需求,动态定义不同的流程,使之能够适应大多数的工作流程管理,简化了系统的设计。
(5)基于角色的权限控制模型
使用RBAC来进行权限的管理与控制,使得权限分配更加集中和灵活,再结合Struts2的标签和拦截器,可以实现一个良好的权限控制系统。
1.3 国内外研究概况
在线测评系统发展到现在已经比较常见了,无论是其体系结构还是运行模式都已经相对成熟了。现行的许多大学校园中,都拥有自己的在线测评系统,但大都具有类似的工作模式,主要体现在以下几个方面:
第一方面,由于各大高校越来越重视ACM竞赛,很多高校变进行了各自的程序语言在线测评系统的开发和应用。主要目的就是要提供一个平台供学生们提高程序设计水平。
第二方面,许多的程序语言在线测评系统并没有大胆的和教学结合在一起(当然也有,比如北京大学在线测评系统),应用面不够广。
ACM/ICPC 带动了演算算法程序设计的风气,世界上许多大专院校的咨询系所,仿照 ACM/ICPC 的比赛模式,纷纷自行开发出即时线上比赛系統,能夠自动批改、评分、计时、统计。学生不必齐聚一堂,就可以相互切磋程式设计技巧。比赛结束之后,便将比赛题目列为题库,并开放线上批改程序的功能,供学生赛后练习。这样的系统大家一般称之为「Online Judge System 」,或直接称为「 Online Judge (OJ) 」。
下面就国内和国外的OJ系统进行简介。
国内研究现状:
(1)浙江大学 Online Judge(ZOJ)
国内最早也是最有名气的OJ,有很多高手在上面做题。特点是数据比较刁钻,经常会有想不到的边界数据,很能考验思维的全面性。
(2)北京大学 Online Judge(POJ)
建立较晚,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA,在POJ上就能AC。
(3)同济大学 Online Judge (TOJ)
这个OJ题数上不能与上两个相比,推荐这个OJ的原因是它是中文的,这对很多对英文不太感冒的兄弟是个好消息吧。它也因此吸引了众多高中的OIer,毕竟他们的英文还差一些呵呵,上面的题目也更偏向高中的信息学竞赛一些。
国外研究现状:
(1)西班牙Valladolid大学 Online Judge(UVA)
世界上最大最有名的OJ,题目巨多而且巨杂,数据也很刁钻,全世界的顶尖高手都在上面。据说如果你能在UVA上AC一千道题以上,就尽管向IBM、微软什么的发简历吧,绝对不会让你失望的。
(2)俄罗斯Ural立大学 Online Judge(URAL)
也是一个老牌的OJ,题目不多,但题题经典。
(3)俄罗斯萨拉托夫国立大学(Saratov State University)(SGU)
SGU 是俄罗斯萨拉托夫国立大学(Saratov State University)用于培养ACM选手的训练网站。这个网站的建成时期较晚,但随着比赛的举行以及新题目的加入,这个题库的题目也日渐丰富。这个题库 的一大特点就是Online Judge功能强大,它不仅使你避开了多数据处理的繁琐操作,还能告诉你程序错在了第几个数据。这一点虽然与ACM的Judge有些出入,但是却方便了调 试程序。与UVA相比,这里的题目 在时间空间上要求都比较严格,而且更多的考察选手对算法的掌握情况,所以特别推荐冲击NOI的选手也来做一做。
(4)UsacoGate Online Judge(USACO)
全美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与前面的OJ不同的是测试数据可以看到,并且做对后可以看标准解答。
【主要参考文献】
[1] http://tech.ccidnet.com/zt/aop/
[2] ITeye http://www.iteye.com/search?type=all&query=aop
[3] Spring 官方网站 http://www.springsource.org/
[4] 面向方面的软件开发=Aspect-oriented software development/(美)Robert E. Filman[等]主编;莫倩[等]译.—北京:机械工业出版社,2006.
[5] 领域驱动设计:软件核心复杂性应对之道/(美)Eric Evans著;陈大峰等译.—北京:清华大学出版社,2006.
[6] Java中间件开发技术=Java Middleware Development/李华飚, 郭英奎等编著.—北京:中国水利水电出版社,2005.
[7] 高中生解题系统 http://zerojudge.tw/
[8] 国际大专院校程序设计推广与培训 http://ptc.moe.edu.tw/
[9] 浙江大学 Online Judge(ZOJ) http://acm.zju.edu.cn
[10] 北京大学 Online Judge(POJ)http://acm.pku.edu.cn/JudgeOnline/
[11] 西班牙Valladolid大学 Online Judge(UVA)http://acm.uva.es/
[12] 俄罗斯Ural立大学 Online Judge(URAL)http://acm.timus.ru/
[13] 俄罗斯萨拉托夫国立大学(Saratov State University)(SGU) http://acm.sgu.ru/
[14] UsacoGate Online Judge(USACO) http://ace.delos.com/usacogate
二、主要研究内容
2.1 课题的具体内容
本课题意在实现一个完备的,可扩展的程序在线评测系统(EPOJS, Extensible Program Online Judge System),并发布最初版本。拟定要完成的内容如下:
(1)EPOJS的总体功能分析,并书写概要设计文档。
(2)EPOJS的领域模型设计,确定开发框架,确定系统总体架构,书写开发文档。
(3)为可扩展而设计规范架构,实现多语言的切换,实现扩展,书写开发文档。
(4)EPOJS Core设计,拟采用JNI技术,发挥Java和C/C++各自的优势。
(5)基于RBAC权限模型建立与实现,并应用在EPOJS系统中,书写开发文档。
(6)JBPM的动态工作流程控制应用在EPOJS中,书写开发文档。
(7)EPOJS之论坛子系统的设计与实现,书写相关开发文档。
(8)EPOJS之邮件子系统的设计与实现,书写相关开发文档。
(9)集成测试,功能,性能与稳定测试,书写测试相关文档。
(10)发布EPOJS。
2.2 课题的新颖性
(1)系统可扩展性
本系统不仅仅局限在某们编程语言上面的评测,而且只要实现了所定义的扩展方面的相关规范,就能实现大多数编程语言的在线评测,具有较好的动态适应性。另一方面,可以支持动态添加教学任务,诸如添加作业系统,毕业设计管理系统,课程设计管理系统等。
(2)支持RBAC
提供多种角色的访问,系统可以面向普通注册用户,普通游客,学生,教师,系统管理员。
(3)教学管理支持
增加了教学项目管理环节,将系统与教学结合起来,并提供统计数据,教师可以通过统计信息来动态获得学生对知识的掌握情况,以便提供针对性的教学,提高教学质量。而对于学生,或者是普通注册用户,可以查看自己的评测统计信息,及时发现自己的不足之处,及时进行增强学习。
(4)动态工作流支持
系统使用单位可以灵活的建立工作流程,系统自动管理。如请假流程,毕业设计流程,课程设计流程,作业审批流程等等。
(5)论坛系统
为这个评测系统添加论坛系统,无疑能够促进多种用户之间的交流,用户可以在论坛中讨论各种问题。同时,为了内容的健康性,添加内容审核机制。
(6)邮件支持
论坛系统能够在很大程度上帮助人们进行问题的讨论,但是不便于大文件之间的传递,因此提供邮件的支持,将使得用户之间可以通过邮件进行讨论,这又是一个交流的手段。
(7)用户自定义学习流程
本系统强大的功能特性之一就是,使用系统进行学习的用户,可以根据自己的喜好来定制学习流程,这样既可以提高学习的兴趣,同时又能够提高学习的质量。这得益于动态工作流程的管理,将使用JBPM进行扩展。
2.3 重点解决的科学问题及与其预期结果
(1)重点解决的科学问题
本课题开发出一款功能完备的EPOJ系统,系统复杂性较大,也会遇到很多问题,下面将重点的科学问题陈述如下:
1)可扩展架构设计问题,架构设计所需要的知识面要广,需要定义各种适应性强的规范,难度大。
2)程序编译与执行的实现问题,不同程序设计语言,编译器和执行都不同,如何屏蔽彼此之间的差异,设计一个怎么样的规范成为了关键。
3)RBAC的设计,RBAC虽然发展得很成熟了,但是要将它移植到EPOJS中还是需要一定时间,解决一些问题。
4)动态工作流支持,本系统将使用开源的JBPM,问题在于如何将JBPM应用在EPOJS中。
以上四个问题是本课题的难点,也是本课题的特色所在。解决以上问题,那么一定能够开发出一套优秀的系统。
(2)预期结果
1)EPOJS一套,基于C语言的评测
2)开发文档
3)JBPM工作流支持
4)RBAC权限控制模块及其模块化(可选)
5)论坛子系统模块及其模块化(可选)
6)邮件系统模块及其模块化(可选)
三、研究方案(研究方法、研究工作的总体安排和进度,理论分析、计算、实验方法和步骤及其可行性,可能遇到的问题及解决办法)
3.1 研究方法
通过Java反射技术、动态编译、字节码技术,研究23种设计模式,了解相关的架构设计思想,开发方法与理论。研究Java Mail,JNI,JBPM,Struts2, Spring3, Hibernate4等开源框架的理论并应用在EPOJS中。重点研究架构的设计和系统的易用性。
3.2 研究工作的总体安排和进度
本课题工作进度时间安排如下表:
时间
|
任务
|
20XX-9-17~20XX-12-1
|
进一步了解需求,分析系统功能,编写概要设计文档,建立系统的原型。
|
20XX-12-1~20XX-2-1
|
领域模型分析,系统架构设计,系统规范定义,编写开发文档,一切为了扩展性而设计。
|
20XX-2-1~20XX-3-1
|
EPOJS核心(Core)设计,采用JNI方式实现C语言的编译与执行。
|
20XX-3-1~20XX-3-15
|
基于角色的权限控制(RBAC)系统设计和实现,并将其模块化。
|
20XX-3-15~20XX-4-1
|
基于JBPM的动态工作流设计与应用。
|
20XX-4-1~20XX-4-15
|
EPOJS之论坛子系统的设计和实现,并模块化,实现可插拔。
|
20XX-4-15~20XX-5-1
|
EPOJS之邮件子系统的设计和实现。
|
20XX-5-1~20XX-5-30
|
系统测试,毕业论文编写。
|
3.3 实验方法和步骤
本课题不仅对理论进行研究,而且还付诸于实践,不仅仅只是使用现成的框架,当然,这里也会用到一些开源框架,诸如Struts2、Spring、Hibernate、JBPM等。因此实验的过程还是相当有挑战的。先介绍本次毕业设计的软硬件平台:
项目
|
工具
|
操作系统
|
Windows7 / Linux
|
开发语言
|
Java、C/C++、JavaScript
|
WEB应用服务器
|
Tomcat6
|
数据库应用服务器
|
MYSQL / Oracle
|
运行平台
|
JVM / Linux
|
开发工具
|
Eclipse3.x
|
客户端软件
|
主流浏览器【IE, Firefox, Chrome】
|
辅组技术【开源框架】
|
Struts2,,Spring,Hibernate,JBPM,jQuery等
|
主要实验方法与步骤有:
(1)查阅相关文献以学习相关的框架(SSH,JBPM等)。
(2)设计核心的可扩展架构规范。
(3)实现核心的可扩展架构。
(4)实现附加的论坛系统,邮件系统。
(5)系统集成测试与发布。
3.4 可行性
本课题所涉及的技术和原理具有丰富的资源,并且本课题的负责人也对相关的技术和原理认识较为深刻,如已经能够掌握SSH、JBOM及其核心原理和应用,负责人对项目的需求明确,具有一定的实际编程经验,完全有能力完成此项课题,因此项目的可行性强。
3.5 可能遇到的问题与解决办法
由于软件开发技术和系统组建技术存在风险,故课题在进展中难免有难题出现,拟定可能会出现问题即应对方案如下:
问题
|
应对方案
|
限于经验问题,架构设计不完善
|
请教老师或有经验的长辈,讨论架构设计问题;阅读优秀开源框架源代码(如Spring),吸取优秀的设计,完善自己的架构设计。
|
由于系统复杂性高,限期内完成的没有达到预期程度
|
合理折中,根据实际情况而适当的进行修改。
|
系统运行速度慢
|
给IoC容器添加延迟初始化支持,深入学习Java虚拟机,优化性能,另一方面,研究Java C/C++各自的优势,用各自的语言实现局部,优化性能。
|
动态适应性工作流设计
|
使用JBPM开源框架。
|
JBPM没有提供流程设计器
|
使用Java Swing设计一个流程设计器(如果有时间,可以使用jQuery或Flex实现网页版本的流程设计器)。或者直接在网上寻找可用的支持JBPM的流程设计器。
|
四、指导教师意见