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

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

集成GemFire,Hadoop生态圈的又一把火 次世代光照体验:Unity 5面世,功能系统全升级 深入浅出,以咖啡店为例演示Web应用程序扩展 百度Clouda:可依赖的实时JavaScript开发框架 Oracle发布Java 8正式版及JDK 8 编程语言中一些令人抓狂的规则 廉颇未老,微软股价创14年新高 中国云计算大会PPT集萃(三):核心架构及应用实践 特性是增多了,但是Google的云服务仍然不温不火 全国云计算大数据创新项目评选活动正式启动 【独家专访】Perl发明者首次来华:将在OSTC大会分享其编程人生 腾讯核心创始人张志东半年后卸任首席技术官 改任终身荣誉顾问和学院讲师 咱们约会吧,Web设计师教你不一样的语言 开发者不容错过的10款免费JavaScript游戏引擎 付费授权、开放源码,全新虚幻引擎4正式发布! Larry Page未来计划:用科技创造美好生活 AWS 8周年,收入超四主要对手之和 分析:北京网络广播电视台私有云实践 腾讯云总经理陈磊分享微信云三步曲 十大技术,十家机构,从行业制高点一览大数据 【OSTC讲师专访】严旭:文艺豆瓣也很开源 大姨吗携手睿仁医疗 推智能体温贴Raiing 三个火枪手将重袭传统零售业 网易王健宗:革命Hadoop,Spark带来百亿市场价值! MediaTek高级总监Chien-Ping Lu:HSA在下一盘大棋 Docker一周岁生日快乐 虚拟现实,正在改变什么? 一周消息树:腾讯CTO张志东离职 未来希望帮技术人成长 又见真人CS:13th Lab推出移动FPS对战平台 前瞻、教育、创业:Maker Faire演讲嘉宾揭晓 提高API采用率的六大方法 NCR-unix下如何修改网卡上绑定的ip地址? 请教一个简单问题,怎么实现象foxmail那样的,在状态栏中留一个图标,单击再恢复? Mmxado错误 oracle问题!!!分数不多,但望高手不吝赐教 RECORDSET对象的UPDATE方法时出现以下错误提示 致斑竹流方,怎样以树形结构列出并打印PBL中所有对象,包括对象中的控件和事件,并标识哪些有脚本? 怎样学习编写VB代码?以及它与ADO数据库之间的连接? 原来holyfire是这的班主! 我最敬佩的人是:playyuer(女㊣爱)! 问一个关于TTreeView控件中树节点所带数据的问题 菜鸟求救:有关DBGrid显示的问题。 当读取1万条记录以上,应怎么做才有高效率? 那想在记事本中实现“查找,”“替换”。。。。要怎么做,我头猛大 有没有按位图画不规则窗口的代码? 怎样得到LISTCTRL的全部列(COLUMN)的信息,难道要用GETCOLUMN()? 为什么现在学win32 API的人这么少? 还是老问题 redhat安装问题,请高手指点 网页中有一文本框,如何约束用户输入格式 现在fanso怎么回事? 安徒生童话之六---老爹做的事总是对的 (呵呵,好故事,很美丽) 如何调用EXE或DLL程序,使被调用程序是调用程序的MDI中的一个子窗口? 《网络设计师教程》P103表5.2中 4B/5B码和4位2进制之间是怎么转换的? COM进程类组件中,在一个接口中加了一个方法,成员变量类型CString,可是不行,那该用什么? 请问那里有 motif toolkit 开发工具下载 一个mysql的问题! 出售软件源代码以及销售权! byte类型的数据如何转化成二进制数,显示给用户(如8-》0000 1000) 代征:精通vc的深圳朋友,精通网络通讯的开发和多媒体处理。 20分求助!这条警告是什么原因呀?怎么解决 ?LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF 局域网的文件共享传输是基于什么协议的? windows and dos ??? 请问大家几个技术问题!!谁能回答阿!比较着急!:) 有没有代替VB里的PICTUREBOX 的控件,VB里的不好用?????????? 我是新手,请问JSP有些什么开发软件?比如JAVA用JBUILDER。。。 请问知道整型值a=97,什么函数可以得到"a"呢?即97->"a"通过什么函数呢? 如何将十进制数转换成二进制数 函数对象的简单问题 喜欢仙剑的朋友请进。:) 恭喜恭喜? 我想制作C++ Builder4工程的安装程序,不知道用什么软件,请大家帮忙。谢谢! 请问大家几个技术问题!!谁能回答阿! 我是ASP初学者,请求一个简单的问题,Help!!! 有没有关于installshield6的书, 快看呀!我真的要不行了! 请教大家一个术语吧! 低手问题,关于Form中的数据问题,谢了。 如何用PictureBox控件显示GIF图?特急!!!!!! 单文档多视(急!) 想学delphi中关于database方面的内容,不晓得哪本书好,大家推荐好吧? “CSDN准备推出海外图书邮购服务,首批是侯捷的著作和译作” 什么时候可以开始? 作文:XXX,谢谢你作文600字左右不要太抒情了 以《我长大了》写一篇作文要求开头、结尾超级好,用上好词比喻、排比句(主要是开头结尾)要高中水品的 用一两句英文概括小短文的中心思想!In 1982,the average wedding cost in cities was 3,600 yuan,but last year,it raised to 6,000.in such cities as Shanghai and Wuhan the average wedding cost will exceed 10,000 yuan soon.A lot of people Spe 我快乐因为我XXX的作文 600字的 作文 【我长大了】 600字 英语翻译亲爱的老师:您好!非常感谢您对我们的辛勤教导!是您给予了我知识,您就像是辛勤的园丁,浇灌着我们这些祖国的娇嫩的花朵.如果没有您的教导,我不知道我能不能在英语考试中取得 作文《xxx的我》(600字以上) 我长大了 作文500字 咋写? 英语翻译三年时光,说长不长.即将在这半年里分道扬镳的我们,因为友谊而显得不愿离去.记得那时初一的我们,会对初三的毕业生即将自由而羡慕;而现在终于成为毕业生的我们,才明白那时我 求那一次,我XXX的作文,500~600字. 那时,我长大了 作文600字,明天要交,要贴近生活, 英语翻译我在百度搜不出来啊,因为英文都是有空格的,一搜就是只搜出来有个别单词的文本。我想有没有更好的方法啊? 作文 我的生活充满xxx 600字初中水平的作文 ,我的生活充满xxx ,6oo字,后天要用 未来的房子作文 英语翻译下面几段文字,请尽可能的使用手动翻译!翻译的好,可以追加分数航空界最有威望的Teal公司预测,今后10年,全球对公务机的需求量将达9000架,总价值约944亿美元,而中国是最具潜力的市 我喜欢Xxx作文 未来的房子 作文400字 初二英语80词左右作文 xxx真忙作文比如妈妈真忙 快 明天要用 好的加分 未来的房子 想象作文500字 初二英语短文 80词左右请根据说给表格内容写一篇80词左右的英语短文,介绍一下你今年春天旅游的情况旅游时间:4月20日至4月底旅游地点,交通工具,逗留时间:南京 乘火车 2天上海 乘汽车 3 “我真xxx”作文怎么写?急 怎样写未来的房子的作文? 初二英语作文:礼物 80词what is the best gift youhowe everveceived?how gowe it to you?when did she or he gave it to you?what do you think of it?急用 我真的很xxx作文 未来的房子作文300字未来的房子作文300字急 明天交 英语的主要内容Thw Hound of the Baskervilles(巴斯克维尔猎犬)Gullover's travels(格列佛游记)主要内容,500词,注意是英语的. 关于 XXX 我想对你说 作文 英语翻译Last Wednesday,Sandy and I bought a new kite and big ball of string.It was very windy so we flew our kite in the park.The wind blew hard and our kite flew very high and very well.Then the string broke.We both tried to get the string.We ra 求两篇英语文章及主要内容,做英语作业用,只要给出主要内容与好词好句好段落就行了.最好是比较长的文章……而且只需要故事概述和好词好句就行 《xxx我想对你说》作文 如何概括英语文章的只要内容 求3个名著主要内容作文!求3个名著主要内容:《朝花夕拾》的主要内容,《钢铁是怎样炼成的》的主要内容,《骆驼祥子》的主要内容,每个400字,感激不尽 xxx我想对你说的作文 《就英法联军远征中国给巴特勒上尉的信》的主要内容梗概~快快帮我,一个小时内~ 求关于信用卡的英文文献或著作要求:作者、年份、部分摘要或主题 我心中的桃花源 作文600字左右 中学生水平 第二次_____、十五岁,我多了一分______均不少于500字.我不管是不是网上的. 《就英法联军远征中国给巴特勒上尉的信》中心思想 xxx我想对你说作文注意题材要新颖,不要那种妈妈啊,老师啊,之类的我想对你说,太俗不可耐了.注意一定要新颖啊! 假如我会变 明天就要交了,300字以上,写好点,只写1样,这样的300字 《就英法联军远征中国给巴特勒上尉的信》主要内容 XXX 我想对你说的作文 谁有初一的2篇15句的英语短文 要求关于春节的 就英法联军远征中国给巴特勒上尉的信 背景求雨果写这封信时有关雨果和圆明园的历史背景越详细越好 以再见xxx为题,写一篇700字的作文, 谁有展望未来2(第8课到第15课的课文文章)答的好我有高分的.有多少要多少 就英法联军远征中国给巴特勒上尉的信 的主要内容 作文,再见了xxx(缺点)半命题作文,急撒,一定要是缺点,比如说骄傲、好玩等等,最好写好玩,我挺好玩的 求英语小短文.速度.以next weekend 为题,写一篇小作文,十句话就好.关键字为周六goshopping、do my homework 、do housework,周日read a magazine and any books。 英语翻译When 12-year-old Helen received & lot of money on her birthday* she knew exactly* what she wanted to buy:a pair of LuluLemon trousers that her mom wouldn't buy because they were too expensive."We went to the store together,51 Helenas mom, 我要一篇名叫《XXX,请别这样做》的作文. 求英语语文作文...八篇60字的初中英语日记..2篇语文读后感 2篇作文600字.. 英语翻译 Alan Chang was a handsome young man with good manners.  One morning he was walking along a street on his way to an appointment.He did not want to be early or late.He had forgotten to put on his watch so he went up to a man who was 写一篇XXX我想对你说的作文范文就行,只是参考下 阅读短文.英语.If you have no special plans for your holidays,why not spend your time helping others?Some people say that the young people today only think of themselves.But it’s not true.More and more young people in the U.S.A.volunteer(自 这篇英语文章主要讲什么?用一两句话概括.Just the mention of the TOEFL,GRE and GAMT exams brings a thought of long hours of dull paper work.But that idea is becoming increasingly out of date.As planned,computerized tests will begin nex 写一篇作文《我的同学XXX》急~描写这位同学很胖,然后发生的一系列事.请不要发类似这样的回答.“自己写····”如果发这样的回答的人.请离开.我不是投机取巧。我是收集几篇好的作文。 如何才能速度背英语短文? 用一两句英文概括小短文的中心思想!First,both are small rural communities.My hometown has a population of only about 10,000 People.Similarly,my college town consists of obout 11,000 people.A second way in which these Two towns are sinil
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn