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

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

【征文】Java二十周年特别策划——谈谈我与Java的那些年、这些事 Facebook的愿景以及虚拟现实的未来 iBeacons一年回顾 英特尔中国30周年之际 IDF上你需要了解的5件事 OpenCloud 2015参会者的三大特征(附列表) 友盟移动互联网趋势报告解读:垂直领域应用竞争白热化 墨腾动漫CTO吴建学:初创公司的生存之道 亿航与高德达成战略合作 LBS+引爆智能硬件软实力 《近匠》火柴手写码,输不错的验证码利器 Web、App中添加动效设计应遵循的12条原则 越狱与开源:2015移动安全峰会(MSS)纪实 开发者自白:我是如何不花一分钱收获230万应用下载量的! OpenCloud 2015报名超预期 近20位讲师会前采访提前看 硅谷公司人才招聘那些事儿——硅谷“超级面试官”董飞专访 一切为了用户体验:揭秘京东首页改版背后的故事 TIOBE 2015年4月编程语言排行榜:Java王者归来 三大主题技术峰会开幕在即 OpenCloud 2015参会者提醒 《近匠》快码,唯快不破的代码众包平台 打破边界 生态化反!乐视发布三款超级手机 苹果收购LinX:iPhone或将采用双摄像头技术 Google《Android性能优化》学习笔记 Amaze UI 2.3.0版本发布 整合多个第三方插件 专访Layabox创始人谢成鸿:Flash与HTML5结合的背后 高德推“LBS+”开放平台战略 整合位置大数据和云计算 CLion 1.0发布,C/C++跨平台集成开发环境 2015超实用的前端开发指南 期待吗?Linux 4.1将引入大量汇编代码变更! TSMC量产16FF+制程,Apple Watch或将采用Finfet技术 谷歌搜索引擎更新 移动端支持不好的网站排名将受影响 《近匠》格知GUECHI,设计师品牌让你离时尚更近 Apple Watch应用开发经验谈:我遇到的那些坑 有谁知道如何用VB执行类似网页POST操作? 如何用API取得windows的Company名称? ATL编写自定义属性页!!! 关于在sql 语句中 格式输出字段的内容………… 有对JSP标签库熟悉的吗? 关于delete的非法操作!! 关于COM程序 LInkError处理! 急。。。。关于xml解析器安装的问题 关于在 servlet 中,service 以及 doGet、doPost应用的问题?!------------请进:) 怎样得到用odbc创建的数据库类型信息 使用AfxBeginThread,将一个类CDownload down作为参数传递给线程,该怎么传递和接受参数??? 如何判断用户关闭了浏览器窗口还是转入了其他地址,或者刷新了页面? 大家谁作过数据导入导出的程序阿,能不能给点指点阿!急!!!! 新手求救:如何发布一个用JAVA/JSP/SQL SERVER开发的系统!!! SQL里update的使用问题 今天辞职,散分散分散分! 我form中一select中的option被选中,在提交后,如何用javascript来保存选中的那个option 怎样调用约定为CDECL的DLL? 弹出菜单的位置问题,简单,快进 LINUX下的虚拟主机的问题 用过网上的G711-G721-G723代码做语音压缩的请进,高分 在98上安装了apache+php+mysql,让用287端口测试,287端口是什么 字体设置, LogFont的lfFaceName... 关于随机 新手问题 如何动态改变 RichEdit 中的字体?很急! !!!怎样把stringgrid中已经选择得数据读出来!!!! 我该学些什么? CObject类是MFC类吗? 请问除了http://java.sun.com/j2se/1.4/download.html外,哪里还有jdk1.4下载? 有没有兄弟做过关于DSP与PC的并行通信? 请教接口查询的问题 如何清空表中的全部记录? 我是一个vb 的初学者,请大家介绍一两本好的关于数据库开发的书! 《Delphi淡手辑略 之 数据库篇》:数据安全保存(函数) DB2 store procedure Easy_Problem!!!关于对话框!!! weblogic下调用java bean出了点问题 (苯苯) 如何在两地用netmeeting通信,共享信息,两方为win98和win2000server,使用modem连接 tomcat 如何与 jboss 进行集成 Regular DLL中向导生成的winapp对象有什么用? 关于Install shield 的问题 一个高难度问题,特急! 从一个页的Button事件中如何获取在iframe中另一页中选种checkbox的值? 大家一起来帮帮我 我是个新手请教如何在98下安装和设置apache,尽是详细些,最好给介绍些资料 高手请教,有关类的链表指针 如何定义日期类型? 请教高手!如何执行带条件SQL语句? 大家一起来为c#加油阿 追女教训谈 数学记号 n!是什么意思 论点、论据和论证是什么意思? 谢谢!~ 写出下列乐普表示力度的符号:中弱.中强.强.渐弱.渐强.弱 角速度有方向吗 半径R,求其位置矢量,加速度(用i,j表示) 歌曲的名字做网名,带符号和配套的签名 我喜欢陈翔、许嵩、胡歌的歌 角速度的方向是怎样的? 2.3.4 写词语:两个字意思相近词语:两个字意思相反 请问角速度的方向是什么?为什么是这个方向?RT 三顾茅庐和初出茅庐这两个词的意思是什么?以有一人回答,但他回答的是故事,告诉大家;我要得是它们的意思啊~ 交集的符号 角速度的方向有什么意义?是不是只有圆周运动才有角速度? 急需-邀请客人意思的古诗词-谢谢 交集和并集的符号 求作文{开学第一个月的感想与总结}如题 用约组词,意思是约请和邀请约请,邀请( )俭省( 节约 ) 求并集和交集的符号及其含义 像(代替)—(替代)这样的词语,急 求大师啊 有没有会做化学的 会做的 根据意思写词语(1)形容非常害怕,脸色都变了;(2)形容多次呼唤;(3)形容很规矩,很庄重. 像代替——替代这样的词写5个作业.作业,交换后意思不变。求求了!!! 求化学高手!先到给好评! 求论据 论点:有志者事竟成 什么词可替换 权且 求化学高手,空的题,快给好评 谁有描写三顾茅庐的诗句(帮我找找)比如”三顾频烦天下计,两朝开济老臣心. 杜甫写的(蜀相)”诸如此类 英语翻译这句话:Life is simple,you make a choice,don't look back.不要在谷歌上搞的那个,那个我总觉得翻译的太生硬了. 请求化学大师帮我填上必有好评谢谢 成心成意,一在邀请(换成词语) 设{an}是等差数列{bn}是各项都是正数的等比数列且a1=b1=2,a3+b5=36,a5+b3=14求(1)数列{an}{bn}的通项公式(2)数列{an|bn}的前n项和Tn急!!!!!!!!!!!!!!!!!!!!!!! 有关乐观的论点,论证和论据论点,论证和论据都要 全一点吧 三顾茅庐里的好词好句 谁能给我一篇关于开学的文章,400至500字,要实际一点的.(六年级)急需急需急需,要快,今天下午5点之前要有答案 找出 论据 论证 论点一个人的无知感来自他的有知.古希腊哲学家捷诺在地上画了一小一大两个圆圈,分别代表学生和自己的知识,说:“大圈和小圈以外是你我无知的部分,我接触无知的部分比 用简短语言概括!不要超过100字 己字有几种组法? 谈理想的论点论证论据 邀请知名人士应该用什么词语 就是有个什么“——时”的词语 开学感想作文600字 匀速圆周运动的角速度是矢量吗?方向怎么样?怎么证明 在 三顾茅庐 中,轻轻敲门 这个词语中感受到什么? 求大师快速解答 为什么匀速圆周运动中角速度的方向保持不变?方向在哪?怎么确定? 赤壁赋 翻译 快,大师来解答, 第三秒内是几秒到几秒? 我是2012年海南的考生,今年大概是这样!语文100,英语100,换算分大概多少具体点 诗句大师, 大师速来36和48的最大公数是几? 我总分442.2语文119.5等级B数学137——A英语136——A化学19.4——A物理19——A 其他都是A能考上永定一中吗 求大师解答给 好评 大师速来啊等边三角形的边长是素数,它的周长是什么数? 前两个字意思相反的词 如哭笑不得 求大师详解 完形填空题!要准确的哈! 每个词中两个字的意思相反 请人写《开学了》 《放假了》 感想作文2篇 300字左右!额···我自己想 那我还发什么贴啊.就是不想自己想大哥 - - 说了跟白说一样. 什么是论点、论据、论证? 已知等差数列{An}的公差d为1/2,A1+A3+A5+、、、A97+A99=60,则A2+A4+A6+'''A96+A98+A100等于多少?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