联系我:新浪微博@阳光下的云朵2012或者zhangcaiyun_86#163.com(将#换成@)

论单元测试

上一篇 / 下一篇  2012-05-02 16:23:05 / 个人分类:测试技术

    单元测试:是在软件开发过程中要进行的最低级别的测试活动,在单元测试中,软件的独立单元将在程序的其他部分相隔离的情况下进行测试。单元测试不仅仅是作为无错编码的一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。(由此得出:所有的测试都必须在整个软件系统的生命周期中进行维护)
 
   为什么要使用单元测试?
   我们编写代码时,一定要反复调试保证它能够编译通过。如果是没有通过的代码,没有任何人会愿意交付给自己的老板。但代码通过编译,只是说明了它的语法正确;我们却无法保证它的语义也一定正确的。
   幸运的是,单元测试会为我们的承诺做保证。编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。有了单元测试,我们可以自信的交付自己的代码,而没有任何的后顾之忧。
   什么时候测试?单元测试越早越好,早到什么程度?XP开发理论讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。先编写产品函数的框架即先编写函数空的实现,有返回值得随便返回做一个值,编译通过后在编写侧四代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需要更改的可能性比较小。
   由谁测试?单元测试与其他测试不同,单元测试可以看是编码工作的一部分,应该由程序员完成,也就是说经过了单元测试的代码才是已完成的代码,提交产品时也要同时提交测试代码。测试部门可以作一定程度的审核。
   关于桩代码,单元测试应该避免编写桩代码。桩代码就是用来代替某些代码的代码,例如,产品函数或者是测试函数调用了一个未编写的函数,可以编写桩函数来代替该被调用的函数,桩代码也用于实现测试隔离。采用由底向上的方式进行开发,底层的代码先开发并先测试,可以避免编写桩代码,这样做的好处有:减少了工作量;测试上层函数时,也是对下层函数的间接测试;当下层函数修改时,通过回归测试可以通过修改是否导致上层函数产生错误。
   在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中,要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择在独立的过程和函数,还是在Ada包的级别上尽享单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。
   优点
1)它是一种验证行为
程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支援。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用单线这个过程会破坏重要的东西。而且它为代码的重构提供了保障。这样,我们就可以更自由的对程序进行改进。
2)它是一种设计行为
编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。
3)它是一种编写文档的行为
单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。
4)它具有回归性。自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。
 
   

TAG:

 

评分:0

我来说两句

Open Toolbar