一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程
1、代码规范
-编码:采用utf-8编码
-代码格式:
使用空格进行缩进;
控制行宽,方便查看代码;
留有空行,使代码看起来清晰明了;
-注释:
注释部分与代码主体部分留有空格,使清晰明了;
注释部分尽量不换行,以免产生误解;
不做无意义的注释;
-命名规范:各函数、变量、类命名时统一格式;
2、程序的总体设计
程序应分为两个模式,分别对应课题要求:四则运算与制作题库;
在四则运算中,应注意各运算之间的优先级与各种零碎要求,如和与积不超过100、没有负数等;
此程序模块之间的关系(附图):
3、程序结对编程过程及功能实现情况
1)关于淘汰代码
①关于陈旧代码1.0:
在本次实验中,本人与何国行同学关于实验代码分别进行了构造,我们对于实验代码进行了不同方向的探索与完善,最终统一了实验代码。代码的版本更迭记录了我们的合作过程。
下面为我们淘汰的代码1.0:
#codeing your code import random # 四则运算 def szys(): sym = ['+', '-', '×', '÷'] f = random.randint(0, 3) n1 = random.randint(1, 20) n2 = random.randint(1, 20) result = 0 if f == 0: # 加法 result = n1 + n2 elif f == 1: # 减法,要先比较大小,防止输出负数 n1, n2 = max(n1, n2), min(n1, n2) result = n1 - n2 elif f == 2: # 乘法 result = n1 * n2 elif f == 3: # 除法,要比较大小,并循环取整除 n1, n2 = max(n1, n2), min(n1, n2) while n1 % n2 != 0: n1 = random.randint(1, 10) n2 = random.randint(1, 10) n1, n2 = max(n1, n2), min(n1, n2) result = int(n1 / n2) print(n1, sym[f], n2, '= ', end='') return result # 制作题库 def test(): sym = ['+', '-', '×', '÷'] print('输入所需要的题目数量') n = int(input()) result = [] m = 0 while m <= (n - 1): print(m + 1, end='、') result.append(szys()) print(' ') m = m + 1 m = 0 print('对应的答案:') while m <= (n - 1): print(m + 1, '、', result[m]) m = m + 1 print('选择想要的模式') print('1、进行四则运算') print('2、制作题库') n = int(input()) # 当输入1时,进行四则运算,调用函数syzs() if n == 1: while True: result = szys() j = input() s = int(j) if s == result: print('right') else: print('error.,the answer is', result) # 当输入2时,进行制作题库 if n == 2: test()
淘汰的代码1.0主要问题有:
在我们所用的开发平台和pycharm和所用的在线编辑工具不兼容;
部分功能未实现,如统计功能;
代码本身不够简洁明了;
②关于陈旧代码2.0:
再进行了代码1.0的开发后,我们认识到我们的代码还有很多可以改进的地方,并且在运行过程中又发现了一些问题,所以我们对代码1.0版本进行了进一步完善,增加了正确题目的统计功能,优化了代码部分结构使其更简洁。
下面是我们淘汰的代码2.0:
import random # 四则运算 def szys(): sym = ['+', '-', '×', '÷'] f = random.randint(0, 3) n1 = random.randint(1, 20) n2 = random.randint(1, 20) result = 0 if f == 0: # 加法 result = n1 + n2 elif f == 1: # 减法,要先比较大小,防止输出负数 n1, n2 = max(n1, n2), min(n1, n2) result = n1 - n2 elif f == 2: # 乘法 result = n1 * n2 elif f == 3: # 除法,要比较大小,并循环取整除 n1, n2 = max(n1, n2), min(n1, n2) while n1 % n2 != 0: n1 = random.randint(1, 10) n2 = random.randint(1, 10) n1, n2 = max(n1, n2), min(n1, n2) result = int(n1 / n2) print(n1, sym[f], n2, '= ', end='') return result # 制作题库 def test(): sym = ['+', '-', '×', '÷'] print('输入所需要的题目数量') n = int(input()) result = [] m = 0 while m <= (n - 1): print(m + 1, end='、') result.append(szys()) print(' ') m = m + 1 m = 0 print('对应的答案:') while m <= (n - 1): print(m + 1, '、', result[m]) m = m + 1 print('欢迎使用在线四则运算系统') print('选择想要的模式') print('1、进行四则运算') print('2、制作题库') n = int(input()) # 当输入1时,进行四则运算,调用函数syzs() if n == 1: a = 0 x = 1 print('输入题目数量') b=int(input()) while x <= b: print('第',x,'题') result = szys() j = input() s = int(j) if s == result: print('right') a=a+1 else: print('error.,the answer is', result) print('一共答对',a,'题') x=x+1 print('-----------再见-------------') # 当输入2时,进行制作题库 if n == 2: test()
淘汰的代码2.0主要问题有:
部分小要求未实现,如和与积限定在100以内;
程序体验太差;
2)关于最终代码:
在经过了代码1.0和2.0的开发之后,我与何国行同学再次对代码进行了完善,解决了代码2.0版本出现的问题,开发了代码3.0版本(最终版本)。
下面是我们的最终版本代码:
import random # 四则运算 def szys(): sym = ['+', '-', '×', '÷'] f = random.randint(0, 3) n1 = random.randint(0, 100) n2 = random.randint(0, 100) result = 0 if f == 0: # 加法 result = n1 + n2 if result>=100: result=szys() return result elif f == 1: # 减法,要先比较大小,防止输出负数 n1, n2 = max(n1, n2), min(n1, n2) result = n1 - n2 if result>=100: result=szys() return result elif f == 2: # 乘法 result = n1 * n2 if result>=100: result=szys() return result elif f == 3: # 除法,要比较大小,并循环取整除 n1, n2 = max(n1, n2), min(n1, n2) while n1 % n2 != 0: n1 = random.randint(1, 10) n2 = random.randint(1, 10) n1, n2 = max(n1, n2), min(n1, n2) result = int(n1 / n2) if result>=100: result=szys() return result if result<=100: print(n1, sym[f], n2, '= ', end='') return result # 制作题库 def test(): sym = ['+', '-', '×', '÷'] print('输入所需要的题目数量') n = int(input()) result = [] m = 0 while m <= (n - 1): print(m + 1, end='、') result.append(szys()) print(' ') m = m + 1 m = 0 print('对应的答案:') while m <= (n - 1): print(m + 1, '、', result[m]) m = m + 1 print('欢迎使用在线四则运算系统') print('选择想要的模式') print('1、进行四则运算') print('2、制作题库') n = int(input()) # 当输入1时,进行四则运算,调用函数syzs() if n == 1: a = 0 x = 1 print('输入题目数量') b=int(input()) while x <= b: print('第',x,'题') result = szys() j = input() s = int(j) if s == result: print('right') a=a+1 else: print('error.,the answer is', result) print('一共答对',a,'题') x=x+1 print('-----------再见-------------') # 当输入2时,进行制作题库 if n == 2: test()
最终代码主要是以何国行同学编写的代码为基础共同完善的。统一后的实验代码各项功能大致完善,且大概符合了实验对于课题的要求。
运行结果如下(附图):
但是仍旧有着一些问题的存在,大致有以下几点:
不输入原答案直接换行会导致直接退出程序;
选择模式后无法在模式间自由切换,需要再次运行;
后续关于以上问题的解决仍有待程序的优化完善。
3)关于在线合作编辑
附图:
关于讨论部分:
我们所使用的在线编辑可以完成共同编辑的目的,在编辑工具下我们进行通讯完善代码,然后将所完善的内容在编辑器上进行填充,以达到让双方可以实时观看到结果的目的,以此循环,直至代码完全结束。
4)总结
在这次完成代码的过程中,对于python我有了更好的认识,并且对于在线编辑器的使用有了一定的了解。也知道了远程结对编程以及合作编程中不同角色的功能与作用,在关于代码的讨论中我了解到了python的更多技术方法;在关于在线编辑器的选择中让我有了一定经验,开发平台的选择和在线编辑器的选择应慎重,以免出现代码不兼容的情况。
4、项目结果
项目github地址:https://github.com/heguohang/pair_programming
项目成员:
小组组长:何国行 https://www.cnblogs.com/cshgh/
小组成员:汤友丽 https://www.cnblogs.com/letusrushb/
项目仓库附图:
以下为我向项目仓库中提交coomit的部分截图:
5、实验总结:
通过本次实验,我对敏捷开发有了更深的理解,知道了敏捷开发在项目开发过程中的诸多优点;
本次实验的主要内容是结对编程,因为特殊原因无法实现面对面结对编程,所以采用了远程结对编程的方式,这既培养了我一个人完成工作的能力同时也体会到了合作的魅力;
通过一系列的远程交流和各种工具之间的协同使用让我体会到了结对编程的诸多好处,如想法的差异会揪出很多问题、不同的代码书写风格会让人认识到新的东西、与水平较高的对象合作可以提高自己的代码水平;
Github项目托管平台给我们的工作带来了很多便利,这也是本人第一次使用该平台,让我受益匪浅,学到了关于Github托管平台的基本使用方法,对我以后的学习很有帮助;
两个人的合作开发让项目进行的更加高效、书写代码时的效率也有所提高。