答题系统项目总结

背景

最近这一段日子,绝大部分时间花在一个答题系统上,项目预期是利用扫描仪获取到试卷的数据,随后对数据进行处理以及匹配规则,最终算出该题目的正确答案。目前系统已经开发到第二版本,现在还仅仅是一个简易型的Demo,但是其中涉及到一部分坑以及在工作的时候发现的一些问题,鉴于此,使用文本记录下来,为以后成为优秀程序员铺路搭桥。

首先说一下数据,数据是由做底层算法的同事提供的,使用XML格式存储,绝大部分数学公式都是Latex格式。我所做的事情,其实很简单,就是将数据保存起来,同时提供数据配合前端。但真的有这么简单吗???

第一版

在第一版中快速开发,直接将提供的XML格式原封不懂的保存到Mongodb中,然后提供查看的数据的接口给前端的同时,由前端展示题目。同时再提供一个接口,用于接收前端传来xml格式,将xml作为参数调用有算法小组提供的jar,最后获取到题目计算结果反馈给前端。其实就相当于数据的搬运工....

开发异常简单,接口不多,又不用处理....So?快速开发,解决掉项目,然后转战别的工作。但是在前端人员开发的过程中,这样的后台设计暴露出越来越多的问题。For example:

  • 前端展示题目需要获取到题目的文本信息,并不需要xml中的标签,于是乎前端开始解析Xml,大量的xml解析必定是消耗资源的....,同时文本中也存在一些影响展示的信息,因此前端需要最数据进行处理。
  • 题目分成三种类型,选择、填空以及简答,前端需要识别题目归属于那种类型的题目,然后才能合理的展示题目(因为不同的类型题目,展示风格会不同)
  • 由于项目不仅可以计算预先设定的题目,还可以在原题目的基础上修改题目内容,因此前端使用一个插件来展示和修改题目(主要是公式的latex的展示和修改),这个公式编辑器有些坑,不识别我们这边的很多latex。
  • 在前端开始解答事件被触发时,需要后台实时传递题意分析结果,用于展示在前端,提供一个良好的人机交互(主要让使用者知道,我们的系统在计算, 而不是死机...),这个地方一开始为了快速开发,也是采用比较low的方法,没错!!!就是AJAX轮询...轮询的各种弊端,我就不多做阐述了,各位脑补吧

第二版

由于第一版出现的各种问题,在第二版中做了很多改进,改进如下:

  • xml数据的处理从前端移交到后台,使用python脚本预先处理好xml数据,然后按照不同的数据格式保存到Mongodb中(根据题目类型的不同而不同)
  • 由于一开始使用的开源Latex公式编辑器并不适应算法小组的Latex,因此经过调研以及各位领导的努力,我拿到了一个团队基于这个公式编辑器开发的绝大部分适应算法小组的Latex格式。
  • 将原先使用AJAX轮询实现实时前后端同步数据,改成使用webSocket(这部分逻辑有些长,下篇博客会主要讲一下这部分)

整个项目是基于Spring boot框架与Jetty服务器的,使用这个Spring boot框架的目的有两个

  • 快速开发,不需要过多的配置
  • webSocket 与 Spring boot 配合很好
  • 以前没用过这个框架,而它又很火,So?我心里痒痒的,于是就开始了任性...(其实使用Jetty的目的也是因为这个原因)

坑与解决办法

  • 算法小组提供的数据存在数据有误、格式不统一等等。

    • 解决办法:

      • 在编写python代码时,多考虑可能会出现的错误,做好容错以及发现错误之后,对错误的定位。
    • 具体实施:
      • 对于文件格式不符合要求的,会抛出异常,捕获异常之后,打印到控制台。
      • 对于xml格式不正确(由于是数学公式,因此存在<,>符号,而这些在xml中是不允许出现的),在解析之前先进行一层过滤,将不符合xml规范的数据规范化,然后在调用xml解析程序,解析完成后处理再保存。
  • 新的公式编辑器虽然比老版本的兼容性要高,但是还是存在很多不兼容问题,这不仅仅影响展示,更加影响计算过程(算法小组所需的Latex与公式编辑器生成的不一致)
    • 解决办法:

      • 在公式编辑器利用Latex生成公式图片之前,进行Latex的处理(为什么不直接在解析xml的时候处理呢?因为...我尽最大可能不改变算法小组所需的Latex格式,如果使用者没有对原来的题目进行修改,直接答题,会将原先的Latex传递给计算模块,这样可能保证计算模块所需数据的正确性)
      • 在传递给计算模块之前还有一层公式转换器,会将那些不符合计算模块的Latex修改成符合计算模块的Latex
    • 具体实施:
      • 基于这两层处理层,基本上可以保证计算模块所需数据的正确性
      • 使用各种正则表达式替换和处理(很锻炼正则的能力)
  • ....(还有很多小坑,就不详细说了,绝大部分都是自己那菜鸟级的经验)

项目现版本存在的问题:

  • 前端单个页面承担太多的展示任务,导致CSS与Js文件臃肿且bug层出不穷。
  • 算法小组提供的数据有很多错误,在同一个文件中描述同一个公式却使用不同的Latex公式,让我这边适应很困难,因为不知道到时候真正需要计算的Latex具体格式,如果传递有偏差,计算模块是否可以能解题
  • 系统在相隔一段时间没有人访问之后,再次访问会莫名其妙的报Mongodb time out错误,解决了好几次,都以为自己解决了,但是...bug还是一致存在(间断性)

