1、软件测试模型测试策略的简介测试策略包括:单元测试、设计测试用例、要测试哪几方面的问题,针对这几方面问题各自测试什么内容,测试的具体步骤及实用测试策略瀑布模型、螺旋模型、圆形开发模型、增量开发模型、渐进模型、快速应用开发模型测试分为单元测试、集成测试、系统测试和确认(验收)测试单元测试 针对程序中的模块或构件 主要揭露编码阶段产生的错误单元测试又称模块测试、逻辑测试或结构测试单元测试的目的:发现各模块内部可能存在的各种差错测试的方法:一般采用白盒法,以路径覆盖为最佳准则,且系统内多模块可以并行地进行测试集成测试 针对集成的软件系统 主要揭露设计阶段产生的错误集成测试也称组装测试,综合测试或联合测
2、试集成测试:是按设计要求把通过单元测试的各个模块组装在一起之后进行测试,以便发现与接口有关的各种错误。集成测试需要考虑的有关问题(即为什么要进行集成测试)数据经过接口是否会丢失;一个模块对另一个模块是否造成不应有的影响;几个子功能组合起来三能否实现主功能;误差不断积累是否达到不可接受的程度;全局数据结构是否有问题系统测试: 主要揭露不符合系统工程中对软件要求的错误在系统测试实施之前软件工程是应完成以下工作为测试软件系统的输入信息设计出错处理通路设计测试用例模拟错误数据和软件界面可能发生的错误记录确认测试 检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准验收测试又称有效性测试
3、合格测试或确认测试模块组装后已成为完整的软件包,消除了接口的错误确认测试主要由使用用户参加测试,检验软件规格说明的技术标准的符合程度,是保证软件质量的最后关键环节V 模型 即快速应用开发模型需求分析 验收测试系统规格 系统测试概要设计 集成测试详细设计 单元测试编码应尽早测试才能尽快发现错误降低日后维护中的消耗所以说需求设计也是需要测试的V 模型的优点明确表明了测试过程中存在的不同级别清楚的描述了测试阶段与开发过程各阶段的对应关系V 模型的测试策略包括了低层测试(代码)又包括了高层测试(需求)V 模型的缺点他仅仅把测试过程作为需求分析概要设计详细设计编码之后的一个阶段容易让人理解为测试是软件开
4、发的最后一个阶段没有明确说明早期的测试,不符合越早测试和不断地测试的原则与实际的测试活动也不符W 模型用户需求双 V 验收测试设计 交付 验收测试需求分析双 V 系统测试设计 实施 系统测试概要设计双 V 集成测试设计 集成 集成测试详细设计双 V 单元测试设计 单元测试编码 此模型强调:测试伴随着整个软件开发周期,测试的对象不仅仅是程序,需求、功能和设计同样需要测试。测试与开发是同步进行的优点: 符合尽早测试和不断测试的原则符合实际工作中的测试原则符合实际工作中的测试活动缺点: 视软件开发活动是一系列串行的活动开发和测试保持一种现行的前后关系 这样就无法支持迭代H 模型所以相应的测试之间也不
5、存在准备测试 测试执行测试就绪点其他流程(如设计流程、开发流程)说明软件测试不仅仅指测试的执行还包括很多其他的活动软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发进行只要测试条件策划能够成熟了,测试准备活动完成了,测试执行活动就可以进行了。X 模型程序片断 1 固定版本测试设计 执行测试工具配置 测试设计 执行测试 工具配置编码完成 集成 1n执行测试 探索性测试测试设计 程序片断 n 执行测试左边描述的是针对单独程序片断进行的相互分离的编码和测试以后将频繁交换 最终集成为产品进行版本固定交付用户使用软件测试设计设计测试用例即时贴程序程序功能便签的数量最多为 50 个标题字数最多
6、 40 字节便签正文字数最多 200 个年份只能设置在 1900-2100 之间测试用例为实施测试面向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定集合解决要测什么,怎么测和如何衡量的问题测试用例的目的:执行测试,发现缺陷重复执行测试,重现缺陷管理测试过程回归测试、验证缺陷是否修复优点:使测试更加方便的执行;提高测试效率;节省测试时间;使测试更能按时间计划进行;使测试过程更方便管理准备工作收集资料需求文档设计文档遗留系统的相关文档与相关人员讨论探索性测试探索性测试与经过深思熟虑的、计划好的的测试过程有所不同,它依靠的是测试人员的知识水平和创造力。可用于重现和分析缺陷、研究缺
7、陷和程序其他模块的相关性是测试用例有利的补充具体问题具体分析测试用例的内容项目名称(版本)模块名称测试功能项项目人员测试时间测试目的预置条件其他参考信息测试用例编号相关用例用例说明输入条件执行方法预期结果测试结果缺陷编号常用的测试用例设计方法 黑盒测试&白盒测试黑盒测试 是对需求的所有输入条件进行测试定义:被称为功能测试或数据驱动测试,在测试时,把被测试程序视为一个黑盒,在不考虑程序内部结构和内部特性的情况下进行测试黑盒测试方法等价类划分分类 每类中选取几个数值等价类划分步骤:划分等价类:不考虑程序的内部结构测试人员要对需求规格说明书的功能需求进行细致分析然后把程序的输入域划分成若干部分 从每
8、个部分中选取少数代表性数据当作测试用例,经过这种划分后,每一类的代表性数据在测试中的作用都等价于这一类的其他值。建立等价类表确定等价类细化等价类划分等价类划分 分为有效等价类和无效等价类合理的有意义的输入数据构成的集合就是有效等价类不合理的、无意义的输入数据构成的集合。用来检查程序中功能的实现是否不符合规格说明要求。就是无效等价类。等价类测试的重要意义提供了完备性;保证了无冗余性目的 为了减少测试用例等价类划分规则为每个等价类规定一个唯一的编号设计一个新的测试用例使其尽可能多的覆盖违背覆盖的有效等价类 为了工作的高效,此项工作重复进行 知道所有的有效等价类都被覆盖为止。设计一个新的测试用例使其
9、覆盖一个而且仅仅一个尚未被覆盖的无效等价类 避免出错 此项工作重复进行知道所有的无效等价类都被覆盖为止。之所以要这样做是因为某些程序中对某一输入错误俄检查往往会评比对其他输入错误的检查,因此必须针对每一个无效等价类分别设计测试用例等价类划分原则如果输入条件规定了取值范围或者值的个数 则可以确定一个有效等价类和两个无效等价类例如序号值为 1 到 9991 个有效类 序号值为 12 个无效类 序号值999如果输入条件规定了输入值得集合或者是规定了必须如何的条件这时可确立一个有效等价类和一个无效等价类例如 c 语言对变量标识符规定为 以字母打头的串,所有字母打头的就是有效等价类如果输入条件是一个布尔
10、量,则可以确定一个有效等价类一个无效等价类如果规定了输入数据时一组值,而且程序要对每个输入值分别进行处理 这时可为每一个输入值确立一个有效等价类,此外在针对这组确立一个无效等价类它应该是所有不允许输入值得结合如果规定了输入数据必须遵守的规则则可以确定一个有效等价类(符合规则) 。和若干个无效等价类(从不同角度违反规则)保险费率计算问题(实战)某保险公司承担忍受保险,该公司保费计算方式为:保费=投保额*保险率,保险率依点数不同而有别,10 点以上(含 10 点) ,费率为 0.6%,10 点以下费率为 0.1%点数的计算是年龄、性别、婚姻、扶养人数所得的点数的总和输入:年龄、性别、婚姻、扶养人数
11、输出:保险率年龄 20-39 6 点40-59 4 点99 以下 59 以上 ,20 以下 1 以上 2 点性别 男 5 点女 3 点婚姻 已婚 3 点未婚 5 点扶养人数 1 人扣 0.5 点 最多扣 3 点(四舍五入)编写用例 设计测试用例,尽可能的覆盖尚未覆盖的有效等价类1,8,10.,122,9,11,133,8,10,14设计测试用例,使得每一个新设计的测试用例只包含一个无效等价类,其他的选择有效等价类4 8 10 125 9 11 136 8 10 147 8 10 141 8 10 152 9 11 163 8 10 16等价类的特点测试内容相同如果等价类中的一个测试能够捕获一个
12、缺陷,那么选择该等价类中的其他测试也能捕获该缺陷如果等价类中的一个测试不能够捕获一个缺陷,那么选择该等价类中的其他测试也不能捕获该缺陷注意考虑无效等价类;仔细划分经典笔试题三角形问题一个程序读入 3 个整数,把这三个数值看作一个三角形的 3 条边的长度值,这个程序要打印出信息,说明这个三角形是不等边的,是等腰的,还是等边的,利用等价类划分的方法,给出足够的测试用例。解题思路: 我们可以设三角形的 3 条边分别为 A B C,如果他们能够构成三角形的 3 条边,必须满足:A0,B0,C0 且 A+BC, B+CA,A+CB如果是等腰的,还要判断 A=B,或 B=C,或 A=C如果是等边的,还要判
13、断 A=B 且 B=C,或 A=C 且 B=C输入条件 有效等价类 无效等价类A0 A+BC A0 B+CA B0 A+CB C=0 A+C=B是等腰 A=B A 不等于 B 且B=C B 不等于 C 且C=A C 不等于 A是等边 A=B=C A 不等于 BB 不等于 CC 不等于 A设计用例:3.4.5 1.2.3.4.5.6 一般三角形0.1.2 71.0.2 81.2.0 91.2.3 101.3.2 113.1.2 123.3.4 1.2.3.4.5.6.13 等腰3.4.4 1.2.3.4.5.6.14 等腰3.4.3 1.2.3.4.5.6.15 等腰3.4.5 1.2.3.4.
14、5.6.16 非等腰一般三角形3.3.3 1.2.3.4.5.6.17 等边3.4.4 1.2.3.4.5.6.14.18 非等边一般三角形3.4.3 1.2.3.4.5.6.15.19 非等边一般三角形3.3.4 1.2.3.4.5.6.13.20 非等边一般三角形边界值边界值方法小结输入或输出的边界最容易产生错误确定边界值的方法对取值范围进行界定对取值个数进行界定有序集合分析规格说明,找出其他边界条件隐含的边界值2 的乘方ASCII 表单缺陷假设边界值分析的关键假设;在可靠性理论中叫做单缺陷假设,失效极少是由两个或者多个缺陷同时发生引起的;基本边界值获得测试用例的方法,使所有的变量取正常值
15、,只有一个变量取极值。对于一个有 n 个变量的程序,保留其中一个变量,让其余的变量取正常值,被保留的变量取正常值,被保留的变量依次取 min,min+,nom,max-,max值,对每个变量都重复进行。这样,对于一个有 n 个变量的程序,边界值分析测试程序会产生 4n+1 个测试用例找零钱的最佳组合(实战)假设商店商品价格 X 皆不大于 100 元(整数) ,若顾客买一件商品,付款 Y 在 100 元内,求找给顾客的最少货币张数?货币面值50 20 10 5 2 1定义找回零钱为 SS 输入 输出 找回张数X Y 50 20 10 5 2 11010100 101100 9950 50 100
16、 1 149 51 100 2 1 2 520 80 100 1 119 81 100 1 1 2 410 90 100 1 19 91 100 1 2 35 95 100 1 14 96 100 2 22 98 100 1 11 99 100 1 1决策表(决策表)判定图方法小结:分析输入条件和输出条件分析,简化画出输入输出关系图(判定表)得出测试用例决策表法是黑盒测试方法中最为严格、最具有逻辑性的测试方法决策表的优点: 它能够将复杂的问题按照各种可能的情况全部列出,简明并避免遗漏,因此,利用决策表能够设计出完整的测试用例集合判定图内容:条件桩 列出问题的所有条件条件项 针对条件桩给出的条件
17、列出所有可能的取值动作桩 列出问题规定的可能采取的操作动作项 指出在条件项的各个组取值情况下应采取的动作决策表化简(动作相同是前提)合并:如果一个条件相和另外一个条件相动作时相同的,且两个条件相对应的每一行的执只有一个是不同的,则可以将其合并,合并的项除了不同值变成不关心条目外其余不变包含:如果两个条件相的动作时相同的,对人以条件 1 的值和条件 2 种对应的值,如果满足:A 如果条件 1 的值是 T(F) ,则条件 2 种的值也是 T(F)B 如果条件 1 的值是不关心,则条件 2 中的值是 T,F ,不关心,称条件 1 包含条件 2,条件 2 可以撤去C 重复 A,B 两条就可以得到精简的
18、决策表决策表的步骤:确定规则个数,假设有 N 个条件,则有 2 的 N 次幂个规则列出所有的条件桩和动作桩填入条件项填入动作项,制定初始决策表进行简化,合并相似规则或者相同动作决策表的使用范围:规格说明以判定表的形式给出的,或者很容易转换成判定表条件的排列顺序和规则的排列顺序不影响执行哪些操作规则之间是独立的,某一规则触发的操作与其他规则无关组合测试方法组合测试关注的是用例对输入变量取值的组合覆盖情况 常见的组合策略有:全组合,单因素覆盖,两两组合覆盖全组合覆盖:是指所有测试用例覆盖所有的输入变量取值间的组合,全组合的数目为变量取值数目间的组合。全组合覆盖测试能够发现软件中所有的缺陷,但是我们
19、是无法对软件进行全组合覆盖测试单因素组合覆盖:所选的测试用例覆盖所有的变量取值,单因素组合覆盖所需的用例数与取值最多的变量的取值数相同。单因素组合覆盖能够发现软件中所有的单点故障两两组合(成对组合)覆盖:所选的测试用例覆盖所有的任意两个输入变量间取值的组合情况。可以用成对组合集合来表示通常的测试用例集,对于某个给定的测试用例,它能覆盖一定数量的成对组合元素,例如:测试用例 A1B1C2 覆盖了( A1,B1) , (A1,C2 ) , (B1,C2)3 个成对组合元素。航空公司托运费计算(实战)某航空公司行李托运费处理规则,低于 30 公斤(含)免运费,超过 30 公斤,头等舱的国内乘客,超重
20、 1 公斤 4 元,其他舱的国内乘客,超重 1 公斤 6元,国外乘客加一倍,残疾乘客减一倍判定树决策表1 2 3 4 5 6 7 8 9国内 - T T T T F F F F头等 - T F T F T F T F残疾 - F F T T F F T T小于 30 T F F F F F F F F免费 X2 X3 X4 X X6 X X8 X12 X猜错法错误猜测:错误猜测是基于经验和直觉推测程序中所有可能存在的各种错误,从而针对性地设计测试用例的方法需要测试人员具备的技术:有关被测系统的知识,如设计方法或实现技术有关的早期测试阶段的结果的知识 测试类似或相关系统的经验典型的实现错误的知识
21、通用的测试经验规则随机测试的缺点无法度量随机测试实际覆盖率许多测试都是冗余的确定预期结果可能会花费大量的时间测试数据因为是随机的,重复测试是不可能的如何选择测试方法:任何情况下都必须使用边界值分析方法用等价类划分方法补充一些测试用例用错误推测法在追加一些测试用例如果程序的功能说明中含有输入条件的组合情况,则应在一开始就选用因果图法如果程序某功能适合自动测试,可以采用自动测试以及随机测试软件故障模型概念:测试时有太多的单个输入变量、多个输入变量的组合,我们把这些测试人员的经验和直觉尽量归纳和固化,形成一些故障模型输入非法数据输入类型 输入字符长度 边界值输入默认值无效输出数据结构溢出如何评价测试
22、设计的好坏是否可以发现尚未发现的软件缺陷是否可以覆盖全部的测试需求易用性:应当可以花费很少的时间就可以理解测试用例中表达的测试思路并可以很快地执行完这个测试用例易维护性:花费很少的时间就完成定位并维护所有相关测试用的工作有效验证用户需求:在产品之后的运行中可以充分满足用户需求,不发生重大漏测问题城区电话号码(实战)某城市电话号码由三部分组成,分别是地区码空白或三位数字前缀非 0 或 1 开头的三位数字后缀4 位数字假定被测程序能够接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码,要求1 请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,给出测试用例表2 如果所生成的测试用例不够全面,请考虑用别的测试方法生成一些补充的测试用例选择等价类划分有效 无效地区码 空白 1 三位数字 2 任意字符 3 小于 3 位数 4 大于 3 位数 5前缀 200999 6 任意字符 7 小于 3 位数 8 大于 3 位数 9起始为 0 10 起始为 1 11后缀 4 位数字 12 小于 4 位 13 大于 4 位 14 任意字符 15