结对编程项目:带UI的小初高数学学习软件--总结及体会
“在软件开发的过程中,只有适度改进,没有包治百病的银弹。”
前言:
本次结队编程项目由我和梁金子同学共同完成,我们两个在个人项目中都是使用的C++,所以本次结队编程利用Qt实现ui,并复用个人项目中部分代码。
之前我们都没有使用过Qt做图形界面,所以在本次项目过程中做中学,逐渐实现所需功能。
一. 分析结队编程需求
带UI的小初高数学学习软件主要功能包含:
1. 实现图形化界面操作;
2. 用户注册功能,并设置密码;
3. 用户登录,登录状态下可修改密码;
4. 根据用户选择的题目类型及题目数量生成没有重复题目的试卷;
5. 用户提交后显示分数,并可选择继续做题或退出。
其与个人项目功能要求对比:

二. 实现过程及结果
我们实现该项目主要经过以下步骤:
明确要求所需界面,每个界面可实现的功能及需求
-> 框架设计,完成每个ui界面的设计
-> 对界面中的控件转到槽,进行相应功能及跳转的设置
-> 对界面中关于注册,登录,答题等功能的实现
-> 风险判断及测试,收集用户体验,实现对用户不合法输入的提示信息
-> 总结以上框架及内容,完善程序及功能,最后打包项目。







三. 如何复用个人项目实现结队编程项目
对照结队编程需求,逐条分析复用个人项目实现结队编程项目:
1. 实现图形化界面:
主要利用Qt的ui功能(纯代码方式和设计模式),本次使用设计模式创建界面。
2. 用户注册并设置密码:
个人项目中是已经给定了9个账号及对应密码,且没有注册功能。
而结队编程项目要求实现注册并让用户自己设置密码,所以该部分不能直接复用个人项目代码,而需要添加功能。
3. 用户登录并修改密码
对于用户登录,其实条件和个人项目差不多,主要是对输入账号和密码的匹配;
而修改密码部分是新增的功能,需要我们在保存账号密码的文本文件中找到对应账号,并重写密码。
4. 生成试卷
该部分是复用个人项目代码及思维最多的地方了。
在生成题目部分几乎可以完全利用个人项目代码。
但结队编程有不同甚至更高的要求:
个人项目中同一个账号生成的试卷不能有重复,而结队编程只要求同一张试卷没有重复;
结队编程项目在给出试卷题目的同时,需要给出选择题的选项,即必须对题目进行计算,并设置其他选项。
结队编程项目给出试卷不是整张所有题目一同显示,而是提交一题之后再显示下一题,直到完成所有题目。
5. 显示分数,并可选择继续做题或退出:
继续做题部分和个人项目一致,在个人项目中主要利用一个while循环实现,而结队编程是通过pushbutton转为槽实现界面跳转实现。
显示分数是新增需求,需要记录每一题的正确与否,最后计算分数。
四. 结对编程的经验教训
过程中遇到的问题:
使用Qt:
对Qt中ui界面包含的各种控件及功能,槽和信号的理解,区别于C/C++的代码函数,对文件流的处理方式等等的报错修改及学习过程。
代码复用:
对个人项目中的代码不能全部复用,且做题部分代码添加进Qt后的修改整合过程中遇到各种bug,如头文件互相包含,代码模式识别不了头文件等。
打包:
明明应该是一个简单且简短的打包过程,硬是由于各种环境变量等等原因报错,弄了几个小时。
风险测试:
在打包完成后,生成一个.exe程序,使用过程中发现对于用户不合法的输入导致了之前没有预料到的风险。
如做题界面点击开始做题之前点了提交会导致程序终止,原因就是代码中设置变量之前没有增加判断条件。
经验教训:
1. 做中学
与以前大多数时候都是学完再做的确不同,从安装qt到利用qt设计ui界面,并完成对应代码,也只有几天的时间。
实现代码的过程,发现其与熟悉的C/C++的类型命名和函数等也存在区别。
边学边做的前期的确有些迷茫与不确定,但是稍微熟悉之后也很快适应。
2. 波澜不兴
完成代码主体设计后的改代码的过程,主要是在一直改bug。
这次结队项目也还不算大工程,但是改代码的时候终于解决这个bug,又来!
得到的经验就是荣辱不惊波澜不兴,不要被困难打倒。
3. 取长补短
两个人合作一个项目,怎么达到预期效果?
取长补短,思想碰撞。
该项目中队友主要完成ui设计界面,我主要负责对界面接口的代码实现。
充分沟通,成为对方的用户,分享用户体验,最后通过不断地交流不断改进。
4. 进度规划
“管理的控制工作是务使实践活动符合于计划”。
任何方法论之前,先要探求问题的来源,否则,对各种方法论的依赖或滥用,有害无益。对于一个软件系统,首先要确定开发,定位需求,再进行策划,建模,设计及代码实现和测试等过程。并且对于每个项目实施过程,需要在做之前有合理的规划,保持进度,防止最后时间慌乱。
5. 风险测试
经典的软件任务进度安排同样适用:
1/3计划
1/6编码
1/4软件测试和早期系统测试
1/4系统测试
“不为系统测试安排足够的时间简直就是一场灾难。”
本次结队编程虽然在编程实现过程中发现并处理了一些可预见错误,但是最重要的还是最后完成ui界面及功能设计后的测试阶段。
一定要给最后的测试留足时间,从而解决在测试中发现的bug和不合常理的地方。
本次结对编程做成一个小初高数学做题系统可以说是第一次完整地实现接近于现实生活的程序了,切实体验到做中学以及实现之后满足的感受。并且此次项目让我对于风险测试的重要性有了更深的真实的理解。
Practice is the best of all instructors.

浙公网安备 33010602011771号