`
wjlgryx
  • 浏览: 297876 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

“测试是浪费时间,我的程序肯定没问题”

阅读更多
本文是从 Testing is waste of time, I know that my code works 这篇文章翻译而来。

尽管关于测试驱动开发(TDD)的书和文章有成百上千之多,仍然有很多人从未感受过测试的强大力量。

之所以不愿意去写测试程序不外乎有以下几个理由:

太费时间。
不值得。
我很懒。
我不知道如何做。
我知道我的程序好用,我运行过一次,没出问题。
我是超人,我从来不犯错误。
除非你的答案是6.(如果是这样,我很羡慕你),否则,你应该继续读下去。

让我们从一个简单的例子开始。就说你要写一个Email地址校验程序。

你也许会使用正则表达式,或手工实现每个字符的对比,来完成这个任务。

现在你想验证一下你的代码是否有效。你会怎么做?你可以手工输入不同的值来验证它是否符合你的要求,结果你就测试了像下面的这些东西:

foo
foo@bar
foo@bar.baz
...
如果你要改变/调整校验算法会发生什么?你需要把之前所有的过程全部重复一遍,把每个值都再输入一遍,看看校验的结果。如果让计算机自动的帮你校验这些是不是会更好些呢?

通过把测试过程自动化,你可以在任何时候对程序进行任何遍次的测试。这不仅仅在以后会节省你大量的时间,而且会增加你的自信心,因为每次当你感觉到程序可能出错时,只要运行一下你的测试程序,看看测试结果就行了。

现在设想一下你正在编写一个更加复杂的程序,比如XML解析器。

你不可能编写出解析器后不去测试它,问题是,你如何测试它?通常,你会创建一个XML样板文件,把它输入解析器里,手工检查解析的结果。当你看到解析器按照要求输出了你期望的结果后,你确信你完成了任务,解析器没问题。

问题就在于如果你发现了一个Bug。那你就需要去修改你的代码,再验证一次它是否好用。可是我们程序员都是一群懒人,我们会只测试我们遇到的这个Bug,几乎从来不会去测试解析器的其它部分。这会产生什么问题呢?你能确保没有把什么东西改坏?

当你写了单元测试程序后,这个工作流程会变的怎样?

首先,你已经对程序进行过测试,之前你必须对每个函数进行手工的测试,手工的检查输出结果。如果这种事情你只需要做一次,那也没什么了,但当有东西出错时,你不想一遍一遍的重复做这个事情,没有人喜欢来回重复的做相同的事情,特别是无聊的事情。

另一种情况,你为你的解析器里的每个功能都写了自动测试程序。在这个例子中,你已经测试过你的程序,对这个过程你并不陌生。你需要做的是把手工的检查改为assertions,它们会为你自动测试程序。

当Bug出现时,巨大的变化发生了。

如果没有自动化测试,你必须手工的检查所有的东西来确保你在修正一个Bug时不会引入其它的错误。当有数个Bug出现时,你会变得极不耐烦,你开始不再检查其它部分的代码,只关注你的这个Bug。但假如你为程序写好了自动化测试,你唯一要做的就是点击一次按钮,让所有的测试程序运行起来,你马上就能看到测试结果,几乎不需要在其它任何事情。

当有了测试程序后,修改Bug是怎样进行的?

首先,你需要重现这个Bug。无论如何,在你修改前,你必须要认定这个Bug是否真实的存在。如何做到这些?你要写出一个测试用例来重现这个bug,这个必须要在你做任何的修改这个bug的工作之前完成。

如果这个bug不能重现,问题就可能出自其它地方,如果不能用自动化测试来重现这个bug,你可能在错误的地方修改了这个bug,很可能改坏了你的程序。当你写出测试程序,你必须先运行它确保它会失败。如果测试没有失败,什么地方可能出了问题,你没能正确的重现它。

当你修改了这个Bug,你也有了针对它的测试程序,你可以立即发现这个bug是否还会出现。

当你这时又发现另外一个bug时该怎么做?

相同的做法。写一个测试程序,重现这个bug。即使你没有时间来立即修正这个bug或者这不是个致命的bug,你也应该有个能够让它重现的测试程序,当日后你回来解决这个问题时,你就能知道该做什么了。
分享到:
评论

相关推荐

    做软件测试是浪费时间吗?

     我知道我的程序好用,我运行过一次,没出问题。  我是超人,我从来不犯错误。  除非你的答案是6.(如果是这样,我很羡慕你),否则,你应该继续读下去。  让我们从一个简单的例子开始。就说你要写一个Email地址...

    TQ2440下keil测试程序

    把标题定为教程实在是我自夸了点, 其实应该算是我学习的总结吧, 写份文档, 自己以后忘了也有个参考, 又可以帮助和我卡在同一个问题的新手, 其实我也是新手, 新手教新手, 不知道会不会误导大家了... 一. 简单原理介绍...

    STM32G474VET6 + FM25V01A-G + Keil

    这是我的一个测试程序,使用STM32CubeMX做的初始化,然后使用Keil5 做的调试,初次使用,勉强实现功能,可能会有些问题,仅作参考。FM25V01.c 是本例程的重点,其他的是我之前的一些其他外设的测试内容。有Flash读写...

    translate-wechat-mini-program-master-百度翻译api实现微信翻译小程序.zip

    })注意这个函数的url必须是https,这是除了看文档之外我花费时间最多的地方接上面讲https这个真的浪费我很多时间,我的后端是在我的腾讯云服务器使用nodejs语言搭建的server,因为小程序必须的request的url必须是...

    FPGA核心转接板(原理图、PCB源文件、测试程序)-电路方案

    3、所有元器件焊接好后,上电,下载测试程序,下载成功,就是不跑,纳闷了,以为是FPGA被我用热风枪吹坏了,着急,以为是程序写错了,一直改,还是不行。后来就找硬件上的问题,一直找,找到有源晶振,测试其振幅才...

    N点虚拟主机管理系统商业版_主控端2013.10

    官方还不提供下载,只有购买才能下载,官方根本没有技术团队,就一个人,程序问题一大顿,出了问题根本没人解决;本人购买后,安装完,做了下测试,马上就后悔了。不该买;浪费钱(599元)。;电话咨询要不是技术不在...

    C语言FAQ 常见问题列表

    o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式? o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? ...

    《你必须知道的495个C语言问题》

    1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 15 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我的编译器不允许我定义大数...

    你必须知道的495个C语言问题

    1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 1.29 为什么我的编译器不允许我定义大数组,如...

    N点虚拟主机管理系统商业版_被控端2013.10

    官方还不提供下载,只有购买才能下载,官方根本没有技术团队,就一个人,程序问题一大顿,出了问题根本没人解决;本人购买后,安装完,做了下测试,马上就后悔了。不该买;浪费钱(599元)。;电话咨询要不就是技术不...

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

    华为编程开发规范与案例

    近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,把收到的数据在BAM上打印出来, 结果打印出来的...

    你必须知道的495个C语言问题(PDF)

    2.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外 部数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域 的对齐方式? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11...

    JAVA自学之路

    经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点...

    url编解码 汇编版源码

     另外如果你有啥好的算法, 想翻译为汇编的, 欢迎跟帖, 贴出算法, 我会抽时间帮你们怼一怼。 再者贴出的代码限 C/C++ 易语言 或 php。 那样无法提升多少速度的代码,就别发了,转汇编纯粹浪费时间。没有多大的...

    电脑变慢de完全解决方案.

     虽然微软声称Windows操作系统可以安装1000~1500种字体,但实际上当你安装的字体超过500种时,就会出现问题,比如:字体从应用程序的字体列表中消失以及Windows的启动速度大幅下降。在此建议最好将用不到或者不...

    软件病毒特征码定位软件multiCCL

    感谢您的测试,使用中请保留软件文档的完整,发现任何问题请到NE365的BBS上反馈。 ;(借用一下NE365的空间 http://vxer.cn/bbs ,一并致谢NE365 ;及各位网友的帮助和测试 ,大家多多支持NE365吧) ; ;特别说明:...

Global site tag (gtag.js) - Google Analytics