在本次操练中,大家体会到,尽管没有Cucumber那样强大,但C++测试框架Catch(参见:https://github.com/philsquared/Catch)能够使用Given-when-then来替代类似于JUnit4中的@Before那样的用于提取测试公共代码的方式,并令测试阅读起来更加像自然语言。
感谢通用电气公司方建国、郝然帮忙为本次活动提供场地与支持!
* 时间:2014.11.21, 1:30-5:20pm
* 地点:北京市大兴区永昌北路1号通用电气华伦楼三层
* 参加人数:26人
* 活动主题:不用IDE+手写Stub+BDD来做单元测试(C++版)
* 编程环境:Cyber-dojo, C++, Catch
* 编程操练题目描述:本次操练的题目是拙作《驯服烂代码:在编程操练中悟道》一书中的一个例子的C++版本。这个例子的源代码来自ThoughtWorks Studio的培训师和教练Luca Minudel在两年前设计的C#编程操练系列题目TDD with Mock Objects。这个题目是轮胎气压监测系统。有两个类Alarm和Sensor,其中Sensor类负责获取轮胎气压值,而Alarm类则检查Sensor传来的气压值,若在正常范围之外则报警。本操练要求为Alarm类编写单元测试,最后在测试的保护下实现一个新功能:每次检查胎压前,都需要将状态重置到非报警状态。
活动过程
* 参加者在软件开发中的疑问搜集
* 伍斌_Ben做有备编程操练
* 参加者结对做编程操练
* 伍斌_Ben对搜集的疑问的个人看法
* Well/Less Well/Puzzles
回顾要点
Well
* 结构合理,内容清晰,知识丰富
* 参与度高,工具新颖
* 一些观念和看法对我们是有启发的,可以促使我们思考
* 准备充分,时间控制很好
* 了解了新工具Catch
* 帮助我意识到UT的重要性
* 获得了coding dojo的体验
* 实际操作了TDD
* Pair环节互动效果好
* Cyber-dojo工具有意思
* 使我对Agile,BDD,Pairing programming及TDD有了更深入的了解,很有收获
* 所执行的实例操练,浅显易懂
* 例子程序贴切,互动性好,更容易接受
* 从头开始一步步引导大家一起做完这个实例,和实际工作中完全一样的形式来做,很有借鉴意义
* 气氛比较友好,轻松,活跃,通俗易懂
* 形式新颖,互动比较好
* 分享流程清晰,效果很赞,帮助大家提高了对TDD和BDD的认识
* 学习了新工具Catch,对BDD有了新的认识
Less Well
* 分享内容更适合入门级,可以适当提高难度
* 谈看法时比较笼统,希望更具体
* 可以多引用业界的实例和数据来增加说服力
* 可以根据不同的人员,找实际工作中的例子进行实操
* Mac OS X的键盘使用不习惯
* 希望更进一步了解如何写出更好的测试代码及mock等
* 希望听到更多业界信息的分享
* 时间太仓促,多一些时间做分享效果会更好
* 分析问题需要更多的实例和数据
* 希望更多地讨论工程实际问题
* 编程语言可以使用Java,因为要点不是语言而是TDD
* TDD中的重构好像少关注了一些
Puzzles(因时间有限,这里不再提供我的个人看法)
* BDD Auto的效果和好处如何平衡?
* Agile对于测试人员的意义何在?
* 今天提到了好多书,能方便列下书名?(参见程序员读书雷达:http://www.oschina.net/news/39816/thoughtworks-developer-reading-radar)
* 重构从哪里下手?
* 跨编程语言的软件系统和嵌入式系统如何做BDD?
* 完成了的大型软件工程哪些使用了TDD? 困难有哪些?如何解决的?
* 开发中的哪些团队使用了TDD? 问题有哪些?有哪些经验?
* BDD是在开发环境下还是在部署之后的环境下执行?
* 如何衡量TDD的效果?
* 如何让程序员从单独编程转变为结对编程?
* 如何用BDD做新项目?
* 架构与重构如何平衡?
* 重构的动力从哪里来?
* BDD与TDD的本质区别?
* BDD与TDD是否适用于所有工程?
* 如何在sprint结束前达到客户要求?
* BDD Auto和BDD Manual的比例是多少合适?
* BDD Auto与传统的基于QTP之类的工具的自动化测试的异同何在?
--------------------
操练成就匠艺。全栈开发者的公益编程操练社区:bjdp.org北京设计模式学习组。微信订阅号:bjdp_org,QQ群号:235913915。