第九章路径测试东北大学软件学院程序图东北大学软件学院定义给定采用命令式程序设计语言编写的一段程序,其程序图是一种有向图,图中的节点表示语句片段,边表示控制流。(完整语句是“默认”的语句片段)。三角形程序的程序图东北大学软件学院4567891011121321141516171819202223DD-路径东北大学软件学院结构性测试最著名的形式以叫做决策到决策路径(DD-路径)的结构为基础(Miller,1977)。这个名称指语句的一种序列,按照Miller的话说,从决策语句的“出路”开始,到下一个决策语句的“入路”结束,在这种序列中没有内部分支,因此对应的节点像排列起来的一行多米诺骨牌,当第一张牌推倒后,序列中的其他牌也会倒下。DD-路径与有向图的关系东北大学软件学院DD-路径可通过有向图中的节点路径定义,可以叫做路径链,其中链是一条起始和终止节点不同的路径,并且每个节点都满足内度=1和外度=1。初始节点终止节点内部节点DD-路径的定义东北大学软件学院定义DD-路径是程序图中的一条链,使得:情况1:由一个节点组成,内度=0。情况2:由一个节点组成,外度=0。情况3:由一个节点组成,内度≥2或外度≥2。情况4:由一个节点组成,内度=1并且外度=1。情况5:长度≥1的最大链。三角形问题的DD-路径类型东北大学软件学院程序图节点DD-路径名称定义情况4第一15-8A59B310C411D412E313F314H315I416J317K418L419M320N321G422O323最后2三角形程序的DD-路径图东北大学软件学院第一ABCDEFGHIJKLMNO最后程序的DD-路径图东北大学软件学院定义给定采用命令式语言编写的一段程序,其DD-路径图是有向图。其中,节点表示其程序图的DD-路径,边表示连续DD-路径之间的控制流。测试覆盖指标东北大学软件学院测试覆盖指标,是度量一组测试用例覆盖(或执行)某个程序程度的工具。指标覆盖描述C0所有语句C1所有DD-路径(判断分支)C1P所有判断的每种分支C2C1覆盖+循环覆盖CdC1覆盖+DD-路径的所有依赖对偶CMCC多条件覆盖Cik包含最多k次循环的所有程序路径(通常k=2)Cstat路径具有“统计重要性”的部分C∞所有可能的执行路径语句与判断测试东北大学软件学院这些覆盖指标要求找出一组测试用例,使得当执行时,程序图的所有节点都至少走过一次。DD-路径测试东北大学软件学院如果每条DD-路径都被遍历(C1指标),则我们知道每个判断分支都被执行,这要求遍历DD-路径图中的每条边。DD-路径的依赖对偶东北大学软件学院Cd涉及第10章将要讨论的问题,即数据流测试。DD-路径对偶之间的最常见的依赖关系是定义/引用关系,其中变量在一个DD-路径中定义(接受值),在另一个DD-路径中引用。多条件覆盖东北大学软件学院不是直接遍历判断是到其真或假分支,而应该研究可能出现分支的不同方式。这里可以看到一种有意思的折衷:语句复杂性和路径复杂性。多条件覆盖可保证这种复杂性不会被DD-路径覆盖所掩盖。循环覆盖东北大学软件学院串联循环是不相交的简单循环序列。嵌套循环是一个循环包含在另一个循环中的循环。Beizer所说的复杂循环,如果跳转到某个循环内(或跳转出),而这个分支位于其他循环的内部,就是复杂循环。循环覆盖示意图东北大学软件学院第一ABCD最后第一ABCD最后第一ABCD最后测试覆盖分析器东北大学软件学院覆盖分析器是一类测试工具,可用于自动化测试支持。基路径测试东北大学软件学院空间中的一切都可以用基表示,并且如果一个基元素被删除,则这种覆盖特性也会丢失。对测试的潜在意义是,如果可以把程序看做是一种向量空间,则这种空间的基就是要测试的非常有意义的元素集合。如果基没有问题,则可以希望能够用基表述的一切都是没有问题的。McCabe的控制图东北大学软件学院ABDEFCG线性独立路径数是:V(G)=e-n+2p=10-7+2*1=5McCabe的强连接图东北大学软件学院线性独立环路的数量:V(G)=e-n+p=11-7+1=5ABDEFCG12345678910McCabe的基路径方法东北大学软件学院ABDEFCG12345678910p1:A,B,C,Gp2:A,B,C,B,C,Gp3:A,B,E,F,Gp4:A,D,E,F,Gp5:A,D,F,G路径A、B、C、B、E、F、G是基和p2+p3-p1路径A、B、C、B、C、B、C、G是线性合并2p2-p1McCabe的路径/边的关联矩阵东北大学软件学院所经过的路径/边12345678910p1:A,B,C,G1001000010p2:A,B,C,B,C,G1012000010p3:A,B,E,F,G1000100101p4:A,D,E,F,G0100010101p5:A,D,F,G0100001001Ex1:A,B,C,B,E,F,G1011100101Ex2:A,B,C,B,C,B,C,G1023000010McCabe的基路径算法东北大学软件学院McCabe接下来开发了一种算法过程(叫做基线方法),用于确定基路径集合。这种方法首先选择一个基线路径,应该对应某个“正常案例”程序执行。这种方法有一定的随意性,McCabe建议选择都有尽可能多的判断节点的路径。接下来重新回溯基线路径,依次“翻转”每个判断点,即当节点的外度≥2时,必须取不同的边。McCabe的基路径算法举例东北大学软件学院1.A、B、C、B、E、F、G的路径为基线ABDEFCG123456789102.A、D、E、F、G3.A、D、F、G4.A、B、E、F、G5.A、B、C、G三角形问题应用McCabe的基路径方法东北大学软件学院第一ABCDEFGHIJKLMNO最后原始p1:A-B-C-E-F-H-J-K-M-N-O-最后不等边三角形在B处翻转p1p2:A-B-D-E-F-H-J-K-M-N-O-最后不可行在F处翻转p1p3:A-B-C-E-F-G-O-最后不可行在H处翻转p1p4:A-B-C-E-F-H-I-N-O-最后等边三角形在J处翻转p1p5:A-B-C-E-F-H-J-L-M-N-O-最后等腰三角形三角形问题应用McCabe的方法的问题东北大学软件学院McCabe的过程成功地标识了在拓扑结构上独立的基路径,但是如果存在矛盾的语义依赖关系,拓扑结构上可行的路径在逻辑上有可能不可行。三角形问题应用McCabe的方法解决方法东北大学软件学院如果仔细考虑到这个问题,可以找出两条规则:如果经过节点C,则必须经过节点H。如果经过节点D,则必须经过节点G。p1:A-B-C-E-F-H-J-K-M-N-O-最后不等边三角形p6:A-B-D-E-F-G-O-最后非三角形p4:A-B-C-E-F-H-I-N-O-最后等边三角形p5:A-B-C-E-F-H-J-L-M-N-O-最后等腰三角形结构化程序设计构造东北大学软件学院串行IF-ThenIF-Then-Else条件前测试环路后测试环路三角形问题结构化程序设计构造压缩东北大学软件学院第一ABCDEFGHIJKLMNO最后a第一AaFGHIJKLMNO最后b三角形问题结构化程序设计构造压缩东北大学软件学院第一AaFGHIbNO最后c第一AaFGcO最后d第一Aad最后e第一e非结构化程序的测试东北大学软件学院测试人员的基本原则是:具有高圈复杂度的程序需要更充分的测试。采用圈复杂度指标的机构,大多数都确定了某种最大可接受复杂度指导方针,一般都选择V(G)=10。如果单元的基本复杂度超过了指导方针规定,则最好的选择常常是解决非结构化问题。指导方针与观察东北大学软件学院基路径测试给出了必须进行的测试的下限。如果发现同一条程序路径被多个功能性测试性用例遍历,就可以怀疑这种冗余不会发现新的缺陷。如果没有达到一定的DD-路径覆盖,则可以知道在功能性测试用例中存在漏洞。利用源代码的性质标识合适的覆盖指标,然后再使用这些指标交叉检查功能性测试用例。总结东北大学软件学院•DD-路径•基路径测试,McCabe基路径测试方法