第三天: 测试用例的特征: 1、正确性:测试用例最好是要求输入用户实际数据已验证系统是否满足需求规格说明书的需求,并且测试用例中的测试的应保证至少覆盖需求规格说明书中的各项功能。 2、完整性:一些基本功能,如有遗漏,那是不可原谅的。 3、准确:按测试用例输入实施测试后,要能根据测试用例描述的输出得出正确的结论,不能出现模糊不清的语言。 4、清晰、简洁:好的测试用例描述清晰,每一步都应有相应的作用,有很强的的针对性,不应出现一些无用的操作步骤。 5、可维护性:由于软件开发过程中需求变更等原因的影响,常常对测试用例进行修改、增加、删除等,以便测试用符合相应测试要求。 6、适应性:测试用例应该适合特定的测试环境以及符合整个团队的测试水平。 7、可重复性:要求不同测试者在同样的测试环境下使用同样测试用例都能得出相应结论。 8、可追溯性、可移植性 编写测试用例的好处: 在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率。测试用例的使用令软件测试的实施重点突出、目的明确。在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度、缩短项目周期。检验软件是否满足客户需求、体现一个测试人员的工作量、展现测试用例的设计思路功能模块的通用化和复用化使软件易于开发,而相对于功能模块的测试用例的通用化和复用化则会使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升。 测试用例的4个特性 代表性:能够代表并覆盖各种合理的和不合理、合法的和不合法的、边界的和越界的以及极限的输入数据、操作等。针对性:对程序中的可能存在的错误有针对性地测试可判定性:测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果可重现性:对同样的测试用例,系统的执行结果应当是相同的。第一个数字 和 第二个数字都为 0-10 之间的数 计算结果 ? + ? = ? 1- 10 1 -10 正向测试用例 反向测试用例 测试用例示例
确定边界值的方法() 确定边界情况(输入或输出等价类的边界) 选取正好等于、刚刚大于或刚刚小于边界值作为测试数据 输入要求是1 ~ 100之间的整数,因此自然产生了1和100两个边界,我们在设计测试用例的时,要重点考虑这两个边界问题。 因果图法
概念 因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。
因果图基本图形符号 恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。非(~):若原因出现,则结果不出现;若原因不出现,则结果出现。或(∨):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。与(∧):若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现。 因果图测试用例 例如:有一个处理单价为2.5元的盒装饮料的自动售货机软件。若投入2.5元硬币,按“可乐”、“啤酒”、或“奶茶”按钮,相应的饮料就送出来。若投入的是3元硬币,在送出饮料的同时退还5角硬币。 分析这一段说明,我们可列出原因和结果 原因(输入): 投入2.5元硬币; 投入3元; 按“可乐”按钮; 按“啤酒”按钮; 按“奶茶”按钮。 中间状态: ① 已投币;②已按钮 结果(输出):退还5角硬币; 送出“可乐”饮料; 送出“啤酒”饮料; 送出“奶茶”饮料; 判定表法 场景法
测试用例设计的思想
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。 用例场景是通过描述流经用例的路径来确定的过程, 这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。 基本流和备选流 如图所示,图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。备选流用不同的色彩表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和4)。
遵循上图中每个经过用例的可能路径,可以确定不同的用例场景。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景: 场景 1 基本流 场景 2 基本流 备选流 1 场景 3 基本流 备选流 1 备选流 2 场景 4 基本流 备选流 3 场景 5 基本流 备选流 3 备选流 1 场景 6 基本流 备选流 3 备选流 1 备选流 2 场景 7 基本流 备选流 4 场景 8 基本流 备选流 3 备选流 4 注:为方便起见,场景 5、6 和 8 只描述了备选流 3 指示的循环执行一次的情况。
错误推测法
错误猜测法是测试经验丰富的人喜欢使用的一种测试用例设计方法。一般这种方法是基于经验和直觉推测程序中可能发送的各种错误,有针对性地设计。只能作为一种补充。 例如,测试手机终端的通话功能,可以设计各种通话失败的情况来补充测试用 例:1) 无SIM 卡插入时进行呼出(非紧急呼叫)2) 插入已欠费SIM卡进行呼出3) 射频器件损坏或无信号区域插入有效SIM卡呼出4) 网络正常,插入有效SIM卡,呼出无效号码(如1、888、333333、不输入任何号码等)5) 网络正常,插入有效SIM卡,使用“快速拨号”功能呼出设置无效号码的数字 技巧:最重要的是要思考和分析测试对象的各个方面,多参考以前发现的bug的相关数据,总结的经验,个人多考虑异常的情况、反面的情况、特殊的输入,以一个攻击者的态度对待程序,就能设计出比较完善的测试用例来。
正交表法 正交实验法就是利用排列整齐的表 -正交表来对试验进行整体设计、综合比较、统计分析,实现通过少数的实验次数找到较好的生产条件,以达到最高生产工艺效果,这种试验设计法是从大量的试验点中挑选适量的具有代表性的点,利用已经造好的表格—正交表来安排试验并进行数据分析的方法。正交表能够在因素变化范围内均衡抽样,使每次试验都具有较强的代表性,由于正交表具备均衡分散的特点,保证了全面实验的某些要求,这些试验往往能够较好或更好的达到实验的目的。正交实验设计包括两部分内容:第一,是怎样安排实验;第二,是怎样分析实验结果。 应用场景:在一个界面中有多个控件,每个控件有多个取值,控件之间可以相互组合,不可能(也没有必要)为每一种组合编写一条用例,如何使用最少最优的组合进行测试。——正交排列法 判定表,因果图也是考虑控件组合,但是组合数量较少(一般不会超过20中)公式:Ln(mk)k是表的列数,表示控件的个数(因数个数)m是每个控件的取值个数(因数水平)n是表的行数,也就是需要测试组合的次数
第四天 测试计划 软件缺陷和软件缺陷种类
软件缺陷的定义 软件缺陷,常常又被叫做Bug,从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。 格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1947年9月9日,赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。
软件缺陷的种类划分 照软件缺陷的产生原因,可以将其划分为不同的缺陷类别: 1、功能不正常 简单地说就是所应提供的功能,在使用上并不符合产品设计规格说明书中规定的要求,或是根本无法使用。这个错误常常会发生在测试过程的初期和中期,有许多在设计规格说明书中规定的功能无法运行,或是运行结果达不到预期设计。最明显的例子就是在用户接口上所提供的选项及动作,使用者操作后毫无反应。 2、软件在使用上感觉不方便 只要是不知如何使用或难以使用的软件,在产品设计上一定是出了问题。所谓好用的软件,就是使用上尽量方便,使用户易于操作。如微软推出的软件,在用户接口及使用操作上确实是下了一番功夫。有许多软件公司推出的软件产品,在彼此的接口上完全不同,这样其实只会增加使用者的学习难度,另一方面也凸显了这些软件公司的集成能力不足。 3、软件的结构未做良好规划 这里主要指软件是以自顶向下方式开发,还是以自底向上方式开发。如果是以自顶向下的结构或方法开发的软件,在功能的规划及组织上比较完整,相反以自底向上的组合式方法开发处的软件则功能较为分散,容易出现缺陷。 4、提供的功能不充分 这个问题与功能不正常不同,这里指的是软件提供的功能在运作上正常,但对于使用者而言却不完整。即使软件的功能运作结果符合设计规格的要求,系统测试人员在测试结果的判断上,也必须从使用者的角度进行思考,这就是所谓的“从用户体验出发”。 5、与软件操作者的互动不良 一个好的软件必须与操作者之间可以实现正常互动。在操作者使用软件的过程中,软件必须很好地响应。例如在浏览网页时,如果操作者在某一网页填写信息,但是输入的信息不足或有误。当点击“确定”按钮后,网页此时提示操作者输入信息有误,却并未指出错误的哪里,操作者只好回到上一页重新填写,或直接放弃离开。这个问题就是典型的在软件对操作互动方面未做完整的设计。 6、使用性能不佳 被测软件功能正常,但使用性能不佳,这也是一个问题。此类缺陷通常是由于开发人员采用了错误的解决方案,或使用了不恰当的算法导致的,在实际测试中有很多缺陷都是因为采用了错误的解决方法,需要加以注意! 7、为做好错误处理 软件除了避免出错之外,还要做好错误处理,许多软件之所以会产生错误,就是因为程序本身对于错误和异常处理的缺失。例如被测软件读取外部的信息文件并已做了一些分类整理,但刚好所读取的外部信息文件内容已被损毁。当程序读取这个损毁的信息文件时,程序发现问题,此时操作系统不知该如何处理这个情况,为保护系统自身只好中断程序。由此可见设立错误和异常处理机制的重要性! 8、边界错误 缓冲区溢出问题在这几年已成为网络攻击的常用方式,而这个缺陷就属于边界错误的一种。简单来说,程序本身无法处理超越边界所导致的错误。而这个问题,除了编程语言所提供的函数有问题之外,很多情况下是由于开发人员在声明变量或使用边界范围时不小心引起的。 9、计算错误 只要是计算机程序,就必定包括数学计算。软件之所以会出现计算错误,大部分出错的原因是由于采用了错误的数学运算工时或未将累加器初始化为0. 10、使用一段时间所产生的错误 这类问题是程序开始运行正常,但运行一段时间后却出现了故障。最典型的例子就是数据库的查找功能。某些软件在刚开始使用时,所提供的信息查找功能运作良好,但在使用一段时间后发现,进行信息查找所需的时间越来越长。经分析查明,程序采用的信息查找方式是顺序查找,随着数据库信息的增加,查找时间自然会变长。这就需要改变解决方案了! 11、控制流程的错误 控制流程的好坏,在于开发人员对软件开发的态度及程序设计是否严谨。软件在状态间的转变是否合理,要依据业务流程进行控制。例如,用软件安装程序解释这类问题最方便直观。用户在进行软件安装时,输入用户名和一些信息后,软件就直接进行了安装,未提示用户变更安装路径、目的地等。这就是软件控制流程不完整导致的错误问题。 12、在大数据量压力下所产生的错误 程序在处于大数据量状态下运行出现问题,就属于这类软件错误。大数据量压力测试对于Server级的软件是必须进行的一项测试,因为服务器级的软件对稳定性的要求远比其它软件要高。通常连续的大数据量压力测试是必须实施的,如让程序处理超过10万笔数据信息,再来观察程序运行的结果。 13、在不同硬件环境下产生的错误 这类问题的产生与硬件环境的不同相关。如果软件与硬件设备有直接关系,这样的问题就是数量相当多。例如有些软件在特殊品牌的服务器上运行就会出错,这是由于不同的Server内部硬件了不同的处理机制。 14、版本控制不良导致的错误 出现这样的问题属于项目管理的疏忽,当然测试人员未能尽忠职守也是原因之一。例如一个软件被反映有安全上的漏洞,后来软件公司也很快将修复版本提供给用户。但在一年后他们推出新版本时,却忘记将这个已解决的bug-fix加入到新版本中。所以对用户来说,原本的问题已经解决了,但想不到新版本升级之后,问题又出现了。这就是由于版本控制问题,导致不同基线的merge出现误差,使得产品质量也出现了偏差。 15、软件文档的错误 最后这类缺陷是软件文档错误。这里所提及的错误,除了软件所附带的使用手册、说明文档及其它相关的软件文档内容错误之外,还包括软件使用接口上的错误文字和错误用语、产品需求设计PD、UI Spec等的错误。错误的软件文档内容除了降低产品质量外,最主要的问题是会误导用户! 软件缺陷的属性
按照严重程度分: 一般分为5个等级:系统崩溃,严重,一般,次要,建议
按优先级分: 修正优先级:高,中,低
Bug定级示例 1级,系统崩溃 定义:严重阻碍测试和开发工作 对应优先级:最高 具体可分为: 1.功能完全没有实现 2.应用闪退/崩溃无法运行 3.应用必现安全模式,无法运行 4.其他导致功能无法测试的问题2级,至关重要 定义:非阻碍用例执行的严重问题 对应优先级:高
具体可分为: 1.简单操作应用闪退/崩溃,卡死2.数据丢失 3.严重影响系统,自身功能无法运行 4.严重数值计算错误 5.数据库损坏或无法保存配置 6.安全性问题(包括数据加密等)3级,主要 定义:功能存在缺陷,但不影响应用和系统的稳定性 对应优先级:中
具体可分为: 1.内存泄露(长时间不用的对象需要被回收,不被回收占内存)2.功能实现逻辑覆盖不全面 3.非必现,但复现概率超过50%的闪退/崩溃和安全模式4级,一般 定义:对应用熟悉度高才能感知到的问题,对应用基本功能实现无影响 对应优先级:中 具体可分为: 1.轻微数值计算错误 2.功能实现有误,与产品文档不完全贴切 3.用户简单操作,即可明显感知的UI问题5级,较小 定义:界面,性能缺陷 对应优先级:低 具体可分为:1. 操作界面错误(提示显示规则,刷新规则是否与文档一致) 2.边界条件显示错误 3.提示信息和界面效果展示错误(包括未给出信息、信息提示错误等) 4.复现率低于5%的闪退/崩溃和安全模式 5.插件兼容和性能未优化问题 6.非正常操作导致UI显示异常 6级,建议 定义:对于产品的意见或者建议 对应优先级:低
具体可分为: 1.对于产品设计方面的意见和建议 2.对于产品界面优化方面的意见和建议 3.对于产品需要优化增强用户体验方面的意见和建议
按照测试种类分: 逻辑功能类,性能类,界面类,易用性类,安装,兼容性类
软件缺陷类型 按照Bug生命周期 新建,确认,解决,重新验证,关闭,重新打开 缺陷报告 测试用例执行和故障管理流程图
