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

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

添加桌面快捷-Delphi资料 统计中英文字个数-Delphi资料 为 应 用 程 序 添 加 口 令-Delphi资料 应用软件加入全面的功能权限控制-Delphi资料 用Delphi编写安装程序 用Delphi实现超级链接 用Delphi实现子目录级的文件查询 用Delphi自制英语复读机 用DEPHI为应用软件建立注册机制-Delphi资料 优化delphi5.0秘籍大曝光 元件的handle的建立-Delphi资料 元件卷动的改进-Delphi资料 在delhpi程序中获取网络资源信息-Delphi资料 在Delphi中操作快捷方式 在DLL中实现文件的拷贝-Delphi资料 在Report Builder中增加自定义函数-Delphi资料 在Win2000 Beta下安装Delphi 在Word插入字符-Delphi资料 注册表中几个对编程特别有用的地方-Delphi资料 资源文件在DELPHI中的使用 自制替换指定串函数-Delphi资料 API函数快速入门API函数简介-VB资料 API函数快速入门怎样在VB中声明和使用API函数 API函数在VB开发中的应用 API函数在VB中的应用 API实现完美的图片出现效果-VB资料 ListView控件特效-VB资料 Office 95 API 的企业开发者指南-VB资料 SENDMESSAGE函数巧应用 -VB资料 VB 与Windows API 讲座(五) VB5 未公开的函数 关于manifest.tmp文件(大侠帮忙!) 请帮我的忙,好吗!!! 系统怎么不是很稳定? 请问一下各位,哪里有可下的lotus 认证教材和试题,多谢多谢!! 寻求控件编写技术下载网址。 谜语:请问CLP和CLS是什么汉语的简写? up有分!★关于《网络编程〉中的问题★:如何设计udp/ip的完成端口模式,udp协议不需要accept.... 关于重定项问题? are there any software in linux, just as netant,office etc in windows? ASP的中文問題 请问:测试工程师的工作是什么?主要测试软件的哪些项目? (100分征集)如何做使得访问JSP服务器时不用加端口号(当然不能用80)?? 菜鸟求助:关于句柄的问题。请高手多多指教 请问什么是存储过程(在SQL 2000SERVER中)? 1000分的大问题!***************怎么突破内存禁区读写的权限 java学什么?怎么学? java学什么?怎么学? 高分急救:Oracle安装完成后,服务可以启动,数据库不与服务一起启动,要手动启动 如何让启动时不自动进入x windows? 下载问题 如何得到CPU的序列号(编程) 向ActiveX控件是否可以传递数组参数 can i read or copy files in windows OS to linux? 什么错误? 将SYBASE数据库移植到SQL SERVER 过程中遇到的问题。急!help session问题 为什么我的web不能进断点? SO_REUSEADDR的疑问 关于web数据库的问题 怎么解??? 再送100分,求jtable例子! 怎样清除在image上画出的线,矩形(在运行时画上去的)?? 寻找在杭州文三路创业大厦11楼上班的朋友 where can i download simsun, and how can i use it? IIS与Apache一起工作,访问Apache时有什么办法不用指定端口? 是不是微软的一个低级漏洞? 谢谢zheng017给你的win2k superuser password的源程序。 在access2000的开发中,text框中如果只输入了空格,用text1.value取数据返回值却是null,如何能够返回空格呢? 强烈推荐:Robocode! 为了全体中国人!请回答我的问题!现在该如何访问google??????????????? =======请大家帮我介绍几个比较好的,LOTUS做的WEB网站。====== 为什么我在 M$ Win2000 使用钩子拦截键盘鼠标消息就那么困难 请问在datagrid里面如何增加记录??? 打算成立程序员单身者协会,欢迎大家发表意见,欢迎加入, snowy_howe请进来接分 邦定问题 高手指点 请问大家如何实现VB导入导出TXT文件(TAB分隔的数据)到数据库中?请具体一点,最好有例子 如何让一个模块在运行过程中中止运行. 请教如何控制目录返回?急!谢谢! 修改const常量问题 压力容器连续排放罐一般采用什么不锈钢?谢谢~ 如图,在恒力f的作用下,物体位移为s,则力f做的功为? A={1,3,5} B={2,4,6} C={1,2,3,4,5,6} 课本中写的是:集合C是由所有属于集合A或属于集合B的元素组成的.课本中还举了的例子:A={x|x是有理数} B={x|x是无理数} C={x|x是实数}(这里有公共元素x的存在,所 二氧化碳气体保护焊机的种类听了两个名词 晶闸管 和 裂变?(逆变) 这是按什么分类的? 如何制作一件小发明 一个元素可以构成集合吗? 等高线山顶分布的特点是:1呈封闭状2呈开放状3海拔高度由内向外增高4以上都不对 保护文化遗产.今年6月9日是我国第二个"文化遗产日".请从"晋祠""云冈石窟"平遥古城"三处文物古迹中任选一处,写一则保护广告.几句就可以. 为什么a,b,c,x,y,z能构成集合?是不是判定某些元素能不能构成集合,只要看它们是不是具有确定性?是不是集合是人定的,可以没有规律? 等高线闭合且由内向外海拔增加的地形叫什么? 在计算变力的功时A = Fdscosθ 这个为什么要 cosθ a,b,c,x,y,z能否构成集合,请指出其元素 在等高线地形图中,等高线呈封闭状态,有外向内海拔增高的地形部位是 对于物理来说,公式W=|F||S|Cosθ,把位移S分解到F的方向上来求功,是正确的,还是错误的 我很纠结啊对于公式,不够分解F还是S,答案是一样的但例如在光滑水平面上用斜向上30度的力拉一木块,常规 从集合A={a,b,c}到集合B={1,2}可以构成多少个映射?可以把它们都写出来吗? 在等高线地形图中,等高线呈封闭状态,由外向内海拔增高的地形部位是( )A.鞍部 B洼地 C山顶 D峭壁. 正常焊接时,电焊条为什么不整根的熔化?过长时间短路,整根焊条都会变红,直到熔化,这时候焊条上的电流是多大?正常焊接时,通过电焊条的电流又是多大?它为什么又不会整根变红了?难道说这 ab≠0,y=a/|a|+b/|b|+c/|c|可能取的值组成的集合是_ 在等高线地形图上,山峰等高线的分布呈_________状,由内向外,_________变小. co2二氧化碳气体保护焊机维修方法不用下载的 麻点怎么去掉抛光 一个物体在大小为10N的力F的作用下产生的位移s的大小为50m,且力F所做的功W=250根号2j,则F与s的夹角为什么是π/4? 1,3丁二烯与溴会有全加成反应吗? 塑料模具抛光化学药水,可以祛除料纹麻点那种配方 是那几种化学元素配置的 PP原料什么型号是防火? 在电焊中电压是起什么作用,电流起什么作用 怎样制作科技小发明 人类要开发和利用海洋,首先必须保护海洋,珍惜海洋资源 用关联词语连成一句话 请教关于电焊的电流和选择问题.我要用电焊的方法焊壁厚2毫米的铁矩形管,焊成一个正方型的外框.请问:用多粗的焊条合适?2.0的还是2.5的?两个规格的焊条焊出来的焊肉大小怎么样?用多大的 科技小发明制作 呼吁人类保护、珍惜海洋资源的公益广告用语 灯泡与开关是什么联?与插座呢? 试叙等高线中山顶、盆地、山谷、山脊陡崖、鞍部的概念 大哥大姐们 我急用 一场文艺演出共有6个演唱节目,4个舞蹈节目,在下面两种情况下,节目单有多少种不同的排法1.第一个是演唱节目,最后一个是舞蹈节目2.某个演唱节目和某个舞蹈节目必须相邻 再生橡胶污染环境吗?有个人说再生橡胶味道很大,严重污染环境,那再生橡胶对环境有危害吗?我国的再生橡胶业也是很发达的 都很影响环境吗? 关于地理五带和等高线的知识我不是太明白,定有重谢!(特别是五带)还有一部分是春分 秋分 冬至日 夏至日. 一个底面长50厘米,宽40厘米的长方形水箱装了一半水,水深12厘米.棱长10厘米的正方体全部浸在水中,水深 再生橡胶怎样调成灰色 现有一个标准直齿圆柱齿轮.模数m=4mm,齿数z1=30.求分度圆直径、齿顶圆直径、齿根圆直径、齿顶高、齿根高、齿全高. 一个底面长50,宽40长方体水箱装了一半水,水深12.把棱长10正方体零件浸没在水里,水箱水深多少?单位是厘米 内孔30度倒角汽齿,一个锥度,知道小头直径和度数怎么算它的长度和大头直径?要公式.有更详细的也发过来 急 初一地理掌握的知识点是哪些 我有18台额定功率1KW的电机和其他电器,总功率大约是25KW,请问要装多大的单相电表?我所有的电器都是220V的,进线只是单相的 请问这个橡胶腿是个什么成型工艺呢?这个是架子鼓凳子下面腿的防滑胶,老师让我们分析下成型工艺.然后想请问下大家橡胶工艺的模压和注塑成型是一样的么?这个腿是个什么工艺呢?有什么 co2气体保护焊机的型号怎么选择? 3000瓦的电器需要多大的电能表 在串联电路中滑动变阻器在哪里时,滑动变阻器消耗的功率最大 二氧化碳气体保护焊机的保险管有什么作用? 什么是沉积岩的层面层面必须是张开的吗,当一段岩芯某一平面两侧一边是砂岩,一边是泥岩,两者胶结紧密,能说这个面是层面吗? 串联电路中,有两个电阻,什么情况下,滑动变阻器的功率最大?滑动变阻器最大电阻大于另一个 M山顶在700米等高线以内,那么山顶的海拔高度可能是(是确切的数字)快点 某校开展文艺活动,组织了歌咏队和舞蹈队.歌咏队的人数是两个队总人数的八分之五.因排练需要,从歌咏队调90人到舞蹈队后,歌咏队与舞蹈队人数的比是2:3.现在两个队各有多少人?急,5点50分 串联电路滑动变阻器的功率问题电源电压恒定,滑动变阻器阻值变小时,其分压越小,电流变大,那其消耗的功率怎么变化? 地质图有等高线,没标高程有办法看吗 某校开展文艺活动,组织了歌咏队和舞蹈队.歌咏队的人数是两个队总人数的5/8.因排练需要,从歌咏队调90人到舞蹈队后,歌咏队与舞蹈队人数的比是2:3.现在两队各有多少人?(算术解) 大头直径48小头直径18长300是什么锥度 请问设计压力小于0.1Mpa的不锈钢压力容器符合什么标准? 某校组织了歌咏队和舞蹈队.歌咏队的人数是两队总数的八分之五.后来从歌咏队调90人到舞蹈队,这时两队人的比是二比三.现在两队各有多少人 知道 图纸上 大头 长度 锥度比 求小头怎么求 大头D=18 长度L=21 锥度比C=1:10 求小d
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