白盒测试-基本路径测试法(实例)

上一篇 / 下一篇  2011-08-24 15:59:36 / 个人分类:用例设计

理论知识:McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。
!LU#tB5w Y7O)P2i d.n*s434343    控制流图的一个重要性质是它的可规约性(reducibility)。如果程序中不存在从循环外跳到循环内的goto语句,那么这个程序对应的控制流图是可规约的(reducible),反之这个控制流图就是不可规约的(irreducible)。因此,模块符合结构化程序设计的准则是控制流图可规约的基础。51Testing软件测试网p&?}$V'}`
    程序环路复杂性也即为McCabe复杂性度量,它一般常用圈复杂度来描述,记录为V(G)。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的Bug数和圈复杂度有着很大的相关性。
8ldCgS434343    圈复杂度的计算方法很简单,计算公式为:
V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1
51Testing软件测试网"L"VMrL(I*x.{
    对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。51Testing软件测试网8^\EI"Ke%x D

 

脚本的包含两个模块:发送周环比提醒和历史最佳提醒,这两个模块是并行的关系,且在运用基本路径覆盖法设计用例时,建议圈复杂度最好不要超过18个,所以分模块来设计测试用例

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

包括以下4个步骤

第一步:画出控制流图

1)流程图:在控制流图前,先需要根据产品需求,走读并分析代码的逻辑结构,分别画出两个模块流程图:

周环比流程图:

 

2)控制流图:将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)

结点:在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点;

边:流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)

区域:由边和结点限定的范围称为区域。计算区域时应包括图外部未闭合的范围

周环比控制流图:

 

第二步:计算圈复杂度

圈复杂度(Cyclomatic complexity(环形复杂度)

*是一种为程序逻辑复杂性提供定量测度的软件度量;

*当该度量用于基本路径测试方法,计算所得的值给出了程序基本集的独立路径数量,确保所有语句至少执行一次而必须进行测试数量的上界。

*3种方法计算圈复杂度:

1V(G) =流图中区域个数(由边和结点限定的范围称为区域。

2V(G) =V(G)=E-N+2E是流图中边的数量,N是流图中结点的数量

3V(G)=P+1P是流图G中判定结点的数量

 

周环比控制流图圈复杂度计算:1)区域个数是142V(G)=33-21+2=143V(G)=13+1=14

历史最佳控制流图复杂度计算:1)区域个数是112V(G)=24-15+2=113V(G)=10+1=11

 

第三步:导出用例

根据圈复杂度的算法,可以得出对应数量的独立的路径,一条独立路径是指和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。

周环比用例:

路径11-21  卖家表不存在

结果:提示卖家表不存在

 

路径21-2-21卖家表为空,无数据

结果:不做周环比处理

 

路径31-2-3-2-21前提:单条数据 

卖家uin、历史最佳flag不存在 

结果:该条数据不做历史最佳处理

 

路径41-2-3-4-5-6-7-9-14-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag满足要求,访客数周环比小于等于0,支付金额数、购买转化率周环比flag都不满足要求。

结果:只发送访客数周环比降低提醒

 

路径51-2-3-4-5-6-8-9-14-19-20-2-21前提:单条数据 

卖家表、卖家uin、周环比flag存在,访客数周环比flag满足要求,访客数周环比大于0,支付金额数、购买转化率周环比flag都不满足要求。

结果:只发送访客数周环比提高提醒

 

路径61-2-3-4-9-10-11-12-14-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag和购买转化率周环比flag不满足要求,支付金额数周环比flag满足要求,支付金额数周环比小于0

结果:只发送支付金额数周环比降低提醒

 

路径71-2-3-4-9-10-11-13-14-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag和购买转化率周环比flag不满足要求,支付金额数周环比flag满足要求,支付金额数周环比大于0

结果:只发送支付金额数周环比提高提醒

 

路径81-2-3-4-9-14-15-16-18-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag和支付金额数周环比flag都不满足要求,购买转化率周环比flag满足要求,购买转化率周环比大于0

结果:只发送购买转化率周环比提高提醒

 

路径91-2-3-4-9-14-15-16-17-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag和支付金额数周环比flag都不满足要求,购买转化率周环比flag满足要求,购买转化率周环比小于等于0

结果:只发送购买转化率周环比降低提醒

 

路径101-2-3-4-5-9-10-11-12-14-15-16-17-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag、支付金额数周环比flag、购买转化率周环比flag都满足要求;访客数周环比不存在,支付金额周环比、购买转化率周环存在,且小于0

结果:访客数周环比不存在时,只发送支付金额周环比和购买转化率周环比降低提醒。

 

路径111-2-3-4-5-6-7-9-10-14-15-16-17-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag、支付金额数周环比flag、购买转化率周环比flag都满足要求;访客数周环比和购买转化率周环比都存在,且小于0支付金额周环比不存在。

结果:支付金额周环比不存在时,只发送访客数周环比和购买转化率周环比降低提醒。

 

路径121-2-3-4-5-6-7-9-10-11-12-14-15-19-20-2-21前提:单条数据

卖家表、卖家uin、周环比flag存在,访客数周环比flag、支付金额数周环比flag、购买转化率周环比flag都满足要求;访客数周环比和支付金额周环比都存在,且小于0购买转化率周环比不存在。

结果:购买转化率周环比不存在时,只发送支付转化率周环比和购买转化率周环比

 

路径131-2-3-4-9-14-19-2-21前提:单条数据 

卖家表存在、周环比flag存在,卖家uin不存在,访客数周环比flag、支付金额数周环比flag、购买转化率周环比flag都不满足要求;

第二条数据:卖家表、卖家uin、周环比flag存在;访客数周环比flag、支付金额数周环比flag、购买转化率周环比flag都满足要求;访客数周环比、支付金额周环比、购买转化率周环比都小于等于0

结果:不做周环比处理

第二条数据发送访客数、支付金额数和购买转化率周环比都降低提醒

 

路径141-2-3-4-5-6-8-9-14-19-20-2-3-4-5-6-7-9-14-19-20-2-21前提:多条数据(两条)

卖家表、卖家uin、周环比flag存在;访客数周环比flag满足要求,支付金额数周环比flag和购买转化率周环比flag都不满足要求;第一条数据访客数周环比大于0,第二天数据访客数周环比小于0

结果:第一条数据发送访客数周环比提高提醒;第二条数据发送访客数周环比降低提醒

 


TAG: 圈复杂度 白盒 基本路径

引用 删除 gyhua09   /   2011-09-27 16:33:17
5
TT520的个人空间 引用 删除 TT520   /   2011-08-24 23:19:25
1
舞黠_testing 引用 删除 ginnyguo330   /   2011-08-24 16:33:21
欢迎拍砖,另一篇日志是被测代码
 

评分:0

我来说两句

Open Toolbar