编程静修活动除了主持人的开场白、自我介绍和修炼题目剖析外。主要组织了5个session。每一个session都会添加一个限制条件,然后道友们两俩结对编程,以TDD的方式
编写代码完成需求。 大家在毫无压力的情况下尽情的体验 红-绿-重构 的过程。
一起叫老鱼(玉德俊)的道友不但技术精湛,而且行事雷厉风行,速度效率俱佳,当场即对全天的活动做了很到位的记录。这里分享给大家,也留着自己以后回顾。特别感谢老鱼的无私分享。
------------------------------------------------
老鱼 18:37
Session 1: (结对原则,两个人一个电脑,首先写测试用例,再写函数通过测试,进行ping-pong轮换即两个交替写用例和函数)
1 不需要写满足超过测试以外的代码
2 每个测试方法要明确指出期望的行为
3 测试粒度要尽可能小,方法要小
4 代码的block 感觉要好一些
Session 2(每个函数的步长小于5):
1 测试名称体现的好
2 用最简单的初始化方法,图形化显示更容易体现
3 用最小化的方法满足测试
4 直接不断的用测试来实现业务逻辑,直接加输入和输出,在测试里面就把图加上,
5 先实现满足测试,再做重构
6 每次红绿之后,再来考虑进行重构
Session 3(不充许使用if判断和for循环):
1 if判断和for循环本质上不可能绕过去的,只是可以采用一些技巧替代实现
2 可以采用函数指针替代if,也可以在测试里面构造alive和dead的不同测试方法进行,
3 python里面可以用map来替代for操作,通过切片代替for
4 不同语言都有一些技巧性的东西替代for操作
Session 4(采用更高抽象的描述,代码更加具有语义性):
1 把需求描述直接放到测试代码注释里面,通过测试直接体现需求
2 测试用例写得步子太大,则不容易在有限时间内实现
3 要先写完测试用例,再写实现逻辑
4 测试用例要考虑覆盖到极植,如周围带8个的,根据迪米特原则,cell里面不需要知道自已的位置,只要map知道就可以
5 关于自顶向下和自下而上的设计理念,取决于不同的情况,在TDD里面比较适合从下而上,否则需要大量的桩
6 没有必要省空间,写长变量名,更容易体现测试的行为
Session 5(互相之间不许交谈,代码之间没有注释)
1 通过长变量名和长函数名体现意图
2 用代码来体现你的意思,计算机代码是用来给人读的,偶尔让计算机执行一下
3 碰到特别复杂的代码(如四层for循环),可以考虑把这些部分单独抽出来,单元进行了测试了以后,再进行集中测试
——摘自老鱼分享在微信群的小结
------------------------------------------------
session1 我和奥克巴尔的小伙子孙巍结对,用着他的Apple, 尽管键盘的操作上还有一些不习惯之外,但想着体验了苹果产品的使用,心里美滋滋的。尤其是孙巍谨慎的思维和突出的协作能力给了我莫大的惊喜。第一个session我们通过了三个测试,并在集体review阶段介绍了我们组的代码和思路,非常有收获。session2的搭档李宁对需求价值的理解和小步快跑的把握给了我很多启发。李进安,符章文,程鹏等道友丰富的经验引起我很多思考
这一次的活动,收获非常多:1、体验了TDD的过程,对TDD有了一些初略的认识,期待进一步的学习和实践。
2、review 阶段提出了一些非常好的建议,化解了自己的诸多疑问。
3、三位主持者非常的优秀,自始至终让大家沉浸在轻松愉快的合作和编程体验中。从TA们那里让我学到了非常重要的一点:要善于发现优点,懂得欣赏他人,尊重同行。真的很感谢TA们!
期待Global Day of Coderetreat 2016.