白盒测试探讨及使用

        白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

一、白盒测试基本概念

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平台查看,比较方便,具体不在累述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Java Jacoco Ant Maven 针对 Jacoco[http://www.eclemma.org/ja...
    纳爱斯阅读 53,411评论 64 52
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,186评论 2 126
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 21,925评论 7 277
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    宇文臭臭阅读 6,702评论 5 100
  • 小黑说我,一拍脑袋,想法就来!喜欢这样想做就做的模样!
    卿莹阅读 159评论 0 1