开发秘籍——单元测试的迷惑与思考

迷思1:单元测试使得更改变得更加困难

事实却是相反的。进行单元测试的最大优点之一就是能够对代码进行大型修改,然后立即对所做更改进行正确性测试。进行代码修改,后来蔡意识到软件的其他部分受到了影响,接下来试图隔离出引起问题的代码,这不单单使得代码的更改更加困难,也让开发人员恐惧更改代码。

事实是:单元测试使得代码更改更加容易,而且也让开发人员毫无顾虑地修改代码。一遍,两遍等等。能对代码修改是人们选择进行单元测试的最大的理由之一。

迷思2 :单元测试减慢了开发过程

进行单元测试一开始会让开发过程慢一点,然而事实是这么做反而节省了时间:它在开发过程继续进行之前就防止了错误,并识别出错误出现的地方。而 且 单元测试也使得开发人员对自己已经完成的工作更加有信心,这样就会扫清开发过程中出现的障碍。纵观整个开发过程,进行单元测试最终会使得总体花费时间 会更 短。

事实是:像任何一种新工具一样,习惯进行单元测试也需要一点时间,不过,总的来说,进行单元测试可以节省时间,同时浪费的时间也会缩短。实际 上, 进行回归测试可以持续不断地推进开发过程,并且不会有任何担心。假若在日常构建时进行单元测试,那么这样的测试是不会占用开发时间的。

迷思3:单元测试让开发人员远离代码

这是很显然的误解。正是开发人员才能帮助设计测试程序。这就意味着开发人员需要更加深入的了解代码功能,而且要对整个程序中的更小单元的功能负更多地责任。在我们查看整个程序的时候,有时候很容易忽视函数和过程,然而,有了单元测试,我们就不会对函数和过程视而不见了。

事实是:与其他方法相比,单元测试要求开发人员不仅仅要看得懂代码和代码的意图,而且要明了各种测试条件,输入和输出,这样就可以测试出在其他测试条件下可能未测出的功能。正是进行了单元测试,我们才会更加关注函数和过程。

迷思4:单元测试使得文档编写更加困难

单元测试不但不会使文档的编写更加困难,而且会让文档的编写更加细致,这不是坏事。没有人真正喜欢编写文档,不过单元测试使得编写文档不再那么费劲。开发人员发现在进行单元测试的时候编写文档会更加容易一些,此时编写文档是对单元测试中各个过程和函数的反思。

事实是:可以把单元测试的结构和划分重复应用到问答给你编写中,这样你将不仅仅可以编写出更高质量的文档,而且编写文档会更加容易,更加舒服了。有一些开发人员把产品的蓝图做为创建单元测试的启发点,同样可以把他们看作编写文档的框架。

迷思5:一旦项目结束,那么投入到单元测试上的工作就废掉了

完全不是这样的。如果你曾经重用过代码,那么你将会意识到你所做的一切都是资产。
事实是:在你在一个项目中采用了以前为另一个项目写的代码,或者对这段代码进行编辑的时候,你可以采用相同的单元测试,也可以对这些单元测试进行编辑。在同一个项目中使用相似的测试代码段也是没有问题的。

迷思6:单元测试就是浪费时间

你要弄明白什么才是浪费时间?

  • 一而再再而三地修改同样的漏洞
  • 在整个开发过程中编写或者重写验证代码
  • 修补了一个漏洞,不料在其他地方莫名其妙地出现另一个漏洞
  • 在编写代码期间被意外打断,完全不知道该怎么办

拒绝进行单元测试是可以理解的,不过许多开发人员只有在使用单元测试完成一个项目以后,他们才会称赞单元测试多么的好。

事实是:你只需编写单元测试一次,但可多次运行。这与你对其他代码的修改没有任何关系。一开始进行的投入会得到长期的回报。

迷思7:这段代码已经非常简单了,为什么还要编写测试代码呢?

代码似乎很简单,然而直到出现问题的时候,此时事情就不再那么简单了。编写单元测试,甚至为简单代码编写单元测试,毫无疑问可以增加项目的稳定性和安全性。

事实是:简单的代码需要简单地测试,不要找什么借口。

迷思8:只有在许多人进行开发的时候才需要进行单元测试

在有许多开发人员进行开发的时候进行单元测试是一个很好的策略。然而由于只有一个开发人员而不进行单元测试则显然是个错误。在许多开发人员开发时进行单元测试所能带来的要好处也适宜于单个开发人员。

事实是:单元测试对一个人组成的团队的帮助同队50个人组成的团队一样多。而且从资产保护的角度看,让单个人掌握所有的东西甚至会冒更大的风险。

迷思9:单元测试对程序调试没有任何帮助,或者说不能防止漏洞的出现

