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

【网络安全 | 渗透工具】Hydra安装使用详细教程 Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast 阅读详情

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

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

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

语句覆盖

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

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

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

  

  图1. 代码示例

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

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

  图2. 语句覆盖

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

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

分支覆盖

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

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

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

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

  图3. 分支覆盖

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

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

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

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

基本路径覆盖

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

  一种方法的圈复杂度是数字1加上该方法中的独特决策数量。圈复杂度可以帮助您定义方法的线性无关路径的数量,即基组。线性无关的定义不在本文讨论范围之内,但总体来说基组就是一个最小的路径组,它可以通过组合来创建方法中的其他可能路径。

  像分支覆盖一样,路径基组测试确保了您可以测试每个决策结果,但是与分支覆盖不同,基本路径覆盖可以确保对所有相互独立的决策结果进行测试。也就是说每个新的基本路径都可以准确地“浏览”前一个执行决策,而不改变其他执行分支。这是基本路径覆盖比分支覆盖更健壮的重要原因,它使您能够了解如何通过改变一个决策来影响方法的行为。

  我将使用同一个示例进行说明。

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

  图4. 代码示例

  要获得100%的基本路径覆盖,您需要定义基组。这种方法的圈复杂度为四(1加决策数量),需要定义四个线性无关路径。为此,可以将任何第一个路径定为基线,并且逐个浏览决策,直至完成基组。

  路径1:任何路径都可以作为基线,因此将决策结果选定为真(由 TTT 表示)。这是基组中的第一个路径。

  路径2:要找到下一个基本路径,浏览(仅限于)基线路径中的第一个决策,显示 FTT 表示您期望的决策结果。

  路径3:浏览基线路径中的第二个决策,显示第三个基本路径为 TFT 。这样,第一个基线决策就可以保持为结果“真”不变。

  路径4:最后,浏览基线路径中的第三个决策,显示第四个基本路径为 TTF 。这样,第一个基线决策就可以保持为结果“真”不变。

  因此,四个基本路径为 TTT、 FTT、 TFT、和 TTF。现在,进行测试并查看结果。

  在所附的代码中,您可以看到 testReturnInputIntBooleanBooleanBooleanTFT() 和 testReturnInputIntBooleanBooleanBooleanFTT() 找到了语句和分支覆盖中未发现的bug。此外,基本路径数量随着决策数据呈线性增长,而非指数增长,使需要进行测试的数量与实现全面分支覆盖所需的数量相等。事实上,基本路径测试覆盖了一个方法中的所有语句和分支,因而有效包含了分支和语句覆盖。

  但是,为何不对其他潜在路径进行测试呢?记住,基本路径测试的目的在于测试所有相对独立的决策结果。通过对四个基本路径的测试可达到这个目的,而这与其他的路径没有关系。如果在开始时选择 FFF 作为基线路径,您将得到(FFF、 TFF、 FTF、 FFT)基组,与 TTT 路径无关。两个基组都同样有效,任何一个都可以满足您的独立决策结果标准。

创建测试数据

  在本示例中获得100%的基本路径覆盖率非常容易,但是对现实生活中的路径基组进行全面测试将更具挑战性,甚至不可能实现。由于基本路径覆盖测试一个方法中各个决策之间的交互情况,因此您需要使用促使指定路径执行的测试数据,而不能仅仅使用单一的决策结果,这对分支覆盖来说也很有必要。通过注入数据来强行按指定路径执行非常困难,但是您可以记住简化测试过程的几种编码实践。

  1. 使您的代码保持简单。圈复杂度越低越好。在能够减小数值时进行重构。数值越高,就越难测试,这个数值一旦超过10,测试就根本无法实现。这样不仅能减少需要测试的基本路径数量,而且还能减少每个路径中的决策数量。
  2. 避免重复决策
  3. 避免数据依赖性

  考虑以下示例:

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

  图5. 基本路径测试

  x 变量间接依赖于 object1 参数,但其中插入的代码却使查看关系变得尤为困难。随着方法变得越来越复杂,查看方法的输入值和决策表达式之间的关系几乎是不可能的。

结束语

  尽管语句和分支覆盖度量值易于计算和获得,但都可能留下未知的重大缺陷,只能为开发人员和管理员带来虚假的安全感。基本路径覆盖可以提供更为健壮和全面的方法,从而发现这些未被觉察的缺陷,而且可以避免所需测试的数量呈指数增长。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基于STM32L4XX、HAL库的MMA8452QR1姿态传感器驱动程序设计 / HAL库需要左移1位。#define MMA8452Q_I2C_ADDRESS 0x1D // SA0=1时的地址。* @param range: 量程(MMA8452Q_RANGE_2G/4G/8G)* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。 阅读详情

