结对作业 UI 7

项目gith地址:https://github.com/zqf0722/homework2/tree/master/PB16060306

这次的项目采用结对编程的方式,更多人员投入到一个项目中,使编程拥有了更高的效率

需求分析

  •  对上述各属性参数(生成题目的数量,操作数的数量,题目及答案中的数值的范围……)进行设置
  •  调用Core模块得到题目和运算结果,显示题目,接受输入,并能判断答案是否正确
  •  增加“倒计时”功能,每个题目必须在20秒内完成,否则,得0分并进入下一题
  •  增加“错题记录”功能,对于答错的题,将其保存下来,当下次进行“复习”时,增大错题在练习题中的概率
  •  增加”历史纪录“功能,把用户做题的成绩纪录下来并可以展现历史纪录
  •  增加“成绩分享”功能,生成成绩单,想一想成绩单里要展现什么,仅仅是最后的得分吗?错题的类型及数量?帮用户分析其薄弱的环节,提出合理的学习建议?
  •  对所有Core组的模块进行测试

团队分工

就这次团队项目而言,我们现在清明节前后各自学习了QT的使用技巧,在清明节后开始了编程。一开始的分工打算是余子昊同学做功能部分,我负责对接部分。但后来实际开始编程后发现,对接部分需要CORE组的dll文件,而前期这样的分工很不合理,后来我们采用了团队编程,即一个人写程序,另一个人在旁边引领思路和查看。而我们具体谁担任领航员,谁担任驾驶员,是根据谁更加擅长当前部分的编程灵活调整的。

PSP表格

 

 

代码架构和实现

       采用QT来进行UI的设计和编写,QT的UI设计界面较为直接,它比较适合初学者,舍去了较为抽象的代码,而采用框体按钮等图形直接拼接UI界面,然后系统自行生成相应的代码。举例如下图。

 

 

 

  然后每一个不同类型的按钮或是文本框都有相应的函数能够操作,不同的ui之间可以通过调用.h文件进行互相的打开。具体构建如下

 

 

Error.cpp如下

 

主界面构成

   参数设置按钮调用CORE组的参数设置函数进行参数的设置,开始答题按钮用于进入答题UI开始答题。

  

 

 

倒计时功能

   采用QT自带的LCDNUMBER功能完成倒计时,设置timerId(1000),即1s中触发一次中断,进入Timerevent函数中,完成lcdNumber->value()-1,从而完成倒计时

 

 

历史记录,错题,成绩分享

    将每一次回答的记录存进文件里,并在相应的按钮处调用相应的文件,来显示相应的记录,并在每次打开文件后关闭文件,从而再每一次答题后,答题的记录都能得到保存。

测试示例

 

 

 

主要难点和主要BUG

   对接,这两个字是这几天的编程里最让我们小组痛苦的两个字。

显示调用:进入dll 无法援引函数

先不论每个CORE组的api都有所不同,光是同一个组的调用就让我们伤透脑筋。我们一开始打算使用显示调用,后来发现成功进入了dll文件之后却无法使用core组的函数,当时一直无法解决这个问题,后来经过其他小组的帮助。是因为一些特殊的原因,在QT编译器中调用dll里的函数,函数名都出现了不同的变化,利用Depends工具看到真实函数名之后,成功完成了显示调用,我们最后的版本也是使用的显示调用,不过显示调用的劣势十分明显,代码冗长,援引函数繁琐。

 

 

隐式调用:编译器不支持

   在之前的显示调用遇到问题,且十分冗杂令人厌恶之后,我们选择尝试隐式调用,语句很快写好,QT自带的编译器却不支持语句的编译,后换VS编译器后解决此问题。

           出现各种“不存在”的语法问题

   更换编译器后,出现各种本不存在的语法问题,后经调试后发现是由于使用中文字符导致的,将中文字符修改后消除了这些报错。

           X86和x64的冲突

    这个错误是由于Dll版本和编译器版本冲突导致的,需要仔细观察使用的dll和编译器位数。

           LNK2019无法解析的外部命令

     在对接时出现的错误,应该是lib文件没有正确加载,或是dll文件不匹配造成的,可惜的是,我们在试图解决这个BUG的时候,QT CREATOR出现了崩溃的问题,导致我们最后使用了显示调用。这个BUG应该能通过正确设置DLL或重新加载lib。

 

结对编程优点

结对编程可以提高工作效率,两个人在一起写代码的时候就会很容易发现一些显而易见的错误,比如:手滑少打了一个括号,多打了一个字母,没有分清大小写等。而且任何一个想法都是经过两个人的讨论后产生的,这就会提高idea的可执行性,减少后期的维护工作量。

结对编程还可以使团队中的每个成员发挥自己的优势,比如我的搭档对算法的运用比较熟练,他常常指导我们的算法设计。而我对C++比较熟悉,我在学习Qt Creator的时候进程较快,在工具的使用上我常常扮演leader。大家工作的都很开心。

 

团队项目流程完善

而在一个团队里进行软件开发,可以将软件的开发分为若干个部分,而每个部分由若干个小组来开发。比如我们的团队项目主要分为前端开发和后端开发,那么前端开发和后端开发中较难的开发部分可以用结对编程来解决问题(甚至可以多人一起解决),而相对较简单的开发部分就可以由一个同学独立完成。

 

结对编程应用

以后走上工作岗位,会考虑采取结对编程解决一些任务。

 

刚刚走向社会,走进公司的时候,必然会成为新人,这个时候如果被安排了结对编程任务,跟着公司里的老人,可以学到很多有用的经验;如果跟新人组队,当然也可以同时提高两个人的能力,还能交到一个朋友,何乐而不为呢?

 

而且结对编程、团队编程,可以让团队里的每个人都能得到成长,还可以让知识得到交换,比如老员工对算法的熟悉,新员工对新知识的掌握,相互交换,大家都能成长,公司也会变得更加有生命力。

 

 

课程意见

该课作业实在太多,考虑到其他理论课程作业也不少,还有期中考试缠身,我觉得可以适当减少一些工作量,比如降低blog的要求等

 

本次双人副本没有一开始就规定好Ui和Core的接口,对各个组造成了不小的麻烦,Ui组要不停的改代码来支持各个Core组的需求,Core组要针对每个Ui组添加相应的函数,这些完全没有必要,希望以后的作业能布置的稍微清晰一点。

 

PB16060306曽琪峰

PB16060002余子昊

posted @ 2018-04-16 04:05  Jerry_7  阅读(248)  评论(1编辑  收藏  举报