绝对不是这样的。单元测试可以让程序调试更加简单,因为这样你就可以把精力集中在有问题的代码上,修补问题,接着再重新合并修改后代码。在增加 功 能的时候,它还可以防止引入漏洞,尤其在使用面向对象方法编程的时候,它还可以阻止问题令人非常沮丧地反复出现。单元测试不能确保100%的排除漏 洞,不 过它却是减少漏洞的好方法。

事实是:单元测试虽然不能解决你调试过程中遇到的所有问题,但是在你发现漏洞的时候,单元测试中相互隔离的代码可以让漏洞的修补更加容易。根据开发人员中单元测试的铁杆粉丝所说,进行单元测试的最大好处就是让程序的调试非常容易了,简单了。

迷思10:单元测试让你采用的编码方式有重大改变

编码方式有重大改变?是的。编码方式更好了?是的。哪些非常依赖全局变量和单例模式进行编程的开发人员发现他们编写的代码是紧耦合的。如果要对 代 码进行测试,那么代码必须与数据是松耦合的,单例模式不适合这种场合。大多数情况下,使用全局变量和单例模式的编码不是最好的。如果测试是开发人员为 了追 求更好的编码方式而作更改的原因,那么为什么不这么做呢。

事实是:使用单例模式最大的好处就是它解决了资源竞争问题,这种情况可能你极少遇到,比如进行日志处理的时候。在其他情况下,单例模式编程只是一种老的编程习惯,益处非常少,而且会让代码的测试极度困难。

迷思11:使用单元测试进行程序调试覆盖不全面

这仅仅是因为你不能对整个代码进行调试,但这并不意味着调试覆盖不全面。使用单元测试进行程序调试至少比其他类型的调试效果好。事实上,单元测 试 有一个非常突出的优点是:(如果不是大大地删除,那么就是)大大地减少汇报上面我所提到的漏洞的数量。在开发和调试程序的时候,重现漏洞是一个令人非 常沮 丧的事情。通过单元测试,你可以在增加、修改和删除功能的时候减少引入新漏洞的频率。调试从来都是“全覆盖的”,尤其是在程序运行的设备或者系统差 异非常 大的时候。

事实是:特别是在处理漏洞的时候,单元测试可以确保能找到从来都没有汇报过的漏洞。而且在你进行程序调试的时候,你不需要查看全部代码,只需要修改出现漏洞的地方。

迷思12:单元测试增加了开发费用

能让最优秀的开发人员落泪的事情是进行代码更改。项目经理,总经理(CEO),财务总监(CFO)和其他高级管理人员为了让项目盈利,他们说出 自 己的想法,然后算出后期的开发费用。在你为了盈利而付出实实在在的努力的情况下,管理人员却要求立即进行大的修改或者决定抛弃这几个月的工作,因为他 们发 现这个功能没有什么市场。管理人员想让一个产品真正的赚钱,那么有时候这就意味着要进行大型修改或者要快速地进行大量的工作重心的转移。

事实是:通过降低进行大型修改的难度,开发人员可以更灵活地满足产品需求,这也会增加产品经济上成功的机会。编写可无缺陷运行且优美的代码是令人钦佩的,更好的情况是它能获得经济上的回报。

虽然对单元测试有许多误解,但是对软件的测试依然受到高度关注。这里罗列了单元测试的12个迷思和对应的事实;希望你能以这些事实为鉴,以便以后能够更有效地进行单元测试。

更多新体验,欢迎试用ParasoftPRQA旗下的各种测试工具。另外还有5折限时抢购免费领iPhone?6、iPad?air等好礼!

时间: 2024-07-28 19:12:21

开发秘籍——单元测试的迷惑与思考的相关文章

Kinect 开发 —— 用户交互设计的若干思考

Metro 风格 windows 8 Kinect Hub 手势原型设计 悬停选择     翻页控制 关节点重叠的处理方法 将箭靶设置在画面的边缘,这样玩家持弓的角度与屏幕保持一个大约45度的锐角,这样Kinect可以很精确的检测到拉弓射箭的动作 手势天生具有一定随意性,而且具有一定的文化背景差异性   手与设备的非接触性 虚拟触摸的界面 Kinect 使交互"柔软化"   确认操作保持简单一致 悬停选择 -- 将手停在想要选择的项目方块或按钮上,等待进度圆圈的填充,这个过程会在T时间

[转载]HTML5游戏前端开发秘籍

