结对编程——完工感言

一、前言

  回顾以前的程序开发,我们基本都是单独一个人分析需求,设计算法,编写程序到debug,通过这一次新的开发模式,两个人一起完成一个项目,虽然时间不长,但还是感觉受益良多。

  首先,来讲一讲从个人项目到结对编程的过度,我们两个人一个使用C++写的个人项目,另一个人用的是java,我们知道,就目前阶段来看,用java实现ui远比C++要简单的多,所以值得庆幸的是我们队伍中有一个人使用了java,所以从语言上来说基本没什么问题了。并且在实现个人项目的时候,就已经考虑到了用户界面,所以在结对编程实现的时候就是相对简单了许多。所以主要问题就集结在了对算式逻辑的优化和短信验证等其他模块了。

 


 

 

二、个人项目的继承与复用

既然结对项目是对个人项目的延申,我们先来看看有哪些是可以从个人项目中复用的。

从需求上来看,结对编程项目和个人项目的需求大致相似,对于大部分代码我们能够很好的进行重复利用,并且因为我们已经再个人项目中超额完成了UI界面的实现,所以我们的目标就变成了对个人项目的进一步优化。

我们的贡献与优化主要体现在以下几方面:

  1)程序的模块重构和代码的解耦

      个人项目由于时间仓促,虽然也分了模块进行编写,但是模块之间的独立性没有很好的体现,为了做出低耦合的代码,我们决定对代码进行了重构,模块被我们分为以下几个部分;

              从大角度来讲,我们的总体模块分割可以用下图表示:

 

 

        这样分化模块的好处是我们可以单独实现单个模块,而不用依此考虑,使得代码变的更加规整,并且我们在调试时只需要调试单独的一个模块,效率更高,程序的鲁棒性更加强大。

   2)UI界面的完善

        对于UI界面,内部我们也细分了单独的模块,分割大致如下:

     

 

 

 

 

        Java实现UI的难度在于界面监听机制和组建布局都需要我们自己手写实现,我们没有依赖于QT,虽然难度和工程量很大,但是加深了我们对UI等响应机制的理解。

  3)算术生成的创新与改进

  这也是程序的核心模块之一,关于算式生成,起初的思路是先生成小学题目,而后初中题目是在小学题目上添加根号等实现,然后高中题目同理又是基于初中题目生成。这样做的想法可能比较简单与普遍,但是这样做也带来了许多问题,比如括号意义性问题,式子是否有意义性问题,这些问题在生成题目时很难被考虑解决,并且这个最大的问题是当我们要去计算一个表达式的值时,我们要先将所有的单操作运算都计算出来后,根据后缀表达式计算四则运算的值,将算式生成与答案计算分离,委实麻烦。

基于这些考虑,我们两个转换了一下思路,观察式子计算,我们构想这样的方法,式子是由一些列的操作符和操作数构成的,而不管初中高中还是小学,都是四则运算的演变,我们可以将每个操作数看作一个对象,这样三者的区别就在于对象的不同,二元操作符可以将两个对象合并为一个对象,于是式子的生成就可以看做对象的不断合并,那我们可以边生成式子边计算答案,基于这种想法,我们实现了这样的代码,并且惊喜的是,这样做带来了意外的好处,我们的括号意义性考虑极为简单(因为同一个对象不会连套两个括号),另外,由于我们将操作数进行了抽象,所以我们的代码实现基本只需要小学实现即可,初中和高中都是只要重写操作数生成方法即可,代码实现极为方便。

    

 

 

 

 

 

 

                                        附图:一个题目生成的完整流程(奇数行式子,偶数行答案)

 

 

  4)短信验证

这里的也是极为波折,主要是包的导入教程不详细走了许多弯路,但都已克服。

  5)账号注册登陆

    既然有注册功能,自然也有账号登陆过程,在登陆过程中我们的优化主要如下:

          1.对于账号不存在的,我们提示账号不存在。

 

 

          2.对于账号存在而密码错误,我们提示密码错误。

 

            3.在进行注册时,我们会检查账号是否存在,如果存在则无法注册。

 

 


 

三、结对分析

 1.结对编程的利与弊

   结对编程的好处就是可以结合两个人的思想,比如在设计算法的时候,有很多情况都是结合了两个人的思想。还有就是在编程的时候,一个人编程另一个人在旁边能够及时的发现错误,大大提高了编程的效率。两个人一起编程可以提高积极性,一个人有时候在面对很多诱惑的时候就会怠慢很多。坏处就是沟通磨合需要一定的时间,不过我们是室友,所以在沟通调节,统一思想方面就很顺利。

   2.经验和教训

  1)合理分配任务

    不能所有的任务都抛给一个人,只有合作愉快了才能有后续的继续合作

  2) 要互相尊重

    不要在对方提出观点的时候立马就否认掉,要先分析,既然提出来肯定有亮点的地方,如果不好,哪里不好,如何改进。合作的时候能够得到同伴的肯定,能够提高积极性和自信。

  3) 需求分析很重要

    需求分析是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。


四、总结 

一个人走的更快,一群人走的更远,个人编程和结对编程就像如此,个人的项目虽然完成很快,但是两个人做的项目更加精美,到这里为止这次结对编程画上圆满的句号。

这篇博客由顾杰伟和张斌共同执笔。

 

posted @ 2018-10-08 20:06  顾杰伟  阅读(374)  评论(0编辑  收藏  举报