软件测试(基本路径测试、环形复杂度、路径覆盖)

白盒测试之路径覆盖与基本路径覆盖 路径覆盖可以保证程序中的所有路径都被覆盖到,但对于包含多且复杂的判断语句、循环语句的程序来说,要覆盖每一条路径将会非常困难,需要花费极大的人力物力。路径覆盖可以使程序中的路径都被测试到,但是,要对程序中的路径做到完全覆盖经常是无法实现的。为了解决这一难题,我们需要在保证测试质量的前提下把测试的路径数量压缩到一定的范围内,基础路径覆盖法正好可以解决该问题。基本路径覆盖法是在程序控制流图的基础上,通过分析控制结构的圈复杂度,导出基本可执行的路径集合设计测试用例,运行被测程序,使程序的基本路径都得到覆盖。 阅读详情
AI摘要

本文介绍如何使用基本路径测试法确定程序中的独立路径数量,并通过计算环形复杂度来确保所有语句至少被执行一次。文中详细解释了三种计算环形复杂性的方法及基本路径测试与路径覆盖的区别。

程序集中独立路径的确定方法

标题
如图所示的控制流图,采用基本路径测试法,给出此程序的基本集:
环形复杂性是一种为程序逻辑复杂性提供定量测量的软件度量。当该度量用于基本路径测试方法,计算所得的值给出了程序基本集的独立路径的数量,这是为了所有语句至少执行一次而必须进行的测试数量的上界 。(注意,基本路径测试方法只是保证语句覆盖,即所有语句都能够至少执行一次,而不保证路径覆盖(此处路径覆盖指从起点到终点所有能够排列的路径,尤其当遇到循环,路径覆盖的数量还跟循环次数有关,当循环次数过大,采用路径覆盖的条数将非常多,难以实际执行))
三种方法计算环形复杂性:
1.给定控制流图G的环形复杂性——CC(G),流图中区域的数量。
2.给定流图G的环形复杂性——CC(G),定义为CC(G)=E-N+2,E是流图中边的数量,N是流图节点数量。
3.给定流图G的环形复杂性——CC(G),也可以定义为CC(G)=P+1,P是流图G中原子判定节点的数量。

环形复杂度=3,因此程序基本集中包含的独立路径的数量为3,但此独立路径集合中独立路径的组合方式可能不唯一,以此题为例:
程序基本集1:
path1:1 2 4 5 7
path2:1 2 4 6 7
path3:1 3 4 5 7 (或1 3 4 6 7,即覆盖3语句)
若对此仍有疑惑,尝试添加path4:1 3 4 6 7,根据程序集中独立路径的含义,即从入口到出口的多次执行中,每次至少有一个语句是新的,未被重复的,也即每次至少要经历一条从未走过的弧,因为path1-3中1 3 4 6 7都有并且path4中没有新的语句是path1-3中没有的,因此path3两种选择方法任选一个即可,但不能为4个。环形复杂度=程序集中独立路径的数量,但集合中独立路径的组合方式不固定,只要满足定义即可。

程序基本集2:
path1:1 3 4 5 7
path2:1 3 4 6 7
path3:1 2 4 5 7(或1 2 4 6 7,即覆盖2语句)

注意:基本路径测试方法并不是要将所有从起点到终点所有方式的路径都覆盖,而是覆盖所有语句,(也即图中所有连线都能覆盖,而并不要求所有连线进行排列组合)保证程序基本集中使得所有语句至少执行一次。

环形复杂度的值是所有语句至少执行一次而必须进行的测试数量的上界 的理解:

在这里插入图片描述
如图所示,原子判定节点数+1=环形复杂度=2,因此程序集中有两条独立路径分别为:
path1:1 3
path2:1 2 3
但是path2方式一次就能够使得所有语句执行至少一次,因此说环形复杂度的值是使得所有语句至少执行一次而必须进行的测试数量的上界。由于没有更好的方式确定测试数量的下界,在此牺牲测试用例的数量来保证所有语句至少执行一次。

路径覆盖法存在的问题:
在这里插入图片描述
在设计白盒测试时,若设计若干个测试用例,然后运行被测程序,要求覆盖程序中所有可能的路径,而当程序中有循环时候,如上图所示,一次循环就有5种路径覆盖,总共有5^20种路径覆盖,上图中包含的不同执行路径数达5的20次方条,假定对每一条路径进行测试需要1毫秒,一年工作365 × 24小时,要想把所有路径测试完,需3170年。