http://isux.tencent.com/html5-game-development-cheats.html 转载至腾讯ISUX HTML5游戏前端开发秘籍 本文由米随随编写 QQ空间Android版4.2和4.5上线的玩吧游戏“空间疯狂套牛”是一款使用HTML5开发出的手机游戏,虽然还有很多不足,但其中使用的一些技术与技巧还是很有必要为大家分享出来,方便大家用秘籍打通各种关卡创造出更多更好的HTML5游戏.(本秘籍主要讲述使用HTML + CSS技术方面) 一.自适应 Android手

IOS开发之学习《AV Foundation 开发秘籍》

敲了这么久的代码,查阅了很多资料,都是网络电子版的,而且时间久了眼睛也累了,还不如看一下纸质的书籍,让眼睛休息休息. 本篇开始学习<AV Foundation 开发秘籍>,并记录对自己本人有用的一些笔记. 注意哦,有些本人觉得很熟悉的知识可能不会记录哦. 1.在Demo:"HelloAVF_Final"中,用了THSpeechController来管理语音播放的一些对象和处理它们的属性设置以及它们之间的逻辑. 并对外提供简单的接口给THViewController使用,这个

Android开发中单元测试的两种方式

Android开发中单元测试的两种方式 一位优秀的程序员也同样不能保证自己的程序没有bug,因此编写合适的测试程序是完全有必要的,这样也会降低程序在后期出现各种奇奇怪怪bug的可能,降低维护成本,未雨绸缪将bug扼杀在摇篮之中. 看到网上有很多依旧用写java单元测试的方式在写android程序的单元测试程序--junit,当然我一直都反感将不合时宜的东西强搬到新的技术应用以获取一席之地的这种做法,不断的应用新的方法提高效率,完善程序才是真理!废话不多说,直接说到今天的重点:Android开发中

Android开发之单元测试(一)

Android开发之单元测试(一) 请尊重他人的劳动成果,转载请注明出处 : Android开发之单元测试(一) http://blog.csdn.net/fengyuzhengfan/article/details/40209995 在实际开发中,开发android软件的过程需要不断地进行测试.进行Android单元测试是正规Android开发的必经步骤.单元测试可以嵌入到项目中:也可以作为一个单独的项目针对某个具体项目进行测试. 1.   Android单元测试框架的层次结构 从上图可以看出

Angular JS开发秘籍——互动出版网

这篇是计算机类的优质预售推荐>>>><Angular JS开发秘籍> 使用AngularJS革新MVC方式实现精彩的Web应用,扩展 HTML的AngularJS指令,20多年企业应用和Web界面开发经验作者Brad Dayley 最新作品 内容简介 快速掌握AngularJS Web开发技术 AngularJS是Web开发领域最激动人心的创新技术之一,它为整个开发过程提供结构,旨在简化Web应用的开发和测试. 网站已不再是简单的静态内容--相反,网站更趋动态化,通常单

AV Foundation 开发秘籍--实践掌握iOS &amp; OS X应用的视听处理技术——互动出版网

这篇是计算机类的优质预售推荐>>>><AV Foundation 开发秘籍--实践掌握iOS & OS X应用的视听处理技术> 国内首本译著AV Foundation图书,书中源码及素材免费提供下载 内容简介 快速掌握使用AV Foundation开发iOS和OS X应用的技术如果想开发富媒体iOS或OS X应用程序,你可以使用苹果公司推出的AV Foundation框架来实现诸多神奇功能.不过AV Foundation框架基于最前沿的语言特征,极其庞大,而且相

你苦苦等待的轨迹纠偏地图定制开发秘籍到货啦,请查收!

你苦苦等待的轨迹纠偏地图定制开发秘籍到货啦,请查收! 这一次不用苦苦寻找,北京秀友科技高级研发工程师开课啦!一系列的<我秀中国大讲堂>,将带给你完整的开发大神带路指南.. 第一期要讲的就是"为你解读轨迹纠偏之鬼斧神工",我秀中国会以视频直播的方式为大家讲解,直播时间是2017年5月11日(星期四)晚上20:00,也就是明天晚上,快叫上小伙伴一起来围观吧! 除了丰富多汁的地图开发知识福利,我秀中国还准备了价值288元的大礼包等你拿!参与视频直播并与讲师积极互动,就有机会被小秀

用Swift语言做App开发之单元测试

作为一个有质量保障的应用程序,当然少不了单元测试:Swift开发的App也亦如此,此文将以一个简单的实例来介绍Swift中的单元测试. 这里我们使用XCode模版自带的XCTest框架,此框架包含了一个名为XCTestCase的类,所有的测试类都应该继承自它:按照约定俗成所有的测试方法名都应以test开头,并不能包含任何参数,只有这样,这些测试方法才能在运行测试时被自动执行:在每个测试方法里面,我们可以通过调用XCTAssert*函数去断言一个操作成功与否,如判等函数XCTAssertEqual