动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java精华积累:初学者都应该搞懂.
.开发一个简单的KJava应用程序示例.
.作为一个初学者如何开发第一个Be.
.将存储过程封装为EJB组件的方法.
.在Java中操作Zip文件,压缩/解压.
.Java中正则表达式使用方法详解.
.Java Web Start 技术.
.利用RMAN转移数据和EXP/IMP转移的.
.Thinking in Java第三版读书笔记.
.Java对Domino Objects的访问 (1.
.如何使用 Java 连接处于公司防火.
.Java程序员的存储过程.
.JDBC到底是怎么连上数据库的?.
.深入探讨SQL Server 2000对XML的.
.Java的多进程运行模式分析.
.JAVA的网络功能与编程 二 (转).
.各种数据库连接代码.
.如何在java中去掉文本文件中的“.
.手把手教你使用CVS做.NET项目.
.开启Java对代理服务器和HTTP验证.

Java中的语句、分支和路径覆盖测试

发表日期:2008-1-5 |


  简介

  代码覆盖是一种用来度量已执行的软件测试水平的方法。收集覆盖度量数据的过程很简单:监测您的代码,并对所监测的版本运行测试。这样就可以生成相关数据,展示已执行哪些代码,或者更重要的是,未执行哪些代码。

覆盖测试是对单元测试的完美补充:单元测试可以显示出是否代码按预期执行,而代码覆盖可以表明还需要对哪些代码进行测试。

  大多数开发人员都能理解这一过程,也赞同其价值主张,他们通常追求100%的覆盖率。尽管100%的覆盖率是个极好的目标,但类型不当的100%覆盖率依然会留下未知的问题。典型的软件开发是根据要测试的语句或分支的数量来度量覆盖率的。即便有着100%的语句或分支覆盖率,代码逻辑依然可能存在严重的逻辑bug,只能为开发人员和治理员带来虚假的安全感。

  为何100%的覆盖率还不够?这是因为语句和分支覆盖率无法表明代码中的逻辑是否已执行。语句和分支覆盖对于未执行代码块中出现的明显问题来说很有用,但它们经常会错过与决策结构和决策交互相关的bug。而另一方面,路径覆盖则是一种有助于及早发现缺陷的更为健壮和全面的技术。

  在了解路径覆盖之前,先关注一下语句和分支覆盖率方面的一些问题:

  语句覆盖

  语句覆盖可以识别在一个方法或类中执行了哪些语句。这是一种计算起来比较简单的量规,现在有许多 开源产品 都可以评测这种覆盖级别。最终,语句覆盖的获益在于其能够识别未执行代码块。然而语句覆盖也存在问题,其无法识别源代码中控制流结构导致的bug,例如复合条件或者连续开关标签。这意味着在您可以轻松获得100%覆盖率的同时,未发现的明显bug依然存在。

  下例中显示了这种问题。此处,returnInput()方法由七条语句组成,它有一个简单的需求:输出应等于输入。

Java中的语句、分支和路径覆盖测试(图一)

  

  图1. 代码示例

  接下来,您可以创建一个满足需求并且具有100%语句覆盖率的JUnit测试用例。

Java中的语句、分支和路径覆盖测试(图二)

  图2. 语句覆盖

  在 returnInput() 中有一个明显的bug。假如第一个或第二个决策计算为真而其他的计算为假,返回值则不等于该方法的输入值。精明的软件开发人员会立即注重到这个问题,但语句覆盖报告却显示为100%的覆盖率。假如治理员发现覆盖率为100%,他/她可能会受到虚假的安全感的影响,判定测试已经完成,继而发布错误百出的代码,将之投入生产。

  仅仅熟悉语句覆盖是不够的,开发人员必须进一步使用更为完善的测试技术:分支覆盖。

  分支覆盖

  分支是指决策的结果,因而分支覆盖可以评测已测试的决策结果。这听起来不错,因为这样可以比语句覆盖更深入地查看源代码,但分支覆盖也会提出更多的要求。

  确定方法中的分支数量非常轻易。布尔决策无疑只有两种结果:真和假,而开关对于每种情况来说都只有一种结果——别忘了默认情况!方法中的决策结果总数等同于方法中需要覆盖的分支与输入分支的总和。(究竟,使用直线代码的方法也有一个分支)。

  在以上示例中, returnInput() 具有七个分支——三个是真,三个是假,还有一个是用于方法输入的隐藏分支。您可以用两个测试用例来覆盖六个真和假的分支:

Java中的语句、分支和路径覆盖测试(图三)

  图3. 分支覆盖

  两个测试都验证了(输出等于输入)需求并且达到了100%的分支覆盖率。但是,尽管实现了100%的分支覆盖率,测试却未发现bug。治理员可能会再次认为测试已完成,该方法可进入生产阶段。

  聪明的开发人员将熟悉到您可能错过了被测试方法中的一些可能路径。以上示例已经测试了 真-假-真或假-真-真 路径,您可以通过添加两个额外测试来进行检验。

  该方法中只有三个决策,因此测试所有八种可能路径是非常轻易的。但对于包含更多决策的方法来说,可能路径数量将呈指数增长。例如,一个包含十个布尔决策的方法会有1024种可能路径。这样只有祝您好运了!

  因此,获得100%的语句和100%的分支覆盖率是远远不够的,但费力地测试一个复杂方法包含的所有可能路径也是不可行的。有没有其他选择呢?让我们看看基本路径覆盖。

  基本路径覆盖

  路径代表着从开始执行方法到退出方法的执行流程。一个有着N个决策的方法会有 2^N 种可能路径,假如方法中包含一个循环,则会产生无限数量的路径。幸运的是,您可以使用称为 圈复杂度(cyclomatic complexity) 的度量来减少需要测试的路径数量。


上一篇:Eclipse+MyEclipse+Tomcat的配置 人气:1133
下一篇:判断当前程序是否正在运行 人气:546
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