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

在团队中进行单元测试/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

【走近讲师】谭晓生:魔高一尺道高一丈,360基于大数据的网络攻击检测 一周热点:摩尔定律让位于贝索斯定律 阿里巴巴集团CTO王坚确认出席第六届中国云计算大会 【走近讲师】青云甘泉:混合云的构建及其对企业的帮助 RadiumOne创始人兼CEO因家暴被公司解雇 3D打印狂潮:可检测皮肤疾病的低价手机显微镜 浅谈导航设计,开发者必备的十大实用技巧 【云先锋 41】上海越诚:基于云服务的建站类iService软件超市 董西成:Hadoop将在高速发展和完善中扩大优势! 【走近讲师】 华云数据郁珉:公有云市场八仙过海 价格不是唯一标准! Facebook、Twitter、Google移动广告之争 开发者的黄金时代=运维人员的恶梦? 研发团队平稳度过“从小到大”并非易事 诺基亚品牌手机不久将消失 Stephen Elop回应不是木马 看七家科技公司Logo的最初模样 移动UI框架Fries:私人定制最Sexy的用户界面 必须Mark!最佳HTML5应用开发工具推荐 百度技术开放日感悟:看百度如何获取大数据时代的“船票” 谷歌亚马逊微软的烧钱游戏 拉手网CTO官冲:团购网在大数据应用上的探索 究竟谁真正关心比特币,不妨看看基于大数据的百万条推特分析 Firefox 29正式版:高度自定义模式、全新菜单和Australis UI 冼茂源:HBase在垂直搜索业务以及数据存储中的应用! 阿里云计算北京布点 全球第三个云数据中心开放 【走近讲师】友友天宇CEO姚宏宇:与行业结合是私有云厂商的重要出路 万亿移动支付产业的难点和痛点 削减硬件运营成本?亚马逊或自主研发ARM架构芯片 开源框架eMobc:XML开发原生移动应用so easy iOS应用安全开发,你不知道的那些事 市场化API的十个捷径 MongoDB和Cloudera结盟,欲征服大数据市场 在ASP中如何编程建立索引服务的编录及目录? 在web server application把MEMO字段中带格式(RTF)的内容转换成纯文本? 请问在身份验证中,能否有两个login.aspx??? 急~那篇给vb控件打包文件添加数字签名以便浏览器浏览的那篇文章在哪里? 用vb如何实现模拟雷达界面??欢迎赐教! 如何用CSS控制INPUT的输入外观不是立体的,而看起来是平板的样子,只有一个边线? 用户注册的问题,密码总验证不对,能不能看看错在哪里? 如何使文本框只显示下面的边框? xsl求助~~~ 怎么将int转为CString 有的论坛采用从数据库得到帖子,有的使用shtml,有的使用xml,孰优???还有其他吗? 100分==在JSP中打开word文件的实例 紧急在线等一个很简单的问题 DTPicker 怎样和数据库绑定? 如何动态改变VB报表中Section中的一个与数据环境绑定的rptTextBox的颜色!(100分求教) datediff()这个函数怎么用哪位高手可否给小弟讲解一下急用在线等 和女友分手了,痛苦! 谁有支持中文的带身份验证和邮件群发的ASP.NET邮件组件? 关于多个表通过相同的字段级联的问题,进来看看,一定给分! windowd server 2003许可证问题 谁有支持中文的带身份验证和邮件群发的ASP.NET邮件组件? 求合作伙伴——推广抗非典病毒的消毒剂!!! 在表分区中,按某个varchar2的字段的值和范围如何分呢 我又來了,不僅你們煩,我更煩. 服务器端与客户端的问题 服务器端与客户端的问题 最后的问题,谢谢帮我看看 发现MS WINDOWS版的C标准库一个在BUG!!!!! 在用VFP操作EXCEL时出现无法用字段内容填充单元格问题,请各位帮忙看看. 算法 救命! 有没有rmi的好例程,一用就灵,急 fast report 和 qreport 到底应该用哪一个???(来者有分!!) 关于“数据结构书”的回应——版主莫删 如何进入另一个对话框 在一字符串中怎样取出某一个字符出现的次数. 急! infopower 2000、 3000、4000 Password?? 自定下载的问题,请教高手 如何屏蔽播放.wav文件但找不到相应.wav文件时发出的默认声音? 如何打开另一个对话框 政治因素对我国军事专家的困扰[ZT] if ((btime==null)&&(etime==null )) 请教 一位女同事辭職,一位男同事說跟我有關,鬱悶中... 请问如何在B/S模式下,在页面上实现,如word,excel中的编辑功能? 如何画一个二元函数的图象 急!高分求教:Epson TM U300微型打印机打印作业丢失问题!(100分) word中如何做浮动窗口或按钮等? 大于255个字符的SQL语句如何来写?在线等待 請大家不要煩這種貼子,我都更煩.我是沒有辦法了 兼职Java软件工程师 这些题有那几题是错的,求正确答案, 甲、乙两数的平均数是45,已知甲、乙两数的比是2:4,甲乙两数分别是多少? 在三角形ABC中,角C=90度,D是BC中点,且角ADC=45度,AD=2,求tanB的值有图的,但还不能传,大概描述下A在C的上面,B在 C的右边,其他的没什么了吧应该听得懂吧~ 求第10题的解答过程,有错的请求正确答案急 有一群小孩,他们中任意5个孩子的年龄之和比50少,所有孩子的年龄子和是202.这群孩子至少有多少人?要写出解题步骤!必写,不然不给分! 在三角形abc中 角c 90度 点d是bc的中点 且角adc 60度 ac等于根3 求tanb的值 日勺念什么字 求两个小孩的年龄两个小孩的年龄分别为X,Y,且X的平方加XY等于99,这两个小孩的年龄各是多少? 在△ABC中,∠C=90°,D是BC的中点,且∠ADC=50°,AD=2.求tanB的值 一辆汽车从甲地开往乙地要10小时,一辆客车从乙地开往甲地要8小时.汽车先开出2小时后,客车再开出小时后与汽车相遇? 有一群小孩,他们中任意5个孩子的年龄之和比50少,所有孩子的年龄之和是202,这群孩子至少有多少?选项里没有22!我也以为是22! 7分之3:6分之5的最简整数比 青蛙如何发声?它的叫声洪亮的原因? 甲,乙两地相距126千米,一辆汽车从甲地开往乙地,行驶了九分之七还多5干米,行驶了多少千米? 团结是胜利的根本是什么意思 青蛙是怎样发声的``青蛙``蜜蜂``蟋蟀``蝉(知了)是怎样发声的`` 已知函数f(x)=sin(2x-π/3)(x∈R),给出如下结论:1、图像关于直线x=5π/12对称;2、图像的一个对称中心是(π/6,0);3、在[0,π/2]上的最大值为(根号3)/2;4、若x1,x2是该函数的两个不同 文汇出版社的寒假生活(高一化学)哪里有卖!最好是徐汇 闵行的 或者上海书城现在是否有 观此可以知画理矣 理的意思 求角bdc=90度-1/2角a, 子曰:“人而不仁,如礼何!人而不仁,如乐何?"我要准备课前三分钟 有关于[子曰:“人而不仁,如礼何!人而不仁,如乐何!”] 的①翻译②重点词 特殊句式③感悟 或 延伸课外之类的没有重点词么重 非知之难,行之为难;非行之难,终之斯难.不要典故,只要意思! (1)角BDC>角A (2)角BDC=角B+角A+角B 子曰:“人而不仁,如礼何?人而不仁,如乐何?” 历史上最大的小行星撞击地球事件是在什么时候?直径有多大?威力有多大?是在寒武纪还是奥陶纪还是其他时候?注意是最大的小行星 如图,△ABC中,角B和角C的外角平分线交于点B,求证角BDC=90度-2分之1角A 丁博士,文汇出版社(封面是紫色无图的) 你怎么看待小行星撞击地球事件? 求帮我写马克思主义的作业最好提前完成. :如图,AD是圆O的直径,过D的切线交BC于点P,连接PO并延长分别交Ac,AB于N,M.求证ON=OM 怎么倒的(X1-X2)+3/X1-3/X2=(X1-x2)[1+3/X1X2] 马克思主义主要写什么? AD是△ABC的外接圆O的直径,过D作圆O的切线交BC于P,连接并延长PO分别交AB、AC于M、N,求证:OM=ON. 若一元二次方程x^2+3x-1=0的两根分别为x1,x2,则x1+x2=-3,x1x2=-1,x1^2+x2^2=? 在△ABC中,CD⊥AB于D,BE⊥AC于E,CD与BE相交于H,且CH=AB,则AE=CE-BH,请说明理由 已知pa,pb是圆o的切线若po=26,ab=24,om<pm,求ap及圆o的半径长 如某方程的两根都在区间(1,4)内那两根有什么限制条件?还有某方程一个根在(-2,0)内,另一个根在(1,3)内...什么叫内?两根又有什么限制条件? 秦始皇陵墓什么时候发掘?期待! 已知集合A=(x^2-ax>=x-a),集合B=(2log2(x-3) 青蛙呱呱叫是由于它的鸣囊在 秦始皇的墓什么时候能挖掘? 求证:如专图——五角星 ∠A+∠B+∠C+∠D+∠E=180° 一辆快客上午8:00从甲地开往乙地,到下午2:00正好走了全程的40%,这时汽车离乙(列式计算.)一辆快客上午8:00从甲地开往乙地,到下午2:00正好走了全程的40%,这时汽车离乙地还有252千米.问 秦始皇的陵墓什么时候才能挖掘 三角形ABC的三条外角平分线所在的直线相交构成三角形DEF,那么三角形DEF的最大角a的取值范围是? 等腰直角三角形,直角边长50cm,另外两角都是45度,求斜边长度 30°,60°,90°角的比是多少?知道一个六十度角的长度该怎么知道九十度和三十度角的长度 设事件A表示"体温高于标准体温",事件B表示"肺部感染"P(B)=0.005,P(A|B)=0.95,P(~A|~B)=0.95.求体温高于标准体温条件下,肺部感染的概率是多少? 一个三角形,已知两角度数,和一条边长,求斜边?一个三角形,已知两角度数30度,60度,和底边长790,求斜边?我想要求斜边的过程,或是公式?? f(x)=|x-1|-|2x+1|画出图像,并求值域过程详细会追加奖励 .意思子曰:“人而不仁,如礼何?人而不仁,如乐何?” 姓项的有多少人 一块长方形小麦地,把它的长和宽各增加5厘米后,这块小麦地的面积增加了105平方米.这时它的周长是多少?·打错了 应该是增加5米 已知x1+x2=m,x1x2=3,x2+x3=2,x2x3=m,求m 马克思列宁有什么著作用什么语言写的?我个人觉得他们都是非常有思想见解独到的人,但不想看他们的思想经过技术改造的中译本,因此想学学他们的语言,看看他们真实的面貌.非常感谢二楼 已知f(x)=log2(1-2x),(1)求f(x)的定义域;(2)求使f(x)>0的x的取值范围. “若溶质为结晶水合物,溶于水后,其溶质的质量就不包括结晶水的质量了”为什么这么说? 这题错在哪,正确答案是: 第十题 求详细过程 a的平方等于30,求a等于多少? 悉尼歌剧院举办40周年庆典活动 丹麦医改网站技术问题百出 奥巴马上教堂也16名沙特女性因驾车挨罚 引集体抗议日岛根县拟出版《独岛问题的百问百答》格陵兰拟向中澳开放铀矿与稀土 仍需丹安倍半年内两访土耳其 拟敲定日核电设近200万澳人靠救济生存 失业家庭被阿根廷妇女因不满邻居抱怨其狗吵闹枪杀日本山口组分会长因涉嫌非法监禁被警方遭俄扣押“绿色和平”组织成员表示处境土耳其\"世界最高男子\"找到真爱 韩国整容手术事故层出不穷 整容共和国墨西哥20岁男子贩毒杀害数十人 墨警潘基文强烈谴责刚果(金)反政府武装袭非正式出口民调:执政联盟候选人胜出格男子把10公斤黄金扔进垃圾场 当地掀世界最高人找到真爱将结婚 两人相差7美将军称驻阿富汗部队将经由俄罗斯领空美国官员:奥巴马早知国安局监听默克尔世界最高人找到真爱将结婚 两人相差7以总理:伊朗有能力在数周内提炼武器级11年了,“哥哥”,我们依旧想念你五星电器小花园店清仓了家电4.8折甩深入调查研究 尊重司法规律冀文林被免去海南省副省长职务流动检务车成服务群众新载体立查10起微企领域职务犯罪案预防前移建设廉洁空管病死猪肉和新鲜肉掺着卖蚌埠“少女被杀案”一审宣判山东铁腕举措换来“一降一升”无证驾车肇事 找人“顶包”被捕案后评查提升公诉案件质量冷静面对历史被害人跳楼,保安有没有责任对民间高利贷定罪需慎重深圳南山:两项举措提高收案效率四川:强化流程监控职责三项措施为深化改革提供司法保障文化短波病患岂能靠“医闹”生财那一场爱情,无关风月
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