




已阅读5页,还剩254页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试基础 第三章测试技术基础 1 本章学习内容 黑盒测试等价类划分法边界值分析法因果图法决策表法白盒测试逻辑覆盖测试基本路径测试测试用例设计 2 无法对程序进行完全测试 1 输入量太大 不可能测试程序对所有可能输入的响应 2 输出结果太多 3 软件实现途径太多 不可能测试到程序每一条可能的执行路径 4 软件规格说明没有客观标准 5 不能采用逻辑来证明程序的正确性 3 假设一个程序P有输入量X和Y及输出量Z 在字长为32位的计算机上运行 若X Y取整数 若进行穷举测试 可能采用的测试数据组 232 232 264如果测试一组数据需要1毫秒 一年工作365 24小时 完成所有测试需要5亿年 4 5 给出一个小程序的流程图 它包括了一个执行20次的循环 包含的不同执行路径数达520条 对每一条路径进行测试需要1毫秒 假定一年工作365 24小时 要想把所有路径测试完 需3170年 所以 无法对程序进行完全的测试 6 分类按照是否需要执行被测软件的角度静态测试和动态测试按照测试是否针对软件内部结构和具体算法白盒测试和黑盒测试 软件测试方法 7 按照开发阶段单元测试集成测试确认测试系统测试验收测试按照测试实施组织计划开发方测试用户测试 测试 第三方测试 8 静态测试与动态测试静态测试定义不运行被测程序通过其他手段达到检测目的对被测程序进行特性分析方法的总称静态的检查程序代码 界面或文档中可能存在的错误的过程测试活动需求评审设计评审代码检查 9 1 代码检查代码检查包括代码会审和走查 主要检查代码和设计的一致性 代码对标准的遵循 可读性 代码逻辑表达的正确性 代码结构的合理性等方面 在实际使用中 代码检查比动态测试更为有效 可以发现30 70 的逻辑设计和编码缺陷 10 代码会审是由一组人通过阅读 讨论和争议对程序进行静态分析的过程 代码审查小组成员 组长 能力较强的程序员待审程序的设计者或程序员测试专家 11 代码审查时应注意问题 提出的建议应针对程序本身 而不应针对程序员 程序员对整个审查过程采取积极和建设性的态度 12 走查走查是以小组为单元进行代码阅读的 同样也是一系列规程和错误检查技术的集合 人员组成一位经验丰富的程序员一位程序设计语言专家一位程序员新手一位其他不同项目的人员一位该软件编程小组的成员 13 必须修改的问题 3 程序没有注释程序 代码 注释注释语句 总代码行数 1 5 1 4子函数max没有返回值类型精度丢失问题建议修改的问题 3 main函数没有返回值类型和参数表 默认为voidmain void 1行代码只定义1个变量 程序适当加一些空行程序中存在未使用的变量 includemax floatx floaty floatz z x y x y return z main floata b intc d scanf f f 发现什么问题了吗 14 程序名称 求两个实数中的大数作者 版本 1 0创建时间 1 02007 09 10 includefloatmax floatx floaty 返回两个单精度数中的大数 floatz z x y x y return z voidmain void floata b floatc scanf f f 15 使用人工静态测试可以发现大约1 3 2 3的逻辑设计和编码错误 但是代码中仍会有隐藏的故障无法通过静态测试发现 因此除了静态测试方法外 还必须通过动态测试进行详细地分析 16 动态测试定义运行被测程序输入测试用例对运行情况 输入与输出对应关系 分析测试活动单元测试集成测试系统测试用户验收测试 17 上例中 动态测试过程为 18 静态测试和动态测试主要执行阶段 19 黑盒测试与白盒测试 20 检查程序各功能是否能实现检查功能错误又称为功能测试 数据驱动测试或基于规格说明的测试 黑盒测试 21 22 黑盒测试活动功能测试性能测试攻击测试特点黑盒测试与软件的具体实现过程无关黑盒测试用例的设计可以和软件实现同时进行能够找到大多数测试方法无法发现的错误 对于无法得到源代码的软件可以完成一定的测试 23 检查内部操作是否按规定执行各功能是否得到充分使用又称为结构测试 逻辑驱动测试或基于程序本身的测试 白盒测试 24 25 白盒测试活动语句覆盖分支覆盖判断覆盖条件覆盖判断 条件覆盖路径覆盖 26 两种测试方法从不同的角度出发反映了软件的不同侧面适用于不同的开发环境 黑盒测试 白盒测试 27 黑盒测试与白盒测试比较 28 黑盒 白盒 动态 静态测试之间关系只是从测试的不同角度分类同一个测试 都有可能属于这几种测试 他们之间还有包含交叉的关系黑盒测试有可能是动态测试 运行程序 只看输入和输出 也可能是静态测试 不运行程序 只看界面 白盒测试有可能是动态测试 运行程序 分析代码结构 也可能是静态测试 不运行程序 只是静态查看代码 29 动态测试有可能是黑盒测试 运行程序 只看输入和输出 也可能是白盒测试 运行程序 分析代码结构 静态测试有可能是黑盒测试 不运行程序 只是查看界面 也可能是白盒测试 不运行程序 只是静态查看代码 30 总体关系图 测试总体关系图 31 问题 1 如果程序员为了确保是否能够满足功能需求而测试一个类 这属于黑盒测试还是白盒测试 2 如果非开发人员使用能够跟踪代码的测试工具来产生测试 以确保大部分代码都被执行到 只要软件没有被挂起或崩溃就认为测试通过了 这属于黑盒测试还是白盒测试 3 灰盒测试属于黑盒测试还是白盒测试 32 黑盒测试 黑盒测试方法等价类划分边界值分析因果图错误推测功能图法等主要用于软件确认测试 33 经典问题 三角形问题与NextDate函数 三角形问题输入整数a b c 分别作为三角形的三条边 通过程序判断由三条边构成的三角形的类型为 等边三角形 等腰三角形 一般三角形 以及构不成三角形 34 必须满足的条件 输出情况是什么 结论 三角形问题的复杂之处在于输入与输出之间的关系比较复杂 35 NextDate函数是有三个变量month day和year的函数输出为输入日期后一天的日期例如 输入为1986年6月9日 则该函数的输出应为1986年6月10日 36 必须满足的条件 输出情况是什么 结论 在NextDate函数中有两种复杂性的输入来源 一是输入域的复杂性 二是确定闰年的规则并要增加 额外天 37 等价类划分法 等价类划分法作为一种最为典型的黑盒测试方法 完全不考虑程序的内部结构 只根据程序要求和说明来进行测试用例的设计 是黑盒程序测试员必须掌握的一种测试方法 38 等价类划分法是把程序的输入域划分为若干部分 然后从每个部分中选取少数代表性数据当作测试用例 这些数据将能代表这一部分的全部数据 采用等价类划分方法进行测试用例的设计时 必须首先在分析需求规格说明的基础上划分等价类 列出等价表 从而确定出测试用例 39 1 等价类的划分定义 在进行等价类划分之前 需要先从程序的功能说明书中找出各个输入条件 然后为每个输入条件划分两个或多个等价类 形成若干个互不相交的子集 称之为等价类 40 等价类对于测试有两个重要的意义完备性 整个输入域提供完备性无冗余性 若互不相交则可保证无冗余性传统的等价类划分测试的实现分为两步进行一是确定等价类二是确定测试用例 41 划分等价类可分为两种情况 1 有效等价类 是指对软件规格说明而言 是有意义的 合理的输入数据所组成的集合 利用有效等价类 能够检验程序是否实现了规格说明中预先规定的功能和性能 42 2 无效等价类 是指对软件规格说明而言 是无意义的 不合理的输入数据所构成的集合 利用无效等价类 可以鉴别程序异常处理的情况 检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方 43 划分等价类等价类的原则 1 如果输入条件规定了取值范围 或值的个数 则可以确立一个有效等价类和两个无效等价类 44 例如 在程序的规格说明中 对输入条件有一句话 项数可以从1到999 则有效等价类是 1 项数 999 两个无效等价类是 项数 1 或 项数 999 在数轴上表示成 45 2 如果输入条件规定了输入值的集合 或者是规定了 必须如何 的条件 这时可确立一个有效等价类和一个无效等价类 例如 在C语言中对变量标识符规定为 以字母或下划线打头的 串 那么所有以字母或下划线打头的构成有效等价类 而不在此集合内 不以字母打头 的归于无效等价类 3 如果输入条件是一个布尔量 则可以确定一个有效等价类和一个无效等价类 46 4 如果规定了输入数据的一组值 而且程序要对每个输入值分别进行处理 这时可为每一个输入值确立一个有效等价类 并针对这组值确立一个无效等价类 它是所有不允许的输入值的集合 例如 在教师上岗方案中规定对教授 副教授 讲师和助教分别计算分数 做相应的处理 因此可以确定4个有效等价类为教授 副教授 讲师和助教 一个无效等价类 它是所有不符合以上身分的人员的输入值的集合 47 5 如果规定了输入数据必须遵守的规则 则可以确立一个有效等价类 符合规则 和若干个无效等价类 从不同角度违反规则 例如 C语言规定 一个语句必须以分号 结束 这时 可以确定一个有效等价类 以 结束 若干个无效等价类 以 结束 以 结束 以 结束 等 48 6 如果规定了输入数据为整型 则可以划分出正整数 零和负整数等三个有效类 7 如果程序的处理对象是表格 则应该使用空表 以及含一项或多项的表 49 在确立了等价类之后 建立等价类表 列出所有划分出的等价类 如下表所示 50 2 设计测试用例在设计测试用例时 应同时考虑有效等价类和无效等价类测试用例的设计 根据已列出的等价类表可确定测试用例 具体过程如下 1 首先为等价类表中的每一个等价类分别规定一个唯一的编号 51 2 设计一个新的测试用例 使它能够尽量覆盖尚未覆盖的有效等价类 重复这个步骤 直到所有的有效等价类均被测试用例所覆盖 3 设计一个新的测试用例 使它仅覆盖一个尚未覆盖的无效等价类 重复这一步骤 直到所有的无效等价类均被测试用例所覆盖 52 3 常见等价类划分测试形式针对是否对无效数据进行测试 可以将等价类测试分为标准等价类测试健壮等价类测试 53 标准等价类测试 不考虑无效数据值测试用例使用每个等价类中的一个值健壮等价类测试 主要的出发点是考虑了无效等价类对有效输入 测试用例从每个有效等价类中取一个值对无效输入 一个测试用例有一个无效值 其他值均取有效值 54 健壮等价类测试存在两个问题 需要花费精力定义无效测试用例的期望输出对强类型的语言没有必要考虑无效的输入 55 例如 现定义 输入变量x1和x2在下列范围内取值 a x1 d 区间 a b b c c d e x2 g 区间 e f f g 变量x1 x2的无效等价类分别为 x1d和x2g 56 图3 1标准等价类测试用例 57 图3 2健壮等价类测试用例 58 4 等价类划分测试的实例实例1三角形问题分析 在多数情况下 是从输入域划分等价类的 但并非不能从被测程序的输出域反过来定义等价类 事实上 这对于三角形问题却是最简单的划分方法 在三角形问题中 有四种可能的输出 等边三角形 等腰三角形 一般三角形和非三角形 利用这些信息能够确定下列输出 值域 等价类 59 R1 边为a b c的等边三角形 R2 边为a b c的等腰三角形 R3 边为a b c的一般三角形 R4 边为a b c不能组成三角形 60 NextDate问题等价类表 61 实例2 在某一Pascal语言版本中规定 标识符是由字母开头 后跟字母或数字的任意组合构成 有效字符数为8个 最大字符数为80个 并且规定 标识符必须先说明 再使用 在同一说明语句中 标识符至少必须有一个 62 用等价类划分的方法 建立输入等价类表 63 下面选取了9个测试用例 它们覆盖了所有的等价类 VARx T1234567 REAL BEGINx 3 414 T1234567 2 732 1 2 4 8 9 12 14 64 VAR REAL 3 VARx REAL 5 VART12345678 REAL 6 VART12345 REAL 7 多于80个字符 65 VART CHAR 10 VARGOTO INTEGER 11 VAR2T REAL 13 VARPAR REAL 15 BEGIN PAR SIN 3 14 0 8 6 66 练习 用等价类划分方法找出有效等价类和无效等价类 并作出测试用例 某城市电话号码由三部分组成 内容如下 第一部分是地区码 地区码可以是空白或三位数字 第二部分是前缀为非零和非一开头的三位数 第三部分是后缀为四位数 67 68 边界值分析法 BVABoundaryValueAnalysis 边界值分析法 错误隐含在角落 errorshideinthecorner 白盒测试中也应用到了边界值的测试思想 它不是黑盒测试的专利 69 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法通常边界值分析法是作为对等价类划分法的补充 这种情况下 其测试用例来自等价类的边界 70 为什么使用边界值分析法 无数的测试实践表明 大量的故障往往发生在输入定义域或输出值域的边界上 而不是在其内部 因此 针对各种边界情况设计测试用例 通常会取得很好的测试效果 71 比如 在做三角形计算时 要输入三角形的三个边长 A B和C 我们应注意到这三个数值应当满足A 0 B 0 C 0 A B C A C B B C A 才能构成三角形 但如果把六个不等式中的任何一个大于号 错写成大于等于号 那就不能构成三角形 72 怎样用边界值分析法设计测试用例 1 首先确定边界情况 通常输入或输出等价类的边界就是应该着重测试的边界情况 2 选取正好等于 刚刚大于或刚刚小于边界的值作为测试数据 而不是选取等价类中的典型值或任意值 73 举例 常见的边界值对16 bit的整数而言32767和 32768是边界屏幕上光标在最左上 最右下位置报表的第一行和最后一行数组元素的第一个和最后一个循环的第0次 第1次和倒数第2次 最后一次 74 边界值分析假定错误更多地存在于划分的边界上 因此在等价类的边界上以及两侧的情况设计测试用例 75 例 测试计算平方根的函数 输入 实数 输出 实数 规格说明 当输入一个0或比0大的数的时候 返回其正平方根 当输入一个小于0的数时 显示错误信息 平方根非法 输入值小于0 并返回0 库函数Print Line可以用来输出错误信息 76 等价类划分 可以考虑作出如下划分 输入 i 0输出 a 0和 b Error 测试用例有两个 输入4 输出2 对应于 ii 和 a 输入 10 输出错误提示 对应于 i 和 b 77 边界值分析 划分 ii 的边界为0和最大正实数 划分 i 的边界为最小负实数和0 由此得到以下测试用例 输入 最小负实数 输入 绝对值很小的负数 输入0输入 绝对值很小的正数 输入 最大正实数 78 通常情况下 软件测试所包含的边界检验有几种类型 数字 字符 位置 质量 大小 速度 方位 尺寸 空间等相应地 以上类型的边界值应该在 最大 最小 首位 末位 上 下 最快 最慢 最高 最低 最短 最长 空 满等情况下 79 在多数情况下 边界值条件是基于应用程序的功能设计而需要考虑的因素 可以从软件的规格说明或常识中得到 也是最终用户可以很容易发现问题的 然而 在测试用例设计过程中 某些边界值条件是不需要呈现给用户的 或者说用户是很难注意到的 但同时确实属于检验范畴内的边界条件 称为内部边界值条件或子边界值条件 80 内部边界值条件主要有下面几种 数值的边界值检验字符的边界值检验其它边界值检验 计算机是基于二进制进行工作的 因此 软件的任何数值运算都有一定的范围限制 81 用边界值分析设计测试用例应遵循的原则 1 如果输入条件规定了取值范围 则应对该范围的边界内附近 恰好在边界和在边界外附近 无效等价类中 设计测试用例 如 规定1 5千克邮件收费2元 应对0 9 1 1 1 4 9 5 5 1千克设计测试用例 82 2 如果输入条件规定了数据的个数 则应对最少个数 最多个数 比最少个数少1 比最大个数多1等情况设计测试用例 如 输入文件有1 255个记录 则应分别设计0 1 255 256个记录的输入文件的测试用例 83 3 针对规格说明中的每个输出条件使用前面的1和2原则 如 计算折扣量 最低折扣为0元 最高为1000元 则要设计使它们恰好产生0元或1000元的结果 以及负值或稍大于1000元的结果 如果可能的话 84 4 如果程序规格说明中提到的输入或输出域是个有序的集合 如顺序文件 线性表等 应选有序集的第一个和最后一个元素作为测试用例 85 等价类和边界值方法的区别 1 边界值不是从等价类中随便取一个数据作为代表 而是选一个或几个特定值 使这个等价类的每个边界都作为测试的目标 2 边界值分析不仅要考虑输入条件 而且要考虑输出条件 输出等价类 一般联合使用等价类划分和边界值分析两种方法 86 2 边界值分析测试 采用边界值分析测试的基本思想是 故障往往出现在输入变量的边界值附近 因此 边界值分析法利用输入变量的最小值 min 略大于最小值 min 输入值域内的任意值 nom 略小于最大值 max 和最大值 max 来设计测试用例 87 边界值分析法是基于可靠性理论中称为 单故障 的假设 即有两个或两个以上故障同时出现而导致软件失效的情况很少 也就是说 软件失效基本上是由单故障引起的 88 因此 在边界值分析法中获取测试用例的方法是 1 每次保留程序中一个变量 让其余的变量取正常值 被保留的变量依次取min min nom max 和max 2 对程序中的每个变量重复 1 89 例1 有两个输入变量x1 a x1 b 和x2 c x2 d 的程序F的边界值分析 测试用例如下 90 例2 有二元函数f x y 其中x 1 12 y 1 31 则采用边界值分析法设计的测试用例是 推论 对于一个含有n个变量的程序 采用边界值分析法测试程序会产生4n 1个测试用例 91 练习 有函数f x y z 其中x 1900 2100 y 1 12 z 1 31 的 请写出该函数采用边界值分析法设计的测试用例 92 答案 93 3 健壮性测试健壮性测试是作为边界值分析的一个简单的扩充 它除了对变量的5个边界值分析取值外 还需要增加一个略大于最大值 max 以及略小于最小值 min 的取值 检查超过极限值时系统的情况 因此 对于有n个变量的函数采用健壮性测试需要6n 1个测试用例 94 4 边界值分析举例 1 三角形问题的边界值分析测试用例设计边长时整数 下界1 上界100 2 NextDate函数的边界值分析测试用例1 month 12 1 day 31 1912 year 2050健壮性测试用例 95 ATM提款功能 钱的面额只有100元 一天最多取3次 一次最多取2000元 一天最多取5000元 96 因果图法 1 因果法 Cause EffectGraphing 简介因果图法产生的背景 等价类划分法和边界值分析方法都是着重考虑输入条件 但没有考虑输入条件的各种组合 输入条件之间的相互制约关系 这样虽然各种输入条件可能出错的情况已经测试到了 但多个输入条件组合起来可能出错的情况却被忽视了 97 如果在测试时必须考虑输入条件的各种组合 则可能的组合数目将是天文数字因此必须考虑采用一种适合于描述多种条件的组合 相应产生多个动作的形式来进行测试用例的设计 这就需要利用因果图 逻辑模型 98 因果图法是基于这样的一种思想 一些程序的功能可以用判定表 或称决策表 的形式来表示 并根据输入条件的组合情况规定相应的操作 因果图法的定义 是一种利用图解法分析输入的各种组合情况 从而设计测试用例的方法 它适合于检查程序输入条件的各种组合情况 99 因果图法也是一种黑盒测试技术 但是不如等价类 边界值那样常用 因 输入 果 输出因果图法比较适合输入条件较多的情况 测试所有的输入条件的排列组合 100 使用因果图法的优点 1 考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系 2 能够帮助测试人员按照一定的步骤 高效率的开发测试用例 3 因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法 可以指出规格说明存在的不完整性和二义性 101 因果图的基本符号 通常情况下 左部的圆中写原因 右部的圆中写结果 两个圆中间以直线连接 连接线上再加符号表示因与果的不同关系 c1 c2 c3表示原因 e1表示结果 各结点表示状态 可取值 0 或 1 0 表示某状态不出现 1 表示某状态出现 有以下四种逻辑关系 102 因果图的逻辑关系 103 为了表示原因与原因之间 结果与结果之间可能存在的约束条件 在因果图中可以附加一些表示约束条件的符号 104 因果图法最终生成的是决策表 利用因果图生成测试用例的基本步骤如下 1 分析软件规格说明中哪些是原因 即输入条件或输入条件的等价类 哪些是结果 即输出条件 并给每个原因和结果赋予一个标识符 2 分析软件规格说明中的语义 找出原因与结果之间 原因与原因之间对应的关系 根据这些关系画出因果图 105 3 由于语法或环境的限制 有些原因与原因之间 原因与结果之间的组合情况不可能出现 为表明这些特殊情况 在因果图上用一些记号表明约束或限制条件 4 把因果图转换为决策表 5 根据决策表中的每一列设计测试用例 106 2 因果图法应用例子 某软件规格说明要求 第一个字符必须是 或 第二个字符必须是一个数字 在此情况下进行文件的修改 如果第一个字符不是 或 则给出信息N 如果第二个字符不是数字 则给出信息M 107 例题分析 原因 C1 第一个字符是 C2 第一个字符是 C3 第二个字符是一个数字结果 e1 给出信息Ne2 修改文件e3 给出信息M 108 因果图表示 109 具有E约束的因果图表示 110 根据因果图建立的决策表 111 练习 用因果图法设计测试用例 某规格说明规定 输入的第一列字符必须是A或B 第二列字符必须是一个数字 第一 二列都满足条件时执行操作H 如果第一列字符不正确 则给出信息L 如果第二列字符不正确 则给出信息R 根据上述要求画出因果图 并设计测试用例 112 分析 原因 1 第一列字符是A2 第一列字符是B3 第二列字符是一数字结果 21 执行操作H22 给出信息L23 给出信息R 113 案例 奖金计算软件该软件可以计算某公司的年终奖 该公司员工分为普通员工和管理人员 员工表现分为普通 优秀和特殊贡献 普通 优秀员工都可以有特殊贡献 不同组合所得工资是不同的 根据员工的分类和表现 将奖金分为1类奖金 2类奖金 114 使用该软件时 输入员工的种类和表现 就会输出相应的奖金类别 请为该软件设计测试用例提示 这道题概括比较笼统 不涉及具体细节 只是一个总体的框架 115 解题思路 1 找到所有的输入条件 原因 和输出条件 结果 并为其编号输入条件员工类别 普通员工A1 管理人员A2员工表现 普通B1 优秀B2 特殊贡献B3输出条件奖金类别 1类奖金C1 2类奖金C2 116 2 分析输入条件之间的关系 根据需求我们知道 A1和A2是互斥的 一个人不可能既是普通员工又是管理人员 B1和B2是互斥的 一个人不可能既表现普通又表现优秀 B1和B3 B2和B3可以同时满足 由此分析 我们可以列出所有的输入条件排列组合 117 普通员工A1 B1 C1A1 B2 C2A1 B1 B3 C3A1 B2 B3 C4管理人员A2 B1 C5A2 B2 C6A2 B1 B3 C7A2 B2 B3 C8 118 3 根据对输入输出条件的分析 画出因果图 119 4 根据对输入输出条件的分析 编写测试用例 120 决策表测试法1 决策表在所有的黑盒测试方法中 基于决策表 也称判定表 的测试是最为严格 最具有逻辑性的测试方法 决策表的概念 决策表是分析和表达多逻辑条件下执行不同操作的情况的工具 121 决策表的优点 能够将复杂的问题按照各种可能的情况全部列举出来 简明并避免遗漏 因此 利用决策表能够设计出完整的测试用例集合 在一些数据处理问题当中 某些操作的实施依赖于多个逻辑条件的组合 即 针对不同逻辑条件的组合值 分别执行不同的操作 决策表很适合于处理这类问题 122 决策表通常由以下4部分组成 条件桩 列出问题的所有条件条件项 针对条件桩给出的条件列出所有可能的取值动作桩 列出问题规定的可能采取的操作动作项 指出在条件项的各组取值情况下应采取的动作 123 构造决策表的5个步骤 1 确定规则的个数 有n个条件的决策表有2n个规则 每个条件取真 假值 2 列出所有的条件桩和动作桩 3 填入条件项 4 填入动作项 得到初始决策表 5 简化决策表 合并相似规则 124 若表中有两条以上规则具有相同的动作 并且在条件项之间存在极为相似的关系 便可以合并 合并后的条件项用符号 表示 说明执行的动作与该条件的取值无关 称为无关条件 125 下表是一张 阅读指南 的表单 读者对表中的问题 若回答肯定 标注 Y 若回答否定 标注 N 126 实际使用决策表时 需要简化 简化是以合并相似规则为目标 所以 若表中有两条以上规则具有相同的动作 并且在条件项之间存在极为相似的关系 便可以合并 127 128 2 决策表应用实例NextDate函数的决策表测试用例设计 问题分析 NextDate函数的三个变量之间在输入定义域中存在一定的逻辑依赖关系 由于等价类划分和边界值分析测试都假设了变量是独立的 如果采用上述两种方法设计测试用例 那么这些依赖关系在机械的选取输入值时可能会丢失 而采用决策表法则可以通过使用 不可能动作 的概念表示条件的不可能组合 来强调这种依赖关系 129 说明 当决策表规模 指规则的数目 n个条件的决策表有2n个规则 较大时 可以通过扩展条目决策表 条件使用等价类 代数简化表 将大表 分解 为小表等方法 130 为了获得下一个日期 NextDate函数执行如下操作 如果输入日期不是当月最后一天 则把day变量的值加1 如果输入日期是1 11月份中某月的最后一天 则把day变量的值复位为1 month变量的值加1 如果输入日期是12月的最后一天 则day变量和month变量的值都复位为1 year变量的值加1 131 关于最后一天的判断 如果是有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 132 NextDate函数的动作桩和条件桩 根据所执行的操作 可列出NextDate函数的动作桩 a1 不可能 a2 day加1 a3 day复位 a4 month加1 a5 month复位 a6 year加1 133 考虑到决策表的规模 条件使用month day year变量的等价类 在以下等价类集合上建立决策表 对于month变量的取值 M1 month month有30天 M2 month month有31天 12月除外 M3 month month是12月 M4 month month是2月 134 对于day变量的取值 D1 day 1 day 27 D2 day day 28 D3 day day 29 D4 day day 30 D5 day day 31 对于year变量的取值 Y1 year year是闰年 Y2 year year不是闰年 135 3 决策表的适用范围决策表测试法适用于具有以下特征的应用程序 if then else逻辑突出 输入变量之间存在逻辑关系 涉及输入变量子集的计算 输入与输出之间存在因果关系 136 适用于使用决策表设计测试用例的条件 规格说明以决策表形式给出 或较容易转换为决策表 条件的排列顺序不会也不应影响执行的操作 规则的排列顺序不会也不应影响执行的操作 当某一规则的条件已经满足 并确定要执行的操作后 不必检验别的规则 如果某一规则的条件要执行多个操作 这些操作的执行顺序无关紧要 137 用决策表测试法测试以下程序 该程序有三个输入变量month day year month day和year均为整数值 并且满足 1 month 12和1 day 31 分别作为输入日期的月份 日 年份 通过程序可以输出该输入日期在日历上隔一天的日期 例如 输入为2004年11月29日 则该程序的输出为2004年12月1日 138 1 分析各种输入情况 列出为输入变量month day year划分的有效等价类 2 分析程序规格说明 结合以上等价类划分的情况给出问题规定的可能采取的操作 即列出所有的动作桩 3 根据 1 和 2 画出简化后的决策表 139 案例分析 month变量的有效等价类 M1 month 4 6 9 11 M2 month 1 3 5 7 8 10 M3 month 12 M4 month 2 140 day变量的有效等价类 D1 1 day 26 D2 day 27 D3 day 28 D4 day 29 D5 day 30 D6 day 31 141 year变量的有效等价类 Y1 year是闰年 Y2 year不是闰年 考虑各种有效的输入情况 程序中可能采取的操作有以下六种 a1 day 2a2 day 2a3 day 1a4 month 1a5 month 1a6 year 1 142 例子 在一款招生管理系统中 有一个计算加分的小功能 加分的政策是 如果考生属于少数民族 加5分 如果考生是体育特长生 加5分 如果考生具备了前两项加分条件 为了保持公正 加8分 而不是加10分 143 144 白盒测试 白盒测试方法程序结构分析测试逻辑覆盖测试基本路径测试白盒测试也称结构测试或逻辑驱动测试 是针对被测单元内部是如何进行工作的测试 它根据程序的控制结构设计测试用例 主要用于软件或程序验证 145 白盒测试法检查程序内部逻辑结构 对所有逻辑路径进行测试 是一种穷举路径的测试方法 但即使每条独立路径都测试过了 仍然可能存在错误 因为 1 穷举路径测试无法检查出程序本身是否违反了设计规范 即程序是否是一个错误的程序 2 穷举路径测试不可能查出程序因为遗漏路径而出的错误 3 穷举路径测试发现不了一些与数据相关的错误 146 采用白盒测试方法必须遵循以下几条原则 才能达到测试的目的 1 保证一个模块中的所有独立路径至少被测试一次 2 所有逻辑值均需测试真 true 和假 false 两种情况 3 检查程序的内部数据结构 保证其结构的有效性 4 在取值上下边界 即可操作范围内运行所有循环 147 白盒测试的基本概念 1 控制流图控制流图 可简称流图 是对程序流程图进行简化后得到的 它可以更加突出的表示过程控制流的结构 控制流图中包括两种图形符号 节点和控制流线 148 节点由带标号的圆圈表示 可代表一个或多个语句 一个处理框序列和一个条件判定框 假设不包含复合条件 控制流线由带箭头的弧或线表示 可称为边 它代表程序中的控制流 包含条件的节点被称为判断节点 由判断节点发出的边必须终止于某一个节点 由边和节点所限定的范围被称为区域 149 常见结构的控制流图 150 对于复合条件 则可将其分解为多个单个条件 并映射成控制流图 如下图所示 151 流程图转化为控制流图例子 a 是一个含有两个出口判断和循环的程序流程图 我们把它化简成 b 的形式 152 流程图转化为控制流图例子 153 154 155 156 2 环形复杂度环形复杂度 也称为圈复杂度 是一种为程序逻辑复杂度提供定量尺度的软件度量 环形复杂度的应用可以将环形复杂度用于基本路径方法 它可以提供 程序基本集的独立路径数量 确保所有语句至少执行一次的测试数量的上界 157 独立路径是指程序中至少引入了一个新的处理与集合或一个新条件的程序通路独立路径必须至少包含一条在本次定义路径之前不曾用过的边注意 测试可以被设计为基本路径集的执行过程 但基本路径集通常并不唯一 158 环形复杂度以图论为基础 为我们提供了非常有用的软件度量 可用如下三种方法之一来计算环形复杂度 1 控制流图中区域的数量对应于环形复杂度 159 2 给定控制流图G的环形复杂度 V G 定义为V G E N 2其中 E是控制流图中边的数量 N是控制流图中的节点数量 160 3 给定控制流图G的环形复杂度 V G 也可定义为V G P 1其中 P是控制流图G中判定节点的数量 161 3 矩阵图矩阵图为便于在机器上表示和处理控制流图 我们可以把它表示成矩阵的形式 称为控制流矩阵图控制流图的矩阵表示形式其维数等于控制流图的节点数矩阵中的每列和每行都对应于标识的节点 矩阵元素对应于节点间的边 162 如果在控制流图中从第i个结点到第j个结点有一个标识为x的边相连接 则在对应矩阵图的第i行第j列有一个非空的元素x 163 例 控制流图 流图对应的矩阵图 164 1 2 3 4 5 1 2 3 4 5 165 白盒测试作为结构测试方法 是按照程序内部的结构测试程序 检验程序中的每条通路是否都能按预定要求正确工作 因此需要采用适当的逻辑覆盖测试方法来完成 逻辑覆盖测试方法 166 测试覆盖率 用于确定测试所执行到的覆盖项的百分比 其中的覆盖项是指作为测试基础的一个入口或属性 比如语句 分支 条件等 测试覆盖率可以表示出测试的充分性 在测试分析报告中可以作为量化指标的依据 测试覆盖率越高效果越好 但覆盖率不是目标 只是一种手段 167 测试覆盖率包括功能点覆盖率和结构覆盖率 功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系 结构覆盖率包括语句覆盖率 分支覆盖率 循环覆盖率 路径覆盖率等等 168 1 逻辑覆盖测试方法介绍 根据覆盖目标的不同 逻辑覆盖又可分为语句覆盖 判定覆盖 条件覆盖 判定 条件覆盖 组合覆盖和路径覆盖 例如 程序If A 1 169 170 L1 a c e A 1 and B 0 and A 2 or X A 1 A 1 and B 0 and A 2 or A 1 and B 0 and X A 1 A 2 and B 0 or A 1 and B 0 and X A 1 171 L2 a b d not A 1 and B 0 andnot A 2 or X 1 not A 1 ornot B 0 and not A 2 andnot X 1 not A 1 andnot A 2 andnot X 1 ornot B 0 andnot A 2 andnot X 1 not A 1 andnot X 1 ornot B 0 andnot A 2 andnot X 1 172 L3 a b e not A 1 and B 0 and A 2 or X 1 not A 1 ornot B 0 and A 2 or X 1 not A 1 and A 2 ornot A 1 and X 1 ornot B 0 and A 2 ornot B 0 and X 1 173 L4 a c d A 1 and B 0 andnot A 2 or X A 1 A 1 and B 0 andnot A 2 andnot X A 1 174 1 语句覆盖 语句覆盖就是设计足够多个测试用例 运行被测程序 使得每一可执行语句至少执行一次 在图例中 正好所有的可执行语句都在路径L1上 所以选择路径L1设计测试用例 就可以覆盖所有的可执行语句 175 测试用例如下 176 图被测试模块的流程图 A 2B 0X 4 177 2 判定覆盖 判定覆盖就是设计若干个测试用例 运行被测程序 使得程序中每个判断的取真分支和取假分支至少经历一次 判定覆盖又称为分支覆盖 每个语句 每个判定的每个分支 178 对于图例 如果选择路径L1和L2 就可得满足要求的测试用例 2 0 4 2 0 3 覆盖ace L1 1 1 1 1 1 1 覆盖abd L2 如果选择路径L3和L4 还可得另一组可用的测试用例 2 1 1 2 1 2 覆盖abe L3 3 0 3 3 0 1 覆盖acd L4 179 图被测试模块的流程图 A 3 B 0 X 3A 2 B 1 X 1 180 3 条件覆盖 条件覆盖就是设计若干个测试用例 运行被测程序 使得程序中每个判断的每个条件的可能取值至少执行一次 181 在图例中 我们事先可对所有条件的取值加以标记 例如 对于第一个判断 条件A 1取真为 取假为条件B 0取真为 取假为对于第二个判断 条件A 2取真为 取假为条件X 1取真为 取假为 T4 182 测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 0 1 1 0 1 L2 b d 2 1 1 2 1 2 L3 b e 或测试用例覆盖分支条件取值 1 0 3 1 0 4 L3 b e 2 1 1 2 1 2 L3 b e 183 4 判定 条件覆盖设计足够多的测试用例 使得程序中每个判定包含的每个条件的所有情况 真 假 至少出现一次 并且每个判定本身的判定结果 真 假 也至少出现一次 满足判定 条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖 184 测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 1 1 1 1 1 L2 b d 185 5 组合覆盖通过执行足够的测试用例 使得程序中每个判定的所有可能的条件取值组合都至少出现一次 满足组合覆盖的测试用例一定满足判定覆盖 条件覆盖和判定 条件覆盖 186 A 1 B 0作 A 1 B 0作 A 1 B 0作 A 1 B 0作 A 2 X 1作 A 2 X 1作 A 2 X 1作 A 2 X 1作 187 测试用例覆盖条件覆盖组合 2 0 4 2 0 3 L1 2 1 1 2 1 2 L3 1 0 3 1 0 4 L3 1 1 1 1 1 1 L2 188 6 路径覆盖设计足够多的测试用例 要求覆盖程序中所有可能的路径 从流程图和控制流图上可以看出 其中有4条可能的路径 分别是L1 L2 L3和L4 189 现实问题 前面介绍的逻辑覆盖其出发点似乎是合理的 所谓 覆盖 就是想要做到全面 无遗漏 但事实表明 它并不能真的做到无遗漏 如下简单程序段 190 错写成 这样的小问题都无能为力 原因在于 错误区域仅仅在I 0这个点上 只有当我们取I 0时 才会发现错误 191 从我们精心设计的力图全面覆盖来查找错误的测试 网 上钻了出去 而且是恰恰在容易发生问题的条件判断处出现了问题 对这类情况 我们应从中吸取经验教训 测试工作要有重点 要多针对容易发生问题的地方设计测试用例 感兴趣的同学可以看一下ESTCA覆盖准则和层次LCSAJ覆盖准则 192 习题 193 路径测试方法 从广义的角度讲 任何有关路径分析的测试都可以被称为路径测试路径测试就是从一个程序的入口开始 执行所经历的各个语句的完整过程 路径测试是白盒测试最为典型的问题 完成路径测试的理想情况是做到路径覆盖实际上我们能做到的就是程序中主要路径的测试 194 为了满足路径覆盖 必须首先确定具体的路径以及路径的个数 进行路径分析 首先要解决的是路径如何表示的问题 195 我们已经介绍了程序控制流图 有了控制流图 给出路径的标识就容易多了 如果1节点为程序入口 5节点为程序出口 在此列举4条路径 分别以弧序列表示及节点序列表示 196 197 1 路径表达式上述弧序列表示和节点序列表示均指某一路径而言 我们希望能找到一种能够给出程序中所有路径的 更加概括的表示方法 路径表达式作为一种表达式 其运算对象指的是控制流图中的弧 此外引入两个运算 乘和加 198 1 弧a和弧b相乘 表示为ab 它表明路径是先经历弧a 接着再经历弧b 弧a和弧b是先后相接的 2 弧a和弧b相加 表示为a b 它表明两条弧是 或 的关系 是并行的路段 199 图a表示的控制流图 共有4条路径 abdf abef acdf acef这4条路径是并行的 或的关系 我们可用加法运算连接它们 从而得到完整的路径表达式 abdf abde acdf acef 200 图b给出的是具有循环的控制流图 它的路径随着执行不同次数循环体而有所不同 如abd abcbd abcbcbd 分别是执行一次 两次 三次循环体的路径 其路径表达式 abd abcbd abcbcbd 201 路径数的计算 假定所讨论的程序已经得到了它的路径表达式 则可把其中的所有弧均代以数值 1 然后依表达式的乘法和加法运算 所得数值即为该程序的路径数 202 2 基本路径测试方法对于复杂性大的程序要做到所有路径覆盖 测试所有可执行路径 是不可能的 在不能做到所有路径覆盖的前提下 如果某一程序的每一个独立路径都被测试过 那么可以认为程序中的每个语句都已经检验过了 即达到了语句覆盖 这种测试方法就是通常所说的基本路径测试方法 203 基本路径测试方法是在控制流图的基础上 通过分析控制结构的环形复杂度 导出执行路径的基本集 再从该基本集设计测试用例 204 测试方法包括以下4个步骤 1 画出程序的控制流图 2 计算程序的环形复杂度 导出程序基本路径集中的独立路径条数 这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界 3 导出基本路径集 确定程序的独立路径 4 根据 3 中的独立路径 设计测试用例的输入数据和预期输出 205 计算流图的环形复杂度 有了描绘程序控制流的流图之后 可以用下述三种方法之一来计算环形复杂度 1 流图中的区域数等于环形复杂度 2 流图G的环形复杂度V G E N 2 其中E是流图中边的条数 N是流图中节点数 3 流图G的环形复杂度V G P 1 其中P是流图中判定节点的数目 206 207 voidSort inta intb intx 0 inty 0 while a 1 0 if b 0 x y 2 elseif b 1 x y 10 elsex y 20 208 209 画出控制流图 210 计算环形复杂度 10 条边 8 个节点 2 43 判定节点数 1 4 211 导出独立路径 路径1 1 8路径2 1 2 3 1路径3 1 2 4 5 7 1路径4 1 2 4 6 7 1 212 习题1 使用基本路径测试方法 为以下程序段设计测试用例 voidDo intX intA intB if A 1 213 3 循环测试方法 1 循环测试的基本方法从本质上说 循环测试的目的就是检查循环结构的有效性 通常 循环可以划分为简单循环 嵌套循环 串接循环和非结构循环4类 214 215 测试简单循环 设其循环的最大次数为n 可采用以下测试集 跳过整个循环 只循环一次 只循环两次 循环m次 其中m n 分别循环n 1 n和n 1次 216 测试嵌套循环 如果将简单循环的测试方法用于嵌套循环 可能的测试次数会随嵌套层数成几何级数增加 此时可采用以下办法减少测试次数 测试从最内层循环开始 所有外层循环次数设置为最小值 对最内层循环按照简单循环的测试方法进行 由内向外进行下一个循环的测试 本层循环嵌套的循环取某些 典型 值 重复上一步
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源汽车名义股东合伙人股权融资协议
- 跨国公司海外职员背景调查与聘用合同
- 艺人音乐专辑发行经纪合同
- 登记离婚共同财产分割及债务承担补充协议
- 大学生社会实践研学旅行项目合作协议
- 智能停车设备生产与区域市场拓展合作加盟协议
- 建筑工程项目油漆工派遣服务及施工变更通知协议
- 医学影像护士进修汇报
- 酒店客房卫生间清洁流程
- 田径规则培训纲要
- 2025年江苏省南京市玄武区中考一模历史试卷
- 2025年全国保密教育线上培训考试试题库及参考答案(完整版)及答案详解1套
- 西师大版小学五年级数学(下)期末测试题(带答案)
- Unit8SectionA1a2d课件人教版八年级英语下册
- 《社区多元主体协同治理研究的国内外文献综述》6700字
- 铝电解基础知识培训教材
- 2025年大学生人文知识竞赛题库及答案(完整版)
- 上诉状的课件
- 【合同范文】传媒公司合作合同6篇
- 乳腺癌防治知识手册运动与健康生活方式建议
- 2024年上海第二工业大学单招职业技能测试题库附答案
评论
0/150
提交评论