结对编程项目总结
结对编程项目总结
(1)选定编程语言
首先,结对编程我和队友选择了我之前写的个人项目的python代码来完成。但这不是一开始就决定好的,本来我们觉得使用html或者java scrip写出来的UI界面应该会好看很多,但由于在学习中遇到了很多问题,并且我一开始就是用python代码完成的编写,因此考虑了之后决定和队友使用python+pyqt5的UI界面设计来完成这个项目。
(2)整体框架设计
进行分工之后,我负责后端,而我的队友负责前端UI界面的设计。
在一开始的时候,我和队友进行了模块接口的设计。最后设计的结果如下:

而后分工进行代码的编写。
由于已经分配好了各个函数的接口,参数和返回值的定义,因此整体框架并不难写。
(3)框架内部结构实现以及个人项目代码复用
我将UI界面和底层逻辑的接口函数全部封装在了一个文件SystemControl中,而后实现两个大类
Account和ProblemCreator,对应封装成两个文件,为自己写的交互逻辑提供接口。
这两个框架的逻辑如下:


其中,对于Account文件中提供的接口函数,由于在个人项目中已经写过了各种检查用户登录状态的函数,为了和UI界面进行交互操作,我把这些函数的功能都进行了拓展,部分代码进行了重构。
而生成题目逻辑ProblemCreator类中,虽然个人项目中也做过了,但是一个最主要的问题是除了小学题目,其他题目如初高中的题目都是那种无法直观计算出结果的式子。比如:
这种别说计算整个式子的值了,单独一项也是无法算出来的,因此我只能对原有函数进行重构。
首先设计了一个能根据给定值和运算符个数生成一串小学表达式。
这个函数能够为后面的初高中表达式的生成提供很大的便利。
然后对于初高中的题目,为了增加随机性,我也放弃了最开始写的一个数字一个数字的生成再在中间插运算符的想法。而是根据上面设计的函数,随机生成操作数和运算符,为特殊运算符如sin,cos,sqrt等分配操作数的数量作为它们下面的运算式,然后剩下未分配的运算符和操作数都按照随机原则分配到式子的不同位置,再次调用上面的函数来完成生成工作。
这样就保证了式子的完全随机性。但是由于特殊的运算符如根号和平方进行结合之后,其实有4种可能:
对这4种情况进行区分,然后按照需要分配就能够得到必定是整数的解。
然后生成高中表达式的时候,同样遇到了问题,就是sin,cos,tan三个表达式想要运算出能够方便计算的值就只有一些特殊值+π才行。因此先把他们对应的能算的值都计算出来再生成表达式。同样注意了分数约分以及特判分子为0,分母为1的情况,整体逻辑对比于初版个人项目优化了不少。并且新增了很多为了实现上面的逻辑而方便调用的函数。全部打包封装成文件以供调用。
(4) 遇到的问题
- 首先,利用python编写UI界面,主要是环境的问题。我和队友都采用了pyqt5的库进行编写(其实本意是用pyside2),然后因为环境不兼容,库冲突,python路径问题,python版本问题等一系列问题导致在配置环境上都差不多花了7,8个小时的时间。
- 第二个问题是接口问题,队友本来想用html编写代码,还特地去学习了html和js,然后发现我用python代码不知道怎么跟他对接,最后放弃都来用python完成。
- 第三个问题是版本控制,这个问题其实是另一个同学提出来了,我们一开始没有注意这个东西,结果就是因为代码改来改去结果运行崩了之后不知道怎么调回去了,导致花费了很长时间调试,还有我自己不小心把一个文件删了怎么都找不到,也没有备份最后只能认栽重写一份了,最终还是懂得了一定要进行版本控制。在双方的电脑上都备份了各个版本的代码。虽然最后还意识到应该把每次更新修改了哪些部分的bug增加进去,但是那时候已近接近完成了,前面版本的代码其实自己都不知道改了什么遂再次作罢。
- 在整个工程接近尾声的时候,我们又遇到了新的问题,那就是都不会打包exe,然后又跑去学习这个,虽然只是简单的一个命令,但是因为参数问题,库问题,环境问题又浪费了很长时间。
(5)总结
- 结对编程,复用代码,完成一个更大的项目,这个过程中,不仅需要每个人的个人能力,还需要双方的分工、合作。
- “当局者迷”,一个人写的代码可能出现各种问题,而自己改来改去最后一团糟,这时候让队友一看就知道发生了什么,马上修改过来,节省了很多时间。我在整体调试的时候也出现了不少bug,当我们一点点地进行修改,然后对接,运行出来哪怕只是一个简简单单的界面也会让人十分欣慰。最后完成成品,能够完整执行完功能的时候更是百感交集,虽然写的很累,debug很累,但是真的做出来了确实很有成就感。
- 整个项目的完成,首先最大的感触就是团队合作,两个人或者多人,一定要规划好各自负责的领域和交互的事宜,不然可能很多东西都要重写。
- 然后就是对于软件项目,要有清晰的管理文档和版本控制,一定要记得备份不然改错了东西或者不小心删掉了某个文件哭都来不及只能重写一份。
- 要编写耦合性低,方便修改的代码。。。这点因为我们最后运行的bug要进行修改的时候我深切地体会到了。虽然我代码写的很复杂,各种函数的封装,但是修改起来是真的轻松,因为只要改一两个参数就好了。

浙公网安备 33010602011771号