相关推荐

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 1000

软件测试——路径覆盖

根据以下代码使用路径覆盖设计测试用例,并用Junit实现。(注:仅记录实验数据,大佬请划走,如有侵权请告知!

m0_62489881的博客 2280

什么是无人机巡检?如何实现无人机自动巡检?

复亚智能的无人机自动巡检系统通过高度自动化的技术,实现了无人机的高效巡检作业。无人机自动机场支持无人机的自动起降和电池更换,自动飞行算法确保无人机在复杂环境中的精准飞行和拍摄,而云端识别诊断和AI感知算法平台则实现图像的实时传输和智能分析。复亚智能,作为无人机技术的创新者和推动者,致力于开发先进的无人机自动巡检解决方案,助力各行各业实现智能化、自动化的巡检工作,引领智能巡检的未来。利用人工智能和机器学习算法,无人机可以被训练来识别特定的模式和异常,如结构损坏、热泄漏等,从而提高巡检的准确性和效率。

foiadrone的博客 2844

常用java代码质量检查工具.md

常用扫描工具 PMD-CPD :Copy/Paste Detector (CPD) 代码重复率检测 PMD:分析 Java 源代码,找出潜在的 bug Findbugs :Java bug检查 checkstyle : 固定团队编码风格,固定命名风格以及换行风格等 P3C: 阿里巴巴Java规范,这个是PMD扫描,但移除了PMD自带的n条规则,只执行阿里的规则 Sonar Quabe: 一站式代...

借你一秒 3000

首发!谷歌倾斜摄影数据转换生成OSGB格式

全球首发,谷歌倾斜摄影模型文件能直接转换成OSGB格式!

cyber_room的博客 2287

对10G/40Gphy中auto-negotiation功能调试

在近期有一个项目,是一台设备中发现mac与phy之间的信号质量有一些差,报文会出现很多的crc错误码。希望可以将mac与phy之间的工作模式改为10GBASE-KR/40GBASE-KR4,从而提高信号质量,减少crc错误码。要实现10GBASE-KR/40GBASE-KR4,需要打开auto-negotiation,所以,文章主要内容是如何开启自协商,以及相关参数的解释。 需要的文档: 1、802.3协议手册 2、所调试phy的芯片手册(我自己使用的是bcm的万兆phy) 万兆phy情况摘要 PHY寄存

MTzhang_22的博客 5829

圈复杂度本质上就是——分支覆盖率达到100%需要的测试用例数

圈复杂度主要与分支语句(if、else、,switch 等)的个数成正相关。如下代码: publicStringcase2(intindex,Stringstring){ StringreturnString=null; if(index<0){...

djph26741的博客 689

手把手教你用Gazebo+ROS搭建智能小车机械臂系统(含完整配置文件)

本文提供了一份详细的实践指南,手把手教你使用Gazebo和ROS搭建智能小车机械臂仿真系统。内容涵盖从URDF/Xacro模型设计、Gazebo控制器配置到ROS话题通信与系统集成的完整流程,并提供了可复用的配置文件与调试技巧,帮助开发者快速构建并控制一个功能完备的移动操作机器人平台。

sugar的博客 973

软件测试 白盒测试用例设计方法动态 逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖)基本路径测试法

白盒设计方法分为静态和动态。 1 静态 静态的白盒测试方法有桌面检查、代码审查、代码走查和代码扫描工具。 2 动态 动态的白盒测试方法有逻辑覆盖法和基本路径测试法。 2.1 逻辑覆盖法 逻辑覆盖法有语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。 2.1.1 语句覆盖 2.1.2 判定覆盖 2.1.3 条件覆盖 2.1.4 判定条件覆盖 2.1.5 条件组合覆盖 2.1.6 路径覆盖 2.2 基本路径测试法 ...

qq_740785701的博客 2万+

YOLO26改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 212

全面解析 SAP 事务码 LTMOM 的应用与实践

综上所述,事务码 LTMOM 是 SAP 系统中不可或缺的迁移对象维护工具,它不仅提供了对数据迁移对象的精细配置功能,还通过灵活的数据转换规则与异常监控机制,为企业数据从 SAP ERP 向 SAP S/4HANA 的迁移提供了坚实保障。在数据迁移过程中,并非所有的迁移对象都需要同时启用。业内专家普遍认为,未来的系统升级与数据迁移将更注重业务需求的动态变化与数据实时性的要求,而 LTMOM 作为核心工具,其在流程自动化、数据智能校验以及跨系统数据联动方面的能力,将直接影响企业整体数字化转型的成败。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1012

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

两个测试都验证了(输出等于输入)需求并且达到了100%的分支覆盖率。但是,尽管实现了100%的分支覆盖率,测试却未发现bug。管理员可能会再次认为测试已完成,该方法可进入生产阶段。聪明的开发人员将认识到您可能错过了被测试方法中的一些可能路径。以上示例已经测试了 真-假-真或假-真-真 路径,您可以通过添加两个额外测试来进行检验。该方法中只有三个决策,因此测试所有八种可能路径是非常容易的。但对于包含...

weixin_36386044的博客 731

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3827

java中的语句_分支和路径覆盖测试_软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别...

举个例子吧if A and B then Action1if C or D then Action2语句覆盖最弱,只需要让程序中的语句都执行一遍即可 。上例中只需设计测试用例使得A=true B=true C=true 即可。分支覆盖又称判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例...

weixin_42363510的博客 594

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如何计算单元测试的覆盖率

单元测试,计算语句覆盖率、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率

cab5的博客 8825

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

语句覆盖率\条件覆盖率\路径覆盖率\分支覆盖率的区别您知道吗

代码覆盖率是一种度量,它描述了程序源代码已经过测试的程度,它可以帮助我们评估测试执行的效率, 简单来理解代码覆盖率就是单元测试中代码执行量与代码总量之间的比率。代码覆盖率主要包括语句覆盖率、分支覆盖率、条件覆盖率和路径覆盖率。Java常用的单元测试覆盖率框架有:JaCoCo、EMMA和Cobertura,其中jacoco使用最为广泛。

liwenxiang629的博客 9801

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

软件测试-白盒测试作业

请用逻辑覆盖法(语句覆盖、判定覆盖(分支覆盖)、条件覆盖、条件组合覆盖、条件分支覆盖、路径覆盖)对下面的java代码段进行测试。publiccharfunction(intx,inty){chart;if((x>=90)&&(y>=90)){t='A';...

H5oSir 6815

Java白盒测试

Java白盒测试 Java的代码测试分为以下两大类: 静态测试方法 不执行程序的测试方法。 主要用于测试文档和代码(文档) 动态测试方法 通过运行程序来发现缺陷的测试方法 黑盒测试方法 白盒测试方法 今天我们主要讲解一下动态测试中的白盒测试。 白盒测试 白盒测试,也称结构测试、逻辑驱动测试、基于程序本身的测试、程序员测试。 白盒测试需要完全了解程序结构和处理过程,因此要在程序开发完成之后,按照程序内部逻辑测试程序,检验程序中每条通路是否按照预定要求工作。 它与我们熟悉的黑盒测试有很大不同: 测试思路

weixin_49577106的博客 1290

Java Test: Specification and Structure Testing(line, branch, path coverage)

这篇文章总结一下Java软件测试中的Secification test和Structure test。

TranSad的博客 996

白盒测试的介绍及应用

白盒测试是一种基于代码内部结构的测试方法,测试人员需要了解程序的算法逻辑和实现细节。其核心是通过设计测试用例覆盖代码的所有逻辑路径,包括语句、分支、条件和路径覆盖等标准。以登录验证为例,白盒测试会分析代码中的if-else结构,设计用例覆盖null检查、账户锁定、用户名验证等所有分支。测试完成后需使用工具检查代码覆盖率,确保所有路径都被执行。与黑盒测试关注功能不同,白盒测试更注重发现代码中的逻辑错误,通常由开发人员执行,是单元测试阶段的重要手段。两者结合使用能更全面地保障软件质量。

handsome_liu99的博客 429

测试覆盖率

测试覆盖率是一个有用的指标,但它应当与其他度量标准一起使用,以获得关于软件质量和测试效率的完整视图。

幽静净土的技术分享 1235

软件构造——eclipse使用

文章目录一、开启、关闭断言二、使用EclEmma查看测试覆盖度三、使用SpotBugs 一、开启、关闭断言 如下图所示,run->run configurations->arguments 如果开启断言则将VM arguments设置成-ea 如果关闭断言则将VM arguments设置成-da 二、使用EclEmma查看测试覆盖度 在运行测试代码时,选择Coverage as->junit test case,之后就会产生代码覆盖度报告。如下图所示: 点击右上角的三个点,即可出现菜单

qq_43887432的博客 225

实验三

实验三 1、计算整数X和整数Y的最大公约数。 l 请用类和方法(写一个求最大公约数的方法)实现,命名时请按照规范命名。 l 在main方式中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。 l 利用FindBugs查找程序中是否存在bug。 Demo类 packagecn.yu.test; publicclassDemo { /...

weixin_34242658的博客 83
上一篇: 使用Eclipse Callisto分析应用程序
下一篇: 使用 eJFace 可以快速而高效地在手持设备上开发应用程序
phantomhu
博客等级 码龄23年 70粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值