热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]白盒测试之基本路径测试法(红色标注的是个人的看法)

白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。其中运用最为广泛的是基本路径测试法。基本路径测试
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。

其中运用最为广泛的是基本路径测试法。

基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。

设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。

在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:

1. 程序的控制流图:描述程序控制流的一种图示方法。

2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。

3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。

4. 准备测试用例:确保基本路径集中的每一条路径的执行。

工具方法:

图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。

程序的控制流图:描述程序控制流的一种图示方法。

圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句

流图只有二种图形符号:

图中的每一个圆称为流图的结点,代表一条或多条语句。

流图中的箭头称为边或连接,代表控制流

任何过程设计都要被翻译成控制流图。

如何根据程序流程图画出控制流程图?

在将程序流程图简化成控制流图时,应注意:

n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。

n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。

如下页图所示


n 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。

例如:

1 if a or b

2 x

3 else

4 y

对应的逻辑为:

独立路径:至少沿一条新的边移动的路径

基本路径测试法的步骤:

o 第一步:画出控制流图

流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。

画出其程序流程图和对应的控制流图如下

o 第二步:计算圈复杂度

圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。

有以下三种方法计算圈复杂度:

流图中区域的数量对应于环型的复杂性;

给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;

给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

o 第三步:导出测试用例

根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)

ü 路径1:4-14

ü 路径2:4-6-7-14

ü 路径3:4-6-8-10-13-4-14

ü 路径4:4-6-8-11-13-4-14

根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。

o 第四步:准备测试用例

为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:

举例说明:

例:下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。

步骤1:导出过程的流图。

     

(红色部分是我根据流程图画的,但是和左边的不对,但是复杂度又是一样的,大家知道的能给我留言或是发短信,谢谢)

步骤2:确定环形复杂性度量V(G):

1)V(G)= 6 (个区域)

2)V(G)=E–N+2=16–12+2=6

其中E为流图中的边数,N为结点数;

3)V(G)=P+1=5+1=6

其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。

步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:

路径1:1-2-9-10-12

路径2:1-2-9-11-12

路径3:1-2-3-9-10-12

路径4:1-2-3-4-5-8-2…

路径5:1-2-3-4-5-6-8-2…

路径6:1-2-3-4-5-6-7-8-2…

步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。

1)路径1(1-2-9-10-12)的测试用例:

score[k]=有效分数值,当k

score[i]=–1, 2≤i≤50;

期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

2)路径2(1-2-9-11-12)的测试用例:

score[ 1 ]= – 1 ;

期望的结果:average = – 1 ,其他量保持初值。

3)路径3(1-2-3-9-10-12)的测试用例:

输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;

期望结果:n1=50、且算出正确的总分和平均分。

4)路径4(1-2-3-4-5-8-2…)的测试用例:

score[i]&#61;有效分数&#xff0c;当i<50;

score[k]<0&#xff0c; k

期望结果&#xff1a;根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

5)路径5的测试用例&#xff1a;

score[i]&#61;有效分数&#xff0c; 当i<50;

score[k]>100&#xff0c; k

期望结果&#xff1a;根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

6)路径6(1-2-3-4-5-6-7-8-2…)的测试用例&#xff1a;

score[i]&#61;有效分数&#xff0c; 当i<50;

期望结果&#xff1a;根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

注意事项&#xff1a;

必须注意&#xff0c;一些独立的路径&#xff0c;往往不是完全孤立的&#xff0c;有时它是程序正常的控制流的一部分&#xff0c;这时&#xff0c;这些路径的测试可以是另一条路径测试的一部分。

方法工具&#xff1a;图形矩阵

o 导出控制流图和决定基本测试路径的过程均需要机械化&#xff0c;为了开发辅助基本路径测试的软件工具&#xff0c;称为图形矩阵(graph matrix)的数据结构很有用。

利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵&#xff0c;其行/列数控制流图中的结点数&#xff0c;每行和每列依次对应到一个被标识的结点&#xff0c;矩阵元素对应到结点间的连接(即边)。在图中&#xff0c;控制流图的每一个结点都用数字加以标识&#xff0c;每一条边都用字母加以标识。如果在控制流图中第i个结点到第j 个结点有一个名为x的边相连接&#xff0c;则在对应的图形矩阵中第i行/第j列有一个非空的元素x。

对每个矩阵项加入连接权值(link weight)&#xff0c;图矩阵就可以用于在测试中评估程序的控制结构&#xff0c;连接权值为控制流提供了另外的信息。最简单情况下&#xff0c;连接权值是 1(存在连接)或0(不存在连接)&#xff0c;但是&#xff0c;连接权值可以赋予更有趣的属性&#xff1a;

执行连接(边)的概率。

穿越连接的处理时间。

穿越连接时所需的内存。

穿越连接时所需的资源

根据上面的方法对例4画出图形矩阵如下&#xff1a;

连接权为“1”表示存在一个连接&#xff0c;在图中如果一行有两个或更多的元素“1”&#xff0c;则这行所代表的结点一定是一个判定结点&#xff0c;通过连接矩阵中有两个以上(包括两个)元素为“1”的个数&#xff0c;就可以得到确定该图圈复杂度的另一种算法。

转:https://www.cnblogs.com/dreamingmoon/archive/2010/01/11/1644283.html



推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • SAP羞辱国产软件商:技术停在10年前
    SAP中国研究院总裁芮祥麟表示,国产软件厂商过于热衷概念炒作,技术水平停留在10年前的客户端架构水平。他认为,国内厂商推出基于SOA的产品或转型SAAS模式是不可能的,研发新架构需要时间。当前最热门的概念是云计算,芮祥麟呼吁国产厂商应该潜心研发底层架构。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
author-avatar
llliu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有