第10讲因果图法徐浙君主要内容•因果图法•案例分析因果图法的简介•等价类划分方法和边界值分析法都是着重考虑输入条件,并没有考虑到输入情况的各种组合,也没考虑到各个输入情况之间的相互制约关系。•因果图方法的思路是:从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转换为决策表。因果图法•使用因果图法的优点:(1)考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系。(2)能够帮助测试人员按照一定的步骤,高效率的开发测试用例。(3)因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明存在的不完整性和二义性。因果图•因果图中有4种因果关系的基本符号,通常在因果图中,用ci表示原因,ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。因果图c1e1恒等c1e1非~c1e1或c2c3∨c1e1与c2∧因果图•恒等:若原因出现,则结果出现;若原因不出现,则结果也不出现。•非(~):若原因出现,则结果不出现;若原因不出现,结果反而出现。•或(∨):若几个原因中有1个出现,则结果出现;若几个原因都不出现,则结果不出现。•与(∧):若几个原因都出现,结果才出现。若其中有1个原因不出现,则结果不出现。因果图中的约束•因果图中的约束•在实际问题中输入状态相互之间、输出状态相互之间可能存在某些依赖关系,称为“约束”。对于输入条件的约束有E、I、O、R四种约束,对于输出条件的约束只有M约束。因果图中的约束ab异(互斥)E•E约束(异):a和b中最多有一个可能为1,即a和b不能同时为1。因果图中的约束•I约束(或):a、b、c中至少有一个必须为1,即a、b、c不能同时为0。ab或(包含)Ic因果图中的约束•O约束(唯一):a和b必须有一个且仅有一个为1。ab唯一O因果图中的约束•R约束(要求):a是1时,b必须是1,即a为1时,b不能为0。Rab要求因果图中的约束•M约束(强制):若结果a为1,则结果b强制为0。Mab强制因果图用法的4个步骤1)分析程序规格说明的描述中哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类,而结果是输出条件。2)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。(在因果图中可以引入一些中间节点)3)将得到的因果图转换为决策表。4)为决策表中每一列所表示的情况设计一个测试用例。因果图法测试举例•例1:程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N;如果第二个字符不是数字,则给出信息M。因果图法测试举例(1)分析程序规格说明中的原因和结果:(2)画出因果图(编号为10的中间结点是导出结果的进一步原因):原因结果c1:第一个字符是#e1:给出信息Nc2:第一个字符是*e2:修改文件c3:第二个字符是一个数字e3:给出信息Mc1c2c3e110e2e3~∨E~∧因果图法测试举例(3)将因果图转换成如下所示的决策表:12345678条件:C1C2C310111110101110010111010100100000动作:e1e2e3不可能√√√√√√√√√测试用例#3#A*6*BA1GT规则选项因果图法测试举例(4)根据决策表中的每一列设计测试用例:测试用例编号输入数据预期输出1#3修改文件2#A给出信息M3*6修改文件4*B给出信息M5A1给出信息N6GT给出信息N和信息M案例分析(中国象棋走马下法)例2:以中国象棋中马的走法为例,请绘制出因果图和判定表。案例分析(中国象棋走马下法)马的走法说明:1、如果落点在棋盘外,则不移动棋子;2、如果落点与起点不构成日字型,则不移动棋子;3、如果落点处有自己方棋子,则不移动棋子;4、如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;5、如果不属于1-4条,且落点处无棋子,则移动棋子;6、如果不属于1-4条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子;7、如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。案例分析(中国象棋走马下法)第一步:分析原因和结果原因:1、落点在棋盘外;2、不构成日字;3、落点有自方棋子;4、绊马腿;5、落点无棋子;6、落点为对方棋子;7、落点为对方老将。结果:21、不移动;22、移动;23、移动己方棋子消除对方棋子;24、移动并战胜对方。案例分析(中国象棋跳马下法)第二步:画出因果图案例分析(中国象棋走马下法)第三步:转换成判定表案例分析(自动售货机)有一个处理单价为5角钱的饮料的自动售货机,其规格说明如下:(1)若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。(2)若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;(3)若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。请绘制出因果图和判定表。案例分析(自动售货机)第一步:分析原因和结果原因:1、售货机有零钱找2、投入1元硬币3、投入5角硬币4、押下橙汁按钮5、押下啤酒按钮结果:21、售货机〖零钱找完〗灯亮22、退还1元硬币23、退还5角硬币24、送出橙汁饮料25、送出啤酒饮料案例分析(自动售货机)第二步:画出因果图所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:11、投入1元硬币且押下饮料按钮12、押下〖橙汁〗或〖啤酒〗的按钮13、应当找5角零钱并且售货机有零钱找14、钱已付清案例分析(自动售货机)第二步:画出因果图案例分析(自动售货机)第三步:转换成判定表因果图法总结•优点1、因果图法能够帮助我们按照一定步骤,高效的选择测试用例,设计多个输入条件组合用例。2、因果图分析还能为我们指出,软件规格说明描述中存在的问题。3、可以依据因果图检验需求的逻辑和程序未来应包含的函数或方法。•缺点1、输入条件与输出结果的因果关系,有时难以从软件需求规格说明书得到。2、即使得到了这些因果关系,也会因为因果关系复杂导致因果图非常庞大,测试用例数目极其庞大(需要使用正交表法简化)。测试方法的选择•为了最大程度地减少测试遗留的缺陷,同时也为了最大限度地发现存在的缺陷,在测试实施之前,测试工程师必须确定将要采用的测试策略和测试方法,并以此为依据制定详细的测试方案。通常,一个好的测试策略和测试方法必将给整个测试工作带来事半功倍的效果。测试方法的选择•如何才能确定好的测试策略和测试方法呢?通常,在确定测试方法时,应该遵循以下原则:•根据程序的重要性和一旦发生故障将造成的损失来确定测试等级和测试重点。•认真选择测试策略,以便能尽可能少地使用测试用例,发现尽可能多的程序错误。因为一次完整的软件测试过后,如果程序中遗留的错误过多并且严重,则表明该次测试是不足的,而测试不足则意味着让用户承担隐藏错误带来的危险,但测试过度又会带来资源的浪费。因此,测试需要找到一个平衡点。测试方法的选择•以下是各种测试方法选择的综合策略,可在实际应用过程中参考。•首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率的最有效方法。•在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。•对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。•如果程序的功能说明中含有输入条件的组合情况,则应在一开始就选用因果图法。Q&A