第七章+实现3.ppt_第1页
第七章+实现3.ppt_第2页
第七章+实现3.ppt_第3页
第七章+实现3.ppt_第4页
第七章+实现3.ppt_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章实现 软件测试 下 软件测试方法 白盒测试技术黑盒测试技术软件系统调试软件可靠性小结 白盒测试技术 逻辑覆盖测试判定结构测试循环结构测试基本路径测试 测试用例设计 选择和设计测试用例是软件测试员最重要的一项工作 测试用例的属性 属性描述name测试用例的名称 可选 location可执行的完全路径名 可选 input输入数据或命令 必要 oracle期待测试结果 必要 log测试实际产生的输出 逻辑覆盖测试 含义 对一系列测试过程的总称 它逐渐进行越来越完整的通路测试 测试数据覆盖程度的不同又可划分出不同级别的逻辑覆盖测试等级 逻辑覆盖种类 语句覆盖判定覆盖条件覆盖判定 条件覆盖条件组合覆盖点覆盖边覆盖路径覆盖 逻辑覆盖举例 测试用例的设计方法 根据路径的逻辑表达式观察法 较正式的方法 具备一定经验 被测程序中每条路径的逻辑表达式 L1 a c e 第1个判定和第2个判定都为 真 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 L2 a b d 第1个判定和第2个判定都为 假 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 or not B 0 andnot A 2 andnot X 1 为什么 被测程序中每条路径的逻辑表达式 L3 a b e 第1个判定为 假 第2个判定为 真 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 or not A 1 and X 1 or not B 0 and A 2 or not B 0 and X 1 L4 a c d 第1个判定为 真 第2个判定为 假 A 1 and B 0 andnot A 2 or X A 1 A 1 and B 0 andnot A 2 andnot X A 1 为什么 确定测试用例的格式 输入的 A B X 预期输出的 A B X 如 2 0 4 2 0 3 注意 在设计测试用例之前 必须首先确定测试用例的格式 语句覆盖 每个语句至少执行一次 为图例设计满足语句覆盖的测试用例是 2 0 4 2 0 3 语句覆盖是最弱的覆盖 判定覆盖 不但每个语句都要执行 且每个判定的取真分支和取假分支都至少执行一次 覆盖程序的每条分支 2 0 4 2 0 3 覆盖ace L1 1 1 1 1 1 1 覆盖abd L2 2 1 1 2 1 2 覆盖abe L3 3 0 3 3 1 1 覆盖acd L4 判定覆盖仍是较弱的逻辑覆盖 测试用例1 测试用例2 条件覆盖 设计若干个测试用例 运行被测程序 使得每个判定中的每个条件的可能取值都要至少执行一次 对于第1个判断 条件A 1取真为 取假为条件B 0取真为 取假为对于第2个判断 条件A 2取真为 取假为条件X 1取真为 取假为 T4 条件覆盖 测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 1 1 1 1 1 L2 b d 3 1 2 3 1 3 L3 b e 需要注意的是 在测试用例中可能有些条件取值在执行时覆盖不到 需要增加测试用例 为什么 判定 条件覆盖 设计足够多的测试用例 使得每个条件的可能取值至少执行一次 且每个判定中的每条分支也至少执行一次 既满足判定覆盖 又满足条件覆盖 测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 1 1 1 1 1 L2 b d 3 1 2 3 1 3 L3 b e 条件组合覆盖 每个判定的所有条件的可能组合都至少执行一次 记 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作 条件组合覆盖 测试用例覆盖条件覆盖组合 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 条件组合覆盖 前述几种逻辑覆盖中 条件组合覆盖的标准最强 但满足条件组合覆盖的并不一定满足路径覆盖 点覆盖 选取足够多的测试数据 使得程序执行路径至少经过流图的每个结点一次 它和语句覆盖的标准是相同的 边覆盖 选取足够多的测试数据 使得程序执行路径至少经过流图的每个边一次 通常 它和判定覆盖的标准是相同的 什么时候不同 边覆盖 当程序结构中判定中仅包含1个条件 此时 边覆盖标准和判定覆盖标准一致 当程序结构中判定中包含多个条件 此时 边覆盖标准和判定覆盖标准不一致 T T 路径覆盖 选取足够多的测试数据 使得程序的每条可能的执行路径至少执行一次 测试用例通过路径覆盖条件 2 0 4 2 0 3 ace L1 1 1 1 1 1 1 abd L2 1 1 2 1 1 3 abe L3 3 0 3 3 0 1 acd L4 判定结构测试 当程序中判定多于一个时 形成的分支结构可以分为两类 嵌套型分支结构和连锁型分支结构 对于嵌套型分支结构 若有n个判定语句 则存在n 1条路径 需要n 1个测试用例 对于连锁型分支结构 若有n个判定语句 则存在2n条路径 需要2n个测试用例 覆盖所有的路径 嵌套型分支结构 连锁型分支结构 3个判定 故需要4个用例 3个判定 故需要8个用例 F F F T T T 对于连锁型分支结构 当n较大时将无法测试 测试路径非线性递增 为减少测试用例的数目 可采用试验设计法 抽取部分路径进行测试 在假定各条路径的重要性相同 或暂不明确各条路径的重要性的情况下可以做到均匀抽样 如果明确了各条路径的重要性 还可以采取加权的办法 筛选掉部分路径 再用如下的措施进行抽样 连锁型的测试方法 设连锁型分支结构中有n个判定 计算满足关系式n 1 2m的最小自然数m 设t 2m 取正交表Lt 并利用它设计测试数据 例如 一个连锁型分支结构中有三个判定语句p1 p2 p3 全部路径是23 8条 先计算3 1 2m t的t 得t 4 取正交表L4 把每一列当做一个判定 每一行当做可取的测试用例 可得4个测试用例 连锁型的测试方法 用各个判定的取假分支取代正交表L4中的 0 用取真分支取代正交表中的 1 就建立起一个测试路径矩阵 这样 测试路径数目从23 8条减少到3 1 4条 L4 000101011110 123 1234 正交表L4 测试路径矩阵 判定 测试用例 用例1 用例2 用例3 用例4 循环结构测试 循环分为4种不同类型 简单循环 连锁循环 嵌套循环和非结构循环 1 简单循环 零次循环 从循环入口到出口 一次循环 检查循环初始值 二次循环 检查2次循环 m次循环 检查在多次循环 最大次数循环 比最大次数多一次 少一次的循环 简单循环 嵌套循环 连锁循环 非结构循环 避免出现 简单循环设计测试用例的例子 求最小值 程序代码如下 k i for j i 1 j n j if A j A k k j 程序流程图 为什么是简单循环 测试用例选择 不执行循环体 什么含义 对最内层循环做简单循环的全部测试 此时 所有其他层的循环变量置为最小值 逐步外推 对其外面一层循环进行简单循环测试 测试时保持所有外层循环的循环变量取最小值 所有其他嵌套内层循环的循环变量取 典型 值 反复进行 直到所有各层循环测试完毕 对全部各层循环同时取最小循环次数 或者同时取最大循环次数 2 嵌套循环 3 连锁循环如果各个循环互相独立 则可以用与简单循环相同的方法进行测试 如果几个循环不是互相独立的 则需要使用测试嵌套循环的办法来处理 4 非结构循环这一类循环应该使用结构化程序设计方法重新设计测试用例 基本路径测试 非常重要 基本路径测试方法把覆盖的路径数压缩到一定限度内 程序中的循环体最多只执行一次 它的实现有如下步骤 根据过程设计结果画出相应的程序流图 并计算其环行复杂度 确定线性独立路径的基本集合 设计可强制执行的基本集合中每条路径的测试用例 程序流图复习 符号 为控制流图的一个结点 表示一个或多个无分支的PDL语句或源程序语句 箭头为边 表示控制流的方向 在选择或多分支结构中 分支的汇聚处应有一个汇聚结点 程序流图复习 边和结点圈定的部分叫做区域 当对区域计数时 图形外的区域也应记为一个区域 如果判断中的条件表达式是由一个或多个逻辑运算符 or and 连接的复合条件表达式 则需改为一系列只有单个条件的嵌套的判断 if aorb thendoxelsedoy T T Step1 设计被测对象的程序流图 Step2 确定基本路径集合 程序环路复杂性给出了程序基本路径集中的独立路径条数 这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界 从控制流图来看 一条独立路径是至少包含有一条在其他独立路径中从未有过的边的路径 例如 在图示的控制流图中 一组独立的路径是path1 1 11path2 1 2 3 4 5 10 1 11path3 1 2 3 6 8 9 10 1 11path4 1 2 3 6 7 9 10 1 11路径path1 path2 path3 path4组成了控制流图的一个基本路径集 Step3 导出测试用例 导出测试用例 确保基本路径集中的每一条路径的执行 必须全部覆盖 根据判断结点给出的条件 选择适当的数据以保证某一条路径可以被测试到 用逻辑覆盖的方法 每个测试用例执行之后 与预期结果进行比较 必须注意 一些独立的路径 如例中的path1 往往不是完全孤立的 有时它是程序正常的控制流的一部分 这时 这些路径的测试可以是另一条路径测试的一部分 基本路径测试举例1 课本P156求平均值的例子 1 i 1 total input total valid 0 sum 0 2 DoWhilevalue i 9993 andtotal input minmum6 andvalue i 011 thenavarage sum total valid 12 elseavarage 999 13 endifEndavarage 画出程序流图并计算复杂度 区域数目 6判定结点 5 5 1 6E N 2 17 13 2 6 区域1 区域2 区域3 区域4 区域5 区域6 确定线性独立路径的基本集合 路径1 1 2 10 11 13路径2 1 2 10 12 13路径3 1 2 3 10 11 13路径4 1 2 3 4 5 8 9 2 路径5 1 2 3 4 5 6 8 9 2 路径6 1 2 3 4 5 6 7 8 9 2 此外 判定结点是2 3 5 6 10 确定独立路径集合 为每一条路径都设置它的测试用例 选取测试数据使得在测试每条路径时都适当地设置好了各个判定结点的条件 设计测试用例 测试用例由两部分组成 执行完所有测试用例后 可以确保程序中所有的语句都至少被执行了一次 而且每个条件都分别取过真和假 设计测试用例 路径1的测试用例 value k 有效输入值 其中k ivalue i 999 其中2 i 100预期结果 基于k的正确平均值和总数注意 由于路径10 11 13是计算正确的平均值和总数 所以 路径1无法独立测试 必须作为路径4 5 6的一部分来测试 设计测试用例 路径2的测试用例value 1 999预期结果 avarage 999 其他都保持初始值 设计测试用例 路径3的测试用例试图处理101个或更多个值前100个数值应该是有效输入值预期结果 前100个数的平均值 总数为100注意 和路径1同理 路径3无法独立测试 必须作为路径4 5 6的一部分来测试 设计测试用例 路径4的测试用例value i 有效输入值 其中i 100value k minmum 其中k i预期结果 基于k的正确平均值和总数 设计测试用例 路径5的测试用例value i 有效输入值 其中iminmum 其中k I预期结果 基于k的正确平均值和总数 设计测试用例 路径6的测试用例value i 有效输入值 其中i 100预期结果 正确的平均值和总数 voidSelectSort intV intn inti j k for i 0 i n 1 i k i for j i 1 j n j if V j V k k j if k i Swap V i V k 基本路径测试举例2 选择排序 C 描述 53 区域数 5 区域1 区域3 区域2 区域4 区域5 基本路径集path1 1 3path2 1 2 5 8 path3 1 2 5 9 path4 1 2 4 6 path5 1 2 4 7 表示后面剩下的路径是可以选择的 测试用例Path1 1 3取n 1Path2 1 2 5 8 3取n 2预期结果 路径5 8 3不可到达 该路径不可独立测试 Path3 1 2 5 9 3取n 2预期结果 路径5 9 3不可到达 该路径不可独立测试path4 1 2 4 6 5 8 3取n 2 v 0 2 v 1 1预期结果 k 1 v 0 1 v 1 2path4 1 2 4 6 5 9 3取n 2 v 0 2 v 1 1预期结果 k 1 路径5 9 3不可到达 该路径不可独立测试path5 1 2 4 7 5 8 3取n 2 v 0 1 v 1 2预期结果 k 0 路径5 8 3不可到达 该路径不可独立测试path5 1 2 4 7 5 9 3取n 2 v 0 1 v 1 2预期结果 k 0 v 0 1 v 1 2 黑盒测试技术 黑盒测试力图发现如下错误 功能不正确或遗漏功能 界面错误 数据结构错误或外部数据库访问错误 性能错误 初始化和终止错误 黑盒测试的测试用例设计 等价类划分边界值分析错误推测法因果图测试功能图测试 等价类划分 它是一种典型的黑盒测试方法 它完全不考虑程序的内部结构 只依据程序的规格说明来设计测试用例 等价类划分方法把所有可能的输入数据 即程序的输入域划分成若干部分从每一部分中选取少数有代表性的数据做为测试用例 等价类划分 使用这一方法设计测试用例要经历划分等价类 列出等价类表 和选取测试用例两步 第1步 划分等价类 等价类是指某个输入 或输出 域的子集合 该子集合中 每个输入数据 或输出 对于揭露程序中的错误都是等效的 测试某等价类的代表值就等价于对这一类其它值的测试 第1步 划分等价类 有效等价类 是指对于程序的规格说明来说 是合理的 有意义的输入数据构成的集合 无效等价类 是指对于程序的规格说明来说 是不合理的 无意义的输入数据构成的集合 需要同时考虑有效等价类和无效等价类 第1步 划分等价类 划分等价类的标准 覆盖不相交代表性 划分等价类的原则 划分等价类的原则 1 如果输入条件规定了取值范围 或值的个数 则可以确立一个有效等价类和两个无效等价类 划分等价类的原则 例如 在程序的规格说明中 对输入条件有一句话 项数可以从1到999 则有效等价类是 1 项数 999 两个无效等价类是 项数 1 或 项数 999 在数轴上表示成 划分等价类的原则 2 如果输入条件规定了输入值的集合 或者是规定了 必须如何 的条件 这时可确立一个有效等价类和一个无效等价类 例如 在Pascal语言中对变量标识符规定为 以字母打头的 串 那么所有以字母打头的构成有效等价类 而不在此集合内 不以字母打头 的归于无效等价类 划分等价类的原则 3 如果输入条件是一个布尔量 则可以确定一个有效等价类和一个无效等价类 4 如果规定了输入数据的一组值 而且程序要对每个输入值分别进行处理 这时可为每一个输入值确立一个有效等价类 此外针对这组值确立一个无效等价类 它是所有不允许的输入值的集合 划分等价类原则 例如 在教师上岗方案中规定对教授 副教授 讲师和助教分别计算分数 做相应的处理 因此可以确定4个有效等价类为教授 副教授 讲师和助教 一个无效等价类 它是所有不符合以上身份的人员的输入值的集合 5 如果规定了输入数据必须遵守的规则 则可以确立一个有效等价类 符合规则 和若干个无效等价类 从不同角度违反规则 划分等价类原则 例如 Pascal语言规定 一个语句必须以分号 结束 这时 可以确定一个有效等价类 以 结束 若干个无效等价类 以 结束 以 结束 以 结束 以IF结束 等 划分等价类的原则 6 如果规定了输入数据的个数 则可以确定1个有效等价类和1个无效等价类 7 如果规定了输入数据为整型 则可以划分出正整数 零和负整数3个有效等价类 而所有非整数可以看作是1个无效等价类 8 如果程序的处理对象是表格 则应该使用空表 含一项或多项的表等若干个等价类 按如下表格填写找出的等价类 第2步 确定测试用例 从等价类中按以下原则选择测试用例 1 为每一个等价类规定一个唯一编号 2 设计一个新的测试用例 使其尽可能多地覆盖尚未被覆盖的有效等价类 重复这一步 直到所有的有效等价类都被覆盖为止 3 设计一个新的测试用例 使其仅覆盖一个尚未被覆盖的无效等价类 重复这一步 直到所有的无效等价类都被覆盖为止 例一 用等价类划分法设计测试用例 在某PASCAL语言版本中规定 标识符是由字母开头 后跟字母或数字的任意组合构成 有效字符数为8个 最大字符数为80个 并且规定 标识符必须先说明 再使用 在同一说明语句中 标识符至少必须有一个 针对标识符的检测程序进行等价类测试用例设计 例一 用等价类划分的方法 建立输入等价类表 例一 下面选取了9个测试用例 它们覆盖了所有的等价类 VARx T1234567 REAL BEGINx 3 414 T1234567 2 732 1 2 4 8 9 12 14 VAR REAL 3 VARx REAL 5 例一 VART12345678 REAL 6 VART12345 REAL 7 多于80个字符 VART CHAR 10 VARGOTO INTEGER 11 VAR2T REAL 13 VARPAR REAL 15 BEGIN PAP SIN 3 14 0 8 6 例二 某报表处理系统要求用户输入处理报表的日期 日期限制在2001年1月至2005年12月 即系统只能对该段期间内的报表进行处理 如日期不在此范围内 则显示输入错误信息 系统日期规定由年 月的6位数字字符组成 前四位代表年 后两位代表月 如何用等价类划分法设计测试用例 来测试程序的日期检查功能 例二 输入等价类有效等价类无效等价类 报表日期的类型及长度 6位数字字符 1 有非数字字符 4 少于6个数字字符 5 多于6个数字字符 6 年份范围 在2001 2005之间 2 小于2001 7 大于2005 8 月份范围 在1 12之间 3 首先建立 报表日期 输入条件的等价类表 小于1 9 大于12 10 例二 为有效等价类设计测试用例对表中编号为1 2 3的3个有效等价类用一个测试用例覆盖 测试用例期望结果覆盖范围 200105 输入有效 等价类 1 2 3 例二 每个测试用例仅覆盖1个等价类 例三 例 对招干考试系统 输入学生成绩 子模块设计测试用例 招干考试分三个专业 准考证号第一位为专业代号 如 1 行政专业 2 法律专业 3 财经专业 行政专业准考证号码为 110001 111215法律专业准考证号码为 210001 212006财经专业准考证号码为 310001 314015 例三 例 准考证号码的等价类划分有效等价类 1 110001 111215 2 210001 212006 3 310001 314015无效等价类 4 110000 5 111216 210000 6 212007 31000 7 314016 例四 课本P163例子 边界值分析 它也是一种黑盒测试方法 是对等价类方法的补充 人们的经验 大量的错误是发生在输入或输出范围的边界上 而不是在输入范围的内部 边界值分析方法的执行步骤 确定边界 设计满足边界分析的测试用例进行测试 边界值分析 例如 有一段用C编写的小程序 intA 20 inti for i 1 i 10 i A i 1 因为C语言中数组下标从0开始 而本程序中从1开始赋值 如果以后用户不了解 可能从0开始使用 就会出错 所以边界值可能查出更多的问题来 如何确定边界 类型 数字 字符 位置 质量 大小 速度 方位 尺寸 空间等 边界值 最大 最小 首位 末位 上 下 最大 最小 最快 最慢 最高 最低 最短 最长 空 满等 使用边界值分析 最重要的是确定正确的边界值域 对于输入 输出等价类 选取正好等于 刚刚大于和刚刚小于边界值的数据作为测试数据 选取测试用例的原则 1 如果输入条件规定了值的范围 则应取刚刚到达这个范围边界的值 以及刚刚超过这个范围边界的值作为测试输入数据 例如 某数据的取值范围为 1 0 1 0 测试数据可取 1 0 1 0 以及 1 1 1 1 2 如果输入条件规定了值的个数 则应取最大个数 最小个数 比最大个数多1 比最小个数少1的数作为测试输入数据 例如 某文件有255个记录 测试数据可取1 255 以及0 256 选取测试用例的原则 3 根据规格说明和每个输出条件 使用原则 1 例如 研究生录取分数范围84 150 测试数据可取84 150 以及83 151 4 根据规格说明和每个输出条件 使用原则 2 例如 研究生录取人数34人 测试数据可取1 34 0 35 5 如果程序的规格说明给出的输入域或输出域是有序集合 如有序表 则选取集合的第一个元素和最后一个元素作为测试用例 例如 学生文件的学生记录按学号存放 班上总共30人 测试数据可取第1 第30个学生 选取测试用例的原则 6 如果程序中使用了一个内部数据结构 则应选择此数据结构的边界上的值作为测试用例 7 分析规格说明 找出其他可能的边界条件 例子 课本P165例子 错误推测法 人们也可以靠经验和直觉推测程序中可能存在的各种错误 从而有针对性地编写检查这些错误的例子 它的基本想法是 列举出程序中所有可能有的错误和容易发生错误的特殊情况 根据它们选择测试用例 可利用不同测试阶段的经验和对软件系统的认识来设计测试用例 例如 在单元测试中某程序模块已经遇到错误 在系统测试中可以在这些可能出现问题的地方再组织测试用例 在前一个版本中发现的常见错误在下一个版本的测试中有针对性地设计测试用例 设计测试用例的原则 根据以上想法 测试用例的设计原则 客观因素 产品以前版本已出现的问题 已经因素 语言 操作系统 浏览器的限制可能带来的问题 经验 由模块之间关联所联想到的测试 由修复软件的错误可能会带来的问题 因果图测试 因果图的适用范围在测试时如果考虑输入条件的各种组合 可使用一种适合于描述对于多种条件的组合 相应产生多个动作的形式来设计测试用例 这就需要利用因果图 因果图方法最终生成的就是判定表 它适合于检查程序输入条件的各种组合情况 用因果图生成测试用例的基本步骤分析软件规格说明描述中 哪些是原因 即 输入条件或输入条件的等价类 哪些是结果 即输出条件 并给每个原因和结果赋予一个标识符 分析软件规格说明描述的语义 找出原因与结果之间对应的关系 根据这些关系 画出因果图 由于语法或环境限制 有些原因与原因之间 结果与结果之间的组合情况不可能出现 为表明这些特殊情况 在因果图上用一些记号标明约束或限制条件 把因果图转换成判定表 把判定表的每一列拿出来作为依据 设计测试用例 在因果图中出现的基本符号 通常在因果图中用Ci表示原因 用Ei表示结果 各结点表示状态 可取值 0 或 1 0 表示某状态不出现 1 表示某状态出现 主要的原因和结果之间的关系有 恒等非 因果图测试 原因出现 结果必有 原因出现 结果必无 c 或 d 与 表示约束条件的符号为了表示原因与原因之间 结果与结果之间可能存在的约束条件 在因果图中可以附加一些表示约束条件的符号 原因出现其一 结果必有 原因全部出现 结果必有 2个中最多有1个可能成立 2个中必须有且仅有1个成立 2个中至少有1个必须成立 a出现时 b也必须出现 例如 有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计 其规格说明如下 若投入5角钱或1元钱的硬币 押下 橙汁 或 啤酒 的按钮 则相应的饮料就送出来 若售货机没有零钱找 则一个显示 零钱找完 的红灯亮 这时在投入1元硬币并押下按钮后 饮料不送出来而且1元硬币也退出来 若有零钱找 则显示 零钱找完 的红灯灭 在送出饮料的同时退还5角硬币 2种饮料均为5角钱1杯 1 分析这一段说明 列出原因和结果原因 1 售货机有零钱找2 投入1元硬币3 投入5角硬币4 押下橙汁按钮5 押下啤酒按钮结果 21 售货机 零钱找完 灯亮22 退还1元硬币23 退还5角硬币24 送出橙汁饮料25 送出啤酒饮料 画出因果图 所有原因结点列在左边 所有结果结点列在右边 建立中间结点 表示中间状态 11 投入1元硬币且押下饮料按钮12 押下 橙汁 或 啤酒 的按钮13 应找5角零钱且售货机有零钱找14 钱已付清由于2与3 4与5不能同时发生 分别加上约束条件E 并且它们的约束要体现到判定表中 即不可同时成立 因果图转换成判定表 在判定表中选择测试用例 E E 使用各种测试方法的综合策略 在任何情况下都必须使用边界值分析法 用这种方法设计出测试用例发现程序错误的能力最强 必要时用等价类划分法补充一些测试用例 用错误推测法再追加一些测试用例 对照程序逻辑 检查已有测试用例的逻辑覆盖程度 如果未达到要求的覆盖标准 应再补充足够的测试用例 如果程序的功能说明中含有输入条件的组合情况 则一开始就可选用因果图法 功能图测试 功能图测试是一种黑盒测试方法 它是基于状态迁移图和判定表来设计测试用例的 状态迁移图是一种动态说明 它由输入条件和当前状态决定输出数据和后续状态 判定表则是一种静态说明 它用于表示在状态中输入与输出的对应关系 在这种环境下 测试用例是由测试中经过的一系列状态和在每个状态中必须依靠输入 输出数据满足的一对条件组成 下面是简化的自动取款机ATM的状态图 初始时ATM显示 请插入卡片 当插入卡片后ATM显示 请输入密码 ATM检查输入的密码与文件中保存的密码 若相同 则ATM显示 请输入金额 若不同 ATM检查是否三次都打错了 如是 则ATM显示 停止处理 消去这个记录 重新显示 请插入卡片 若未达到三次 则ATM显示 请输入密码 打入一个钱数后ATM检查它是否小于等于余额 若大于余额 ATM显示 请输入金额 等待再次输入金额 否则ATM付给要求的现金 报告余额 显示 请插入卡片 判定表T 输出 输入 状态 输入金额后判断if 金额 余额 M5elseM6 M1 插入卡片M2 输入密码M3 密码匹配M4 错输三次M5 输入金额M6 金额不多于余额M7 回归初始状态 从状态图生成测试用例 若用结点表示状态 用弧表示迁移 则状态迁移图就可以转换为一个程序的控制流图 问题就转化为程序的路径测试问题 状态图的覆盖准则有覆盖所有状态 C0覆盖 和覆盖所有迁移 C1覆盖 通常采用基本路径覆盖方法设计测试用例 对于循环 应包含0次循环 先判断循环情形 和1次循环的情形 在计算路径时要注意状态图本身已经构成强连通图 区域外的部分不计入环路复杂性 测试路径 软件系统调试 调试是在测试发现错误之后排除错误的过程 调试活动由两部分组成 确定程序中可疑错误的确切性质和位置 对程序 设计 编码 进行修改 排除这个错误 它需要调试者很高的调试技巧 它的本质是把错误的症状和原因联系起来的一个思维过程 调试过程 调试的两种结果 改正了错误 没找到原因 调试的步骤 从错误的外部表现形式入手 确定程序中出错位置 研究有关部分的程序 找出错误的内在原因 修改设计和代码 以排除这个错误 重复进行暴露了这个错误的原始测试或某些有关测试 非常有必要 调试中的困难 从技术角度来看 查找错误的难度在于 现象与原因所处的位置可能相距甚远 当其他错误得到纠正时 这一错误所表现出的现象可能会暂时消失 但并未实际排除 现象实际上是由一些非错误原因 例如 舍入不精确 引起的 现象可能是由于一些不容易发现的人为错误引起的 错误是由于时序问题引起的 与处理过程无关 现象是由于难于精确再现的输入状态 例如 实时应用中输入顺序不确定 引起 现象可能是周期出现的 在软 硬件结合的嵌入式系统中常常遇到 调试途径 蛮干法 回溯法 原因排除法 对分查找法 归纳法 演绎法 调试的原则 确定错误的性质和位置的原则用头脑去分析思考与错误征兆有关的信息 避开死胡同 只把调试工具当做辅助手段来使用 利用调试工具 可以帮助思考 但不能代替思考 避免用试探法 最多把它当做最后手段 调试的原则 修改错误的原则在出现错误的地方很可能还有别的错误 避免只修改了这个错误的征兆或这个错误的表现 而没有修改错误的本身 当心修正一个错误的同时有可能会引入新的错误 修改错误的过程将迫使人们暂时回到程序设计阶段 修改源代码程序 不要改变目标代码 三个需要注意的问题 同样的错误是否其他地方也存在 将要进行的修改可能会引入的 下一个错误 是什么 为防止今后出现类似错误 应该做什么 软件可靠性 软件可靠性 在给定的时间间隔内 按照规格说明书的规定成功地运行的概率 软件可使用性 程序在给定的时间点 按照规格说明书的规定 成功运行的概率 IEEE给出的 错误 的含义 由开发人员造成的软件差错 bug IEEE给出的 故障 的含义 由错误引发的软件的不正确的行为 系统的稳态可用性 Ass MTTF MTTF MTTR MTTR 修复一个故障平均需要的时间 MTTF 系统按规定成功地运行的平均时间 估算平均无故障时间的方法 它是一个非常重要的质量指标 往往作为对软件的一项基本要求 1 它的符号ET 测试之前程序中错误总数 IT 程序长度 机器指令总数 测试 包括调试 时间 Ed 在0至 期间发现的错误数 Ec 在0至 期间改正的错误数 估算平均无故障时间的方法 2 基本假定根据经验数据 可以作出下述假定 1 在类似的程序中 单位长度里的错误数ET IT近似为常数 美国的一些统计数字表明 通常0 5 10 2 ET IT 2 10 2也就是说 在测试之前每1000条指令中大约有5 20个错误 2 失效率正比于软件中剩余的错误数 而平均无故障时间MTTF与剩余的错误数成反比 估算平均无故障时间的方法 3 此外 假设发现的每一个错误都立即正确地改正了 即调试过程没有引入新的错误 因此Ec Ed 剩余的错误数为Er ET Ec 7 3 单位长度程序中剩余的错误数为 r ET Ir Ec IT 7 4 估算平均无故障时间的方法 3 估算平均无故障时间经验表明 平均无故障时间与单位长度程序中剩余的错误数成反比 即MTTF 1 K ET IT Ec IT 7 5 其中K为常数 它的值应该根据经验选取 美国的一些统计数字表明 K的典型值是200 估算平均无故障时间的公式 可以评价软件测试的进展情况 此外 由 7 5 式可得Ec ET IT K MTTF 7 6 因此 也可以根据对软件平均无故障时间的要求 估计需要改正多少个错误之后 测试工作才能结束 估算平均无故障时间的方法 4 估计错误总数的方法程序中潜藏的错误的数目是一个十分重要的量 它既直接标志软件的可靠程度 又是计算软件平均无故障时间的重要参数 显然 程序中的错误总数ET与程序规模 类型 开发环境 开发方法论 开发人员的技术水平和管理水平等都有密切关系 下面介绍估计ET的两个方法 1 植入错误法使用这种估计方法 在测试之前由专人在程序中随机地植入一些错误 测试之后 根据测试小组发现的错误中原有的和植入的两种错误的比例 来估计程序中原有错误的总数ET 估算平均无故障时间的方法 假设人

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论