`
wuhua
  • 浏览: 2095574 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多
在javaeye学习一段时间单元测试后,虽然测试的文章不多,但都是经典帖子。同时也发现这里面讨论的关注点大部分是对测试的目。对于该怎么测试,怎么样才可以让测试自动话

,怎么样保持测试的实效性等讨论的比较少。

最近被公司逼的急了,它要求在这个月里写一篇关于单元测试的论文。无奈之下,只好来到这里记录下自己学习的点点滴滴。以方便自己以后整理成论文。

做事往往要带很强的目的性去做才可以成功,单元测试也不例外

单元测试目的:
首先保证代码质量。
其次保证代码的可维护。
再此保证代码的可扩展。

目的之一代码的代码质量。
我们编写的代码虽然可以通过编译器检测到语法的正确性质,但并不能保证代码逻辑也是正确的。我们该怎么保证代码执行是正确的呢。好下面我们来看下代码。

java 代码
 
  1.    int add(int x, int y){  
  2.     return x+y;  
  3. }  

   上面的功能模块。下面是段测试代码
 
java 代码
 
  1. void testAdd(){  
  2.     //我们要求程序逻辑是1+4=5;  
  3.     assertEquals(5,add(1,4); 
  4. }
     经过测试以后,如果你修改了int add(int x, int y);里面的逻辑,如果修改的正确,测试代码始终都是见到绿色的。如果你逻辑错了。那不好意思,你的测试将会让你重新写那段逻辑代码。直到你正确为止。
     有个比较特殊的情况,如果我测试代码写成这样,那我保证逻辑代码的正确性,但我却看不到我期待的绿色,这有是什么原因呢?
java 代码
 
  1. 1void testAdd(){    
  2. 2.     //我们要求程序逻辑是1+4=5;    
  3. 3.     assertEquals(6,add(1,4);   
  4. 4. }  
我个人认为这个问题并是逻辑代码的问题,而是你测试代码中的逻辑问题,
噢,MyGot,作为程序员的我。已经为逻辑代码伤脑筋了。还要为测试代码烦恼,做人真命苦啊。  想来也确实是这样。
这就引申了另外一个问题,怎么样才可以保证我逻辑代码的可测性?

目的之二代码的可维护性。
就拿上面的例子来说吧。只要我们的单元测试是正确的,那我们就可以保证无论你怎么修改那段代码,只要测试代码可以产生绿色条,那OK,你修改的逻辑代码是正确的。当然可维护并非只有这点,还有,比如保证修改了这段代码不会影响到其他的模块等。

目的之三代码的可扩展。
对于这点我理解很肤浅。只能表达表面的东西,希望。
对于可扩展我觉得保遵循一个代码之间的耦合度降到最低。就OK了。单元测试对这方面有很强的好处,为了程序的可维护性,它可以强迫你写低耦合度的程序。


单元测试的优点

1、它是一种验证行为。
    程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支缓。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样,我们就可以更自由的对程序进行改进。

2、它是一种设计行为。
    编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。

3、它是一种编写文档的行为。
    单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。

4、它具有回归性。
    自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。

单元测试的范畴


    如果要给单元测试定义一个明确的范畴,指出哪些功能是属于单元测试,这似乎很难。但下面讨论的四个问题,基本上可以说明单元测试的范畴,单元测试所要做的工作。

1、 它的行为和我期望的一致吗?
    这是单元测试最根本的目的,我们就是用单元测试的代码来证明它所做的就是我们所期望的。

2、 它的行为一直和我期望的一致吗?
    编写单元测试,如果只测试代码的一条正确路径,让它正确走一遍,并不算是真正的完成。软件开发是一个项复杂的工程,在测试某段代码的行为是否和你的期望一 致时,你需要确认:在任何情况下,这段代码是否都和你的期望一致;譬如参数很可疑、硬盘没有剩余空间、缓冲区溢出、网络掉线的时候。

3、 我可以依赖单元测试吗?
    不能依赖的代码是没有多大用处的。既然单元测试是用来保证代码的正确性,那么单元测试也一定要值得依赖。

4、 单元测试说明我的意图了吗?
    单元测试能够帮我们充分了解代码的用法,从效果上而言,单元测试就像是能执行的文档,说明了在你用各种条件调用代码时,你所能期望这段代码完成的功能。

  • 描述: 关于单元测试效率的图片
  • 大小: 14.4 KB
分享到:
评论
11 楼 linqw 2007-08-08  
我对LZ的文章有下面几点看法:
1。 单元测试的目的性,单元测试无法保证保证代码的可维护和可扩展性,这些我觉得应该在软件架构层面和设计模式所需要关心的东西。
2。 单元测试的范畴,lz说的很抽象,界定起来歧义比较多。如果能比较具体的话,具有可操作性的话效果可能比较好些。
10 楼 yananay 2007-07-23  
还是那句话,把你的需求用测试描述出来就对了。
9 楼 dhxyu 2007-07-23  
TDD 测试驱动开发 还在学习与实践中,感谢瞒多的!!
8 楼 rocflytosky 2006-12-24  
wuhua 写道
rocflytosky 写道
辅助设计也是很重要的一个目的吧?


不是很明白你的意思
能具体介绍下吗?


我看的不够仔细,就是你上面说的优点的第二条。
7 楼 SpringArt 2006-12-12  
写的不错。收藏。
6 楼 wuhua 2006-12-11  
哈哈。也许大家的水平高了些。所以才敢出来吹水啊
5 楼 抛出异常的爱 2006-12-11  

长颈鹿装冰箱问题

public putGiraffe2Icebox(IceBox icebox,Giraffe giraffe){
      icebox.open();
      icebox.put(giraffe);
      icebox.close();

}
public putElephant2Icebox(IceBox icebox,Elephant elephant){
      icebox.open();
      icebox.get(giraffe);
      icebox.put(elephant);
      icebox.close();     
}



PS:这周的敏捷讨论很多啊!
4 楼 wuhua 2006-12-10  
rocflytosky 写道
辅助设计也是很重要的一个目的吧?


不是很明白你的意思
能具体介绍下吗?
3 楼 wuhua 2006-12-10  
rocflytosky 写道
辅助设计也是很重要的一个目的吧?


不是很明白你的意思
能具体介绍下吗?
2 楼 rocflytosky 2006-12-09  
辅助设计也是很重要的一个目的吧?
1 楼 daoger 2006-12-09  
不错!俺以后也要做好对自己代码的测试工作!

相关推荐

    单元测试报告模板

    【描述单元测试报告的背景,单元测试活动目的。如无特殊背景信息,可裁剪。】 范围 【说明该单元测试报告在整个项目周期的适用范围】 测试用例清单 模块 目标类 级别 用例类 用例描述 执行结果 备注 【被测的...

    单元测试计划模板

    【描述该代码走查及单元测试计划的目的。】 背景 【描述代码走查及单元测试计划的背景,活动目的。如无特殊背景信息,可裁剪。】 范围 【说明该代码走查及单元测试计划在整个项目周期的适用范围】 进入条件 ...

    thinkphp单元测试手册.pdf

    千盼万盼,在ThinkPHP 5.X中终于支持单元测试了,一举解决了TP进行单元测试的...本手册的编写目的主要是为了方便大家了解TP,并且能够指引大家在实际项目中使用单元测试,更甚至能 够将测试驱动应用到实际项目当中。

    软件测试之单元测试和自动化测试及UTF应用

    这些最小可测试单元通常是代码中的函数、方法或类,单元测试的目的是验证它们的行为是否正确、是否满足预期的要求和功能。 单元测试是一种自动化测试,它可以通过编写测试用例,执行代码,并验证代码的行为是否符合...

    Junit单元测试所需要的两个jar包

    JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 2 单元测试概念 单元:在Java中,一个类就是一个单元 单元测试:程序猿编写的一小段代码,用来对某个类中的...

    软件测试(单元测试)

    试验二 单元测试 【开发语言及实现平台或实验环境】 在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,使用VC6.0开发工具。 【实验目的】 (1) 认识单元测试原理 (2) 掌握单元测试过程 【实验要求】 ...

    软件单元测试计划模板

    软件单元测试计划 包括:介绍 目的 定义和缩写 参考资料 测试内容 单元测试策略 测试方法 测试工具 测试模块 测试活动计划进度 准入/准出原则 测试用例 输出文档 附录 缺陷状态定义 缺陷...

    数据库单元测试

    有了DBUnit,一切都变了,DBUnit的目的就是在每个单元测试运行之前将数据库初始化成一个预定义的状态,以保证单元测试时的断言不会因为数据库状态发生了变化而失败,同时可以解决前一个单元测试失败导致对数据库的...

    关于WEB单元测试操作规程

    测试目的: 尽最大努力找出软件的bug,反馈给开发者更正,保证软件的质量。 测试性质:黑盒测试 测试方法:人工测试 测试内容:UI界面,校验提示信息,功能性

    junit(单元测试)入门

    单元测试概念 被测系统:SUT(System Under Test):表示正在被测试的系统,目的是测试系统能够正确操作 ★测试夹具:(Test Fixture):就是测试运行程序会在测试方法之前自动初始化、回收资源的工作。 Junit4引入的...

    emma单元测试覆盖率

    java的单元测试,结合JUnit达到测试覆盖率的目的

    计算机软件单元测试.doc

    软件单元测试是一个过程。本标准为该过程规定了一个标准的方法,使之成为软件工程实践中的基础。该方法是一种综合的方法,目的是对软件单元进行系统化的测试,包括测试计划的执行、测试集的获取以及测试单元与其需求...

    软件单元测试讲义

    软件测试的目的 软件测试的原则 软件测试的对象 测试信息流 测试与软件开发各阶段的关系 软件测试的目的和原则 软件测试用例设计 软件测试策略 软件测试种类 程序调试

    软件测试流程(单元测试、集成测试等等)

    工欲善其事,必先利其器”。软件测试必须以一个好的测试计划作为基础。作为测试的起始步骤和重要环节。测试计划应包括:产品基本情况...另外还包括测试计划的目的、测试对象信息、测试计划使用的范围及测试参考文档。

    测试总结(目的、分类、工具)

    单元测试(开发人员执行),集成测试,系统测试,验收测试(非开发测试人员执行) 按照是否执行被测程序: 动态测试,静态测试 按测试方法: 性能测试、功能测试、手工、自动化、回归、冒烟测试、验收测试

    文件检索项目单元测试

    文件检索项目单元测试计划书。 系统测试计划 1. 引言 1.1 目的 本文档为配置模块和文件检索模块的系统测试活动提供范围、方法、资源和进度的指导。本文档的读者是主要是开发经理和开发人员。 1.2 测试策略 采用独立...

    系统测试是对已经集成好的软件系统进行彻底

    单元测试:单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。一个软件单元的正确性是相对于...

    软件测试中单元测试的内容与步骤

    软件测试中单元测试的内容与步骤单元测试针对程序模块,进行正确性检验的测试。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。...

    单元测试规范

    本文档规定了应用软件系统和部分系统平台模块的单元测试方法和步骤、测试用例的设计方法、测试代码的书写规范、流程以及单元测试的产品提交和验收规范,目的在于控制单元测试的质量,加强项目的质量管理,从而提高...

    单元测试分享演讲稿

    简单介绍单元测试,以及为什做,如何做,做了结果和目的是什么。

Global site tag (gtag.js) - Google Analytics