基本路径法
基本路径法的基本原理

基本路径法的基本原理
基本路径法是一种在有向图中找到所有从起始点到目标点的路径的算法。
它的基本原理如下:
1. 创建一个空的路径集合,其中每个路径都以起始点为起点,并且初始路径只包含起始点。
2. 重复以下步骤,直到路径集合中没有新的路径可以添加:
- 在路径集合中选择一个尚未探索完全的路径。
- 获取路径中最后一个顶点的邻居顶点。
- 如果邻居顶点是目标点,则将该路径添加到路径集合中的完整路径中。
- 如果邻居顶点不是目标点,且还未在当前路径中出现,则根据当前路径创建一个新路径,将该邻居顶点添加到新路径中,并将新路径添加到路径集合中。
3. 返回路径集合中包含目标点的完整路径。
基本路径法的关键是选择尚未探索完全的路径并获取其最后一个顶点的邻居顶点。
这样可以通过不断扩展路径来找到所有可能的路径。
通过持续的路径扩展,最终可以找到从起始点到目标点的所有路径。
基本路径法练习

词结点。
8
步骤3:确定基本路径集合(即
1
独立路径集合)。于是可确定6
条独立的路径:
2
路径1:1-2-9-10-12
9
R4 3
路径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…
T 10ቤተ መጻሕፍቲ ባይዱ
average=sum/n1
12 返回
3)路径3(1-2-3-9-10-12) 的测试用例:满足条件2 ,不满足条件3,满足条 件9
输 入 多 于 50 个 有 效 分 数 , 即试图处理51个分数
期望结果:n1=50、且算出 正确的总分和平均分。
开始 1
i =1,n1=n2=0,sum=0
7
T
n1=n1+1,sum=sum+score[i]
8 i = i +1
F 11 average= – 1
9 n1>0
T 10
average=sum/n1
12 返回
步骤1:导出程序的流图。
开始 1
i =1,n1=n2=0,sum=0
F
2和3 Score[ i ]<>-1 AND n2<50
4
T
n2=n2+1
8
步骤2:确定环形复杂性度量V(G):
1
1)V(G)= 6 (个区域)
2
2)V(G)=E–N+2=16–12+2=6 其中E为流图中的边数,N为结点数
9
R4 3
; 3)V(G)=P+1=5+1=6
基本路径测试法

画出程序控制流程图 计算程序环路复杂性 确定独立路径集合
准备测试用例
4
例:下面是一个程序段,试设计基本路径测试的测试用
例,设计出的测试用例要保证每一个基本独立路径至少要执 行一次
22 24
I
H
1. int Test(int i_count, int i_flag) 2. { 3. int i_temp = 0; 4. while (i_count > 0) 5. { 6. if (0 == i_flag) 7. { 8. i_temp = i_count + 100; 9. break; 10. } 11. else 12. { 13. if (1 == i_flag) 14. { 15. i_temp = i_temp + 10; 16. } 17. else 18. { 19. i_temp = i_temp + 20; 20. } 21. } 22. i_count- -; 23. } 24. return i_temp; 25. }
1
控制流程图的图形符号
程序控制流程图
1 边 1
3
结点 区域
2 6 3 6 7 8 4 5 7 R3 8 R1 R2
4
9 10 R4
11 (a)程序流程图 )
11 (b)控制流图
2
程序控制流程图 a b x y y
if a and b then x else y
复合逻辑下的控制流程图
3
基本路径测试的步骤
画出程序控制流程图
4
C
6
A
D
E
13
F
G
8 19
简述基本路径法的步骤

基本路径法的步骤引言基本路径法是一种软件测试技术,用于设计测试用例以覆盖软件系统中的路径。
路径是指在软件程序中穿过的一系列语句或指令的集合。
基本路径法可以帮助测试人员有效地识别出软件中的可能存在的错误和缺陷,并通过测试用例进行验证和修复。
本文将介绍基本路径法的步骤,以及如何应用它来设计并执行测试用例。
步骤一:确定控制流图•首先,我们需要根据软件系统的源代码或软件规格说明书来绘制控制流图。
控制流图是一种静态分析工具,用于描述程序中的控制结构,如顺序结构、条件结构和循环结构。
它由一组节点和有向边组成,每个节点代表程序中的一个语句或一个块,每个有向边表示控制流的方向。
通过控制流图,我们可以更直观地理解程序的结构和流程。
步骤二:计算圈复杂度•接下来,我们需要计算圈复杂度。
圈复杂度是一种度量软件源代码复杂性的指标,表示程序中独立的路径数目。
它可以帮助我们确定测试用例需要覆盖的路径数量。
通过计算控制流图的节点和边的数量,我们可以得出圈复杂度的值。
通常来说,圈复杂度的值越高,说明程序的复杂性越高,需要更多的测试用例来覆盖不同的路径。
步骤三:找出基本路径•在这一步中,我们需要找出控制流图中的所有基本路径。
基本路径是指从控制流图的一个节点到另一个节点的路径,其中不存在任何循环或条件分支。
可以通过深度优先搜索、图遍历或其他算法来找出基本路径。
在这个过程中,我们需要记录路径中的每个节点和边,以便后续的测试用例设计。
步骤四:设计测试用例•接下来,我们可以利用找出的基本路径来设计测试用例。
每个基本路径都对应着一个独立的测试用例。
我们可以选择路径中的一个节点作为起点,然后按照路径中的边的顺序执行程序,直到达到路径的终点。
在执行过程中,我们需要检查程序的行为和输出,以验证程序是否按照预期的方式执行。
通过设计不同的测试用例,我们可以尽可能地覆盖不同的基本路径,从而提高测试的覆盖率和有效性。
步骤五:执行测试用例•一旦测试用例被设计好,我们就可以开始执行测试。
白盒测试-基本路径法

⽩盒测试-基本路径法⼀、定义基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执⾏路径集合,从⽽设计测试⽤例的⽅法。
⼆、基本路径测试的步骤1)画出程序控制流图(前提是已经有了程序流程图)2)计算环路复杂度3)导出独⽴路径(可执⾏路径)4)设计测试⽤例三、认识控制流图1、描述程序控制流的⼀种图⽰⽅法,控制流图中只有2种图形符号:结点:标有编号的圆圈表⽰控制流线或边或连接:以箭头表⽰2、各种语句结构的控制流图3、认识什么是区域区域:边和结点圈定的区域叫做区域。
封闭区域+开放区域4、如果判断中的条件表达式是由⼀个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为⼀系列只有单条件的嵌套的判断。
If(a>1 and b<2){…}If(a>1){If(b<2){…}}(a)流程图四、环形复杂度的计算有以下三种⽅法计算环形复杂度:a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
五、举例1)画出程序控制流图2)计算环形复杂度a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度3个封闭区域+1个开放区域=4b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;V(G)=E-N+2=11-9+2=4c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
V(G)=P+1=3+1=43)导出独⽴路径注:因为环形复杂度为4,所以有四条独⽴路径PATH1:1-11PATH2:1-2-3-4-5-10-1-11PATH3:1-2-3-6-7-9-10-1-11PATH4:1-2-3-6-8-9-10-1-114)设计测试⽤例(略)。
白盒测试技术(基本路径测试法)

控制流图的组成: 1. 节点:以标有编号的圆圈表示。可代表一个或多个语句、一
个处理框序列和一个条件判定框(假设不包含复合条件)。包 含条件的节点被称为判断节点,分支的汇聚处应该有一个汇 点。, 2. 控制流线或弧:以箭头表示,又称为边。 3. 边和结点圈定的区域叫做区域,当对区域计数时,图形外的 区域也应记为一个区域。
之
1
▪ 1.白盒测试技术概念以及方
法
▪ 2.基本路径测试法
重点
▪ 步骤
▪ 实现
黑盒
X=2
?
y=4
白盒
X=2 y=2x
y=4
白盒测试以源代码为基本对象,是对软件的过 程性细节做细致的检查,允许测试人员利用程序内 部的逻辑结构及有关信息,设计或选择测试用例, 对程序所有逻辑路径进行测试,通过在不同点检查 程序状态,确定实际状态是否与预期的状态一致。
2.计算环路复杂度,又称为圈复杂度
❖ 案例分析
3.列出程序中形成的基本路径集合
路径1:4-14 路径2:4-6-7-14 路径3:4-6-8-10-13-414 路径4:4-6-8-11-13-414
❖ 案例分析
4.推导出可以确保集合中每条独立路径都被执行的 测试用例。
2
1
4
3
分析控制流图:
1. 节点数: 9 2. 判断节点数: 3 3. 边数: 11 4. 区域数: 4
程 序 流 程
控 制 流 图
图
程序的环路复杂性给出了程序基本路径集中的 独立路径条数,这是确保程序中每个可执行语句至 少执行一次所必需的测试用例数目的上界。
程序环路复杂性计算方法(三种):
(1)流图中区域的数量对应于环形复杂度; 4. (2)给定流图G的环形复杂度V(G),定义 为V(G)=E-N+2, E是流图中边的数量, N是流图中节点的数量。 V(G)=11-9+ 2. (3) V(G)=P+1, P是流图G中的判定节 点数。 V(G)=3+1
基本路径测试方法PPT精品文档

4
▪ 下面这一程序流程图描述了最多输入50个学生成绩 存在Score中(以–1作为输入结束标志),计算其中有 效的学生分数(0-100分)的个数、总分数和平均值。
举例
5
圆圈代表结点,代表 一条或多条语句
箭头线称为边,代表 控制流
流图
由边和结点围成的面积称为区域,当
计算区域数时应该包括图外部未被围 起的部分,如图有R1-R6,共6块区域。
期望结果:根据输入的有效分数算出正确的 分数个数n1、总分sum和平均分average。
设计可强制执行基本集合中 每条路径的测试用例
19
5) 路径5(1-2-3-4-5-6-8-2…)的测试用例: score[i]=有效分数, 当i<50; score[k]>100, k< i ;
期望结果:根据输入的有效分数算出正确的 分数个数n1、总分sum和平均分average。
▪ 4.流图中一条边必须终止于一个 结点,即使这个结点不代表任何 语句。(实际相当于一个空语句)
由程序流程图 画出流图的注意事项
7
8
9
10
流图中线性无关的区域等于环形复杂度 R1-R6共6个区域,环形复杂度为6
计算流图 环形复杂度
11
流图G的环形复杂度V(G)=E-N+2。 其中,E是流图中边的条数,N是结点数。
基本路径测试方法
1
▪ 基本路径测试是一种白盒测试技术。
▪ 1.根据过程设计结果画出相应的流图
▪ 2.计算流图的环形复杂度
▪ 3.确定线性独立路径的基本集合
▪ 4.设计可强制执行基本集合中每条路 径的测试用例。
基本路径测试的主要步骤
基本路径法

