2010年11月17日星期三

软件测试

软件测试
培训目的
什么是软件测试

如何做好软件测试
什么是软件测试
软件测试是以发现软件的缺陷为目的,使软件运行,将软件运行中所产生的危险性降低到允许的范围,是一个为发现错误而执行程序的过程

软件的缺陷是对软件产品预期属性的偏离现象。包括对产品规格说明书的偏离;对客户/用户的期望的偏离,客户/用户的要求没有纳入软件产品中(可能是产品规格说明书说明时的遗漏,也可能是软件实现的问题)。
软件测试的几个基本概念
单体测试:是指对单个模块或者是一个函数等更小单位的测试
集成测试:是指多个模块组合起来,或者一个子系统的所有模块都结合起来后进行的测试
系统测试:是指整个系统的所有子系统都结合起来以后进行的测试
回归测试:是指修复或调整好软件环境之后进行测试
差分测试:是指当测试时间较短时(不足以进行一遍系统测试时),而只对整个系统中新变更或者新追加功能的相关部分的测试

手动测试:是指测试人员,根据功能规格说明书、编写的测试大纲或者其他测试文档,直接运行程序而完成的测试
自动化测试:是指测试人员,使用自动测试工具、或者编写测试脚本,让程序自动运行而进行的测试
软件产品周期简介
根据需求文档进行分析制定测试策略和测试计划
分别根据需求分析、概要设计和详细设计的输出进行测试设计
使用测试设计文档,进行各个阶段的测试执行
产品Release之后进行测试工作的总结
当软件产品周期,需求文档变化时,将重新进行前三个工作
测试计划的制定
主要输入:需求文档和里程碑

主要输出:测试进度的制定和采取的测试策略
测试进度内容包括测试设计开始和结束的时间,测试执行的开始和结束时间,测试总结开始和结束时间,还包括测试设计、测试执行和测试总结所花费的工作量
测试策略内容包括采取测试方法、测试资源的分配和测试中风险的控制计划
测试设计
根据测试阶段的不同,测试设计包括以下几种
系统测试的测试设计
集成测试的测试设计
性能测试的测试设计
单体测试的测试设计

其中单体测试的测试设计由开发人员完成,其他一般情况下由测试人员完成
系统测试、集成测试的 测试设计
CheckList的编写
根据需求分析文档得到软件产品应该包括的功能点(包括大小功能点),组成CheckList的第一部分,要求CheckList必须覆盖软件产品应该包括的全部功能点
理解需求分析文档得到每个功能点的细化部分,组成CheckList的第二部分,要求覆盖需求文档中所有可测试的内容
根据测试经验和业务知识,进一步分析需求分析文档,得到需求分析文档上没有描述的内容,补充CheckList的第二部分
对每个功能点的细化部分,确定其测试方法(或者测试步骤)和预计的正确测试结果
测试用例的编写
需要特殊条件才能测试的功能点,编写测试用例以对应
编写一些测试用例,以覆盖主要的功能点,以供功能验证时使用
性能测试的测试设计
根据性能指标,选择测试用例
根据需求文档得到用户明确要求的性能指标

版本升级的项目,各功能的性能指标不得低于旧版本的性能指标

模型产品,新模型各功能的性能指标以不低于旧模型的性能为要求

根据收集的性能指标,建立性能测试的CheckList
单体测试的测试设计
白盒测试的测试设计

命令覆盖

分支覆盖

路径覆盖
单体测试_白盒测试设计1
单体测试_白盒测试设计2
单体测试_黑盒测试设计
黑盒测试的测试设计

等价类划分

边界值分析
测试执行
根据测试阶段的不同,测试执行分成

单体测试的测试执行

单集成测试的测试执行

集成测试和系统测试的测试执行

性能测试的测试执行
单体测试的测试执行
根据白盒测试设计和黑盒测试设计得到测试用例
编写对待测试代码进行输入和得到输出程序,或者找到能对待测试代码进行输入和得到输出的调试方法
使用测试用例逐一输入,收集输出结果,检查输出结果是否正确
单集成测试的测试执行-1
自顶向下法
单集成测试的测试执行-2
自底向上法
集成测试和系统测试的执行-1
判定需求,执行测试设计和测试用例,填写结果
及时准确反馈产品缺陷
定期完成修改的确认
分析缺陷发生趋势,制定测试策略
需求变更时,对应变更测试设计文档
收集测试数据,分析并使用
集成测试和系统测试的执行-2
判定需求,执行测试设计和测试用例,填写结果
获得测试版本的同时要获得版本对应的测试需求,根据需求选择相关的测试设计文档和测试用例文档
根据选择的文档进行测试,要求至少完成一遍的覆盖,覆盖测试后填写测试结果(OK和NG)
完成版本的测试时,把完成的文档测试结果和该版本发现的缺陷一起提交

注意:这里提到的需要提交文档测试结果的版本一般上是比较大的版本(项目负责人决定),普通的版本之提交发现的缺陷即可

