说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在团队中进行单元测试/TDD的12条经验

HTML文档下载 WORD文档下载 PDF文档下载
测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训。

测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训。文章翻译如下。

背景

两年前,我在一个Web项目开发组中,项目的目标是编写一个类似Excel的、用来计算产品/服务价格的Web应用程序。项目团队被分成3部分——开发团队、需求团队和QA团队。随着项目越做越大,而我们没有使用任何形式的自动化测试(QA团队使用手工测试),结果导致项目的测试时间比开发时间还要多。每进行一次小的改动,QA团队都要花费几个小时来做测试。

有一天,我参加了一个开发者会议,并与其他程序员谈到了这些问题。他们建议我去学习单元测试、验收测试和TDD(Test-Driven Development,测试驱动开发)。

我的经验总结

下面是我在学习集成测试/TDD过程中的一些经验教训,希望能够对大家有所帮助。

1.  不要第一次就在真实项目中尝试TDD

这可能会让你的项目很难进展。在采用TDD之前,你必须要了解TDD的工作流程以及如何去模拟对象(mock objects)、如何去模拟框架内部、如何组织测试等方面知识。因此,如果你的团队还没有准备好,就采用TDD可能会拖慢你的项目,从而错过最终交付期限。

2.  采用编程道场(CodingDojo)方式学习TDD

我们发现编程道场是对新进入团队的开发者培训TDD以及提升他们编程技能的最好的方式。

编程道场是一种帮助提高编程技能的训练方法。一般是在一个会议室里,有一台连接投影仪的电脑。每次道场还要有一个挑战题目。每次有两个人在电脑前结对编程来试图解决挑战的题目,并且由其他参加者提供建议。所有的参加者都要轮换到结对编程里进行演练。(来自维基百科)

3.  应用TDD之前尝试说服你的整个团队

没有什么比团队中存在“破坏者”角色更令人沮丧的了。如果团队中大部分人都在朝着TDD努力,而个别开发者所做的工作有可能毁掉这些努力,比如提交失败的测试代码等。我曾经就与这类人一起工作过。在团队开始TDD开发之前,一定要让所有人明白它的好处,并了解如何测试可以使软件减少bug、如何重构代码而不用担心破坏整个项目等等。

4.  写足够多的测试

构建一个测试套件,就等于构建了一个bug防护盾。当团队重构或改进软件时应该完全信任这个“盾”。如果这个盾有缺口,那么我们在更改代码时会增加引入未知bug的风险。不要强求测试套件覆盖100%的代码,这是不可能的,而且相当耗时,但是,覆盖大部分代码是完全可以实现的。一个好的准则就是测试所有可能会出现问题的地方。

5.  使用覆盖率工具

覆盖率工具将会报告测试套件的缺口。借助这些工具,可以很容易识别哪些代码没有测试。这些工具可以给我们一个直观的认识,比如蓝/绿着色线表示正在测试中的代码,红色着色线表示没有测试。如果你是一个.NET程序员,VisualStudio旗舰版会带有这个功能;如果你是一个Java程序员,你可以使用EclEmma。

6.  测试速度要快

当在构建软件时,我们永远都在追赶最后的交付期限。我们的测试应该帮助我们实现这一目标,而不是耗时和延迟。

如果写测试用例花费太长时间,在最后期限到来之前,团队可能不会再花时间写测试。如果在运行测试上花费太长时间,团队可能不会在每次更改代码后都运行它们。

7.  不要忽略失败的测试

如果你的团队对第1次失败的测试不在意,那么他们对第2、3、4次失败的测试也不会太在意。这种情况下,测试套件反馈的问题将会被忽略,测试也不会对软件质量有太大帮助。

8.  结对编程有助于团队应用TDD

当我们首次试图采用TDD时,或者最终交付期限临近时,我们可能会忘了写测试,而只顾写生产代码。结对编程可以阻止这种偷工减料的现象,强制团队成员编写测试。

