白盒测试探讨及使用

发表于:2017-9-04 17:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Syw    来源:51Testing软件测试网采编

  白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
  一、白盒测试基本概念
  1)白盒测试分类
  白盒测试分类图
  2)白盒测试方法
  白盒测试方法图
  二、白盒测试常用工具
  代码分析检查工具:FindBugs、PMD
  覆盖率工具:jacoco、EMMA
  白盒测试工具:junit、testng
  质量管理平台:SonarQube
  编译工具:Ant、maven
  Mock工具:Jmockit
  数据库:mysql
  持续集成工具:Jenkins
  代码管理工具:SVN、git
  2.1)覆盖率工具:jacoco简介
  JaCoCo是一个开源的覆盖率工具(官网地址:http://www.eclemma.org/JaCoCo/),它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序。很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。
  JaCoCo包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)等。
  我们先来看看jacoco覆盖率结果展示图:
  jacoco覆盖率结果展示图
  2.1.1)jacoco基本概念
  行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
  类覆盖率:度量计算class类文件是否被执行。
  分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。
  方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
  圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。
  2.1.2)jacoco注入方式介绍
  jacoco注入方式图
  说明:
  1、 JaCoCo在Byte Code时使用的ASM技术修改字节码方法,可以修改Jar文件、class字节码文件。
  2、JaCoCo同时支持on-the-fly和offline的两种插桩模式。
  3、 On-the-fly模式中, JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。
  4、offline模式中,在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试插过桩 的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。
  On-the-fly和offline比较:
  On-the-fly模式更方便简单进行代码覆盖分析,无需提前进行字节码插桩,无需考虑classpath 的设置。
  存在如下情况不适合on-the-fly,需要采用offline提前对字节码插桩:
  (1) 运行环境不支持java agent。
  (2) 部署环境不允许设置JVM参数。
  (3) 字节码需要被转换成其他的虚拟机如Android Dalvik VM。
  (4) 动态修改字节码过程中和其他agent冲突。
  (5) 无法自定义用户加载类。
  5、jacoco最小支持java5。
  2.1.3)jacoco注入示例
  jacoco注入示例图
  2.1.4)jacocoAgent简介
  jacoco提供jacocoagent.jar,采用On-the-fly模式插桩,然后jacoco dump内存数据到本地,解析dump数据,得出代码覆盖率。
  PS:具体配置方式请查看之前文章:《代码覆盖率解决方案》一文,在此不在累述。
  地址:http://www.jianshu.com/writer#/notebooks/10195615/notes/10727392
  2.2)mock工具:jmockit简介
  JMockit是google code上面的一个java单元测试mock项目,是基于Java中的java.lang.instrument包开发,内部使用ASM库来动态修改java的字节码,可以Mock公共方法、私有方法、接口等。
  2.2.1)Jmockit常用注解
  @Mocked:被修饰的对象将会被Mock,对应的类和实例都会受影响(同一个测试用例中)
  @Injectable:仅Mock被修饰的对象
  @Capturing:可以mock接口以及其所有的实现类
  @Mock:MockUp模式中,指定被Fake的方法
  2.2.2)Jmockit常用类
  Expectations:期望,指定的方法必须被调用
  StrictExpectations:严格的期望,指定方法必须按照顺序调用
  NonStrictExpectations:非严格的期望,是否调用和顺序不作要求
  Verifications:验证,一般配合NonStrictExpectations来使用
  Invocation:工具类,可以获取调用信息
  Delegate:自己指定返回值,适合那种需要参数决定返回值的场景,只需指定匿名子类就可以。
  MockUp:模拟函数实现
  Deencapsulation:反射工具类
  2.2.3)Jmockit使用示例
  jmockit使用示例图
  2.3)代码质量管理平台:sonar简介
  Sonar是一个代码质量管理平台,通过插件机制可以支持20多种开发语言代码质量管理与检测。通过不同的插件对搜集的结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
  Sonar可以从以下七个维度检测代码质量:
  不遵循代码标准
  潜在的缺陷
  复杂度分析
  重复率分析
  注释率分析
  单元测试覆盖率分析
  耦合度分析
  我们先看看sonar分析展示图:
  sonar分析展示图
  2.3.1)Sonar与maven集成配置
  sonar与maven集成,只需修改maven的settings.xml文件,加入以下内容即可:
  soanr与maven集成图
  2.3.2)Sonar与Ant集成配置
  soanr与Ant集成比较麻烦,需要在build.xml文件中引用相应的包,如:jacocoant.jar、sonar-ant-task-2.2.jar等。build.xml部分配置如下:
  soanr与Ant集成图(一)
  soanr与Ant集成图(二)
  3)白盒测试执行
  白盒测试执行比较简单,可与jenkins集成,在持续集成过程中执行,也可在本地执行。
  执行方式一:Jenkins构建过程中自动执行(jenkins+sonar+Ant/maven+jacoco+Findbugs集成)
  执行方式二:本地Eclipse编译过程中自动执行(jenkins+sonar+ant/maven+jacoco+Findbugs集成)
  4)白盒测试报告
  白盒测试报告可在sonar平台查看,比较方便,具体不在累述。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号