集成测试和系统测试的执行-3
及时准确反馈产品缺陷
测试中发现缺陷(包括不确定的)时,首先要进行记录,其次在进行是否缺陷的分析
当天发现的缺陷要尽量在当天完成登陆
要准确填写错误等级和再现率
错误等级
A类为严重影响系统运行(并且不可恢复)
B类为影响系统运行(可以恢复)
C类为不影响系统运行但必须修改
D类为所提建议
再现率
要求记录准确的测试和再现次数,尽量不要出现1/1的情况
再现时注意环境的正确,在已经出现缺陷的环境上继续再现的意义不大
再现前要尽量通过分析降低再现的难度和再现的步骤
集成测试和系统测试的执行-4
及时准确反馈产品缺陷
补充发现缺陷的相关信息(DEBUG信息,缺陷发生的图片,死机时的堆栈信息,发生缺陷的现场等)

集成测试和系统测试的执行-5
定期完成修改的确认
当发布新的版本到测试时,要得到该版本开发人员投入的已经修改的缺陷,进行确认
合理的分配测试时间,当测试工作量比较大时,首先完成变更点的测试,然后再进行确认测试


NotBug的及时确认
对于开发人员分配成NotBug的缺陷进行确认时,要以下面的顺序进行参考
仕样中是否有明确说明>>用户是否明确的文档说明>>其他模型的参考和自己正确的分析>>开发人员的分析
出现和开发人员无法达成一致时通过和测试负责人或者项目负责人沟通解决
对于开发人员判断错误的缺陷及时进行NG的处理,使开发人员尽快得到信息

集成测试和系统测试的执行-6
分析缺陷发生趋势,制定测试策略

集成测试和系统测试的执行-7
需求变更时,对应变更测试设计文档
对应产品开发过程中的需求变更方法,要和项目开始前的需求分析方法相同,对需求变更的部分及时修改或者填写测试设计文档

集成测试和系统测试的执行-8
收集测试数据,分析并使用
区分整个测试时间里,测试时间占用情况的分类
功能覆盖测试
脱离测试设计文档的自由测试
差分测试 (针对功能点变更进行的测试)
发现缺陷的再现测试
确认测试
开发人员调试

根据不同分类收集测试数据
根据测试时间占用情况的分类进行测试数据的收集

分析测试效率,发现问题
对于功能覆盖测试、自由测试和差分测试都是有效的测试时间,基本上90%以上的缺陷都是这个期间发现的,因此可以得到测试组以及每个测试人员的测试效率,然后再结合实际进行分析,就能得到测试组或者某个测试成员的测试状态如何
性能测试的测试执行
选择性能测试的对象,建立性能测试CheckList
收集评价用的性能数据,向CheckList进行补充
定期根据性能测试CheckList,对产品进行性能测试数据收集
提前进行性能数据的收集,以评估当前的产品是否能够达到性能要求
反馈性能数据
对提前收集的性能数据分析,评估当前的产品不能达到性能要求时立即向开发人员反馈性能数据
对性能测试阶段收集的性能数据,进行分析后提交开发人员
评估和预定的性能指标的差异
帮助开发人员分析造成性能指标差异的原因
例题
Myers问题: 读入三个整数值。这三个数值表示了一个三角形三条边的长度。程序将输出一条信息,说明该三角形是不等边三角形,等腰三角形,还是等边三角形。(并不要求写出程序)写出你认为能充分地测试这个问题的测试实例(即特定的数据集)。

(格式可写成:测试实例说明     测试实例值       期望输出)。
例题答案-1
*1 合法的不等边三角形      5    3    4            不等边三角形
*2 合法的等腰三角形       3    3    4            等腰三角形
*3  合法的等边三角形       3    3    3 等边三角形
*4  两个相同值边的互换(第一次) 50   50   25         等腰三角形
5  两个相同值边的互换(第二次)  25   50   50         等腰三角形
6  两个相同值边的互换(第三次)  50   25   50           等腰三角形

*7 一条边为0                   1000  1000  0      非法
*8  一条边值为负                 3     3    -4        非法
*9  两条相同边的第一次互换(非法) 5     5   10            非法
10 两条相同边的第二次互换(非法)  10    5    5            非法
11 两条相同边的第三次互换(非法) 5    10   5            非法
*12 两条较小的边长之和小于最大的边长 8    2    5             非法
13 上例的二条边第二次交换            2    8    5             非法
14 上例的二条边再次交换               2    5    8              非法
15 上例的二条边再次交换              8    5    2              非法
16 上例的二条边再次交换              5    8    2              非法
17 上例的二条边再次交换               5    2    8           非法
例题答案-2
*18 所有的边为0                     0    0     0              非法
*19 第一个参数为非整数  #    3     7              非法
20 第二个参数为非整数               7    @     8              非法
21 第三个参数为非整数               6    9     $              非法

*22  缺少第一个参数的输入                 4     5              非法
23 缺少第二个参数的输入              3          5              非法
24 缺少第三个参数的输入              3    4                    非法

*25 三条边大于0,一边等于另两边之和 12   5     7              非法
26 上例的交换                        12   7    5              非法
27 上例的再次交换                     5    12   7              非法
28 上例的再次交换                     5    7    12              非法
29 上例的再次交换                     7    12   5              非法
30  上例的再次交换                     7    5    12  非法

*31 三条边有最大的可能值 2147483647 2147483647 2147483647(32767) 等边
32 二条边有最大的可能值  2147483647 2147483647  1           等腰
33 一条边有最大的可能值    1 2147483647  1                非法

没有评论: