1、语句覆盖:设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次复杂的程序不可能达到语句的完全覆盖,复杂的程序不可能达到语句的完全覆盖 语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句数量) 判定覆盖:也叫做分支覆盖,含义是:在测试的时候设计若干个测试用例,运行被测程序,使得程序中的每个判断至少被取真值和假值一次,即真分支和假分支一次。比语句覆盖稍强的覆盖标准是判定覆盖 判定覆盖率=(判定结果被评价的次数)/(判定结果的总数) 条件覆盖:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作
2、数值的总数)判定/条件覆盖:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。判定条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数) 组合条件覆盖:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足组合条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的,但不一定满足路径覆盖路径测试:涉及足够多的测试用例,要求覆盖程序中所有可能的路径。 路径覆盖率=(至少被执行到一次的路径数)/(总的路径数)功能覆盖率(Function Coverage)
3、属于黑盒测试范畴。功能覆盖率中还有一种覆盖称之为接口覆盖,又叫做入口点覆盖。其含义是设计一定量的测试用例,使得系统的每个接口都被测试到。功能覆盖率中最常见的是需求覆盖,其含义是通过设计一定的测试用例,要求每个需求点都被测试到。 需求覆盖率=(被验证到的需求数量)/(总的需求数量)使用覆盖率的基本原则:(1)覆盖率不是目的,只是一种手段,一种度量。(2)你不可能针对所有的覆盖率指标去进行测试; (3)不要追求绝对 100%的覆盖率。 衡量采用哪种覆盖率进行度量的 5 个纬度(推荐作为重点考虑的角度)(1)可自动化性 (2)可获得性 (3)可理解性 (4)可维护性 (5)完整性目标:使用最少的测试
4、用例来达到所需的覆盖要求结构化程序是由三种基本控制结构组成的。(1)顺序结构-构成串行操作 (2)选择结构-构成分支操作 (3)循环结构-构成循环操作流程图简称 N-S 图。N-S 图也被称为盒图流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程。在使用过程中,人们发现流程线不一定是必需的,为此,人们设计了一种新的流程图,它把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成右图给出了 4 种基本控制结构的 N-S 图该例子的计算过程: 如何使用覆盖率技 巧 : 由 里 层 到 外 层 查 白 框 , 左 右 相 加 , 上 下 相 乘 。基本路
5、径测试:前提条件:测试进入的前提条件是在测试人员已经对被测试对象有了一定的了解,基本上明确了被测试软件的逻辑结构。测试过程:过程是通过针对程序逻辑结构设计和加载测试用例,驱动程序执行,以对程序路径进行测试。测试结果是分析实际的测试结果与预期的结果是否一致。 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下 4 个步骤和一个工具方法:1. 程序的控制流图:描述程序控制流的一种图示方法。2. 程序环路复杂度:McCabe 复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试
6、用例数目的上界。3. 导出测试用例:根据环路复杂度和程序结构设计用例数据输入和预期结果。4. 准备测试用例:确保基本路径集中的每一条路径的执行。控 制 流 图 的 符 号流图是对待测试程序过程处理的一种表示。流图使用下面的符号描述逻辑控制流。流图只有二种图形符号图中的每一个圆称为流图的结点,代表一条或多条语句。流图中的箭头称为边或连接,代表控制流。顺 ifCasewhile until控 制 流 图如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR)连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。例 如 :1 if a or b2 x3 els
7、e4 y对 应 的 逻 辑 为 :基本路径测试 - 计算圈复杂度 计算环路复杂度环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以下三种方法计算环路复杂度:1. 流图中区域的数量对应于环型的复杂性;2. 给定流图 G 的环路复杂度 V(G),定义为 V(G)=E-N+2,E 是流图中边的数量,N 是流图中结点的数量;3. 给定流图 G 的环路复杂度 V(G),定义为 V(G)=P+1,P 是流图 G 中判定结点的数量。 基 本 路 径 测 试例4 : 有
8、下 面 的C 函 数 , 用 基 本 路 径 测 试 法 进 行 测 试void Sort(int iRecordNum,int iType)int x=0;int y=0;while (iRecordNum- 0)if(0= =iType) x=y+2; break;elseif (1= =iType)x=y+10;elsex=y+20;mian()1. int a,b,c;2. boolean IsTraingle3. scanf(“a triangle,%d%d%d“,a,b,c);4. printf(“side a is %d“,a);5. printf(“side b is %d“,
9、b);6. printf(“side c is %d“,c);7. if(ab+c)and(ba+c)and(ca+b)8. then IsTrangle=True;9. else IsTrangle=False;10. if(IsTrangle)11. then if(a=b)and(b=c)12. then printf(“equilateral“)13. else if(a!=b)and(a!=c)and(b!=c)14. Then printf(“scalene“)15. else printf(“Isosceles“)16. else printf(“not a triangle“)
10、811141610151243139765三 角 形 程 序 的 程 序 控 制 流 程 图决策表:决策表是分析和表达多逻辑条件下执行不同操作的情况的工具在所有的黑盒测试方法中,基于决策表(也称判定表)的测试是最为严格、最具有逻辑性的测试方法。决策表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题。决策表的组成:决策表通常由以下 4 部分组成:条件桩列出问题的所有条件条件项针对条件桩给出
11、的条件列出所有可能的取值动作桩列出问题规定的可能采取的操作动作项指出在条件项的各组取值情况下应采取的动作 因果图方法:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。采用因果图法设计测试用例的步骤: 1) 分析软件规格说明描述中, 哪些是原因(即输入条件 或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。2) 分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特
12、殊情况, 在因果图上用一些记号表明约束或限制条件。 4) 把因果图转换为判定表。5) 把判定表的每一列拿出来作为依据,设计测试用例E约 束( 异):a,b最 多 有一 个 可 能为1, 不 能 同时 为1. 意 思是a,b可 以I约 束(或):a,b,c中至 少 有一 个 必须 为1,不 能 同O约 束(惟 一): a和b 必 须有 一 个且 仅 有R约 束(要 求):a是1时,b 必须 是1,即a 为1时,b 不能 为0M约 束( 屏蔽): 对 输 出条 件 的 约束, 若 结 果a为1, 则 结正交试验法:利用因果图来设计测试用例时,作为输入条件的原因与输出结果之间的因果关系,有时很难从软
13、件需求规格说明中得到.往往因果关系非常庞大,导致利用因果图而得到的测试用例数目多得惊人,给软件测试带来沉重的负担.为了有效的, 合理地减少测试的工时与费用,可利用正交试验法进行测试用例的设计.行数(Runs):正交表中的行的个数,即试验的次数因素数(Factors):正交表中列的个数。水平数(Levels):任何单个因素能够取得的值的最大个数。正交表中的包含的值为从 0 到数“水平数-1”或从 1 到“水平数”正交表的表示形式: L 行数 (水平数 因素数 )算法:因素数*(水平数-1)+1=行数划分等价类的规则“如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。如果输入条件代
14、表集合的某个元素,则可定义一个有效等价类和一个无效等价类。如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。如果规定了输入数据必须遵循的规则,可确定 一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。 状态图的定义状态图用来建模对象是如何改变其状态以响应事件和展示对象从创建到删除的生命周期。状态定义为对象行为在某一个时刻的快照或者转折点。例如,计算机的状态可以定义为开机、启动、工作中、空闲、关机和离线等
15、。状态图的任务就是用来描述一个对象所处的可能状态以及状态之间的转移,并给出状态变化序列的起点与终点状态图由状态、转移和事件组成。联合使用状态和转移可以更好地建模它们,有时需要包含决策点和同步条来显示更高层次的细节信息 基本状态显示为圆角矩形开始状态和结束状态标记符是指示模型的开始和结束状态的特殊标记符。模型中的开始状态是一个实心点。结束状态是带有圆圈的实心点。模型不必同时具有开始和结束状态,因为模型可以总是运行,从不停止。状态图中可以包含 0 到多个开始状态。状态图中也可以包含多个结束状态,每一个都表示一个模型能够终止的点。 为了获得下一个日期,NextDate 函数执行如下操作: 如果输入日
16、期不是当月最后一天,则把 day 变量的值加 1; 如果输入日期是 111 月份中某月的最后一天,则把 day 变量的值复位为 1,month 变量的值加1; 如果输入日期是 12 月的最后一天,则 day 变量和 month 变量的值都复位为 1,year 变量的值加1。 关于最后一天的判断: 如果是有 31 天的月份(1,3,5,7,8,10,12),day 变量值为 31; 如果是有 30 天的月份(4,6,9,11), day 变量值为 30; 如果是有 29 天的月份(闰年的 2 月),day 变量值为 29; 如果是有 28 天的月份(非闰年的 2 月),day 变量值为 28。
17、完成决策表 某软件的一个模块的需求规格说明书中描述:“对于功率大于 50 马力的机器或者维修记录不全的或已经运行 10 年以上的机器应予以优先的维修处理” 。这里假定“维修记录不全”和“优先维修处理”有严格的定义。请建立该需求的决策表,并绘制出化简(合并规则)后的决策表某城市电话号码由三部分组成,分别是:地区码 空白或三位数字;前 缀 非0或1开头的三位数字;后 缀 4 位数字。假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的电话号码。要求:(1)请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,给出测试用例表。(2)如果所生成的测试用例不够全面,请考虑用
18、别的测试 方法生成一些补充的测试用例。有一个处理单价为 5 角钱的饮料的自动售货机,相应规格说明如下: 若投入 5 角钱或 1 元钱的硬币,按下橙汁或啤酒的按钮,则相应的饮料就送出来。 (每次只投入一个硬币,只押下一种饮料的按钮) 如投入 5 角的硬币,按下按钮后,总有饮料送出。 若售货机没有零钱找,则一个显示零钱找完的红灯会亮,这时再投入 1 元硬币并按下按钮后,饮料不送出来而且 1 元硬币也退出来。 若有零钱找,则显示零钱找完的红灯不会亮,若投入 1 元硬币及按饮料按钮,则送出饮料的同时找回 5 角硬币。请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,设计出相应的测试用
19、例某厂对一部分职工重新分配工作,分配原则是:年龄不满 20 岁,文化程度是小学者脱产学习,文化程度是中学者当电工;年龄满 20 岁但不足 50 岁,文化程度是小学或中学者,男性当钳工,女性当车工;文化程度是大学者技术员;年龄满 50 及 50 以上,文化程度是小学或中学者当材料员,文化程度是大学者当技术员。 请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,设计出相应的测试用例。在供应商业务处理中,有一个“检查订货单”功能:当客户订货款项大于 5000 元时,如果客户拖欠款超过 60 天,向客户发一份拒绝供货备忘录,在客户没有还清货款前不发供货单;如果客户拖欠款没有超过 60
20、 天,可以发供货单如客户订货款项未超过 5000 元,而客户拖欠款超过 60 天,仍可以发供货单但还要发一份催款通知单;如果客户拖欠款没有超过 60 天,可以发供货单请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,设计出相应的测试用例。某软件规格说明书包含这样的要求:第一列字符必须是 A 或 B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息 L;如果第二列字符不是数字,则给出信息M。有一个处理单价为 5 角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入 5 角钱或 1 元钱的硬币,押下橙汁或啤酒的按钮,则相应的饮料就
21、送出来。若售货机没有零钱找,则一个显示零钱找完的红灯亮,这时在投入 1 元硬币并押下按钮后,饮料不送出来而且 1 元硬币也退出来;若有零钱找,则显示零钱找完的红灯灭,在送出饮料的同时退还 5 角硬币。某公司给购货在 5 万元以上的顾客以不同的折扣率。如果这样的顾客最近 3 个月无欠款,则折扣率为15%;虽然有欠款但与公司已经有 10 年以上的贸易关系,则折扣率为 10%,否则折扣率为 5%。 有一个处理单价为 1 元 5 角的盒装饮料的自动售货机软件。若投入 1 元 5 角硬币,按下“可乐” 、 “雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是 2 元硬币,在送出饮料的同时退还 5 角硬
22、币 某软件的一个模块的需求规格说明书中描述:(1)年薪制员工:严重过失,扣年终风险金的 4%;过失,扣年终风险金的 2%。(2)非年薪制员工:严重过失,扣当月薪资的 8%;过失,扣当月薪资的 4%。某电力公司有 A、B、C、D 四类收费标准,居民用电 100 度/月 按 A 类收费 100 度/月按 B 类收费动力用电 10000 度/月,非高峰,B 类收费 10000 度/月,非高峰,C 类收费10000 度/月, 高峰,C 类收费 10000 度/月, 高峰,D 类收费找零钱最佳组合 假设商店货品价格(R) 都不大于 100 元(且为整数) ,若顾客付款(P)在 100 元内,现有一个程序
23、能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少) 。 假定此商店的货币面值只包括:50 元(N50)、10 元(N10)、 5 元(N5)、1 元(N1) 四种。请结合等价类划分法和边界值分析法为上述程序设计出相应的测试用例。一个假想的保险金计算程序,根据两个因素计算半年保险金:投保人的年龄和驾驶历史记录。保险金=基本保险费率年龄系数安全驾驶折扣年龄系数是投保人年龄的函数,如果投保人驾驶执照上的当前点数(根据交通违规次数确定)低于与年龄有关的门限,则给予安全驾驶折扣。书面保险政策的驾驶人年龄范围为 16100 岁,如果投保人有12 点,则驾驶人的执照就会被吊销(因此不需要保险) 。基本保险费率随时间变化,对于这个例子,是每半年 500 美元。