`
wuhua
  • 浏览: 2111893 次
  • 性别: 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  
不错!俺以后也要做好对自己代码的测试工作!

相关推荐

    单元测试之道Java版.pdf(高清)

    根据提供的文件信息,“单元测试之道Java版.pdf(高清)”主要介绍了在Java开发环境中进行单元测试的方法、策略及最佳实践等内容。以下将基于该文件的标题、描述、标签以及部分内容来详细阐述相关的知识点。 ### ...

    单元测试实施规程 软件单元测试

    1. **目的**:单元测试的主要目的是验证软件的各个模块(任务或单元)是否符合其设计规格,确保每个小部分都能够在独立运行时达到预期的效果。这有助于提升代码的可靠性和可维护性,同时也是后续集成测试和系统测试...

    软件单元测试报告.doc

    4. 引言:介绍软件单元测试的目的和范围,包括测试的目标、测试方法和测试范围等信息。 5. 术语及缩略语:对软件单元测试中使用的术语和缩略语进行解释。 6. 参考资料:列出软件单元测试中使用的参考资料和文献。 7....

    单元测试说明模板

    单元测试的目的是为了确保软件的每个组件都能够正确地执行其功能,并且在集成时不会出现问题。单元测试可以帮助开发人员早期发现代码中的错误和缺陷,从而减少了软件开发的时间和成本。 在本文档中,我们将详细地...

    单元测试与TDD实践

    **一、单元测试之测试目的** 单元测试,作为软件开发过程中的重要环节,其核心目标在于确保代码的质量、可维护性和可扩展性。它通过独立测试软件中的最小可测试单元,如函数或方法,来验证其功能是否符合预期。这一...

    .Net 单元测试案例

    在.NET开发过程中,单元测试是一项至关重要的任务,它有助于确保代码的质量、可维护性和稳定性。单元测试允许开发者独立地测试代码的各个部分,确保每个功能模块都能按预期工作。本案例将深入探讨如何在.NET环境中...

    单元测试报告模板.doc

    单元测试报告的目的是提供一个透明、详细的记录,让团队成员、管理者和其他利益相关者了解测试的状态,发现和解决问题,以及持续优化软件质量。通过详尽的测试报告,可以有效地管理和控制项目风险,确保软件产品的...

    Pragmatic Unit Testing (单元测试之道)

    《Pragmatic Unit Testing(单元测试之道)》是《Paagmatic Starter Kit(程序员修炼三部曲)》系列中的一个重要组成部分,专注于教导开发者如何高效、实际地进行单元测试。单元测试是软件开发过程中的关键环节,它...

    C++单元测试简单示例

    在软件开发过程中,单元测试是一种重要的质量保证手段,它针对代码的最小可测试单元——函数、方法或类,进行独立验证。本示例主要聚焦于C++编程语言中的单元测试,我们将探讨如何进行白盒测试的基本实现方法和结构...

    软件单元测试讲义ppt

    《软件单元测试讲义》是一份深入探讨软件开发中单元测试技术的重要资料,它由知名IT博主linkyou在CSDN上分享。这份PPT详细阐述了单元测试的基础概念、重要性以及实施方法,旨在帮助开发者提升代码质量,确保软件功能...

    单元测试之道java版

    《单元测试之道Java版》这本书,正如它的标题所示,是一部关于如何进行Java单元测试的专业指南,它结合了丰富的实例和实际经验,旨在帮助开发者掌握单元测试的技巧,并在软件开发中应用这些技巧。 这本书的读者们,...

    单元测试之道 Nunit篇

    单元测试是软件开发过程中的重要环节,它是一种用于验证代码功能正确性的自动化测试方法。NUnit 是一个流行的、开源的.NET框架,专为.NET开发者设计,用于编写和执行单元测试。在本文中,我们将深入探讨NUnit在单元...

    软件测试 单元测试 单元测试 集成测试

    单元测试和集成测试是软件测试中的两种主要类型,它们在软件生命周期中扮演着至关重要的角色。 单元测试(Unit Testing)是指对软件中的最小可测试单元进行检查和验证,通常是函数、方法或类。它的目标是确保每个...

    软件单元测试计划.doc

    软件单元测试的主要目的是为了确保软件的质量和可靠性,检测软件中的错误和缺陷,从而提高软件的整体性能。软件单元测试的范围包括软件的各个模块和组件,旨在确保每个模块和组件正确地工作并且达到预期的结果。 2....

    单元测试 单元测试 java

    单元测试是软件开发过程中的重要环节,特别是在Java编程中,它被视为确保代码质量、提高可维护性和降低缺陷率的关键步骤。单元测试是对程序中最小可测试单元进行检查和验证,通常是一个函数、方法或类。它的目的是...

Global site tag (gtag.js) - Google Analytics