9.  保持你的测试代码整洁

为了提高工作效率,我们的测试代码可能不会像生产代码一样整洁。由于软件发生改变时,测试代码也必须改变,测试代码也会越积越多,这样一来,会导致最终测试代码也很难维护。

10  测试应该有且只有一个失败的理由

这个理由就是发现bug。如果你的测试代码有大量的断言,你就需要小心。如果生产代码中的函数和类只有一个响应,那我们的测试代码也应该只测试这一个事件。通过这种方式,将很容易找出失败的测试,并弄清楚什么地方出问题了。

11.  编写单元测试将节省调试时间

通常在调试代码、寻找bug时会花费大量的时间,一旦你编写了单元测试,你将会在代码的每一块得到一个实时反馈,这将让你更容易找到bug,节省调试时间。

12.  持之以恒

应用TDD可以改变我们的心态。对于部分开发者而言,开始写测试很难,而在写生产代码之前写测试就更难了。重要的是,要持之以恒地写测试,一旦你的团队完全适应了这种方法,生产效率会成倍提升。

英文原文:12 Lessons I learned using unit tests/TDD

平台与技术专题论坛(二):游戏开发实践分享及IE11新体验 看Twitter上市后的入职面试题 六届中国大数据技术大会PPT精粹(三) AMD推多款异构计算开发工具 着力打造APU软件生态系统 Ceylon 1.0发布:又一个“Java语言替代品”? HTML5开发工具:英特尔XDK New 苹果公司为何“情系”PrimeSense 微App专场:不同平台下微App开发运营那些事 25载工程经验,HBase七年——BDTC2013讲师Michael Stack 或许对你创业有所启示:10个英国快速增长的科技创业公司 小米游戏中心10月报告:分析各种手游活动之优劣 欢网王智勇:传统电视厂商须补互联网基因 透露与百度合作细节 支付宝声波支付之初体验 首款使用HSA架构的Kaveri APU、多款异构计算开发工具APU13上齐亮相 分享10段实用的HTML5代码 十条建议送给那些初入职场的小白 这是要灭掉DC的节奏?谷歌欲推Android摄像头API 支持RAW 专访产品经理Markus Spiering:冬眠多年后的Flickr如何在夹缝中生存? 创业与投资专题论坛:硬件的现在!创业的未来? 造就Office新用法:微软推WP应用 可遥控Office文件 成为一名PHP专家其实并不难 前富士康CEO程天纵:创新来自长尾,创业源于创客! 最危险的开源项目——比特币 11月20日:微软正式发布Windows 1.0 回顾历代Windows版本界面 微软CEO鲍尔默卸职前在股东会上的最后演讲 微软改革员工排名制度或将开启新篇章 【快讯】SAP联合中国电信,又一外商公有云曲线入华 微软CloudOS云操作系统构建企业级三云合一 IE11支持JavaScript新型API,Web应用国际化更便捷 谷歌推订阅应用Play Newsstand:杂志+RSS阅读器 【信息图】到2020年开发者、设计师、测试员的数量将达到史无前例的高度 php为什么安上后不能用 在VS.Net中如何使注释生成已编译的HTML帮助文件? 我想更改Win2000的开机画面,请高手指点 ADO连接数据库时的事务处理问提 对于动态生成的控件,如何确定它的名字? vb 中使用select 的问题 想把post的变量遍历,怎样实现 小问题 关于参数 如何通过一个计算机名来查出它在局域网中的IP !!!!!~~~ 急,哪里可以下载IeWebControl? 有没有方法通过分布式连接直接从sql server写数据到oracle数据库。 郁闷问题:有谁知道Textbox在运行时如果没有任何输入,它是否空值? 如何用vb做一个启动程序(在windows启动运行) 请问,怎样将一个已分好区的电子盘格式化成ext2格式??? 请教web services问题 高分求购H261解码算法 子类中怎么用基类中的一个属性? 请问有没有JB7的中文教程,高分相求!(400分) 怎样在下拉列表框中显示数据表?具体怎么做? 请教,各位是如何实现对SQL SERVER的记录加密的? Datagrid中的HyperLinkColumn如何传递两个变量值给下一页? 高手请进:怎样将一个值传递到datagrid模板列的一个textbox中?问了好久,没有人会吗? ACCESS中的DATEPART函数为什么不能执行? 怎样在下拉列表框中显示数据表?具体怎么做? davidnim(天道酬勤) ,谢谢你了! EA 哥们们想你! 过年了你还好不? 听说你去了米国。。。。。。 我的winsock通信程序 一到晚上11点的样子就出现异常错误 异常处理问题 基础问题5!先答先给分! js里alert()的问题 win2k server+php4.2文件上传错误 如何解决画面抖动问题 请教:在sql server 2000中怎么执行sql语句? 深圳有那些公司用.net 自己重新编译了内核想安装到另外一台没有linux的机器 ORACLE中如何用SELECT语句将查询结果保存成文本格式文件。急急急!!答对一定给分!!! *.ASE文件格式是什么?在3D Explorer中可以把.3ds转换为这种格式吗? sqlserver2000 能否跨于访问 help me!!!!!!!!!!!!!!!!!! 在查询分析器中删除的数据可以恢复吗??急!!!!sql server 2000 角色问题 有重庆的朋友吗?进来介绍个好点的考点,南华中天怎么样? 修改鼠标形状 请问如何在浏览器上显示网站特有的图标??如163,sina等等 头发太飘逸了,风一吹就乱七八糟怎么办? 有没有遇到错误就中断的选项 请问各位大侠,VC中如何开发出浏览器全屏的程序? IdQuotedPrintableEncoder如何用呀,在线等。 散分,5个三角啦,顺便问一个问题 多烦人的IIS的验证!!死活搞不定!!!! 中国好声音巡演长沙站高清图集好声音巡演深圳站精彩现场图集好声音深圳巡演全场爆满 引爆最高人气好声音巡演重庆站火辣热情秀《中国好声音》第二季录制 东北学员组第二季《中国好声音》开录 让导师转身那英第二季好声音抢人有新招:我去年带“好声音”第二季严防剧透 程度堪比谍第二季中国好声音导师秀7:4:4:4 四大导师欢脱开转《中国好声音》第二季大不同 呈现&q第二季"好声音"好友变对手 好声音导师上演新“老友记奶爸金志文的人生“三级跳”那一年我们一起追过的杨32郎杨坤“中吴莫愁 那一年我们一起追过的《中国好李代沫发新专辑 “中国好声音”四大导《好声音》阿妹爱撒娇爱跳舞 那英女王《好声音来了》探秘录制现场 盘点第二第二季好声音开机发布会 张惠妹戏称自第二季《中国好声音》开录 关于抢人的浙江:单身汉遇情侣妒火中烧 用铁锤敲一周文艺这是在用绳命玩耍吗怎样用绘本让孩子爱上写作\"大北京·新香河\"论坛召开 香汐乌鲁木齐儿童医院专家提醒:别把儿童肺新疆“福康工程”服务南疆特殊人群甘肃建立应急救助制度 为“三无”病人太原警方严查“婚炮”扰民行为河北纪检将加紧查处城建、土地、治超等科比54秒连中三记3分 吃3大帽引张“球王”贝利因胃部不适病入院 病情并11家林果产品品牌成“新疆农业名牌”安倍晋三或推迟增税计划 提前大选巩固意大利一华人女童在车祸中受伤 经治疗吐鲁番开展百日百元高铁体验游刘德华送好友墨宝 写30字价值90万“双台联展”开创参展先河 奥迪A3 中国人赴美签证有效期延长 北美华侨华朝鲜拟成立多个经济开发区 称条件“得南京六朝博物馆“剁手俑”走红(图)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