
测试理论知识基础资料整理.docx
10页语句覆盖:设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次复杂的程序不可能达到语句的完全覆盖,复杂的程序不可能达到语句的完全覆盖 语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句数量) 判定覆盖:也叫做分支覆盖,含义是:在测试的时候设计若干个测试用例,运行被测程序,使得程序中的每个判断至少被取真值和假值一次,即真分支和假分支一次比语句覆盖稍强的覆盖标准是判定覆盖 判定覆盖率=(判定结果被评价的次数)/(判定结果的总数) 条件覆盖:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)判定/条件覆盖:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次判定条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数) 组合条件覆盖:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次显然满足组合条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的,但不一定满足路径覆盖路径测试:涉及足够多的测试用例,要求覆盖程序中所有可能的路径。
路径覆盖率=(至少被执行到一次的路径数)/(总的路径数)功能覆盖率(Function Coverage)属于黑盒测试范畴功能覆盖率中还有一种覆盖称之为接口覆盖,又叫做入口点覆盖其含义是设计一定量的测试用例,使得系统的每个接口都被测试到功能覆盖率中最常见的是需求覆盖,其含义是通过设计一定的测试用例,要求每个需求点都被测试到 需求覆盖率=(被验证到的需求数量)/(总的需求数量)使用覆盖率的基本原则:(1)覆盖率不是目的,只是一种手段,一种度量2)你不可能针对所有的覆盖率指标去进行测试; (3)不要追求绝对 100%的覆盖率 衡量采用哪种覆盖率进行度量的 5 个纬度(推荐作为重点考虑的角度)(1)可自动化性 (2)可获得性 (3)可理解性 (4)可维护性 (5)完整性目标:使用最少的测试用例来达到所需的覆盖要求结构化程序是由三种基本控制结构组成的1)顺序结构---构成串行操作 (2)选择结构---构成分支操作 (3)循环结构---构成循环操作流程图简称 N-S 图N-S 图也被称为盒图流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程在使用过程中,人们发现流程线不一定是必需的,为此,人们设计了一种新的流程图,它把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成右图给出了 4 种基本控制结构的 N-S 图该例子的计算过程: 如何使用覆盖率技 巧 : 由 里 层 到 外 层 查 白 框 , 左 右 相 加 , 上 下 相 乘 。
基本路径测试:前提条件:测试进入的前提条件是在测试人员已经对被测试对象有了一定的了解,基本上明确了被测试软件的逻辑结构测试过程:过程是通过针对程序逻辑结构设计和加载测试用例,驱动程序执行,以对程序路径进行测试测试结果是分析实际的测试结果与预期的结果是否一致 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例包括以下 4 个步骤和一个工具方法:1. 程序的控制流图:描述程序控制流的一种图示方法2. 程序环路复杂度:McCabe 复杂性度量从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界3. 导出测试用例:根据环路复杂度和程序结构设计用例数据输入和预期结果4. 准备测试用例:确保基本路径集中的每一条路径的执行控 制 流 图 的 符 号流图是对待测试程序过程处理的一种表示流图使用下面的符号描述逻辑控制流流图只有二种图形符号图中的每一个圆称为流图的结点,代表一条或多条语句流图中的箭头称为边或连接,代表控制流顺 ifCasewhile until控 制 流 图如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR)连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。
例 如 :1 if a or b2 x3 else4 y对 应 的 逻 辑 为 :基本路径测试 - 计算圈复杂度 计算环路复杂度环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界独立路径必须包含一条在定义之前不曾用到的边有以下三种方法计算环路复杂度:1. 流图中区域的数量对应于环型的复杂性;2. 给定流图 G 的环路复杂度 V(G),定义为 V(G)=E-N+2,E 是流图中边的数量,N 是流图中结点的数量;3. 给定流图 G 的环路复杂度 V(G),定义为 V(G)=P+1,P 是流图 G 中判定结点的数量 基 本 路 径 测 试例4 : 有 下 面 的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",b);6. printf("side c is %d",c);7. if((a
决策表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏因此,利用决策表能够设计出完整的测试用例集合在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作决策表很适合于处理这类问题决策表的组成:决策表通常由以下 4 部分组成:条件桩—列出问题的所有条件条件项—针对条件桩给出的条件列出所有可能的取值动作桩—列出问题规定的可能采取的操作动作项—指出在条件项的各组取值情况下应采取的动作 因果图方法:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况采用因果图法设计测试用例的步骤: 1) 分析软件规格说明描述中, 哪些是原因(即输入条件 或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符2) 分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
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, 则 结正交试验法:利用因果图来设计测试用例时,作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到.往往因果关系非常庞大,导致利用因果图而得到的测试用例数目多得惊人,给软件测试带来沉重的负担.为了有效的, 合理地减少测试的工时与费用,可利用正交试验法进行测试用例的设计.行数(Runs):正交表中的行的个数,即试验的次数因素数(Factors):正交表中列的个数水平数(Levels):任何单个因素能够取得的值的最大个数正交表中的包含的值为从 0 到数“水平数-1”或从 1 到“水平数”正交表的表示形式: L 行数 (水平数 因素数 )算法:因素数*(水平数-1)+1=行数划分等价类的规则“如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。
如果输入条件代表集合的某个元素,则可定义一个有效等价类和一个无效等价类如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)如果规定了输入数据必须遵循的规则,可确定 一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类 状态图的定义状态图用来建模对象是如何改变其状态以响应事件和展示对象从创建到删除的生命周期状态定义为对象行为在某一个时刻的快照或者转折点例如,计算机的状态可以定义为开机、启动、工作中、空闲、关机和离线等状态图的任务就是用来描述一个对象所处的可能状态以及状态之间的转移,并给出状态变化序列的起点与终点状态图由状态、转移和事件组成联合使用状态和转移可以更好地建模它们,有时需要包含决策点和同步条来显示更高层次的细节信息 基本状态显示为圆角矩形开始状态和结束状态标记符是指示模型的开始和结束状态的特殊标记符模型中的开始状态是一个实心点结束状态是带有圆圈的实心点模型不必同时具有开始和结束状态,因为模型可以总是运行,从不停止。
状态图中可以包含 0 到多个开始状态状态图中也可以包含多个结束状态,每一个都表示一个模型能够终止的点 为了获得下一个日期,NextDate 函数执行如下操作: 如果输入日期不是当月最后一天,则把 day 变量的值加 1; 如果输入日期是 1~11 月份中某月的最后一天,则把 day 变量的值复位为 1,month 变量的值加1; 如果输入日期是 12 月的最后一天,则 day 变量和 month 变量的值都复位为 1,year 变量的值。