测试中做到完全的路径覆盖是无法实现的,为解决这一难题只得把覆盖的路径数压缩到一定限度内,这就是基本路径覆盖。基本路径覆盖不是路径覆盖,根据定义,计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次,是语句覆盖。

关于环复杂度公式计算法和降低环复杂度的方法 关于软件白盒测试中的路径测试:构建程序图规则、正确计算环复杂度的公式方法、通用计算方法、不同计算方法之间关联程序图与环复杂度本文旨在解决的问题1.程序图的构建规则2.环复杂度计算方法3.不适用普通方法的情况(多输入多输出/多分支判定节点)如何处理小结 程序图与环复杂度 程序图,是一种用以表示程序结构的有向图。程序图可以根据代码的逻辑结构构建,并且相对流程图有一定的简化规则。建立程序图可以为计算环复... 阅读详情

相关推荐

软件测试核心:从控制流图到基本路径测试用例设计实战

软件测试是保障软件质量的关键工程实践,其核心在于系统化、有依据的测试设计,而非仅凭经验执行。理解程序内部逻辑是高效测试的基础,其中控制流图作为可视化工具,能将代码执行路径转化为节点和边的图形表示,清晰展现程序逻辑结构。基于控制流图,环形复杂度(圈复杂度)这一量化指标应运而生,它通过计算判定节点数、边与节点关系或区域数量,客观衡量代码逻辑的复杂程度,并直接决定基本路径测试所需的最少用例数。基本路径测试法正是基于这一原理,通过寻找一组覆盖所有边的独立路径,确保达到判定覆盖和语句覆盖,从而系统化地设计出高覆盖率的

weixin_30279671的博客 450

2024年TYUT软件测试大题实战指南:从基本路径到测试用例设计

本文为太原理工大学(TYUT)软件测试课程提供实战指南,重点解析基本路径测试的核心步骤,包括控制流图绘制、环形复杂度计算与基本路径集构造。同时详解黑盒测试中的等价类划分法,帮助考生系统掌握从理论到实践的测试用例设计方法,高效应对期末考试大题。

weixin_29234509的博客 237

路径覆盖 vs 基本路径覆盖:从5^20条路径到3条核心路径的工程权衡

本文深入探讨了软件测试中路径覆盖与基本路径覆盖的核心差异及工程实践选择。通过分析路径爆炸现象和环形复杂度计算,揭示了基本路径覆盖如何将测试用例从5^20条精简至3条核心路径,实现效率与质量的平衡。文章提供了详细的对比分析和实用决策框架,帮助测试工程师在资源受限环境下做出最优策略选择。

weixin_27918373的博客 325

软件工程环形复杂度计算方法有哪些_国考考点之软件工程之mcCabe

软件工程-mcCabe从2019年第一次引入到同等学力计算机国考中,同时该知识点作为历年软件设计师的必考知识点,所以本文主要重点针对该知识点进行梳理:关于计算机软件设计师的答案解析: 为什么上半年的答案是8-7+2=3 弧数为8,节点为7,没问题;下半年的却是9-7+2=4 下半年的弧为什么不是10呢 ?谢谢!关于mcCabe,计算方法其实有3种:环形复杂度定量度量程序的逻辑复杂度...

weixin_35257663的博客 1万+

白盒测试实战:基于控制流图与基本路径法设计 5 个测试用例

本文详细介绍了白盒测试实战中基于控制流图与基本路径测试法的5个测试用例设计方法。通过可视化代码逻辑、计算环形复杂度及提取独立路径等技巧,帮助测试人员系统性地覆盖所有执行路径,有效解决路径爆炸和覆盖盲区问题,提升测试效率与质量。

weixin_34274029的博客 370

软件测试基础:白盒测试方法:用基本路径覆盖法设计测试用例,基本路径覆盖测试技术设计测试用例的步骤

基本路径覆盖测试是Tom McCabe提出的一种白盒测试技术,使用这种技术设计测试用例时,首先计算程序的环形复杂度,然后以此复杂度为指南,定义执行路径的基本集合。从该基本集合导出的测试用例,可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真和假值。

Sunshine的专栏 4818

软件测试之基本路径覆盖

