【结对编程】好,不愧是我们


依依的感想写在前面

“我们这门课没有假期!”

花了整整一周的国庆假期,我们进行了一次完整的结对编程,算是真真切切体会到了老师这句话的真正奥义,不过不是为这门学科的作业和任务所累,而是设计和编程的过程中体会到的那种“根本停不下来!”。眼睛手术不久不能长时间看电脑,但我却总是控制不了自己,整天看着电脑,被医生说角膜太干不听话QAQ,队友从早上起床就坐在电脑前一直坐到下午两三点不吃不喝也浑然不觉,这这这……就是代码的魅力?

在这次的结对编程项目中,队友嘟嘟同学负责的是UI前端,11同学自己负责的是程序的后端,因为分工明确,所以在实施的过程中同步推进,效率比较高,在5号基本就完成了整个项目的设计编写,然鹅,在测试的过程中发现了各种各样的bug,持续对代码进行完善,直到最后期限之前一点点,7号晚才完成了对已知bug的修复(不知道是不是还有很多bug嘤嘤嘤)。当然,结对的意义一定不仅仅是分别负责一个项目组中的某个部分,比如,11对嘟嘟的直男审美感到不ok,所以在他进行前端设计的时候,不断督促他并提出建议,让这个程序的界面能够不断美化,,而同学因为常常比较心大,代码中经常出现很多小的错误而自己难以发现,这时候细心的嘟嘟同学总能帮助11找到小小的错误(例如:j写成i种),在最后一天的最后一个bug修复的过程中,因为只差一个函数的编写而时间又比较紧张,所以在写好框架的情况下,将函数分为两部分,11和嘟嘟分别写了一半的函数,最终这个函数拼接起来就可以直接运行,这大概是完成整个项目的过程中让我们最感到高兴的一件小事。在这个时候我们不约而同的说:“好,不愧是我们。”

对于个人项目的复用

 在做个人项目的时候,嘟嘟同学已经做了界面,而11却没有做,11的题目生成采取的是完全随机的算法,而嘟嘟采取的是一种伪随机。所以在代码复用的时候,界面的操作和整体的框架主要参考了嘟嘟的代码,下面是嘟嘟同学的话:

由于UI性质原因,python代码显然更适合作为基本代码,所以整个项目都是在我的代码上复用而来。复用包括下面几点:

1、UI界面的复用:

个人项目实际上已经写了一点UI,正好结对项目上接着自己写的UI,原代码做的是一个登陆界面,一个题目选择界面,现项目根据需求重新修改登陆界面,除用户名和密码外,另加登陆和注册按钮。UI再加一个注册模块,承接了之前的难度等级界面,加上单选出题以及分数界面就完成了整套系统。

 

登陆界面

 

注册界面 

 

注册界面

 

 

选择界面

 

 

数量控制

 

 

打分界面

3、生成算法类的复用:

生成算法是一个类,该类中自己的生成算法替换为队友的生成算法,保留了之前的文件输出。修改了查重算法,仅对本次生成的试卷进行查重操作。增加了对每到题目计算结果的函数,函数采用队友的灵感,前半部分计算每个运算符的域约束环境,之后采用python自带eval()函数进行处理,设计异常抛出处理。

3、用户类的复用

用户信息单独成类文件,从文件从读用户的账号密码用户名,实现了下次可直接登录的需求,避免重复注册,或把注册用户添加到类中,防止”断电不保存”现象出现。

 

后端的题目生成和计算模块主要参考了依依的个人项目,下面是依依同学的话:

个人项目和结对编程在主要程序功能的区别上最大的部分在于,结对编程不仅需要生成题目还需要计算出题目的结果,鉴于我在个人项目的题目生成上也存在一些不周全的地方,所以在结对编程的时候对于个人项目的复用和改进如下:

1、题目生成代码的复用:

在题目生成的过程中直接使用了我在个人项目中生成题目的算法,但是由于我的个人项目使用c++编写的,而我们的结对编程项目使用python编写的,所以,需要将这部分的代码改成python的。而在python中对于字符串的操作比c++方便了不止一点点,所以在很多类似增减和修改字符串内容的地方地方都可以进行一些简化。

2、加括号算法的完善:

在我原先的生成题目中,会加上一些没有必要的括号(例如:把整个式子打上括号或是在优先级高的式子上加上括号),为了完善题目的生成不使这种情况出现,我新增了一个叫做remove_br的函数,专门进行冗余括号的去除:

这一模块采取的主要思想是进行括号域内和域外运算符优先级的判断和比较,去除不符合要求的括号。

3、新增计算模块:

 在计算一模块的设计和编写可谓是十分曲折,在最开始工作的时候,队友先进行整个代码框架的搭建,我现在自己的个人项目上进行计算模块的添加,采取的是用一个短发判断生成的式子中的运算符们的作用于,将式子改写成一个标准的形式,然后利用队列和栈,将中缀式改成后缀式进行计算,实现了计算的功能,而后在把这一模块改成python加入整个程序的过程中遇到了一些困难,最后是采取队友建议的python中的eval()函数,采取我之前写的判断作用域的算法将生成的式子改成采取eval()函数所需的另外一种标准形式,然后利用这个函数直接计算得到结果。

 

对于项目跨平台的处理

这一部分的处理还要感谢助教小姐姐的提醒,因为助教小姐姐的电脑是苹果系统,所以我们个人项目对于跨平台考虑的欠缺就很明显的体现了出来,所以在结对编程的时候我们考虑了对跨平台的处理。

因为大部分的电脑都是windos系统,我们在编写代码时也是Win平台上处理,所以在Mac平台上就出现了路径问题(学姐的电脑是Mac),现阶段了解到的不兼容问题就是路径问题,Win下的文件路径以“\”操作分割路径,而Mac下则是以“/”操作分割路径。所以下下面代码就会出现路径问题:

dir = os.getcwd() + "\\" + self.name + "\\"

好在python跨平台性非常的好,很多库函数两个系统都是通用的,所以避免直接出现路径中的分割符号,用函数join()来替代。如下面代码:

dir = os.path.join(os.getcwd(),"Users","Users.txt")

就可以跨平台使用。

 

嘟嘟的感想写在后面

 

从最开始入大学时起,老师就跟我们说过,软件工程要“做中学”,这个国庆假期我真的深刻的体会到了什么叫做中学。一个代码的生长周期,从开始分析需求到最终成品出现,最受折磨的还是程序员。
第一次做UI,因为不懂框架而饶了很多弯路,也浪费了很多时间,因为用错UI工具而降低了整个程序的美感也是让人很遗憾的事情。接着是各种各样的BUG,我个人来说是一个非常认真的人,不会出现i写成1,等号少打一个或者记错变量名等情况,但是很多逻辑上的BUG还是让我几次都想崩溃,男默女泪...但是还是非常享受这个过程,看着需求一个一个被实现,BUG一个一个被解决,说没有成就感是假的,说不自豪也是假的,或许我们做的不是最好的,但是我们真的尽了全力。
7天假期,我没有一天有时间去放松去玩耍,每天都把时间花在代码和项目上,全身心的投入了进去。也曾因为Qt不会使用而放弃了特别好看的界面,也曾因为分工没有明确自己越界而和队友发生了矛盾(当然女朋友还是要哄的...小声BB),当一切都结束的时候依然特别开心。
最后的最后还是想说:兴趣才是最大的动力,自己热爱的才会去努力,不管有多艰难。
敬程序猿。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com