CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  产品/厂家 >  应用性能管理

测试写到什么程度算足够?大家请看个离子

楼主yanglilibaobao()2006-12-01 13:38:35 在 产品/厂家 / 应用性能管理 提问

100%的测试覆盖率    
  下面是一个小例子:    
   
   
  代码  
  private   int[]   map   =   new   int[]   {        
      1,   3,   5,   8};        
  public   int   oddNumber(int   index)   {        
      return   map[index   -   1];        
  }        
   
   
  写一个简单的测试    
   
  代码  
  @Test      
  public   void   first_odd_number_should_be_one()   {        
      assertEquals(1,   oddNumber(1));        
  }        
   
   
  这个测试是不是覆盖了100%的代码呢?我认为是覆盖了的。但是是不是真的测试了所有的执行路径呢?显然没有。oddNumber(4)应该是7,但是这个程序会返回8。我们改一个写法:    
   
  代码  
  public   int   oddNumber(int   index)   {        
      switch(index)   {        
          case   1:   return   1;        
          case   2:return   3;        
          case   3:   return   5;        
          case   4:   return   8;        
      }        
      throw   new   UnsupportedOperationException();        
  }        
   
   
  换了一种写法之后,测试覆盖率立马就下去了。差别就在于,在第二种写法把执行路径对应到了字面的静态路径上了。所以说,测试应该覆盖是否完全的标准,应该是以动态路径为准,而不是以静态路径为准。同时,也提醒我们,想要靠最后根据测试覆盖率来补测试,是不能让你做到TDD时同等程度的自信的。    
  在TWU上学的时候,老师给了一个简单的准则:    
  代码增一行太多,减一行太少    
  当然,老师是用英文教课的,我是把意思用中文翻译了一下。这句话是说,代码不能多不能少,以恰好让所有测试通过为最佳。为了验证这个道理,据老师说,ThoughtWorks   UK有一个开发人员写了一个工具用来“删代码”。如果有一行代码是能够删掉之后还能让所有测试都通过的,那么就删掉它。我觉得,这个准则很有务实,也很有用。同时,也回答了另外一个问题,是不是要给所有的类写对应的测试类来覆盖其所有的行为?我认为没有根据这个准则,答案应该是没有必要。只要你的测试覆盖了这个类的所有执行路径就可以了。至于这个测试是不是针对这个类独立进行测试的,是单元测试还是功能测试,是黑盒测试还是白盒测试,都不重要。重要的是,你删掉这个类中一行或者几行,都会让所有测试中至少一个测试失败。这就能说明,你的测试是写到位了。    
  当然,再加一些怀疑和批评的态度。对于上面那个放之四海皆准的准则,有一个例外:那就是这个准则只关心程序的正确性,但是我要说程序的行为是由正确性和效率共同组成的。举一个空泛的例子:    
   
  代码  
  if   (a)   {        
    doSomethingUnderConditionA();        
  }   else   if   (b)   {        
    doSomethingUnderConditionB();        
  }        
   
   
  条件A和B可能在匹配的集合上是包含关系,也就是说一个是另外一个的强条件。假设A是更强的条件,那么在条件更强的情况下,我们往往可以给一个更有效率的解。但是有可能,如果没有条件A这个分支,所有情况都走条件B的分支,解仍然是正确的。所有说,A的存在不影响程序的正确性,只影响了程序在特定条件下的效率。那么,在这种情况下,就不能说代码增一行太多了。  
   
   
  请大家发表的建议!  
   
  [转]http://www.javaeye.com/topic/34955 问题点数:0、回复次数:6Top

1 楼sxnucseven(*)回复于 2006-12-01 13:59:55 得分 0

啥?Top

2 楼mlb2729(闪亮ぁ瞬间)回复于 2007-01-31 09:06:20 得分 0

這個也頂...........Top

3 楼liufei8463(武汉小兵)回复于 2007-02-12 16:29:23 得分 0

楼主可敬Top

4 楼luyang1016(闭月羞花猫)回复于 2007-02-13 09:19:04 得分 0

还不是到处可见   武汉小兵。Top

5 楼Sydica(小林信仁)回复于 2007-02-17 11:34:00 得分 0

....Top

6 楼csjinjian()回复于 2007-03-02 09:56:25 得分 0

100%覆盖?考虑到异常的话应该非常多Top

相关问题

关键词

得分解答快速导航

  • 帖主:yanglilibaobao

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo