基于Java的可自定义评教系统设计与实现
摘 要
评教是当今提高教学质量非常重要的方法之一。在互联网时代,评教信息化也是当前发展的趋势,相比传统的评教形式,在线评教系统具有准确,及时,成本低等众多的优点。通过对当前一些评教系统的调研发现普遍存在着指标单一,权重平均,统计简单等不足。并在此基础上设计并实现了可自定义评教系统来提高教学评估的效果。
本文主要研究如何来设计和实现使用灵活的可自定义的评教系统来完成学校的评教工作。通过将数据导入系统来生成评教元数据,以降低数据维护的成本。实现自定义的评教指标用于衡量教学效果,评教结果的数据统计直观明了,从多方面来反馈教学中出现的问题,使得评教系统能够在促进教学中发挥更重要的作用。
本系统通过使用Spring框架和MySql数据库来提供开发环境,开发过程遵循MVC体系架构和软件工程的思想,通过需求分析,整体设计,详细设计,编码和测试来保障本系统高质量的完成。在安全方面,系统提供了更方便的权限管理和更细粒度的访问控制。同时对系统的可扩展性和并发访问进行了讨论。
关键词 :评教系统,Spring框架,数据统计
Abstract
Evaluation of teaching is one of the most important way to improve the quality of teaching. In the Internet age, informatization is the mainstreams of the teaching evaluation development, compared with the traditional evaluation form, online teaching evaluation system with accurate, timely, lower cost and many advantages. Through the investigation of the current teaching evaluation system, we can found that those systems has some deficiencies such as single index, weight average, lack of result statistics and so on. So a customized evaluation system is designed and implemented to improve the effect of the teaching evaluation .
This paper mainly studies how to design and implement the use of flexible and customized evaluation system to complete the work of the school evaluation. To reduce the cost of data maintenance, the data import module is used to generate metadata. Implement custom evaluation indicators to measure the teaching effect. Data statistics of the evaluation result is detailed and clear, from many aspects to show the problems appeared in the teaching. Making the system play a more important role in promoting teaching effect.
The system use the spring framework and MySQL database to provide development environment , the development process follow the principals of the MVC and the thought of software engineering , through the requirement analysis, overall design, detailed design, coding and testing to ensure the quality of the system. In the security aspect, the system provides convenient privilege management and fine - grained access control. And the system scalability and concurrent access is discussed in the paper.
Keywords : Evaluation system, Spring Framework , Data statistics
第1章 绪论
1.1 课题背景
如今,越来越多学生都受到了高等教育,学校和政府有关部门一直以来对如果提高教学质量问题都非常注重。如今教师有效教学和学生有效学习成为近年来高等教育一个很重要的问题。教学质量的提高不仅是科教兴国战略实施的必然要求,同时也是高校的不断发展和进步的客观要求,加强高校教学质量管理体系的建设是非常重要的一部分[1] 。但是,目前国内高校对教师教学质量评估的工作很多依然是依靠通过发放评测表,回收评测表并人工处理评教数据并分析的方式来进行。在互联网+时代,这种传统的评测无疑显露出了很多的弊端。评教指标不能科学化,系统化的建立,评教过程费时费力而且效率低下,对统计结果的分析也只能是单维度的简单的,不能利用信息技术对评估结果进行科学有效直观的分析和展示以促进教学质量的提高。虽然近来有的高校也构建了在线评教系统,但是通过对这些系统的分析,不难发现,这些评教系统存住着不能根据教师的分类制定不同的评教标准,评教指标形式化严重,学生评教的积极性不高,评教结果失真等问题。为了能够及时有效快速的反馈教学的成果,根据需求和规则科学的制定评教的标准和规则,来构建基于网络的可自定义评教系统[2] 。
1.2 研究意义
随着信息技术的高速发展,绝大多数的年轻人都已经习惯了信息化带来的便利和好处,足不出户就可以轻松完成许许多多的事情。尤其是近年来,网络教学的发展和普及,大学生可以通过网络视频就能完成课程的学习。评教的网络化无疑是发展的必然,以此来实现全体的教师和学生共同参与评教工作,使得评教能够更好的,更及时反馈教学成果。网上评教有很多的优点,大学生参与积极,评教覆盖面更广,学生可以随时随地的完成对教师的评教,保证了评教数据的可靠性和真实性,同时对评教结果的分析也可以采取更加直观的图表的形式来展现,通过对最近几年评教结果的分析,可以反映出教师的教学质量的变化趋势,这种机制无疑能够促进教师更好的教学,及时发现教学存在的问题。再者,通过教师对学生多方面的评价,能让学生从多角度的了解自己在学习上或者其他方面存在的问题和不足,而不是仅仅只是通过成绩来断定一个学生的真实能力[3] 。
1.3 国内外研究现状分析
通过对国内一些基于B/S的网上评教系统的研究,发现了这些系统或多或少存在的一些问题:
1.3.1 评教指标的过于简单化
不难发现,现有的评教系统大多都只采用选择题的形势来进行评估,形式过于单一,学生不能表现出对教师教学更多的看法,只能局限于对一些简单的形式化的反馈。而且评教表没有差异性。举例来说计算机专业的评教和艺术专业的评教内容就不应该是一致的,每个课程都有自己的教学特点,有的偏重于理论,有的偏重于实践。因此不能采用单一的评教标准和内容,因此可自定义的评教表就可以很好地解决这个问题[4] 。
1.3.2 评教指标的权重过于平均
从现有的评教表来看,每个评教指标的权重都是一样,大都分为 优良中差或者固定的分数段等。这种评教标准存在着一些问题,有的过于泛化的指标例如认真负责,生动自然等和一些课程特有的指标,例如计算机课程可以帮助学生深入理解计算机原理和动手实践,上机评测这样的指标权重不一该一视同仁,所以每个指标都应该都不同的权重,这样最终得到的评教结果才能更好地展示出教师的教学成果[5] 。
1.3.3 评教结果的可信度和缺乏科学的数据分析
评教的可信度就是说,现在的大学生因为担心评教结果被教师看到,所以隐瞒实情,打分或者评价都会刻意的选择较好的方向,这样就会严重的影响到评教结果的可信度。评教结果的分析大多都只是按照单次评价的结果,对得分进行简单的排序并展示。这样单一的数据分析显然不能得到很好的效果来促进教师的教学。更好的方法应该是对教师一次课程的前期中期后期多次进行评教,将评教结果按照权重得到教师的最终的成绩,并且通过图形的方式展示教师的得分和最近得分的趋势,并对学生的意见和建议进行了归纳,以帮助学校提高教学质量,协助老师提高教学效果。
通过对国外高校评教工作的了解,下面这些优点和启发可能对评教系统的开发有更好的帮助。一个就是国外高校评教指标的体系不只是学校单方面的制定,学生对评教体系的看法也占有很重要的地位,学生如果能参与到评教指标的制定,更能表达出学生的看法。再就是国外高校利用学生的评教结果对外公开,并给与低年级学生以选课的参考,这样教师可能会更多的会去反思自己的教学方法,学生也更能了解自己想要学习什么或者提前做好准备[6] 。
1.4 系统开发的主要目标和内容
1.4.1 开发目标
根据当前学校教务系统的设计,完成整个评教系统架构平台的搭建和数据库的设计,保证系统与学校教务系统能够良好的衔接和运行。
设计与完善评教流程的体系,抽象出评教表格式,能够实现根据需求来自定义评教表格的内容。
完成整个系统的设计,开发,实现和运行,包括测试和相关文档的完善。 根据评教结果进行数据分析,并通过视图直观的展现出来,据此探索基于评价的教师奖惩机制,制定建议方案。
1.4.2 开发内容
1.4.2.1 数据的导入和教务系统数据的维护和衔接
将教务系统导出的学生表,教师表,课程表,学院表,选课表以EXCEL的格式导入到新设计的数据库中,新系统的数据库表的设计需要与教务系统的字段和类型保持一致,并截取对评教有用的字段进行维护,作为元数据方便接下来评教工作的展开。
1.4.2.2 评教批次和评教指标的可自定义的设计
评教批次是指在每学期可能有不止一次的评测,评教批次需要设定开始和截止时间,评教需要在评教批次限制的时间内进行。
可自定义的评教表包括表头,文本,打分表,反馈和建议等内容,每项的内容和数量是可以自定义设置和增减的,最后将自定义好的评教表动态的保存到数据库中。
1.4.2.3 系统管理员的设置和角色系统权限控制的设计
系统需要设置管理员来进行系统数据库的维护和数据导入的工作。系统涉及的角色包括 学生,教师,管理员,和领导,每种角色所拥有的权限都不相同,角色的权限可以动态的设定,对访问权限做细粒度的划分和控制,保证系统角色的灵活性。
1.4.2.4 评教结果的查看和统计展示
评教结果的展示对每个角色都不相同。学生的结果展示主要在于教师对自己课程表现的评价。教师的结果展示包括学生和领导对自己所教课程的评分和评价内容,并且可以查看相同课程各个学期的得分成绩和评价的趋势的展示。
第2章 系统开发技术路线
2.1 技术架构
项目基于JavaEE技术开发和实现。使用Spring框架作为容器来搭建运行平台,同时可以提供良好的扩展性和对象生命周期的管理。通过MySql数据库来对数据进行持久化。Druid连接池是JDBC连接池的实现之一,可以用来缓存应用程序与数据库之间进行通信和传输的连接,这样可以大大减少创建数据库连接所消耗的时间[7] 。使用MyBatis作为ORM框架来完成JavaBean与数据库的映射,通过灵活的动态SQL技术来对数据库进行操作,大大减少了数据库操作的繁琐。使用BootStrap作为前端框架进行布局和提供控件的支持,使用JQuery来提高Web交互体验,使用ECharts来进行数据的可视化绘制。如图2-1所示,是系统整体的技术架构,包括展示层,服务器和数据库三个部分。
实验工具和实现环境如表2-1所示:
工具或环境 | 使用 |
---|---|
分布式版本控制托管 | Github |
Java环境 | JDK-7 |
javaIDE | Itellij Idea |
WebServer | Tomcat7 |
服务器环境 | Linux Centos 6.5 |
数据库 | Mysql5.6 |
2.2 使用框架和技术介绍
2.2.1 Spring
Spring框架是基于Java语言的一个开源框架,不同于普通的J2EE框架,Spring有着对系统更少的侵入和众多特性的用于企业开发的框架,可以在各种平台上运行,而且基于配置模型来提供更好的扩展性。Spring的关键是提供应用级的底层支持,这样开发就可以只需要关心业务层,而不用关心程序部署的平台[8]。
Spring具有以下特性和优点:
依赖注入和控制反转:提供一种通过自动装配的技术,Spring将接管bean的生命周期的管理,并对所依赖的资源进行注入,程序自身不需去调用框架,而是Spring框架通过配置来控制程序依赖的注入,可以通过来指定构造器注入和,setter注入等方法来加载bean的值,大大降低了系统的耦合度。
对众多Java开源框架的支持,例如MyBatis,Struts,JDBC,JMS等,通过Spring容器来统一的管理这些第三方框架可以使得项目更好的开发和维护。 MVC框架:提供一种清晰,无侵略性的MVC实现方式。
2.2.2 Spring MVC
Spring框架使用可插拔的MVC架构提供了一个功能齐全的MVC框架的实现,可以用来轻松构建Web应用程序。通过Model,View,Controller三层结构来实现一个基于请求/响应的Web框架。控制器(Controller)用来实现页面的跳转和业务处理的入口,视图层(View)通过模型(Model)的数据来指定使用何种视图技术来渲染出HTML并最终返回给用户,进而结束整个HTTP请求的过程[9] 。
如图2-2所示,展示的Spring MVC框架的请求处理流程图。
当用户发送的HTTP请求到达WebServer后,DispatcherServlet是整个程序的入口点,所有的请求都会被DispatcherServlet说处理,它将会调用指定的处理器来映射请求URL和处理器,并将请求数据进行处理和转换,传递给Controller来进行页面逻辑的导航和业务逻辑的代理。控制器会使用用户请求的参数来调用Service接口,经过实际的业务逻辑处理后,将返回的数据封装到Model中并传送到Controller,每一个Controller都会有一个与之关联ModelAndView对象,封装了数据模型Model和视图View的逻辑名称,Controller会将ModelAndView对象传递给给VierResolver,根据设置生成指定的视图类型,并确认真实视图文件路径,之后通过Model数据来渲染生成视图结果,最终将结果通过Response返回到客户端。这样就完成了一个典型的基于MVC模型的HTTP请求过程[10] 。
2.2.3 MySql
MySql不仅是在小型企业广泛使用的开源数据库管理系统,而且在当今许多互联网企业中,MySql也是备受青睐,得到越来越多用户的认可。它具有安装体积小,运行速度快,执行性能高,免费而且开放源代码,可以根据企业需求进行定制。MySql具有的特性之一就是具有可插拔的存储引擎架构,数据库的执行处理等上层操作和底层的存储引擎分离,使得众多适用于不同场景的存储引擎例如InnoDB,MyISAM,NDB等能够发挥很大的作用,可以根据业务需要和场景随时的改变数据库的存储引擎以满足要求[11] 。同时MySql具有Replicaion的主从架构,对当今互联网企业而言,一台主数据库服务器(Master)和多台从数据库服务器(Slave)的架构可以满足数据库不断增长的数据库读写请求,通过读取从数据库和写主数据库来缓解数据库的读写压力,增加数据库的吞吐量。同时,MySql具有Partition,分表,触发器,视图,函数和存储过程等大型数据库管理系统都具有的特性使得MySql成为当前最流行的开源数据库。
2.2.4 MyBatis
MyBatis是一个基于Java的持久层ORM框架。它是一个具有Sql语句查询,存储引擎,高级对象映射等特性的优秀的持久层框架。通过底层对JDBC连接的处理和自动结果集的检索和封装,使得程序可以从繁琐的数据库操作中解脱出来,把精力更多的放在业务逻辑的处理上。同时动态SQL的支持使得SQL语句的组装和功能更加灵活,大大降低了程序中拼接SQL语句从而导致的SQL注入的风险。MyBatis配置可以基于文件和注解两种形式,通过在映射文件中或者接口上直接编写SQL语句,这种方式虽然会降低开发速度,而且可能会有SQL语句拼写错误的困扰,并不像Hibernate这种可以使用HQL对象查询语言基于配置动态生成可执行SQL语句框架。但是当系统的数据库压力一定的程度时,修改SQL语句可以使得SQL优化变得异常的方便而不用修改程序代码。而自动生成SQL语句的特性就使得SQL优化变的异常的麻烦。同时,MyBatis可以和Spring良好整合在一起,通过Spring来管理MyBatis的SessionFactory使得数据库的连接操作更加的简单。
2.3 本章小结
本章主要说明了系统在整个开发过程中,会使用到的主要技术和框架及其原理的介绍,充分了解需要使用的技术可以大大降低开发过程中遇到的风险,对接下来的设计和开发工作能够顺利进行有很大的帮助。
第3章 需求分析
3.1 总体需求
可自定义评教系统主要是为了满足学校对新的评教方法的实施而进行开发的,为的是教学过程中的连续评价和沟通。同时设计了学生对教师的评价表,教师课程质量评价表,学生状态评价表等,各种评教表的指标和格式各不相同,除了量化打分外,还有关于意见,建议等问题的填写。在一个课程的整个学期中,可能会设置开学,期中,期末多次评教,使用的评价表也可能是不相同的。所以如何设计出通用的可自定义的评教表是系统开发的关键。
不同的评教结果表以不同权重进行组合,例如学生的三次评教权重分别为10%,30%,60%。教师的成绩受学生评教,教师互评,领导评教三方面的影响。
同时对课程评价的展示不只是每个对象的评价表详情,还要有评教结果的统计,例如每个课程每个批次的评教进度,学生评分,教师评分等信息的展示。所以一个完整的直观的统计结果是必要的。
除此之外,还需要将现有教务系统中的学生,教师,课程,选课信息通过使用Excel导入到系统中,保证整个系统的数据一致。
3.2 系统功能需求分析
3.2.1 角色和用例图
评教系统有学生,教师,领导和管理员四个角色。各个角色的职责各不相同。系统主要功能围绕着针对角色和课程进行教学评价的工作来展开,相比传统的评教系统只是通过学生对教师所授课程的评价作为教师的教学考核标准显然不够准确和全面,通过增加教师和学校领导对课程的评价的方式可以使得课程的受评结果更能反映教师真正的教学情况,从而达到促进教学质量提高的效果。
从系统角色的角度出发对系统的功能可分为:
3.2.1.1 学生,用例图如图3-1所示,主要功能有:
-
登陆 :学生数据被导入系统后按照默认规则生成密码,学生通过验证学号和密码登陆到系统后可以进行教学评价
-
评价已选课程 :当学生登录系统之后,将会显示学生所选的课程,并提供评教的入口,进入后可以对课程进行评价。已经评价的课程将不允许再次受评
-
查看课程信息 :基于公正公开的原则,评教的所有信息的开放透明的,学生可以查看任何一个课程的受评情况,包含课程收到的所有评价结果表和数据统计等信息
-
查看教师信息 :学生可以检索所有的教师信息,查看教师所授课程的评教结果和得分统计等信息
3.2.1.2 教师,用例图如图3-2所示,主要功能有:
-
评价课程组 :当老师登录系统之后,可以选择对同一个课程组其他教师所授课程进行评价。同一个课程组即是相同的课程名,不同教师所授课程
-
评价学生 :登陆系统后,也可以选择对学生进行评价。根据教师授课课程列出所有选课学生,然后可以对学生逐个评价,每个学生只能评价一次
3.2.1.3 管理员,用例图如图3-3所示,主要功能有:
-
评教指标管理 :评教指标的作用是维护一组评教表,用来进行评教工作使用。评价表的类型分为:学生评价教师,教师互评,领导评价教师,教师评价学生。评教指标可以新建,包含表头,打分表和问题三个部分,打分表细分为问题和评价得分,等级,权重等信息,评教表的项目可以根据需要增加和减少,最后动态生成评教表。评教表也可以修改和删除
-
评教批次管理 :评教批次表示在一个批次的时间段内,系统各个角色可以相互进行评价,超过了评教批次的结束时间不允许进行评价,一个学期可以创建多个批次进行评教工作,保证了评教的效果和师生的持续沟通,更能准确的反映出教师教学的效果
-
管理员管理 :系统存在一个超级管理员,超级管理员可以对其他管理员进行添加删除和修改的操作。普通管理员可以修改自己的信息,不能修改其他管理员的信息
-
权限管理 :系统通过请求的URL和Session中用户的角色信息判断用户是否有权限请求当前页面或数据内容。URL和角色的权限映射表存放在数据库中,前台页面可以对各种角色的权限进行修改
-
数据导入 :数据导入即通过教务系统下载的Excel 2003格式的导出文件,通过导入页面上传到系统后后台自动解析并处理,然后将解析到的学生,教师,课程等信息导入到数据库当中。系统在使用前必须要将必要的数据导入到系统后才能开始正常的评教工作
3.2.2 功能模块划分
从上面的角色功能分析中,可以将系统的划分为4个模块。如图3-4所示,每个模块的功能如下:
-
基本数据管理 :包含教师,学生,课程,班级,专业,学院,管理员等基本信息的维护
-
评教系统 :包含学生评教,教师评教,领导评教,评教指标和评教批次等
-
评教结果和图表的展示 :包含课程受评结果,学生受评结果和教师受评结果的展示和相关数据的统计信息
-
数据导入 :包含课程信息导入,选课信息导入,学生信息导入和教师信息导入
3.2.3 数据流向
数据流图,简称DFD,主要是用来展示数据是如何生成和传递的,并在在哪里被存储和引用。使用图形的方式来描述系统中都有哪些功能和功能之间的联系以及和数据在其中是如何变化的。是分析系统数据流程的一种有效工具,是逻辑模型的重要组成部分。
如图3-5的系统数据流图,表示系统内部数据的流向。系统管理员维护基本信息和创建评教指标,生成评教批次,使得系统的参加评教的角色可以进行评教表的填写。当评教表填写完成时,系统会自动将参加的评教人,和评教对象,课程,时间,评教批次和评教结果等内容封装到评教结果表中并保存到数据库,当一定的时机触发评教结果查询的时候将会自动进行数据的统计和分析,并生成统计记录存放到相应的表中。
3.3 系统非功能性需求分析
3.3.1 性能需求
系统可以安全稳定的运行,并能够及时的响应用户的操作,是一个合格系统所必要的。使用基于Java技术的Spring框架搭建的Web应用完全可以符合本系统的性能需求。下面从3个方面来说明系统要求:
3.3.1.1 可靠性要求
可靠性要求几乎是所有应用所必须的,一个系统可以7*24小时的对外可用是系统高可用的表现,如何保证系统的可靠性就需要在设计阶段考虑到系统程序的稳定性和服务器的稳定性。当程序发生异常时可以正确的处理并记录错误而不会导致系统崩溃可以大大提高系统的可靠性。服务器如果发生宕机能够快速恢复,并及时排查故障,以免下次意外的发生。定时的进行数据库的备份操作以免发生意外导致严重的系统故障。
3.3.1.2 高效性要求
系统的高效主要体现在合理和UI设计和及时的后台响应两个方面。在前端交互设计尽量的友好和高效,使用Ajax异步加载来避免页面的跳转都可以使得评教工作顺序高效地完成。由于考虑到系统在大量并发的时候引起的网络阻塞和系统高负载时会导致响应时间剧增,所以采用延长评教批次时间,分散客户端请求的方法,使得后台运行的更加稳定和高效。
3.3.1.3 安全性要求
系统安全的重要性不言而喻,系统权限设计,防火墙使用,数据库的访问权限,Web项目部署环境的权限设置都会影响到系统的安全性。同时系统层面,前端的数据必须进行数据效验和防止SQL注入等常见Web攻击都必须要加以防范以保证系统的安全性。
3.3.2 界面需求
系统界面简洁大方,交互友好,页面布局合理,关键位置的提醒和醒目的错误提示都是需要考虑的。查询页面增加多项过滤条件可以更加准确的查找,下拉框的级联展示可以快速的定位要查到的内容,尽量使得页面符合用户的使用习惯。
3.3.3 可行性分析
技术可行性 :技术可行性分析指的是使用现有的技术是否能够达到系统完全开发的要求。使用现有的技术架构已经被验证完全具备大型Web项目的开发的条件,成熟的开源框架和可扩展的MVC架构使得项目的开发在技术上不存在技术未知的风险,可以保证系统能够按计划顺利开发完成。
经济可行性 :系统是基于Java语言的Spring框架来进行开发。Java是一个开放源码的编程语言,Spring是基础Java的一个轻量级的企业开发的框架,使用现有的流行的开源免费的框架进行项目的开发不需要支付额外的费用。再者,使用开源免费的MySql数据库不仅能够满足性能需求,也可以节省数据库授权的大量的成本。服务器采用开源的Centos或者Ubuntu 等Linux操作系统,能充分保证系统的稳定性和安全性。这样的开源架构可以做到成本最小,所以经济上是可行的。
研发一套网上评价系统,技术上不存在问题。学院教师、学生都有强烈的提升教学质量、提升课堂教学效果的愿望,能够积极参与和支持评价工作。教务处在全校范围内推动此事,能够为教师教学质量评价提供良好氛围。综上,本项目可以顺利开展和实施。
3.4 本章小结
本章主要讨论了系统的需求分析,为了全面而准确的描述系统的功能需求,使用用例图和模块图等工具详细的介绍系统每一个模块需要完成的功能。此外,还从非功能分析的角度对系统的性能,界面和可行性分析进行分析,为接下来的系统设计做充分的准备。
第4章 系统设计
4.1 整体设计
为了保证系统的可扩展性,采用了经典的软件三层架构的设计。从上到下分别是表现层(UI),业务逻辑层(BLL),数据访问层(DAL)。三层架构可以充分的体现了“高内聚,低耦合”的思想,类似于网络的七层结构,在软件开发上根据功能需要分为三层可以保证每层都只负责相应的业务,各层之间通过接口来调用,使得实现和接口可以分离。这样的架构可以充分满足扩展性的要求,当有新的需求产生时,只需要添加相应的实现而不需要修改之前的代码,这同时也符合面向接口的实现,设计时只需要设计上层接口,底层实现可以根据需求而不同,JDBC就是基于这样的设计模式实现,所以当我们切换数据库时,可以做到不用修改太多的代码,而只需要修改加载的驱动就可以满足切换数据库需求的变化[12] 。
在Spring MVC中,控制器Controller是用来进行页面逻辑导航和对服务层进行代理的,视图View对应于表现层,根据输出类型的不同而使用不同的视图技术来展示数据格式化形式,而Service层对应于业务逻辑层,系统所有重要的业务逻辑的都会在Service层完成。如果Service层需要与数据库通信,就通过调用数据访问层(DAL)来对数据库进行操作。这样就可以达到层次结构分明,可扩展的特点。
图4-1所示为项目整体的目录结构,可分为配置(Config),源代码(Src),系统资源目录(WebRoot)三个部分。其中配置目录主要存放Spring的配置文件,数据库的连接信息,数据导入映射关系,系统日志的配置文件,MyBatis配置文件和系统的一些属性配置等文件。通过将系统的配置文件统一的存放管理是为了方便程序可以准确的定位配置文件的位置并能够顺利的加载执行,同时也更加方便的查看和修改配置文件。Src目录是系统源代码的存放目录,其中主要有对应于三层架构中的Controller,service和dao的三个目录,此外还有持久对象,工具,基本类,枚举,拦截器,控制器,转换器等目录结构。WebRoot目录是Web项目的资源根目录,含有用于Web页面展示和渲染的静态资源CSS,JS,Image等,还有非常主要的动态页面JSP文件,控制器需要返回的动态页面主要就存放在这里。
系统的开发流程:通过详细的需求分析后,设计项目的整体架构,然后再根据功能划分模块,进行各个模块的详细设计和数据库表结构的设计。最后根据详细设计完成 整个项目的编码工作。在完成后还需要进行充分的测试,将错误和需要改进的地方整理下来,然后逐一完善直到项目最后上交验收。
4.2 系统设计思路
4.2.1 充分考虑系统的稳定性和扩展性
在项目的最开始,就开始考虑项目的稳定性和扩展性可以给项目后期的维护带来更多的便利。使用成熟的,流行的开源框架的稳定版本就是为了保证系统的稳定性。虽然一些其他的框架可以提高开发周期,但是尤其使用的用户少,稳定性不能保证。同时在程序的代码层面,在系统的稳定性主要表现在以下方面:使用Log4j日志,在代码出错和异常处全部打印Log日志,完成的Log日志可以在项目出现问题时及时的确认问题出现的地方和原因,快速结果。通过使用全局的异常处理,将异常信息全部输出到一个页面,统一处理异常并记录,可以保障系统更加稳定的运行。在项目的可扩展性方面,使用Spring框架可以提供对众多第三方框架提供支持,同时项目的结构符合J2EE的规范,使用标准的Controller,Service,Dao三层架构,各层架构负责自己的逻辑处理,面向接口的编程也使得扩展变得更加的简单。
4.2.2 合理的数据库设计和充分的性能优化
在数据库的表设计时,对每个表的增加主键可以使得数据查询在MySql这种以主键索引的数据库中获取更高的查询速度。设置字段的长度可以节约磁盘空间的占用,尽量使用varchar而避免使用text来提高读写性能的。数据库设置完整的外键来保证数据的一致性,同时使用外键可以使得查询字段自动建立索引,这样在where子句中索引将会大大降低数据库读表的操作,提高性能。在代码层面,使用数据库连接池技术,可以大大降低数据库连接的打开和关闭,通过缓存连接可以更快和数据库进行通信。在数据统计展示的时候,每次访问时才会延迟去数据库查询并计算统计,而不是定时任务一次性的对所有数据进行统计,这样可以充分将计算任务分散开来,保证系统的流畅。
4.3 登陆模块设计
登陆模块是进入系统的入口,所有用户必须登陆后才能访问系统。登陆需要输入用户名和密码,如果多次尝试登陆需要输入验证码。登陆时需要选择用户的角色,是学生,教师还是管理员登陆等。登陆成功后,会通过数据库获取用户的权限,并跳转至用户的主页面。
用户登陆流程如图4-2所示。在验证用户密码的过程中,由于数据库使用MD5算法来加密存储密码,所以将用户输入的密码先进行MD5加密,然后和数据库的加密字符串进行对比,如果字符串验证一致,说明密码输入正确。在用户登陆成功后,从数据库中加载用户拥有的权限并存储到Session中,在页面展示时,根据用户Session中的权限来显示或者隐藏部分功能。
为了防止有人对管理员账号进行穷举破解攻击,登陆模块加入验证码来防止用户多次尝试登陆,如果登陆尝试间隔小于5分钟,需要输入验证码,如果用户是第一次登陆,默认不需要输入验证码,这样既不是影响用户体验,也使得登陆更加的安全。
如果用户每次登陆都需要选择登陆的角色会给登陆带来麻烦,所以在用户第一次登陆成功后,默认会记住用户的登陆的角色,将登陆角色类型存储在浏览器的Cookie中,当用户下次登陆中,默认选择用户上次登陆的角色,这样将会使得登陆更加的便捷。
4.4 基本信息管理模块设计
基本信息是系统运行所必要的数据,系统的基本运行和评教的展开都依赖基本信息的完整。基本信息包含 管理员管理,权限管理,学生教师课程等教学信息等。
4.4.1 管理员管理
管理员是系统非常重要的一个角色,是系统权限是最大的,基本信息维护的执行角色。例如权限管理,数据导入,评教指标维护,评教批次的生成等工作都需管理员角色才可以操作。
管理员默认拥有一个超级管理员,超级管理员不可以修改和删除,系统只能存在一个超级管理员,超级管理员可以执行任何操作,也是唯一一个账号可以进行管理员管理和权限管理的账号。
管理员管理包括:管理员的添加,修改和删除操作。添加管理员时,先判断用户添加的管理员是否是admin(超级管理员),如果不是则添加成功。修改时候,如果是超级管理员,可以修改所有管理员的信息,如果是普通管理员,那么只能修改自己的信息。超级管理员可以删除自己以外的所有其他管理员,普通管理员不能执行删除管理员的操作。
4.4.2 权限管理
权限管理是系统很重要的一部分功能。由于系统的角色比较多,而角色之间可以进行的操作差别也比较大,那么如何设计权限管理就变成比较重要了。
当一个用户发起一个请求的时候,首先需要验证的是用户是否已经登陆,如果没有登陆,那么需要将页面跳转到登陆页面。通过添加LoginFilter过滤器可以实现该功能。当所有请求被Spring MVC的DispatcherServlet拦截之前,会首先被LoginFilter截取到,所有可以保证所有的请求都会在执行前进行权限验证。
当用户登陆成功后,并不是所有的请求都具有权限去执行。角色权限检查流程如图4-3所示。
权限的具体判断方法:首先获取用户访问的URL,例如/foo/delete,然后去数据库获取用户拥有的所有权限,假设用户拥有/foo/query 和 /foo/ /add 而没有/foo/delete,那么用户就没有权限执行删除的操作,只能进行查询和添加的操作。
在数据库中,权限表字段包含权限名,权限URL,各个角色的权限位。如表4-1所示,对应角色列为1表示有权限,没有为0。学生有添加权限,而没有删除权限。超级管理员修改每个角色的权限。
权限记录表
URL | 权限名 | 学生 | 教师 | 管理员 | 领导 |
---|---|---|---|---|---|
/foo/delete | 删除 | 0 | 1 | 1 | 0 |
/foo/add | 添加 | 1 | 1 | 1 | 1 |
4.4.3 评教相关信息管理
在本系统的设计中,学生和教师,课程,学生选课信息四个部分的数据量很大,如果手动录入这些数据肯定是不现实的,而且还会严重影响系统的可用性。所以在这些信息的录入是通过Excel导入的方式来进行。而且只可以通过Excel导入的方式来添加,不能手动添加,不能修改,大部分数据一次导入即后只读数据,只有系统进行数据统计时候才会自动修改相应的字段。同时这些数据也不允许删除,删除数据将会导致数据不完整和不一致,而且如果数据被外键所引用,同样也是不允许被删除的。所以这些信息在系统界面中主要以列表和检索的形式体现,同时是作为评教结果查看的入口,只有查找到对应的课程或者教师,学生,才能查看对应角色的评教结果详情。查询页面会设置多个列来过滤检索这些数据,大大加快的数据查询的速度,大大方便了师生查阅评教结果等信息。
4.5 评教模块设计
评教模块是系统的核心模块,是本系统业务逻辑较复杂,使用频率最高的一部分模块,其他模块的实现也是为评教的展开而服务或者提供支持的。
评教模块主要分为评教指标和批次的设计,评教流程设计,评教结果的展示三个部分。
4.5.1 评教指标设计
评教指标是主要是用来管理和维护打分表,同时可以随时的创建和修改评教表,使得评教指标的体系更加的科学和合理。一个合理的评教指标可以充分的反应出受评对象的真实情况,有利于后续的反馈和改进。评教指标设计的过程是对评教表进行抽象的过程,一个典型的评教表如图4-4所示。
一个标准的评教表包含的内容有:评教表名,类型,评教须知,表项,打分表,问题列表,总分,评价级别。其中表项,打分表,问题列表可以有多个。
评教指标可以创建,修改和删除,只有没有使用的评教表才可以删除,图4-5所示为删除评教表的流程:
4.5.2 评教批次设计
评教批次是一次评教完整的生命周期,从评教批次的创建,开始日期到结束日期这段时间,参与者可以对受评对象进行评价的过程。不在评教批次的时间段内是不允许进行评价的。不同于一般的评教系统,评教批次的加入可以的使得一个学期可以进行多次的评教工作,并且每个评教批次都可以使用不同的评价表,这样可以更加充分和反映受评对象整个学期的整体表现。一个评教批次包含批次名,开始日期和截止日期,学期,评教表Id等内容。
评教批次在结构上并不复杂,但是有一个要求就是不允许任何时刻同时存在两个评教批次,也就是说评教批次的时间不能冲突。判断的步骤是,首先判断开始日期是否被其他批次日期包含,然后是截止日期是否被其他批次日期包含,最后判断开始日期和截止日期之间是否涵盖了其他批次的时间。
4.5.3 评教流程设计
评教有四种类型。学生评价教师,教师评价学生,教师评价教师和领导评价教师。其中对教师的评价体现在对教师所授课程的评价,最终反映在教师得分的影响上。
一个基本的评教流程如图4-6所示。首先判断当前时间是否在评教批次时间内,如果不是,那么就只能进行数据查询的操作,不能评价。否则就展示角色可评价的所有对象,进入后展示出评教表进行打分和问题的填写。如果填写没有问题就保存到数据库中,结束评教流程。
当角色登陆后,各自主页展示的可评价对象各有不同。各个角色展示的可评价对象如下所示:
-
学生评教 :展示学生本学期所选得所有课程,点击进入后可以对课程评价
-
教师评价学生 :展示教师本学期所授的所有课程,选择课程进入后展示课程的所有选课学生,点击学生进入后可以对学生评价
-
教师评价教师 :展示教师本学期所授课程的所有课程组,不能评价自己的课程,只显示评价课程名相同,不同教师所授课程
-
领导评教 :展示所有的课程,可以选择任意课程评价
在可评列表中,已经评价的记录显示为已评价,相同的评价对象只能评一次,不允许重复评价。
4.5.4 评教结果展示设计
评教结果的展示主要分为三个方面:课程,教师和学生。通过系统的课程管理,教师管理,学生管理可以查找到想要查看的对象,点击进入对象详情可以查看评教结果相关信息。
4.5.4.1 课程详情
课程展示出受到学生,教师,领导打分的平均分,每个评教批次的平均分,评价等级所占比例。这些数据是通过对所有评价结果表的统计得到的。然后展示课程参与的所有的评教批次,每个批次分别显示来自每个评价结果表的得分,评价等级,评价人等信息,点击详情可以查看评价结果表的所有信息。每一个评教批次对应一个评教结果的统计页面,统计的数据有:当前评价的人数和总人数,评价进度,平均分,评教等级的统计,每个表项的平均得分和等级,收到的所有回答和建议等信息。
4.5.4.2 教师详情
显示教师的平均分。通过各学期查看所授课程的平均分和各评教批次的平均分。点击课程进入可以查看课程详情。教师的各个批次的得分趋势图。
4.5.4.3 学生详情
显示学生的平均分,每个学期的平均分,等级统计,每个表项的平均得分和等级,收到的所有回答和建议,以及来自每个教师的评价结果表详情的查看。学生每个批次的得分趋势图。
评教结果的查看页面布局如图4-7所示:
4.6 数据导入设计
数据导入模块是为了免去手动录入学生,教师,课程等信息所设计的。通过上传的Excel文件,经过系统解析和处理后,存储到数据库当中,并进行密码的初始化等操作。
数据导入包含教师,学生,课程和选课信息四部分内容的导入。导入需要考虑的问题有:导入的文件内容字段可能会发生变化,导入的文件格式,版本,大小要求,导入的数据可能会和数据中数据库冲突,导入结果的统计信息。
系统使用POI来处理Excel文件进行数据的读取。一个文件的导入流程如图4-8所示。
为了防止Excel字段的变化导致无法正常读取的情况,使用一个额外的配置文件来将Excel中的字段名与对象的属性设计映射关系。先读取Excel对应字段的数据,然后通过字段名映射到对象的属性名,之后根据属性名调用对应的setter方法,通过反射动态生成对象并存储到List中,所有数据都读取完成后,将List中的数据保存到数据库。在保存数据到数据库的过程中,为了方便查看导入结果,加入了导入过程的统计信息,包含解析到的数据记录数,成功导入数据库的记录数,数据库已经存在而舍弃的记录数和导入失败的记录,以及失败的原因。当数据导入完成后将显示导入结果的统计信息。
4.7 系统数据库设计
数据库设计是系统设计中非常重要的一个环节,一个好的数据库的设计可以使得数据库有更好的读写性能,扩展性,保证数据完整性和数据一致性,提高数据库系统的吞吐量等优点。下面分别介绍数据实体关系和数据库表结构的设计。
4.7.1 数据实体关系
数据实体的关系可以用ER图来表示,系统主要表结构如图4-9。
4.7.2 数据表结构设计
系统主要表结构的主要字段如表4-1 至 4-3 所示:
学生表 用于存放学生详细信息。
字段名 | 数据类型 | 是否为空 | 描述 |
---|---|---|---|
Sid | Varchar(20) | NO | 学号 |
Name | Varchar(20) | NO | 学生姓名 |
Password | Varchar(50) | NO | 密码 |
IdNumber | Varchar(30) | NO | 身份证号 |
AvgScore | Float(5,2) | YES | 平均成绩 |
Departmentid | INT | NO | 学院Id |
Majored | INT | NO | 专业Id |
Classid | INT | NO | 班级Id |
评教指标表 用于评教表的管理。
字段名 | 数据类型 | 是否为空 | 描述 |
---|---|---|---|
Id | INT | NO | 评价表Id |
Type | Varchar(20) | NO | 类型 |
Title | Varchar(100) | NO | 表名 |
Note | TEXT | NO | 评教说明 |
CrateDate | DATE | NO | 创建日期 |
JsonString | TEXT | NO | 序列化字符串 |
评教批次表 用于存放批次的详细信息。
字段名 | 数据类型 | 是否为空 | 描述 |
---|---|---|---|
Id | INT | NO | 批次Id |
Name | Varchar(20) | NO | 批次名 |
Season | Varchar(100) | NO | 学期 |
BeginDate | Date | NO | 开始日期 |
EndDate | Date | NO | 截止日期 |
mtime | DateTime | NO | 最后修改日期 |
stuAvgScore | Float(5,2) | YES | 学生评教师平均分 |
teaAvgScore | Float(5,2) | YES | 教师评教师平均分 |
teaStuAvgScore | Float(5,2) | YES | 教师评学生平均分 |
4.8 本章小结
本章主要介绍了可自定义评教系统主要功能和模块的详细设计,使用流程图来展示每个流程执行的过程,以及实现思路。最后通过对系统数据结构的分析和数据实体之间的关系来确定表结构的设计,使得接下来的系统实现能够顺利的进行。
第5章 系统实现
5.1 系统功能模块实现
由于系统模块部分存在相似性,下面将介绍主要模块的实现界面,实现思路和部分关键代码。
5.1.1 系统登陆
系统登陆的界面如图5-1所示:
系统登陆输入账号密码,如果尝试多次登陆还需要输入验证码。选择用户类型后可以登陆到系统。
其中验证登陆部分代码如下:
```java session.setAttribute("lastLoginTime",new Date().getTime()); //设置最后一次登录时间 Boolean skipVerify = (Boolean) session.getAttribute("skipVerify"); //是否需要输入跳过验证码 if(skipVerify==null){ //如果sessio已经失效说明不需要验证码了 skipVerify = false; }
if(!skipVerify) { //如果需要检查验证码
//如果输入的验证码不正确
if(StringUtils.isBlank(verificationCode) || !verificationCode.equals(session.getAttribute("verificationCode") )){
model.addAttribute("error","验证码错误");
session.setAttribute("skipVerify",false); //需要验证码
return "index";
}
}
String type = user.getType(); //获取用户角色类型
UserType userType = UserType.toUserType(type);
boolean loginSuccess = false;
Cookie cookie = new Cookie("loginType",type); //记住用户角色信息
cookie.setMaxAge(365 * 24 * 60 * 60);
response.addCookie(cookie);
String viewName = "index";
user.setPassWordConvertMD5(user.getPassword()); //MD5加密密码
switch (userType){
case ADMIN:
Admin a =adminService.login(user);
if(a!=null){
session.setAttribute("admin", a);
viewName="redirect:/admin/admin";
loginSuccess = true;
}
break;
//省略其他角色登陆信息
default:
logger.error("未知的登录角色! " + type);
model.addAttribute("error","未知的登录用户的角色!");
return "index";
}
if(loginSuccess) {
List
5.1.2 评教指标管理
评教指标列表如图5-2所示,可以对指标进行修改,删除和创建。
点击新建评教指标可以跳转到添加评教表的页面,如图5-3所示。
填写一个评教表完整的信息后,可以随意的添加和删除任一项内容,实现评教表的灵活和可自定义。同时在指定的位置添加输入提示,防止输入错误。
5.1.3 评教流程
下面从教师评价学生的角度来介绍系统评教流程的实现。
当教师登陆后,可以选择评价相同课程组的课程,也可以选择对自己所授课程的学生进行评价。当教师选择评价学生的界面如图5-4所示:
点击任意课程,下方将会显示选择该课程的所有学生列表,点击“去评价”可以对学生进行评价。评价表如图5-5所示:
评价表填写完成后提交,系统会将评价表和评教结果保存到数据库中。评教完成后可以查看该学生评教结果,如图5-6所示:
学生详情页面将会展示出学生基本信息,平均得分,各个学期得分统计,学期得分趋势图,和各批次的评教结果表等信息。
5.1.4 数据导入
数据导入的实现界面如图5-7所示。分别有课程信息,学生选课信息,教师信息和学生信息导入4种选项。以课程信息导入为例,将包含所有的课程信息的Excel文件上传后,课程信息将会被解析被保存到数据库中。如果上传文件过大,文件不是以.xls后缀结尾的文件,不是标准Excel 2003文件,Excel内容检测到不是课程信息,选择的学期和Excel文件中解析到的学期不一致等错误都会终止数据导入流程,并在前台展示出对应的错误信息。
如果文件解析成功并在导入过程中没有发生错误,页面会跳转到导入结果页,展示导入过程中的各项统计数据,如图所示:
5.2 安全和稳定性实现
5.2.1 数据效验
数据校验是指通过一定的规则对前台传递参数的合法性进行检验的过程。不合法的数据将会导致数据不完整,也有可能导致系统出错。保存合不合法的数据到数据库中是没有意义的。一个合格的接口总应该假设输入的参数可能是非法的,而不是默认输入参数就一定是正确的。用户的输入也总是千奇百怪的,没有充分的数据效验将会使运行时产生许多问题。
数据效验体现在前端的表单效验和后端程序的效验。本系统前端的表单效验使用的JQuery Validation,通过在页面编写JS代码或者在HTML标签内使用效验参数等方法实现表单效验[13] 。如图5-9 是修改密码页面数据效验的示例:
页面使用Js效验代码的代码如下:
```javascript
$(function() {
$("#form1").validate(
rules:{
oldPwd: {required:true},
pwd: {required:true, minlength:3},
pwd2: {required:true, equalTo:"#pwd"}
},
messages:{ oldPwd: {required:"请输入原密码"},
pwd: {required:"请输入新密码",
minlength:"至少输入3个字符" },
pwd2: {required:"请输入确认密码",
equalTo:"两次密码必须相同"
}
}
});
});
```
如果只进行前台数据效验而不进行后台数据效验,那么正常用户操作是不会引发错误的,但是如果用户伪造HTTP请求,传递不合法的参数,这样后台就需要进行数据效验。后台主要效验的内容有:参数是否为空,字符串是否空串,字符串长度是否超过数据库数据字段类型长度,整数是否小于等于0,时间格式是否合法等。完善的数据效验可以增加系统的安全性和稳定性,是必须要重视的。
5.2.2 XSS漏洞攻击防范
XSS(Cross Site Scripting),叫做跨站脚本攻击,是通过在请求参数中插入恶意可执行脚本,实现对用户游览器的劫持控制[14] 。例如表单数据插入类似“ ”的代码发送到数据库,如果后台服务器不做任何处理就存入数据库,那么当数据在前端加载的时候就会被当成JavaScript脚本执行,并显示出HTML的输入框。通过这样的方法植入恶意代码,就可以达到攻击的目的。
通过对前端所有数据的参数就都进行HTML和JavaScirpt代码的转义处理,这样数据库就会以“<input\/>”的形式存储。再传送到前端展示的时候,就可以显示成文本 的形式而不是一个输入框。这样就可以达到防止XSS漏洞攻击的目的。
但是如果我们在控制器的每个方法中都加入这样转义代码,将会导致代码重复。通过Spring提供的Converter服务,可以实现一个从String到转义后String 的一个StringConverter类,如下所示:
java
public String convert(String text){
text = StringEscapeUtils.escapeHtml4(text);
text = StringEscapeUtils.escapeEcmaScript(text);
return text;
}
然后将该转换器注册到Spring的数据转换服务中。
html
<bean id="conversionService" class="e3e_53ec_ec9b35b org.springframework.format.support.
FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="t33_b993_9364c23 com.tqe.base.converter.StringConverter"/>
</set>
</property>
</bean>
通过这种方法就可以完成了系统全局的转义工作,防止了XSS的攻击。
5.2.3 并发访问
对一个系统而言,并发访问会给系统带来极限压力,并且能出现未知的异常。随着使用人数的增加,同一时刻如果大量的涌入用户将会导致系统响应慢,系统不稳定,产生并发错误,严重时可能会导致服务不可用。下面给出一些并发性能问题的一些解决方法:
使用CDN加速,将静态资源缓存在离用户最近的服务器节点上,减少服务器处理HTTP静态资源所消耗的CPU和网络资源,可以有效避免网络拥堵,降低系统响应时间。
使用负载均衡和服务器集群。负载均衡负责将请求通过一定的路由算法将客户端请求分发到指定的服务器上来继续处理请求从而解决低单台服务器的单点问题和负载过大的问题。使用负载均衡理论上可以线性扩展系统服务的吞吐量,但是需要考虑数据库高负载时对数据库的优化策略,例如读写分离,分库分表,使用缓存服务器等手段。
此外,在代码上进行性能优化可以大大的降低并发访问带来的性能问题,例如分散数据请求的时间,使用消息队列,缓存,充分利用多线程等[15] 。
5.3 系统测试
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
5.3.1 单元测试
一个合格的程序员都应该进行单元测试,单元测试是从开发者的角度对程序代码正确性的一种测试[16] 。传统的单元测试都是根据系统模块的划分,分别测试每个独立模块或方法的正确性,通过输入和输出来检测模块是否正常运行。通常,在每一个新的版本发布前,都需要进行一次完整的单元测试,以保证新添加的功能和特性是正确的,并且没有影响到已完成模块的正常运行。
Junit是JavaWeb项目使用最广泛的单元测试工具。在Spring环境中,通过Spring Test和 Junit4的集成使用可以避免多次初始化Spring容器,对控制层代码无法测试等问题。一个测试基类的代码如下所示:
java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public class BaseTest {
}
通过继承测试基类,就可以使用Spring提供的AutoWired注解来注入Controller,Service,Dao等组件进行单元测试。测试成功时代码如图5-10所示:
5.3.2 功能测试
功能测试是指使用黑盒测试的方法,在不考虑程序内部实现的情况下,根据功能需求来对程序的接口进行测试。通过设计完整的测试用例,例如对表单输入非法字符,过长字符,验证系统功能是否完整,边缘测试等手段对系统功能进行验证,保证系统的可用性。
同时对于系统环境的测试,使用云虚拟机和本地服务器两套环境进行测试,发现在不需要修改程序代码的基础上,系统能够安全,稳定的运行在两套环境中,保证了系统的可移植性。
5.3.3 性能测试
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
下面介绍测试过程中常用的指标:
-
TPS(Transaction Per Second) :每秒事务数,表示系统每秒能够处理的交易或事务的数据
-
响应时间 :指的是从客户端发出请求到后端响应所用的时间,由请求发送时间、网络传输时间和服务器处理时间三部分组成
-
并发用户数 :是指实际在线,并一定会对系统产生压力的用户数,通常比在线用户数要少的多
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登陆,学生查询和课程查询等模块进行并发访问,得到的测试结果如图5-11所示:
测试结果是有40个用户并发时,课程管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
通过将带宽升级到5Mbps,在相同用户并发数下继续进行压力测试,得到的结果如图5-12,5-13所示。同样是40个用户并发,系统的TPS已经平均达到了12/s,即便是数据库查询较多的课程管理模块,平均响应时间也已经达到了1.5s,而这时系统的CPU占用率仅为20%,带宽为4984kb/s,已经达到了峰值,可以看出,继续提高带宽继续提高系统并发用户数。
TPS压测结果图
系统响应时间测试结果图
通过压力测试,可以及时的预测系统可能会发生的异常情况,找到影响响应时间过高的瓶颈原因所在,及时的进行系统调优,可以提高系统性能和稳定性,提升用户体验。
5.4 本章小结
本章介绍了系统主要模块的实现方法和部分关键代码,充分展示了系统的完整性,基本符合了系统需求。除此之外,还讨论了系统的安全性和并发访问的实现可以使得系统更加健壮。最后,通过详细的测试,验证了系统的可用性,同时对测试过程中系统出现的问题,能够得到及时的解决,使得系统更加的完善。
结 论
为了能够提高教学质量,及时准确的反馈教师教学过程中存在的问题,设计和开发了可自定义评教系统。系统的具有安全,稳定,低成本,可扩展等特点,从测试和使用情况看,基本满足了需求设计的需要。
本文主要从需求分析,系统设计和系统实现三个方面来讨论具体的设计和实现的细节,使用用例图,ER图,流程图等工具直观的说明了系统设计的思路和步骤。通过对稳定性,扩展性,数据库设计和系统优化多方面的讨论也使得系统架构设计的更加合理,不仅达到了的上线运行的要求外,还能够对以后可能改变或增加的需求得到及时的扩展和实现。
当然,系统也存在着一些不足之处,还需要在以后工作中逐渐的改善,从而使系统发挥更重要的作用。能够提升和优化的地方还有:在系统结构上,应该还有更好的解决方法或是设计模式的应用可以充分的提高系统的性能和扩展性。用户体验的提升是一个循循渐进的过程,通过后续反馈的信息对系统的持续改可以使得系统更加简单,易用。同时数据统计的展示还是相对单一的,如何通过更加科学合理的设计数据统计方法,形象直观的展示数据统计结果,提高反馈教学效果等问题还需要进一步的探索和完善。
评教系统的好坏在很大程度上影响了学校教学质量的改善,通过科学的,准确的,及时的对教学工作进行跟踪和评价,能充分的反映出教学过程中出现的问题,同时优秀的教学方法也能够快速的得到体现,这些信息为寻找和探索更好的教学管理方法提供了支持。所以说,科学的评教管理系统的普及是势在必行的。
参考文献
[1] 教育部. 关于全面提高高等职业教育教学质量的若干意见. 中国职业技术教育, 2007(1):14-15.
[2] 罗漪. 大学生网上评教体系优化的研究. 江西师范大学, 2013.
[3] 韩园园. 大学生利用网络评价教师课堂教学的研究. 南京师范大学, 2006.
[4] 解建立, 张倩. 大学生网上评教问题研究——基于S市部分高校调查 . 河 北企业, 2015(6):130-131.
[5] 黄建军, 黄继东, 尹加帮,等. 美国、加拿大和日本高校学生评教的特点 与启示. 医学教育探索, 2010, 09(5):621-625.
[6] 邢永富, 常瑾. 国外知名高校学生评教工作述评与启示——以四所名校 为例. 宁波大学学报:教育科学版, 2011(1):59-63.
[7] 孙朝云, 张羽. 基于B/S结构网上评教系统设计与实现. 计算机应用与软 件, 2012, 29(3):183-186.
[8] 李海海. 基于Spring框架的高校招生管理系统的设计与实现. 湖南大学, 2015.
[9] 李刚. 轻量级Java EE企业应用实战. 电子工业出版社, 2011.
[10] 计文柯. Spring技术内幕:深入解析Spring架构与设计原理(第2版). 机械 工业出版社, 2012.
[11] 姜承尧. MySQL技术内幕. 机械工业出版社, 2013.
[12] 阙丽平. 福建经贸学院教师考评系统设计与实现. 电子科技大学, 2014.
[13] 单东林 张晓菲 魏然. 锋利的JQUERY. 人民邮电出版社, 2009.
[14] Martin M, Lam M S. Automatic Generation of XSS and SQL Injection Attacks with Goal-directed Model Checking Usenix Security Symposium, July 28-August 1, 2008, San Jose, Ca, Usa. 2008:31-44.
[15] 闫新. 基于WEB的教学评价系统设计与实现. 电子科技大学, 2014.
[16] Beck K, Gamma E. Test-infected: programmers love writing tests More Java gems. Cambridge University Press, 2010:357-376.
[17] Gupta P, Govil M C. Spring Web MVC Framework for rapid open source J2EE application development: a case study. International Journal of Engineering Science & Technology, 2010, 2(6).
参考文献
- 基于J2EE的教学辅助管理系统的设计与实现(电子科技大学·耿兴春)
- 基于J2EE的教学管理系统设计与实现(上海交通大学·周国平)
- 省农干院学生评教系统的设计与实现(电子科技大学·朱峰)
- 某高校评教系统设计与实现(北京工业大学·宋春艾)
- 基于J2EE下的模糊评教系统的设计与实现(北京工业大学·赵明月)
- 基于SSH的教学效果评价系统的设计与实现(吉林大学·文胡)
- 高校教学评估信息系统的设计与实现(东北大学·刘宁)
- 网络综合管理平台中学生评教系统的设计与实现(内蒙古大学·王晓静)
- 互动网络课堂的研究及平台设计实现(沈阳建筑大学·吴宇玲)
- 基于B/S结构双语教学课程网络评教系统设计与实现(长安大学·赵丽)
- 基于J2EE架构的艺术学院适应性教学系统的研究与设计(电子科技大学·蔡园园)
- 内江职院网上评教系统的设计与实现(电子科技大学·兰柳)
- 基于J2EE的通用网络教学评价系统的研究与实现(国防科学技术大学·潘应睿)
- 基于Web的教学评价系统的设计与实现(吉林大学·杨波)
- 网上教学评价系统的建模、设计与开发(电子科技大学·蒋焱)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设客栈 ,原文地址:https://m.bishedaima.com/yuanma/35167.html