控制流图
McCabe的导出强连接图
五个线性独立路径
P1:A,B,C,G
基
P2:A,B,C,B,C,G P3:A,B,E,F,G
P4:A,D,E,F,G
第5页/共23P页5:A,D,F,G
圈数计算
•令 • e是G中的边数。 • n是G中的节点数。 • p是G中的连通分量个数。
• 不增加从汇节点到源节点的边 • V(G)=e-n+2p
}
第16页/共23页
10.2.1 白盒测试技术
Step1 根据程序的逻辑结构画出流程图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
第17页/共23页
Step2 根据流程图画出流图
10.2.1 白盒测试技术
流 图 刻 画 了 程 序 的 控 制 结 构 , 但 不 涉 及 程 序 的 过 程 性 细节
• 节点:过程块,结合点,判定点
2. {
3. if ( temp == ">=")
4.
m_oper.Set CurSe l(0);
5. else if (temp == ">")
6.
m_oper.Set CurSe l(1);
7. else if ( temp == "==")
8.
m_oper.Set CurSe l(2);
第10页/共23页
10.2.1 白盒测试技术
第21页/共23页
Step4 对每条基本路径设计测试用例
10.2.1 白盒测试技术
对于路径1 – 11
✓ nPosX 取-1, nPosY取任意值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ex2=2p2 - p1
McCabe的基路径方法
• 核心思想
• 以程序控制流图中的线性独立环路为基
• 线性独立环路
• 一条路径,初始节点是终止节点 • 线性独立:至少拥有一条以上其它线性独立路径中没有
的边
• 线性独立环路数的数量即程序控制流图的圈数量
控制流图
McCabe的导出强连接图
五个线性独立路径
基本路径测试
基本路径测试
• 基本路径测试法是在程序控制流图的基础上,通 过分析控制构造的环路复杂性,导出基本可执行 路径集合,从而设计测试用例的方法。
• 设计出的测试用例要保证在测试中程序的每个基 本可执行路径至少执行一次。
流程图
流图
基本路径 测试用例
基路径测试—向量空间的启发
• 向量空间的基是相互独立的一组向量,基“覆盖”整 个向量空间,使得该空间中的任何其他向量都可 以用基向量来表示。
流程图和流图示意图
10.2 软件测试技术
11
1
2 模块流程图
3
6
4
7
8
5
9
10
1
程序流图
11 2,3
6
4,5
7
8
9 10
10.2.1 白盒测试技术
Step1 根据程序的逻辑结构画出流程图
void Func(int nPosX, int nPosY) {
while (nPosX > 0) {
int nSum = nPosX + nPosY;
• 路径加法就是一条路径后接另一条路径 • 乘法对应于路径的重复。
ex1=p2+p3-p1
ex2=2p2 - p1
McCabe的基路径方法
McCabe开发了一种算法,用于确定基路径集合
• 这种方法首先选择一个基线路径,应该对应某个 “正常案例”程序的执行。
• 接下来重复回溯基线路径,依次“翻转”每个判断点, 即当节点的外度≥2时,必须取不同的边。
if (nSum > 1) {
nPosX--;
nPosY--;
}
else {
if (nSum < -1) nPosX -= 2;
else nPosX -= 4;
}
}
// end of while
}
10.2.1 白盒测试技术
Step1 根据程序的逻辑结构画出流程图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
2
3
4
5
6
7
8
9
10
11
12
14
16 17
4.设计测试用例 根据第3步中给出的路径,设计测试用例如下:
基路径
Path 1 Path 2 Path 3 Path 4 Path 5 Path 6
传入参数
>= > == < <= +
预期调用
m_oper.SetCurSel(0) m_oper.SetCurSel(1) m_oper.SetCurSel(2) m_oper.SetCurSel(3) m_oper.SetCurSel(4) m_oper.SetCurSel(5)
✓ nPosX 取1, nPosY取-1
1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
✓ nPosX 取1, nPosY取-3
V(G) = P + 1
✓ V(G) = 3 + 1 = 4
1
程序流图
11 2,3
6
4,5
7
8
9 10
10.2.1 白盒测试技术
Step3 确定基本路径的集合
1 - 11 1 - 2, 3 - 4, 5 - 10 - 1 - 11 1 - 2, 3 - 6 - 7 - 9 - 10 - 1 - 11 1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
P1:A,B,C,G
基
P2:A,B,C,B,C,G P3:A,B,E,F,G
P4:A,D,E,F,G
P5:A,D,F,G
圈数计算
•令
• e是G中的边数。 • n是G中的节点数。 • p是G中的连通分量个数。
• 不增加从汇节点到源节点的边
• V(G)=e-n+2p
• 增加边后 V(G)=e-n+p
McCabe的基路径方法 • 通过定义加法和标量乘法的概念,强制使其看起 来像向量空间:
McCabe的基路径方法
弱点: 一、假设测试基路径集合是充分的
(实际未必)
二、向量运算用于程序路径的表达上, 没有意义。
基本路径测试用例生成
10.2 软件测试技术
基本路径
• 至少引入一个新语句或者新判断的程序执行通道
测试用例的设计方法
• 流程图 ==> 流图 ==> 基本路径 ==> 测试用例
10.2.1 白盒测试技术
Step2 根据流程图画出流图
流图刻画了程序的控制结构,但不涉及程序的过程性细节 • 节点:过程块,结合点,判定点 • 有向边
判定点不含复合条件,否则应按照下列方式增加判定点
If (a or b) Then X
Else Y
End If
谓词节点
a
X
b
X
Y
示例:流程图 => 流图
10.2.1 白盒测试技术
Step4 对每条基本路径设计测试用例
对于路径1 – 11
✓ nPosX 取-1, nPosY取任意值
1 - 2, 3 - 4, 5 - 10 - 1 - 11
✓ nPosX 取1, nPosY取1
对于路径1 - 2, 3 - 6 - 7 - 9 - 10 - 1 – 11
4.
m_oper.SetCurSel(0);
5. else if (temp == ">")
6.
m_oper.SetCurSel(1);
7. else if ( temp == "==")
8.
m_oper.SetCurSel(2);
9. else if( temp == "<=") 10. m_oper.SetCurSel(3); 11. else if ( temp == "<") 12. m_oper.SetCurSel(4); 13. else{ 14. m_oper.SetCurSel(5); 15. } 16. return; 17.}
在J处翻 P5:A-B-C-E-F-H-J-L-M-N转P1 O-最终
在B、F P6:A-B-D-E-F-G-O-最终 处翻转
不可 行
不可 行
基本路径测试——举例
• 例:为下列程序设计测试用例,使之满足 基本路径覆盖要求。
ቤተ መጻሕፍቲ ባይዱ
1. void ReadPara(CString temp)
2. {
3. if ( temp == ">=")
10.2.1 白盒测试技术
11
1
2 模块流程图
3
6
4
7
8
5
9
10
1
程序流图
11 2,3
6
4,5
7
8
9 10
10.2.1 白盒测试技术
Step3 确定基本路径的集合
基本路径
• 流图的Cyclomatic复杂度 正好是基本路径的数目
V(G) = E – N + 2
✓ V(G) = 11 - 9 + 2 = 4
基路径测试
考虑下列约束:经过C则必经过H,经过D则 必经过G
原始 P1:A-B-C-E-F-H-J-K-M-NO-最终
在B处翻 P2:A-B-D-E-F-H-J-K-M-N转P1 O-最终
在F处翻 P3:A-B-C-E-F-G-O-最终 转P1
在H处 P4:A-B-C-E-F-H-I-N-O-最终 翻转P1
• 因此,一组基向量在一定程度上可表示整个向量 空间的本质:空间中的一切都可以用基表示.
基路径测试—向量空间的启发
• 基对测试的潜在意义:如果可以把程序看做是一 种向量空间,则这种空间的基就是要测试的非常 有意义的元素集合。如果基没有问题,则可以期 望能够用基表达的一切都是没有问题的。
ex1=p2+p3-p1
1.画出这段代码的控制流图
2.计算环路复杂度 V(G)=19-14+1=6。
3.列出基本路径:
Path1:2-3-4-16-17 Path2:2-3-5-6-16-17 Path3:2-3-5-7-8-16-17 Path4:2-3-5-7-9-10-16-17 Path5:2-3-5-7-9-11-12-16-17 Path6:2-3-5-7-9-11-14-16-17