阅读下面C语言函数,回答后面的问题:                要求:请用基本路径的测试技术完成该函数的测试。 (1)给出程序的有向流图,并算该函数的环形复杂度。 (2)给出基本路径集和测试用例。 二、 阅读下面的程序流程图,回答后面的问题:   画出上述程序的有向流图,并计算该函数的环形复杂度。 给出基本路径集。 (1...

__tian__的博客 1万+

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 985

软件测试的基本路径覆盖

基本路径覆盖法是软件测试中通过分析程序控制流图的环路复杂性来设计测试用例的方法。其核心步骤包括:1)绘制控制流图;2)计算环形复杂度(可通过区域数量、边结点公式或输出边数确定);3)确定独立路径集;4)设计覆盖每条独立路径的测试用例。文中以IsCodeLine函数为例,详细演示了该方法的应用过程:首先绘制9个结点的控制流图,计算复杂度为9;然后列出9条独立路径;最后针对路径1设计了具体测试用例。该方法能确保程序中的每个可执行语句至少执行一次,有效控制测试路径数量。

m0_60889254的博客 662

射频指纹识别技术:原理、应用与深度学习实现

射频指纹识别(RFFI)是一种基于硬件特征的设备身份认证技术,通过分析无线设备发射信号中的独特硬件特征实现设备识别。其核心原理源于发射器硬件电路的非线性特性,如功率放大器的相位噪声和混频器的非线性失真,这些特征具有难以伪造的特点。在物联网和边缘计算场景中,RFFI技术展现出独特优势,尤其在智能家居和工业物联网中,能有效防止非法接入和设备伪造。深度学习方法的引入进一步提升了RFFI的性能,通过自动特征提取和端到端优化,显著提高了识别准确率。本文详细探讨了RFFI的技术原理、应用场景及实现方法,为相关领域的研究

weixin_30457465的博客 890

深入理解HanLP1.x,填平可能遇到的坑

提取指定数量的摘要。自定义词典为什么要单独领出来讲呢?因为在我们的业务开发中,可能分词的效果并不理想,需要定制自己的词库,索引更加常用。例如:小米su7特斯拉modelY比亚042025款6575767670908我们需要分出小米su72025款等词。我们分别看看用字典和不用字典的效果。

static_coder的博客 977

【大学生软件测试基础】白盒测试 - 控制流图 - 01

任务1、画出程序流程图; 任务2、画出控制流图; 任务3、根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目; 任务4、根据环形复杂度的计算结果,源程序的基本路径集合中有多少条独立路径; 任务5、设计测试用例; 1、程序流程图 2、控制流图 3、根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目; V(G) = P + 1 = 3+1 控制流程图环形复杂度为 4 4、根据环形复杂度的计算结果,源程序的基本路径集合中有多少条独立路径;...

aiwuff的博客 2万+

Gemini国内合规接入指南:API身份链构建与镜像站选型

生成式AI服务接入本质是服务可用性工程,而非单纯网络连通问题。理解大模型API调用原理,关键在于掌握身份认证、权限控制与数据流向三大技术要素。Gemini作为主流多模态模型,其国内可用路径已从‘模拟访问’转向‘能力映射’——聚焦文本生成等核心能力的稳定调用。通过构建七步Google Cloud身份链(含+86实名、国际信用卡核验、Service Account最小权限配置),可实现99.2%高成功率的合规API接入;而教育型、企业型、开发者型三类镜像站则提供差异化过渡方案,均需满足端到端加密、境内CDN托管

weixin_29046035的博客 436

2023年软件测试大题速成【TYUT太原理工大学】

求环形复杂度的话,有三种方法:第一种是控制流图闭合区域+1,第二种是控制流图的边数-结点数+2,第三种是判断结点数+1.。写基本路径的话,

m0_63181421的博客 5653

STM32 AFIO时钟开启时机与复用功能解析

在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践

weixin_42389113的博客 579

VS2019集成AddressSanitizer:C++内存错误检测实战指南

在C++开发中,内存管理是核心挑战之一,涉及堆、栈和全局变量的分配与释放。其原理在于程序运行时对内存地址的访问必须严格遵循分配边界和生命周期规则,否则会导致缓冲区溢出、释放后使用等严重错误。这类问题的技术价值在于直接影响程序的稳定性、安全性和性能,是高质量软件必须攻克的基础难题。应用场景广泛,从嵌入式系统到大型服务器软件,都需要可靠的内存错误检测机制。AddressSanitizer(ASan)作为一种编译时插桩技术,通过影子内存和运行时检查,能精准定位堆缓冲区溢出、释放后使用等隐蔽错误。本文以Visual