感悟

  • 项目在一开始的需求步骤和第一版的开发前中期我都没有参与,导致对需求的不理解与项目整体把握程度不够,不能做到很好的协调。个人认为无论开发什么项目都应该将大家聚在一起,一起讨论需求,一起规定我们要做出什么模样的产品,而不是一个人在想,另外一帮人在等着被安排,凡事应当主动,主动参与到项目的需求讨论中。这样不仅能提高项目的整体质量,而且也能提升个人能力以及对项目的把握程度!
  • 跨部门的合作成本过高,一定在开发之前约定好数据格式!!!编写维护好开发文档!!!
  • 写代码之前要先设计,没有思路就不要动手写代码,项目要的是高水准的代码,而不是一坨坨...

最后很感激部门领导给我这次机会,让我开发并协调各开发人员,这是对我的锻炼,虽然辛苦和烦恼,但是对于个人能力的提升有很大帮助。

时间: 2024-11-03 05:28:32

答题系统项目总结的相关文章

android答题系统(一):运行效果

参与极客学院的视频教材“ Android 项目开发实战:答题系统” http://www.jikexueyuan.com/course/1265.html 运行效果 数据中表的测试数据

结对编程:带ui设计的学生答题系统

带ui的学生答题系统 1.功能 (1)实现登录和注册,可以通过手机验证码进行验证 (2)根据类型和数量出题,生成试卷并且题目不重复 (3)计算分数 2.方法 (1)利用二叉树生成题目,直接计算(答案为小数) (采用逆波兰表达式也可以计算) (2)利用xml存储账户信息 (3)利用正则表达式筛选题目,匹配密码 (4)利用c#的可视化开发工具做界面 3.个人项目复用 (1)虽然个人项目使用的是java,结对项目使用的是c#,但这两门语言有太多相似之处,复制后直接能用. 主要复用了个人项目里的二叉树结

SSH网上答题系统

我要做的事网上答题系统,通过注册登录到答题页面. 这其中数据库的连接靠Hibernate,数据库的增删改查用Sruts2实现. 关于Struts2的学习,仅仅在action的表面上,可以在action里写一些代码,做一些数据处理,而关于struts2的深层的学习还在进行中,这个学习的过程真的很漫长.对于那些老师没有讲过的东西自己学起来真的很慢,很难.

机房收费系统——项目需求说明书

不管是学习什么材料,还是初步了解一个系统的时候,想学习新东西,听到最多的就是要了解需求,如果需求理解偏差了,那你的系统将变的面目全非. 软件需求说明书 1引言 1.1编写目的 需求分析人员与用户进行多次的需求分析调查后,提出的一份比较详细的软件需求说明书,这份说明书可以表现出软件的功能.性能.开发条件等 并且在文档完成之后需要用户进行阅读,看是否将需求表达完全,进而补充说明. 本文档的预期读者有用户.项目管理人员.文档编写人员.需求分析人员等 1.2背景 说明: a.  待开发的软件系统的名称:

机房收费系统——项目开发计划书

项目开发计划(GB856T--88) 1引言 1.1编写目的 项目开发计划是确定要开发项目的时候首先做的一个初步计划,需要对于项目整个开发过程需要的一些条件等有一个比较大概的了解.项目开发计划预期的读者有用户.开发者.管理者.以及分析人员等. 1.2背景 说明: a.      待开发的软件系统的名称:机房收费系统 b.      提出者:米新江教授 开发者:十期学生 用户:廊坊师范学院全体师生 实现该软件的计算中心或计算机网络:图书馆阅览室,机房 c.      该软件系统同其他系统或其他机构

教室实时信息查询系统 项目需求规格说明书

  教室实时信息查询系统 项目需求规格说明书 参与人:尹伟 吴文斌 东华理工大学 2015年10月31日 目    录 1.            文档说明... - 1 - 1.1编写目的... - 1 - 1.2背景... - 1 - 1.3适用范围... - 1 - 1.4预期读者与阅读建议... - 2 - 1.5参考文献... - 2 - 1.6术语与缩写解释... - 2 - 1.6.1术语... - 2 - 1.6.2缩写... - 3 - 2.       系统说明... - 4

[黑科技] 使用Word和Excel自制题库自判断答题系统

这篇文章是LZY老师告诉我的一个方法,如果你需要做题库,并且喜欢电子答题的方法,这篇文章或许会对你有所帮助.反正李老师班级的平均成绩高出其他班级的14分,这就是它的好处,希望这篇文章对我今后的学生有所帮助吧!        注意:这篇文章涉及到Word特殊字符.通配符.Excel设置等常见问题.如果文章存在不足或错误的地方,还请海涵~        运行结果如下图所示,正确答案第一列,模拟做题的时候学生将它藏着,然后在E列进行答题,D列是在线判断系统,反复训练从而提升学生的考试分数.哈哈~哎,确

文件透明加解密系统项目方案——(1)需求分析

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 文件透明加解密系统项目方案--(1)需求分析

基于jQuery在线问卷答题系统代码

分享一款基于jQuery在线问卷答题系统代码是一款实用的jQuery答题插件,点击下一题切换带有淡入淡出效果.实现的效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="demo"> <div id='quiz-container'> </div> </div> js代码: var init = { 'questions': [{ 'question': 'jQuery是什么?', 'answers'