1 绪论
1.1 研究的目的及意义
在我们以往的考试经历中,我们可以看到,每次考试都需要经过出试卷、印试卷、发卷、做卷、收卷、阅卷、统计等过程,这几个过程有着很强的先后次序,不能顺序颠倒。这些过程中,又以出卷、阅卷和统计最为复杂,当一次考试涉及的人数众多时,老师需要批阅非常多的卷子,重复的批阅卷子浪费了大量的时间,此外,不仅效率底下,同时大量的阅卷工作也让老师疲于应付,最后导致阅卷的准确率下降。即便阅卷完成之后,工作还没结束,还需要对这些卷子进行分数登记、成绩统计以及对各个题目进行错误率统计,这些工作消耗时间非常多,因此效率也是非常低的。此外,从学生角度出发,每次做卷都要准备笔和草稿纸,麻烦且不符合环保的要求,从老师的角度出发,如果能够减少出卷、阅卷和统计的时间,那么可以腾出更多的时间用在其他的地方。因此本文基于 JavaWeb 技术希望开发一套网络考试系统来解决出卷、阅卷、统计花费时间过多的问题,同时为学校教务信息化作出一份贡献。
本文开发的网络考试系统具有一定的现实意义,主要是解决教师在出卷、阅卷和统计上花费时间过多的问题。开发一个系统需要考虑很多方面的问题,比如说时效性和高效性这是两个最最常见的因素,因为时效性关系到你的系统在投入使用时是不是真的能够解决当前所存在的这些问题,网络考试系统在国内虽然已经初具规模,一些学校也在使用这种方式考试,但我觉得目前的考试系统还存在着一些未解决的问题,还需进一步完善。同时高效性也是一个非常重要的因素,如果你的系统用了以后还不如不用那么你的系统必定是一个不成功的产品这也是我们开发需要考虑的一个重要问题。本系统目前只可以实现对一门科目的客观题的考试,基本上还不是特别成熟的一个系统,我还需要考虑如何进行多科目的主客观题型的考试是我以后研究的方向。因此是本系统的开发具有很重要的实际意义,能在当前的发展状态下为学生和教师提供适当的帮助的同时也为今后此类软件的发展提供一定的基础。
1.2 研究开发现状分析
国内考试系统的信息化发展比较缓慢,在广泛化应用的过程中,开发者一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学软件、数据统计、信息记录等应用系统,形成了一定规模的信息化建设体系。可是,由于目前国内的系统还不是很完善,比如一门考试就需要一个系统去支持,这样成本太高,而且我国集体信息化水平有些落后,资金短缺等因素。我国的网络考试系统还没有很好地完全自如的融入到我们的学习生活中,比其他国家有一定的差距。国外的管理与国内完全不同,不但在线考试化建设早,而且他们有坚强的技术团队来提供技术基础。
1.3 研究的内容
本系统的研究目的在于实现网络考试系统,实现该系统要完成的工作包括如下几个方面:
(1)了解全球的网络考试系统的发展历程和现状。深入解析其工作流程。
(2)根据该系统的工作流程设计其总体结构,绘制其结构图。
(3)设计系统的功能模块,如:后台系统运行维护模块。包括试题的录入、筛选、删除,随机生成,提交,打分等功能。前台考试模块,包括题的分发、时间的记录等功能。教师组题模块,具有考题的生成、选择、分数评判的等能力。设计并实现教师考前出题的组题功能模块。包括题类型,数量,每个题考分的设定等。
(4)熟练地运用和掌握 JavaWeb 技术和 MySQL 数据库编程,进行考试系统的程序代码编写、调试运行以及功能测试。
(5)了解电脑服务器的运行问题以及原理;大数据库的储存;以及大数据库与程序的互相交流问题。
2 可行性与需求分析
2.1 可行性分析
可行性分析是用最小的代价在最短的时间内确定问题是否能够解决。我首先需要进一步对上一章节目前考试系统现状的分析。之后初步的确定项目的规模跟目标,确定项目的约束跟限制,必须分析几种可能解法的利弊,从而判定原定系统的目标和规模是否能够实现,系统完成后带来的效益是否能够达到最大值。总之,只有认真的进行了可行性分析,才会避免或者减轻项目开发后期可能出现的困境。
- 经济可行性
经济可行性的重要方面是研究成本,其中包含毕业设计所需的开发成本,对开发成本是不是会大于开发项目前期预计利润进行预算。在结合上述所有情况的分析下,我觉得自己的毕设课题是经济可行性好的。首先开发此次毕设软件不要前期的投入资金,其次是自己设计的,最多是自己去图书馆找书,在实验室做项目,通过老师教导,同学帮助,这些都是免费的,再有就是需要一台电脑,这些都是能接受的,成本很小的同时我也可能够提升我在编码方面的实现能力。
- 技术可行性
本课题使用的是 Java 技术,开发平台选用 Eclipse,Eclipse 有着完整配备的功能,便于初学者使用还有代码提示,让我使用更加得心应手。在决定了编程框架后,再说用 Java 语言编码的优点:快,精简,可用性高等。同时,使用的数据库是 MySQL,开源的 MySQL 增添了可视化和稳定化的优点,而且安全方面也做得很好,更别说它的强大的保存数据功能以及查询数据功能。
- 操作可行性
该网络考试系统部署容器为 Tomcat,当需要进行考试时,只需要配置 Tomcat 服务器,便可进行考试。本系统采用 JSP 技术,利用网络就能够进行访问和操作,且界面简单易操作,用户只要有电脑,都能进行访问和操作。本系统具有易操作、易管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
2.2 需求分析
2.2.1 功能需求分析
网络考试系统主要用于实现高校在线考试,基本功能包括:自动组卷、试卷发布、试卷批阅、试卷成绩统计等。本系统结构如下:
(1)学生端:
登录模块:登录功能;
网络考试模块:可参加考试,并查看考试结果,提交试卷后老师允许的情况下查看错题;
(2)超级管理员端:
登录模块:实现管理员登录功能;
用户管理模块:实现用户信息的增加、修改、查看功能;
角色权限管理模块:实现角色的增加、修改、查看功能;
试卷管理模块:实现试卷信息的增加、修改、查看功能;
试题管理模块:实现试题信息的增加、修改、查看功能;
(3)试题管理员端(老师):
试卷管理模块:实现试卷信息的增加、修改、查看功能;
试题管理模块:实现试题信息的增加、修改、查看功能;
2.2.2 非功能需求分析
1、整个系统的设计中,系统必须满足以下要求:
(1)数据安全性
存储有关隐私权的网络考试等问题的系统数据,需要确保数据的安全性,在网站设计时必须要采取安全防范措施,以解决潜在的安全问题,比如如何防止学生上网查答案。
(2)易用性
在用户权限范围内,可在一个统一风格的界面内即可完成相关的所有业务流程操作或者获取所有相关信息,大大提高操作员的工作效率和易用性,灵活应用本系统。
(3)柔软性
由于这个网络考试系统涉及到范围广泛的业务,设计出的系统必须能够处理接受变化的能力。
(4)扩展性
随着互联网管理业务管理需求的不断变化,老师管理系统必然涉及到业务更新及扩展,这就要求在设计之初就应该考虑良好的可扩展性方案。
3 系统总体设计
3.1. 系统概要功能图
本系统所开发的网络考试系统主要分成了三个模块的主要功能,系统功能、考试功能和学生功能,每个功能都包含了几个子功能,子功能主要包括:对于系统功能方面的管理、角色的管理、用户方面的管理、对于试题管理、对于的试卷管理、学生答题、总结出错题库与得分。系统的概要功能图如图 4-1 所示:
图 4-1 系统概要功能图
3.2 系统基本功能
系统功能的划分方式可以分成很多种类,前面是按照功能模块进行划分,将系统分成三个模块,本章节依据网络考试系统的系统角色不同,可以分成用户端和管理员端。用户端包括:登录功能、学生答题、答题得分以及考完试之后的错题解析。管理员端包括:登录功能、系统功能管理、用户管理、角色管理、题目管理、试卷管理。下面本节主要对各个基本的功能进行一个简介。(此处没有对试题管理员进行详细介绍,因为管理员的题目管理跟试卷管理的功能就是他的功能)
3.2.1 登录功能
登录功能是一个系统的重要组成部分,也是一个系统重要的门户功能,登录功能主要实现了使用者对系统的登录,在本文所设计的体系中,登录主要分成了两种身份:学生用户和管理员。两种身份登陆,能细分系统的功能模块,实现更加方便的操作和管理。
3.2.2 系统答题
系统答题模块是本系统的一个重要功能,可以实现让用户的答题操作。系统答题功能主要是学生用户登录以后操作的,学生用户在输入正确的用户名和密码以后能开始系统答题,系统答题的题目均来自数据库。
3.2.3 答题得分
答题得分功能实现了学生用户在答题结束以后对自己得分情况的查看,该功能就实现了登录系统的学生用户在完成自己的试卷以后,点击体提交就能看到自己的得分,因此该功能是一个展示性质的功辅助能。
3.2.4 错题解析
错题解析功能是系统答题功能的一个辅助或者说优化的功能,只有学生用户在登录系统完成答题以后在老师允许的情况下才能进行该功能的操作,学生答题可能存在一定的错误,对错误题目的查看成为考试系统的子功能。因此本文所设计的错题解析功能,能让学生迅速发现正确或者错误题目,以及解析过程。这样方便自学和改进。学生功能结构图,如图 4-2 所示:
图 4-2 学生系统结构图
3.2.5 系统功 4 能管理
系统功能管理主要实现了对系统的其他功能进行管理,主要包括对新功能的添加和编辑,对现有功能的添加和修改,同时能对现有的功能进行子功能的编辑和修改,修改后的功能可以在系统中被查看。
3.2.6 用户管理
用户管理是一个系统的重要功能之一,对用户的管理可以实现对系统使用者的了解和查看,能让使用者更加方便的使用本系统,用户的种类分为多种,本文主要体现在学生用户和管理者两种用户上面,可以对用户的信息进行添加修改等。
3.2.7 角色管理
角色管理主要是针对用户来设计的,不同的用户拥有不同的权力。换句话说就是操作的权限是不同的。学生账号只能进行答题等行为,而不能进行后台的管理员操作。管理员账号也拥有不一样的权利。这些权力体现在对账号的操作,试卷和题目的管理上,因此对权限的管理能很好的控制系统用户的行为,有利于系统更加稳定的运行。
3.2.8 题目管理
题目管理主要是针对管理员的功能,该功能面向系统中试卷所使用的题目库,在本系统中,管理员能通过对题目的添加和修改对题目进行管理,可以查看现有的题目,同时也能对新的题目进行添加,为试卷的生成提供更多题目的选择。
3.2.9 试卷管理
试卷管理是本系统的核心功能,主要实现的是对学生用户考试答题的试卷进行管理,通过系统随机抽取的题目自动生成试卷并且能将试卷存入数据库,供学生考试时进行选择。管理员功能结构图,如图 4-3 所示:
图 4-3 管理员功能结构图
3.3 数据库设计
数据库的设计十分重要,下面将对本文所使用的数据表进行逐一的介绍。
- 用户表及 ER 图
表 4.1 用户表
字段名 | 数据类型 | 长 度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
userid | INTEGER | 11 | 用户 ID | 是 | |
roleid | INTEGER | 11 | 角色 id | 是 | |
username | VARCHAR | 20 | 用户账户名 | ||
userpwd | VARCHAR | 20 | 用户密码 | ||
usertruename | VARCHAR | 30 | 真实姓名 |
用户表 ER 图,如图 4-4 所示:
图 4-4 用户表 ER 图
用户 id:每一个登陆的用户都有一个特有的编号;
角色 id:学生、超级管理员、试题管理员,三个角色分别对应一个编号;
账号:登录时需要用到的;
密码:密码对应相应的账号;
姓名:用户的真实姓名;
状态:1 为正常,0 为禁用。
- 角色表
表 4.2 角色表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
roleid | INTEGER | 11 | 角色 id | 是 | |
rolename | VARCHAR | 20 | 角色名 | ||
rolestate | INTEGER | 11 | 角色状态 |
角色 id:学生、超级管理员、试题管理员,三个角色分别对应一个编号;
角色名:学生、超级管理员、试题管理员;
角色状态:1 为正常,0 为禁用。
- 功能表 ER 图
表 4.3 功能表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
funid | INTEGER | 11 | 功能 ID | 是 | |
funname | VARCHAR | 20 | 功能名 | ||
funurl | VARCHAR | 200 | 功能地址 | ||
funpid | INTEGER | 11 | 顶层功能 ID | ||
funstate | INTEGER | 11 | 功能状态 |
功能表 ER 图,如图 4-5 所示:
图 4-5 功能表 ER 图
功能 id:每个功能对应的编号;
功能名:分别有系统功能管理、角色管理、用户管理、题目管理、试卷管理等;
功能地址:每个功能对应一个地址,用于管理;
顶层功能 id:系统功能包括系统功能管理、角色管理、用户管理,试题管理包括题目管理、试卷管理;
状态:1 为正常,0 为禁用。
- 权限表 ER 图
表 4.4 权限表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
rrid | INTEGER | 11 | 角色权限 ID | 是 | |
funid | INTEGER | 11 | 功能 ID | 是 |
权限表 ER 图,如图 4-6 所示:
图 4-6 权限表 ER 图
角色权限 id:每个角色所拥有的权限对应的编号;
功能 id:每个功能对应的编号;
- 试题表 ER 图
表 4.5 试题表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
sid | INTEGER | 11 | 试题 ID | 是 | |
scontent | VARCHAR | 150 | 题干 | ||
sa | VARCHAR | 100 | A 选项 | ||
sb | VARCHAR | 100 | B 选项 | ||
sc | VARCHAR | 100 | C 选项 | ||
sd | VARCHAR | 100 | D 选项 |
试题表 ER 图,如图 4-7 所示:
图 4-7 试题表 ER 图
试题 id:每道题对应的编号;
题干:题目的内容;
- 试卷表 ER 图
表 4.6 试卷表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
pid | INTEGER | 11 | 试卷 ID | 是 | |
pname | VARCHAR | 11 | 试卷名 | ||
sid | INTEGER | 11 | 试题 ID | 是 |
试卷表 ER 图,如图 4-8 所示:
图 4-8 试卷表 ER 图
试卷 ID:每套试卷对应的编号;
试卷名:试卷对应的名字;
试题 id:每道题对应的编号;
- 学生试卷表 ER 图
表 4.7 学生试卷表
字段名 | 数据类型 | 长度 | 字段含义 | 是否主键 | 是否外键 |
---|---|---|---|---|---|
spid | INTEGER | 11 | 试卷 ID | 是 | |
userid | INTEGER | 11 | 用户 ID | 是 | |
sid | INTEGER | 11 | 角色 ID | 是 | |
studentkey | VARCHAR | 10 | 学生答案 | ||
studentstate | INTEGER | 11 | 试题答案 |
学生试卷表 ER 图,如图 4-9 所示:
图 4-9 学生试卷表 ER 图
试卷 ID:每套试卷对应的编号;
用户 id:每一个登陆的用户都有一个特有的编号;
角色 id:学生、超级管理员、试题管理员,三个角色分别对应一个编号;
学生答案:学生做试卷后的结果;
试题答案:每道题的正确答案;
4 系统详细设计
本章主要介绍网络考试系统的详细设计,分别从用户端和管理员端介绍各个功能模块的实现情况和运行截图。下面首先介绍用户端,然后介绍管理员端。
4.1 学生用户端
在这个系统中使用者主要是分为管理员和学生,我在这里先介绍学生用户系统的运行情况。以下是学生用户从登陆到错题解析的整个运行流程情况将在下面的论文中进行展示。
4.1.1 学生用户登录
学生用户登陆,先到这个界面。 如图 5-1 所示:
图 5-1 用户登录运行界面
在进入登录界面以后选择学生登录,再输入正确的用户名和正确的密码,就可以登录。如图 5-2 所示:
图 5-2 用户登录输入界面
用户正确完成登录输入以后,系统会根据用户所输入的信息,通过功能代码实现与数据库中存储数据的对比,从而判别该登录用户是否合法,如果不合法将提示输入正确的登录信息,输入正确则登录系统,进入系统的主界面。
4.1.2 主界面
学生用户正确登录系统之后会跳转到学生用户端的界面,主界面如图 5-3 所示:
图 5-3 学生用户主界面
学生用户的主界面主要包含了试卷列表和查看错题两个功能,试卷列表中罗列了所有考试的试卷,学生可以根据老师的要求选择对应的的试卷进行考试,考试结束以后还可以进行错题查看功能。
4.1.3 系统答题
学生用户登录系统以后选择试卷列表中的试卷进行考试答题,答题界面如图 5-4 所示:
图 5-4 学生用户答题界面
学生要在一定的时间内,完成试卷上的所有题目,然后进行提交,答题的进度和时间的限制可以系统会给出提示,运行界面如图 5-5 所示:
图 5-5 学生用户答题进度界面
4.1.4 答题得分
学生在规定的时间内完成答题,完成以后提交系统,提交系统,系统会根据题库对比得到考试成绩,成绩界面如图 5-6 所示:
图 5-6 学生用户答题成绩界面
计时器(到时自动交卷)功能,交卷时判断试卷是否有未答题、计算得分等功能都在 paper.jsp 中用 JavaScript 来实现
// 交卷功能判断是否有未答题目function unAnswer(){if(unanswer != 0){layer.open({title:'警告', content: "还有"+unanswer+"道题目未做!",icon:2,end:function(){postAnswer();}});}else{postAnswer();}}//计算得分function getScore(){//var spid = n$.post({url: basePath + 'user/studentPaper?cmd=score&userid='+'${userid}'+'&spid='+ now.getTime(),contentType: false,processData: false,success: function(res) {console.log(res)layer.open({title:'得分', content: res,icon:1,end:function(){location.href = basePath+'user/studentPaper?cmd=stupaper';}})},error: function(res) {console.log('error');}})}//倒计时功能//小于10的数字前面补0function p(n){return n<10?'0'+n:n;}//获取当前时间var now=new Date();//获取结束时间var endDate=new Date();//设置考试时间(单位分钟)endDate.setMinutes(now.getMinutes()+20)function getTime(){ var startDate=new Date();var countDown=(endDate.getTime()-startDate.getTime())/1000;var h=parseInt(countDown/(60*60)%24);var m=parseInt(countDown/60%60);var s=parseInt(countDown%60); $('.time').html(p(h)+'时'+p(m)+'分'+p(s)+'秒');if(countDown<=0){document.getElementById('time').innerHTML='考试结束';layer.open({title:'警告', content: '考试时间到,试卷已经提交!',icon:5,end:function(){unAnswer();}})}else{setTimeout('getTime()',500);} }getTime()
学生得到成绩以后可以对自己的本次成绩进行查看,也能对自己的其他考试试卷的成绩进行查看,查看界面如图 5-7 所示:
图 5-7 学生答题情况成绩结果界面
4.1.5 错题解析
学生用户能对自己的答题试卷中错误的题进行查看,并且能看到错题的解析,但是此功能只是一个辅助优化功能,必须是在交卷之后老师同意的情况下,才能查看。错题的解析界面如图 5-8 所示
图 5-8 学生用户错题解析界面
学生能根据数据库中给出的正常答案,对比自己的错误选项进行研究和学习,达到考试提升能力的效果。
4.2 管理员端
管理员端的功能主要为了更好的管理系统,让学生用户能顺利考试,因此管理员功能在实现的时候需要考虑的因素和功能会比较多,下面对管理员如何在这个系统中操作进行演示。试卷管理员(老师)的功能包括在其中。
4.2.1 管理员登录
管理员登录和学生用户登录使用的是同一个登录界面,区别在于登录时选取的身份是管理员身份,登录界面如图 5-9 所示:
图 5-9 管理员登录界面
4.2.2 管理员主界面
管理员正确输入信息后会跳转到管理员的主界面,主界面如图 5-10 所示:
图 5-10 管理员主界面
在管理员主界面上,我们可以看到管理员端主要分成了两个部分的功能,第一个是系统功能,第二个是试卷管理功能,下面将对这两个功能下的子功能进行逐一介绍。
4.2.3 系统功能管理
系统功能管理实现了所有的父功能和子功能之间的联系,能让管理员更方便得查看各个功能的实现情况。系统功能管理的界面如图 5-11 所示:
图 5-11 系统功能管理界面
功能之间存在着主次关系,可以通过新建实现新的功能,也可以通过编辑来实现功能间的联系,新建功能如图 5-12 所示:
图 5-12 系统新建功能界面
编辑系统子功能如图 5-13 所示:
图 5-13 系统功能管理编辑子功能界面
4.2.4 用户管理
实现用户的管理解决的是学生的使用系统有关的问题,用户管理界面如图 5-14 所示:
图 5-14 用户管理界面
用户管理可以对用户进行新增、修改和查询,用户新增界面如图 5-15 所示:
图 5-15 用户新增界面
用户修改界面如图 5-16 所示:
图 5-16 用户修改界面
用户查询界面如图 5-17 所示:
图 5-17 用户查询界面
4.2.5 角色管理
角色管理主要把各个角色之间的权限管理实现了,方便最高权限的人对其他管理员的管理。角色管理界面如图 5-18 所示:
图 5-18 角色管理界面
对角色的管理主要体现在对角色的权限控制上,权限设置界面如图 5-19 所示:
图 5-19 角色设置界面
角色可以通过添加完成。添加角色界面如图 5-20 所示:
图 5-20 角色新增界面
4.2.6 题目管理
题目的管理主要实现对所有考试题目得新增和编辑。题目管理界面如图 5-21 所示:
图 5-21 题目管理界面
实现对现有题目的编辑如图 5-22 所示:
图 5-22 题目编辑界面
除了对现有题目的修改,还能实现对新题目的添加,新增新题目的界面如图 5-23 所示:
图 5-23 题目新增界面
4.2.7 试卷管理
试卷的管理是学生考试的关键功能,试卷管理界面如图 5-24 所示:
图 5-24 试卷管理界面
试卷的种类分为很多种,要想从试卷中找到相关的试卷可以启动搜索功能,搜索界面如图 5-25 所示:
图 5-25 试卷搜索界面
可以随机抽取题目生成试卷。生成试卷的界面如图 5-26 所示:
图 5-26 试卷新增界面
在 DAO 层,利用随机函数,(设置试卷题目和插入题目数量)实现自动组卷
public Integer addpaper(Paper paper) {// TODO Auto-generated method stubString sql = "INSERT INTO paper(pname,sid) SELECT ?,sid FROM " + "subject where sstate = 1 ORDER BY rand() LIMIT ?";Integer rtn =DBUnitHelper.executeUpdate(sql,paper.getPname(),paper.getScount());return rtn;
4.3 数据管理
数据管理对代码与数据库之间的连接和交互起作用,数据库交互实现的代码为:
Connection conn = null; try {DbUtils.loadDriver("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/exam", "root", "zhs2668281");} catch (SQLException e) {e.printStackTrace();}return conn;}
完成数据库的连接,进行一些简单的数据库操作,包括增删改查等,主要代码为:
public static Integer executeUpdate(String sql,Object ...objects){Connection conn = getConn();QueryRunner qr = new QueryRunner();Integer rtn = 0;try {if(objects == null){rtn = qr.update(conn, sql);}else{rtn = qr.update(conn, sql, objects);}} catch (Exception e) {e.printStackTrace();}finally{try {DbUtils.close(conn);} catch (Exception e) {e.printStackTrace();}} return rtn;}public static Integer executeUpdate(String sql){return executeUpdate(sql, null);}public static <T> List<T> executeQuery(String sql,Class<T> cls,Object ...objects){Connection conn = getConn();List<T> list = null;try{QueryRunner rq = new QueryRunner();if(objects == null){list = rq.query(conn, sql,new BeanListHandler<T>(cls)); }else{list = rq.query(conn, sql,new BeanListHandler<T>(cls),objects); }}catch(Exception e){e.printStackTrace();}finally{try {DbUtils.close(conn);} catch (SQLException e) {e.printStackTrace();}}return list;}
其中分页查找的代码为:
/*** 带分页的查询* @param sql SQL语句* @param map SQL参数* @param pc 分页控制对象,需要传递参数:当前第几页(currentindex),每页显示多少行:(pagesize)* 分页控件显示多少也:showpcount* @return*/public static <T> Pager<T> execlist(String sql,PageControl pc,Class cls,String pk,Object...object){//获取总记录数sql String sqlcount = "select count(*) as count from ("+sql+") a";//获取具体数据的SQL语句Integer min = (pc.getCurrentindex()-1)*pc.getPagesize();Integer max = pc.getPagesize();String sqllist = "select * from ("+sql+") a where a."+pk+" limit "+min+","+max;Connection conn = getConn();Pager<T> pager = new Pager<T>();try {QueryRunner rq = new QueryRunner();Object count = rq.query(conn, sqlcount, new ScalarHandler<Object>("count"), object);List<T> list = executeQuery(sqllist,cls,object);//设置总记录数Integer c = 0;if(count!=null){c=Integer.parseInt(count.toString());}pc.setRscount(c);pager.setList(list);pc = dealpage(pc);pager.setPagectrl(pc); DbUtils.close(conn);} catch (Exception e) {e.printStackTrace();} return pager;}
5 系统测试
系统测试一个很主要的任务便是检查系统中所存在的一些不足和需要改进的方面,以此来提高整个系统的可靠性。而系统建设的一个更主要的目的是检测整个系统的“执行如何”。这其中可以把它分为三大步,分别是对于模块测试、组装测试以及对于验证的测试。而模块测试即是要测试整个程序的正确与否,装测试便是测试程序的接口正确与否,最后的验证测试是使用者是否满足整个系统软件的功能和性能的关键。一旦经过系统检测测试出所存在的一系列问题的时候就需要经过不断的调试,从而找出具体的错误所存在的位置在哪里,以便更好的改正。黑盒测试要根据系统整体需求说明书,应该全面覆盖到系统联合部件。系统检测是对整个系统进行一系列检测,进一步看看它是否符合需求规格的定义。在与需求规格定义不吻合或者是产生矛盾的地方要做进一步的修改。我们进行的软件测试主要是包括功能测试和兼容性测试。
5.1 功能测试
为了确保程序的正常运行为了保证每个功能都能实现既定的任务,在程序开发结束时应该对整个系统进行功能测试。就像我们所知道的功能测试就是对我们所开发的产品的各个功能进行逐一验证确保只能够完成我们所设计的功能。在功能测试的过程中我们需要用到一些测试用例对每一项功能足以测试从而可以检查我们所设计的系统能不能达到我们当时所期望的所有功能。功能测试从另一个方面来讲也可以叫做黑盒测试或者数据驱动测试,因为在黑盒测试和数据驱动测试系功能测试中我们只需要考虑的是每一个独立功能而不需要考虑整个代码的功能。一般来讲我们可以从系统的每一个小功能开始测试,比如说在本文中体现的就是登陆功能和发表评论功能,通过对这两个小功能的测试我们可以得出结论我们的系统是否满足我们所期望的功能需求的。
我们所接触的功能测试一般也叫黑盒测试,我们部队底层代码或者其他因素进行测试,我们只对各个功能进行测试。我们首先会对整个界面的各个功能进行测试,然后逐步深入,对每一个子功能进行测试,这个就是我们预期的目标。我们需要对所有功能进行测试以确保我们的设计和我们的实现是一致的,这样我们的功能说明说才是真实有效的。
我们进行程序的功能测试主要是对功能完整性进行测试,但是不是做完这些就可以了,我们还要对其他的部分进行测试,这就好比:判断条件的测试,输入的测试等。功能测试如表 5.1 所示。
表 5.1 功能测试表
测试需要达到的目标 | 进行测试后需要完成下面的目标:首先我们先检测软件是不是达到了之前提出的要求。这些要求包括每个功能模块是不是已实现。业务的过程是不是正确。这个系统的运行是不是比较稳,系统的性能是不是在能够接受的范围。 |
---|---|
测试涉及到的范围 | 在想清楚使用者希望有什么要求的时间里确定给出的功能模块 |
技术 | 先想出测试用例,然后再使用黑盒测试来测试各个用例 |
开始标准 | 使用者投入使用,可以正常地操作 |
完成标准 | 功能的实现还有操作空间满足之前的设计标准 |
测试重点 | 测试重点:软件兼容性 |
有必要考虑的事项 | 界面是不是合适不同尺寸不同分辨率使用 |
部分测试用例如表 6.2、6.3 所示:
表 6.2 软件测试用例表
用例编号 | 501 | |
---|---|---|
用例名称 | 开始软件用例测试。 | |
用例简述 | 用户可以通过 click 图标来进入软件界面。 | |
参与者 | 用户。 | |
前置条件 | 用户已经成功顺利地启动这个软件。 | |
后置条件 | 体验者能够顺利地通过 click 按钮来开始一段操作。 | |
成功的条件 | 体验者触摸按钮就可以正常地操作,功能可以正常使用。 | |
基本事件流 | 步骤 | 活动 |
1 | 体验者正常按流程启动程序,进入到这个软件的登陆界面,最后进入此程序的主界面。 | |
2 | 点击选择按钮。 | |
3 | 界面之间的跳转。 | |
规则与约束 | 用户按操作说明正确操作 |
错误等级如表 6.3 所示:
表 6.3 错误等级描述表
错误等级 | 描述 | 响应时间 |
---|---|---|
高 | 在模拟机上可以横屏显示,真机运行不能横屏显示。 | 需要对 Activity 节点进行强制横屏的设置。应立即处理。 |
中 | 软件在电脑中运行时,操作反应时间有些长。 | 优化处理解决跳转的方法。处理完严重问题后 1 小时内处理。 |
低 | 不影响系统实现功能,但是在用的时候有些不方便,也可能是设计的界面不太好看。 | 有时间的话再进行处理就可以。 |
功能测试会存在一定的等级误差也可以理解成我们所开发的功能是否能满足我们所期望的设计的一个范围因此我们可以将错误的等级划分成几个不同的种类。
表 6.4 用户管理模块功能测试用例
序号 | 测试标识 | 测试项目名称 | 测试用例输入和说明 | 预测结果 | 记录结果 |
---|---|---|---|---|---|
1 | 用户管理模块功能点。 | 新增加的用户。 | 系统管理员点击”新增”这个按钮。 | 顺利的进入到新增用户的界面。 | 测试可以通过。 |
2 | 用户管理模块功能点。 | 必填项。 | 空下必填项,其他填写好并提交。 | 提示(用户名不能为空)。 | 测试中发现提示不易理解。 |
3 | 用户管理模块功能点。 | 全部置空。 | 令所有文本框为空。 | 提示(用户名不能为空)。 | 测试中发现提示不易理解。 |
4 | 用户管理模块功能点。 | 提交新增用户信息。 | 在新增用户界面输入有效数据并点击提交按钮。 | 添加成功后跳转到用户列表界面。 | 测试通过。 |
表 6.5 角色管理模块功能测试用例
序号 | 测试标识 | 测试项目名称 | 测试用例输入和说明 | 预测结果 | 记录结果 |
---|---|---|---|---|---|
1 | 角色管理模块功能点。 | 新增角色。 | 系统管理员单击”新增”按钮。 | 成功进入到新增角色界面。 | 测试通过。 |
2 | 角色管理模块功能点。 | 必填项。 | 空下必填项,其他填写好并提交。 | 提示(角色名不能为空)。 | 测试中发现提示不易理解。 |
3 | 角色管理模块功能点。 | 全部置空。 | 令所有文本框为空。 | 提示(角色名不能为空)。 | 测试中发现提示不易理解。 |
4 | 角色管理模块功能点。 | 提交新增角色信息。 | 在新增角色界面输入有效数据并点击提交按钮。 | 添加成功后跳转到角色列表界面。 | 测试通过。 |
表 6.6 系统功能管理模块功能测试用例
序号 | 测试标识 | 测试项目名称 | 测试用例输入和说明 | 预测结果 | 记录结果 |
---|---|---|---|---|---|
1 | 系统功能管理模块功能点。 | 新增系统功能。 | 系统管理员单击”新增”按钮。 | 成功进入到新增系统功能界面。 | 测试通过。 |
2 | 系统功能管理模块功能点。 | 必填项。 | 空下必填项,其他填写好并提交。 | 提示(系统功能名,子功能 URL 不能是空的)。 | 测试中发现提示不易理解。 |
3 | 系统功能管理模块功能点。 | 全部置空。 | 令所有文本框为空。 | 提示(系统功能名不能为空)。 | 测试中发现提示不易理解。 |
4 | 系统功能管理模块功能点。 | 提交新增系统功能信息。 | 在新增系统功能界面输入有效数据然后同时点击提交按钮。 | 添加成功后跳转到系统功能列表界面。 | 测试通过。 |
表 6.7 题目管理模块功功能测试用例
序号 | 测试标识 | 测试项目名称 | 测试用例输入和说明 | 预测结果 | 记录结果 |
---|---|---|---|---|---|
1 | 题目管理模块功能点。 | 新增题目。 | 系统管理员单击”新增”按钮。 | 成功进入到新增题目界面。 | 测试通过。 |
2 | 题目管理模块功能点。 | 必填项。 | 空下必填项,其他填写好并提交。 | 提示(题干,选项,标准答案不能为空)。 | 测试中发现提示不易理解。 |
3 | 题目管理模块功能点。 | 全部置空。 | 令所有文本框为空。 | 提示(题干,选项,标准答案不能为空)。 | 测试中发现提示不易理解。 |
4 | 题目管理模块功能点。 | 提交新增题目信息。 | 在新增题目界面输入有效数据并点击提交按钮。 | 添加成功后跳转到题目列表界面。 | 测试通过。 |
表 6.8 试卷管理模块功能测试用例
序号 | 测试标识 | 测试项目名称 | 测试用例输入和说明 | 预测结果 | 记录结果 |
---|---|---|---|---|---|
1 | 试卷管理模块功能点。 | 搜索查询试卷。 | 系统管理员在查询框内输入试卷名并点击查询。 | 成功搜索出来试卷记录。 | 测试通过。 |
2 | 试卷管理模块功能点。 | 查看试卷详情。 | 系统管理员点击查看试题。 | 成功跳转到试卷详情页面。 | 测试通过。 |
3 | 试卷管理模块功能点。 | 随机组合试卷。 | 系统管理员点击新增。 | 成功跳转到组合试卷页面必填试题数量(试题量高于题库里量按照题库最高数量取出)。 | 测试通过。 |
5.2 兼容性测试
兼容性测试是一个系统是否能在各种情况下正常运行的关键,测试的环境主要在各个操作系统和各个浏览器上展开,软件测试中的兼容性测试很重要,如果说一个 B/S 系统与大多数的主浏览器都不是很兼容,那么这个系统将不能在市场上稳定的运行。在本设计中,我们所提出的系统虽然不用考虑过多的商业因素但是也必须将兼容性测试后考虑在其中,这样能让系统在以后的使用中更加稳定的运行。因此对系统进行一次兼容性测试是很有用的一个检测方式。
5.3 测试的方法
软件测试的常用方法基本有两种:静态测试和动态测试。
1.静态测试主要是指在不运行程序的前提下,通过人工评审程序源代码和程序有关的说明文档以及其他各类资料,来发现软件中存在的逻辑错误和代码错误,但是该类方法有一定的局限性;
2.动态测试顾名思义就是要运行测试程序,检查运行结果和预期结果的差异,并分析运行效率和健壮性等属性,动态测试的关键就是测试用例的构建。目前,大部分公司的测试方式主要是动态测试,动态测试中设计测试用例的方法是白盒法与黑盒法;
白盒测试:也称之为结构测试,是将软件看成了一个透明的白盒子,并按照程序的内部结构与处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查它与设计是否相符。白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
黑盒测试:也称功能测试,数据驱动测试或基于规格说明的测试,是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。将软件看作黑盒子,在完全不考虑程序的内部结构和特性的情况下,测试软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序的输入和输出特性上测试是否满足设定的功能。
6 结束语
这篇论文主要讲述了一个网络考试系统,在实现网络考试系统的时候,我重点完成了以下几点内容:(1)认识国内外网络考试系统的发展情况,深入思考该系统的工作流程;(2)按照该考试系统的工作流程设计该系统的总体结构,绘制结构图;(3)设计系统的功能模块,如:后台系统维护模块,其中包含试题的录入、整理、删除等功能;前台考试模块,其中包括考试题的抽取、考试时间的倒计时等一些功能;教师组题模块,包括考试题的生成、题目形式的选择、每道题分值的设置等功能;设计并完成老师在考试前把题目整理出来功能模块,包括考题类型、数量、每个题分数的设置等;(4)熟练地运用和掌握 JavaWeb 技术和 MySQL 数据库编程,进行考试系统的程序代码编写、调试运行以及功能测试;(5)了解服务器的部署问题,数据库的存储问题,以及数据库与程序的交互问题。本文总结了当前网络考试系统的应用领域和发展趋势,分析了现今一些考试系统存在的问题,结合我们所使用的考试系统和使用环境,提出了本文设计网络考试系统的必要性。同时,根据系统需求与可行性分析完成了系统架构的方案设计和管理员、学生用户的功能分析以及各个功能的详细实现。课题在具体内容上首先详细介绍了系统所使用的关键技术,并对这些技术的相关知识进行了详细的介绍,紧接着对我的这个系统的结构和还有模块进行了一些详细的解释,最后对这个系统的实现进行分析和演示。
至此,本文所设计的网络考试系统基本完成,但是本文所提出的仅仅是一个的课程设计,它所涉及的内容和形式都非常有限,在许多功能的实现和完成方式上存在着诸多的不足,这将在今后的学习中得到改进。