weixin_34356310的博客 279

2024年软件测试大题高效突破【高校实战指南】

本文为高校软件测试考试大题提供高效突破指南,聚焦核心考点。详细拆解了基本路径测试的三大步骤(画控制流图、算环形复杂度、导出路径集),并系统讲解了等价类划分、边界值分析法等黑盒测试用例设计方法,旨在帮助学生快速掌握解题思路与规范步骤,轻松应对考试。

weixin_28340315的博客 1019

uniapp [全端兼容] - 实现省市区选择器三四级联动组件,uniapp选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择(全平台兼容苹果安卓App、支付宝微信小程序、移动端H5网页)

uni-app省市区选择器,省市区街道三级四级联动选择器,uniapp自定义多列选择器省市两级联动,uniapp picker组件实现多级联动,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniApp选择器省市区县街道乡镇,uniapp实现省市区选择联动,uniapp城市三级联动(自定义组件)_uniapp三级联动,picker插件省市区联动,uniapp小程序省市区选择器,uni-app 省市区街道的四级联动选择,uniapp怎样实现省市区地址三级联动uni

🏆 前端领域优质创作者 1万+

软件测试实战技巧:从控制流图到判定表设计

实际操作时,发现它的交互式环境特别适合测试案例演示。不需要配置复杂环境,生成的项目可以直接运行查看控制流效果,对于教学演示特别方便。平台自动生成的可视化结果,比手工绘图更清晰准确。注意保持流程方向的一致性(通常自上而下)典型错误会遗漏中间层次的路径组合。避免将多个无效条件混在一个用例中。测试用例要覆盖所有有效无效组合。推荐同步使用两种方法验证结果。

PinkFlower67的博客 456

【多目标跟踪】ByteTrack复现(有yolov5例子)

1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML>=5.3 scipy>=1.4.1 tensorboard>=2.2 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 seaborn>=0.11.0 easydic

聿默的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

淮海工学院软件测试技术实验三功能测试,软件工程-实验3软件测试技术实验(7页)-原创力文档...

淮海工学院计算机工程学院实验报告书课程名: 《软件工程》题 目: 实验3软件测试技术实验学 号: 2014140093班 级: Z计121姓 名: 薛慧君评语:评语:成绩: 指导教师:批阅时间: 年 月 日《 软件工程》实验报告 - ...

weixin_35160622的博客 773

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2024年软件测试核心题型精讲【高校期末冲刺指南】

本文为高校软件测试期末复习提供核心题型精讲与冲刺指南。重点解析了基本路径测试、等价类划分和判定表法等高频考点,通过标准化解题步骤和典型例题,帮助学生掌握控制流图绘制、环形复杂度计算、测试用例设计等关键技能,旨在提升解题效率与得分能力。

earth的博客 662

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【软件测试-实验-2】基本路径测试方法

一、实验目的 1、能熟练应用白盒测试技术(基本路径测试方法)进行测试用例设计。 2、对测试用例进行优化设计。 二、实验环境 操作系统:Windows 7,Windows 10 应用系统:Visual C++、Office 三、实验任务 任务一:如下代码,代码功能是:用折半查找在元素呈升序排列的数组中查找值为key的元素。用基本路径测试方法,画出程序控制流图,计算环形复杂度V(g),找出基本测试路径...

计忆芳华的博客 1万+

软件测试实战:5种测试用例设计方法搞定太原理工大学期末大题

本文详细解析了5种软件测试用例设计方法,包括基本路径测试、等价类划分和判定表法等,帮助读者攻克高校软件测试考试难题。通过实战案例和解题框架,提升测试设计能力,适用于太原理工大学等高校期末考试的备考需求。

uran的专栏 103

软件测试--白盒测试

一、名词解释: 1、白盒测试(也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。 n      白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。但即使每条路径都测试过了,仍然可能存在错误。因为: Ø      穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程

Java编程语言学习专栏 5010

从零到通关:用等价类+判定表法破解软件测试大题(附TYUT真题解析)

本文针对软件测试考试中的大题,详细拆解了等价类划分法和判定表法的实战应用。通过TYUT真题解析,提供了一套从分析题目到设计测试用例的清晰解题模板,帮助考生高效掌握核心方法,从容应对复杂测试场景。

alpha的博客 221
上一篇: 家用路由器连接方式
下一篇: HTTP中host参数的作用
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值