TDD+结对编程活动分享
关于活动
为了让大伙能体验编程的乐趣. 易贷项目iOS的小伙伴们组织了一场TDD+结对编程的活动.
概念介绍
首先和大伙介绍几个概念:
为什么需要TDD
我们都做过这样的事——写一大堆代码然后艰难地使它工作起来. 也就是先建造再修正. 测试是在代码写完之后的事情. 这种很难预料的过程被亲切地称为“调试”, 我们可能会在其中花掉半个小时. 修改一个bug可能导致产生另一个, 甚至是一系列的bug.
我们需要TDD, 这是因为我们是人类, 人类会犯错误. 计算机编程是一项非常复杂的活动. 除了其他原因, TDD还是自动化测试用例, 通过它, 我们系统地得到按我们的意图工作的代码, 并且可以同时保持这些代码可工作.
什么是TDD
全称:测试驱动开发
TDD的原理是在开发功能代码之前, 先编写单元测试用例代码, 测试代码确定需要编写什么产品代码.
什么是结对编程
结对编程技术是指两位程序员坐在同一工作台前开发软件. 与两位程序员各自独立工作相比, 结对编程能编写出质量更高的代码.
需求介绍
考虑到是晚上编程, 时间上比较紧张. 我们用来练手的是一个简单的需求.
描述
实现一个Calculator计算器类, 完成加减运算.
例子
- 输入 @”1+1” 返回2
- 输入 @”1+1+1” 返回3
- …
分组实现需求
最开始的用例尽可能的简单,只有@"1"
, 实现起来也只是return 1
. 随后的用例一点一点复杂起来, 期间我们也多次推倒重构.
在用例的构造上是小伙伴A写用例,其partner写实现代码, 然后小伙伴A去优化这段代码要去嵌套层次不得大于两层. 然后交替写用例.
最后完成的时候所有的分组再在一起互相晒代码.
有意思的是, 分组内是结对编程, 代码互相理解起来无难度, 自己和partner之间也很融洽, 讨论的兴致也很高昂; 可是当去看其他组的代码的时候, 大伙一致评价其他组的代码可读性差.
总结
通过这次活动,我们意识到2个人一起考虑问题要比1个人思考更加全面一些.我们这个小需求都能推倒重写代码, 而实际项目中需求变更的则更加频繁. 如果没有一个好的测试保障, 我们根本没有勇气推倒重构. 大伙还没有掌握重构的一些方法, 还需要努力.
感想
以下是参与的一些小伙伴的感想
A:
TDD:通过tdd,可以提高我们的代码质量,在编写代码之前考虑得更全面
结对编程:通过结对编程,个人觉得写代码时需要考虑扩展性,不然后续需要全部推倒重写,对以后的开发同事造成了大量的伤害。
B:
结对编程:有利于提高代码质量和编码速度,提高时间利用率,有个弊端可能彼此的思维想法交换不够充分,走入死胡同
TDD:可以在编码前考虑代码更全面,也能提高编码质量,可以慢慢将TDD融入我们项目中,可以从一些常出问题的请求开始写测试案例了
C:
TDD:测试驱动开发,在编写某一个功能模块之前,先把这部分的测试用例写好,可以在代码编写的早期,发现问题,解决问题,及时重构。
结对编程:两个人用一台设备进行编程,这种方式可以提高工作效率,并且对于某一个问题进行分析时会分析的更加全面,对于这种方式可能还不太适应,日后可以多进行这种训练。
D:
无论是结对编程还是TDD思想,在实际开发工程当中都是很有帮助的。
当然,最有效果的还是通过这种活动引发思考,去解决问题,尤其是结对编程,效果非常明显。
E:
TDD编程很效率,发现和解决问题效率,希望以后能多参加这种活动!非常感谢!