结队项目分享——九章数学做题系统
本次结队项目是两人合作的小组形式,我的合作对象是郭晓哲同学,我们合力在国庆期间完成了一个基于QT6的窗口开发项目。
综合来说,这次项目完成的差强人意,没有完全地完成一开始做的全部预期,诸如本想添加的基于机器学习的“查漏补缺”功能就没有顺利地添加上去,还有一些小的bug和问题没有修复,但所幸的是基本完成了项目原本的要求功能,总的来说,我觉得是一个离预期比较远但是在基本要求之上的作品。
首先总结一下本次实验遇到的一些问题,为以后的开发留下一些经验和教训。
1. 开发周期失控:其实项目的一开始,我们做过比较细致的需求分析,也提出了我们的一些设想,其实也快速地做了一个拥有界面跳转功能的原型出来。但是我们没有对这些设想做好比较细致的时间安排,例如说,今天要完成什么功能,明天要做完什么任务等等。原本我们做了第一天的任务分配,但是随着出现一些意料之外的问题,例如说我的QT版本和郭晓哲的版本有冲突,QT的Qwebviwengine模组只能对MSCV编译器生效等等,这些工具性的问题把我们原本的任务周期“冲垮”了,导致我们后续完全不敢做出任务的预估,因为一个工具的修复可能就涉及到诸多系统,电脑配置方面的问题,往往要占用掉很大一部分的时间。因此,我得到的经验教训是,任务分配和时间预期是不能够“短视”的,你不能仅仅工作一天,然后安排明天的工作,一天接一天的工作安排是短视且鲁棒性极其低下的。现在想来,更好的工作安排应该是一开始就对这国庆七天做好科学的安排,为可能出现的疑难问题做好鲁棒性的预留时间,尽可能地维护好开发流程更”宽阔“的轨道。
2. 工具过新:这是一个我始料未及的问题,工具过新导致错误在我进行这次项目之前是从来没有想象过的,正常的逻辑是越新的工具效果越好,但这次的项目使我意识到,对于一个开发周期受限的产品而言,更稳定的全面的工具版本才是应该被考虑的。例如这次实验,因为郭晓哲同学下载的是崭新的QT6,所以为了和他的版本适配,所以我也将我的QT5给升级到了QT6的版本,但我们接下来就开始不断地遇到新版本的限制了,比如说音乐模组,时间显示模组,这些原本QT5可能很顺利实现的模块,因为QT6工具才被开发没有多久,所以某些模组竟然是没有的,而且老版本的工具也没有办法适配,打包工具竟然也是失效的!更让人恼火的是,因为QT6是新的工具,不仅是我们,甚至一些老的QT使用者都没有QT6的生产经验,所以我们在实现上遇到问题时很难找到对应版本的解决问题的方法!例如我们原本打算选用的MySQL数据库,因为QT6.2.0版本缺少驱动所以没有办法使用!而且网上所有的解决办法最新的都是对应6.1.0版本的!因此我使劲浑身解数也没有把MySQL适配到我们的QT程序中去,辛亏最后找到了SQLite这样一个QT原本就适配的数据库工具,我们才得已实现功能。
然后就代码复用说一些,我的个人项目是基于python实现的,郭晓哲是基于java实现的,因此实际上我们很难把个人项目上的代码直接复用到我们的结队项目中(QT C++),这其实也是个见识短浅造成的问题。因为现在已经有QT的python库了,我们其实是可以用PyQT来完成这个项目的,奈何本人因为之前只使用过QT的c++版本,并且通过项目积累过经验,所以毅然决然地决定用C++来完成项目,这一个决定为后续带来了比较大的麻烦,因为项目要求的短信收发功能比较缺乏C++的API接口,所以实现的难度大大增加了,郭晓哲为了这个功能可以说是千方百计才找到一个支持C++的API了。本项目我真正复用的应该是张君逸个人项目里的逻辑,因为我的个人项目是使用excell表格保存了老师的注册信息,题目信息,本质上也是一种“数据库”,我们的QT就是基于这样相同的思路增加了SQLite支持的数据库功能。
最后是对我的结队项目的一些亮点和比较遗憾的地方做一个技术使用上的总结:
亮点:
1.界面美化:利用了 QT的Desingner面板和QT的样式表(qss)做了按钮响应,按钮变色和凹陷特效,背景设置,当前时间显示等等美化方向。
2.题型多样:因为对个人项目的题目的要求不太满意(题目只是简单的加减乘除意味着实用性为0),所以我使用爬虫的技术爬取了二一组卷平台的初高中数学题目。利用QT的QWebengineview模组将爬取到的html文件直接渲染到QT界面,增强实际效果。
3.结果可视化:我们爬取的时候为题目都制作了一个考点的标签,比如说这道题目对应的考点是初中数学的”图形与变化“考点,然后我们把每次出卷时抽取到的题目类型按照饼状图可视化到一个窗口里,这样使用者不仅可以清楚地明白自己在这张试卷得到了多少分,更可以知道自己在什么题型上表现的更好,什么题型需要加强。
遗憾:
1.一开始做题目的考点标签的时候,其实是想要做一下简单的机器学习,然后可以利用之前错误的题目信息来做一个预测,也就是所谓的查漏补缺功能,确认每个使用者在哪一些考点上还需要加强训练。这个功能其实是很早就有的想法,但是因为开发周期失控,还有一部分C++语言不好实现我的想法等等的原因,这个”理想“最终是遗憾地搁浅了,以后如果有机会重整这个项目,这个功能我一定会完成的。
2.验收的时候,发现我们做的一些额外功能没有很好的实现(出现了小bug),例如说修改密码,找回密码,这里没有检查一下是否存在问题,导致验收的时候没有弄好,真的很遗憾啊,因为项目花了比较多的心血在后面的步骤,没想到一些小的随手做的功能反而出现了问题。。。软件测试真是很重要的任务啊。。

浙公网安备 33010602011771号