结对编程成员:
蔡佳泉 1711216
刘子义 1759132
一、前言:
以下是本次结对编程的要求:
我们决定用c语言写一个在命令行窗口的四则运算练习的软件。刘子义(1759132)负责写代码,蔡佳泉(1711216)负责审查与测试代码。
我们预计第一版用时2小时开发出来,说干就干。
二、第一版
第一版的速度比我们的预期还要快只花了1小时的时间就写了出来。
以下是第一版的代码以及运行结果:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 5 6 int main(){ 7 8 //设置变量 9 int count = 0,rand1 = 0,rand2 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 10 int sign = 0; //四则运算符 11 int get = 0; //得分 12 13 14 //主体架构 15 do{ 16 srand((int)time(0)); 17 rand1 = rand()%100+1;//第一个随机数 18 rand2 = rand()%100+1;//第二个随机数 19 sign = rand()%4+1; //四则运算符随机 20 21 //根据四则运算符分类 22 //加法 23 if(sign==1){ 24 end = rand1+rand2; 25 if(0
一审查,咦????好像不太对啊,出现了以下严重的问题:
1.要求是两个运算符,这里只有一个运算符呀。原来是我们前期没有进行合适的沟通,要求没整明白就咵咵的打了代码。
2.生成计算公式的速度非常的慢。
3.我们错误的理解了结对编程,结对编程应该是两人用一台电脑同时进行写代码以及审查,而不是分别进行的。这样才能即使发现问题并解决问题,并且能及时沟通和学习。
接下来我们就运用结对编程的方法准备写第二版,预计时间1小时。
三、第二版
通过你写一行我审查一行的同时编写,我们花的时间和预计时间差不多。
以下是第二版的代码以及运行结果:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 5 int main(){ 6 7 //设置变量 8 int count = 0,rand1 = 0,rand2 = 0,rand3 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 9 int sign1 = 0,sign2 = 0; //四则运算符 10 int get = 0; //得分 11 12 13 //主体架构 14 do{ 15 srand((int)time(0)); 16 rand1 = rand()%100+1;//第一个随机数 17 rand2 = rand()%100+1;//第二个随机数 18 rand3 = rand()%100+1;//第三个随机数 19 sign1 = rand()%4+1; //第一个四则运算符随机 20 sign2 = rand()%4+1; //第二个四则运算符随机 21 22 /********************* 23 根据四则运算符分类 24 1.加法 2.减法 25 3.乘法 4.除法 26 ********************/ 27 //加法 28 if(sign1==1){ 29 if(sign2==1) { 30 end = rand1+rand2+rand3; 31 if(0
虽然通过你写一行我看一行的方式写出了第二版,并且没有语法错误,编译通过。
但是经过审查员的后续测试发现还是问题多多:
1.数字都是用int类型储存,电脑算出来的结果都是直接省略掉小数点后后面的数字。
2.如果我输入的答案不是数字,而是字母或特殊符号会出现下面直接跳出相同的300道题目的bug:
3.出题的速度还是特别的慢。
接着我们就只能继续改进......
三、第三版
以下是第三版的代码以及运行结果:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 5 6 int main(){ 7 8 //设置变量 9 int count = 0,rand1 = 0,rand2 = 0,rand3 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 10 int sign1 = 0,sign2 = 0; //四则运算符 11 int get = 0; //得分 12 13 14 //主体架构 15 do{ 16 srand((int)time(0)); 17 rand1 = rand()%100+1;//第一个随机数 18 rand2 = rand()%100+1;//第二个随机数 19 rand3 = rand()%100+1;//第三个随机数 20 sign1 = rand()%4+1; //第一个四则运算符随机 21 sign2 = rand()%4+1; //第二个四则运算符随机 22 23 /********************* 24 根据四则运算符分类 25 1.加法 2.减法 26 3.乘法 4.除法 27 ********************/ 28 //加法 29 if(sign1==1){ 30 if(sign2==1) { 31 end = rand1+rand2+rand3; 32 if(0
通过刚刚的第三版的改bug,我们终于达到了预期的效果,但是运行效率较低。
四、总结
1.结对编程中出现的问题:
1)开始没有理解结对编程的含义,错误的进行了编程流程。
2)编程前没有做好适当的沟通、需求规划以及程序整体架构算法规划,导致后续要花更多的时间去debug,甚至整体代码框架不如推翻重新来过更好。
3)代码选择的是从c语言,是面向过程的编程语言,有局限性,没法运用面向对象的思想去写这个程序,导致代码复用率低下,很难进行功能上的拓展,后期也不好维护。
4)很多地方出现了大段的重复代码,一开始应该把有些功能用函数封装起来,这样有利于代码的复用率。
2.通过此次对结对编程的理解:
结对编程是两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。
3.此次结对编程的心得:
1)耐心和尊重很重要,在这个过程中一定要互相尊重,每个人都有自己的强弱项。作为领航员,当驾驶员不明白的地方要耐心解释,不要一把把控制权抢过来自己来写,一定要给伙伴足够的时间去消化和练习。还有不需要评价伙伴写代码的风格,这不是审查的重点。
2)编程前一定要做好需求分析,不然做出来的东西很大概率会不符合要求,看似需求分析很麻烦很费时间,但是做好规划后续出现的问题少了才更节省时间。
3)通过结对编程中的讨论,可以相互学习对方的思路,发现自己在编程上的不足与缺点。看似在短期非常消耗时间,两个人同时做一件事情。但是就长期来讲,是对效率有提升的,因为代码质量提高了,并且通过知识分享团队成员能够互相为对方做 Backup。
4.对结对编程的评价:
我觉得并不是所有的项目都适合结对编程,也不是为了结对而结对,要做有价值的结对编程。我理解的有价值的结对编程就是在一些需求稍微高于自己能力的项目中进行,因为这样两个人可以做知识分享、相互提升。并且学习他人之长,去自己之短。