(一) 软件测试的目标、过程和步骤
1、软件测试的目标
(1)测试是为了发现程序中的错误而执行程序的过程
(2)好的测试方案是极有可能发现迄今尚未发现的尽可能多的错误的测试
(3)成功的测试是发现了迄今尚未发现的错误测试
2、软件测试的步骤
(1)模块测试:保证每个 模块作为一个单元能够正确运行
(2)子系统测试:着重测试模块之间的接口
(3)系统测试:把经过测试的子系统装配成一个完整的系统来测试
(4)验收测试:验证系统确定能够满足用户的需求
(5)平行测试:比较 新旧两个系统的处理结果
3、软件测试的过程
软件测试的过程有两种方法:白盒测试、黑盒测试
(1)黑盒测试:又称功能测试,(如果知道产品应具有的功能,可以通过测试来检验是否每个功能都能正常使用)把程序看做一个黑盒子,完全不考虑程序内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(如:数据库或文件)的完整性。
(2)白盒测试:又称结构测试,(如果知道产品的内部工作过程,可以通过测试来验证产品内部动作是否按照规格说明书的规定正常工作)可以把程序看做装在透明的白盒子里,测试者完全知道程序的结构和处理算法。这种按照程序内部的逻辑测试程序,检验程序中的主要执行通路是否能按预定的要求正确工作。
4、软件测试的准则
(1)所有测试应能追溯到用户需求,测试的目的是发现错误,其中最严重的是不能满足用户需求的错误
(2)应尽早的和不断地进行软件测试(不应把软件测试仅看做是软件开发一独立阶段,应把它贯穿到软件开发各个阶段)
(3)充分注意测试中群集现象(虫子窝现象)
(4)测试应从小规模开始,逐步进行大规模测试
(5)不能做到穷举测试
(6)第三方测试原则
(二) 代码复审
(三) 白盒测试、黑盒测试的原理
1、白盒测试
(1)逻辑覆盖
①语句覆盖:选择足够多的测试数据,使被测试程序中每个语句至少执行一次
②判定覆盖(分支覆盖):不仅每个语句必须执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次
③条件覆盖:不仅每个语句必须执行一次,而且使判定表达式中的每个条件都取到各种可能的结构
④判定/条件覆盖:是的判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果
⑤条件组合覆盖:是每个判定表达式中条件的各种可能组合都至少出现一次。(相比于上述几种覆盖标准来说最强)注意:并不一定能使程序中的每条路径都执行到
⑥点覆盖:使程序执行路径至少经过流图中的每个节点一次
⑦边覆盖:使程序执行路径至少经过流图中的每条边一次
⑧路径覆盖:使程序的每条可能路径都至少执行一次
(2)控制结构测试
①基本路径测试:Tom McCabe提出的一种白盒测试技术。
a.根据过程设计结果画出相应的流图
b.计算流图的环形复杂度
c.确定线性独立路径的基本集合
d.设计可以强制执行基本集合中每条路径的测试用例
②条件测试
③循环测试
2、黑盒测试
(1)侧重:软件功能
(2)发现错误类型:功能不正确;界面错误;数据结构或外部数据库访问错误;性能错误;初始化和终止错误
(3)等价划分:把程序的输入域划分成若干数据类,从每一数据类选取少数有代表性数据作为测试用例
①有效等价类:合理,有意义输入数据构成的集合
②无效等价类:不合理,无意义输入数据构成的集合
等价类划分原则
①输入条件规定范围
②输入条件是布尔量
③规定输入数据一组值
④规定输入数据必须遵守规则
⑤已划分等价类中各元素在程序中处理方法不同,要再细分
确定测试用例:建立等价类表,列出所有划分出来等价类
①为每一等价类规定唯一编
②设计一新测试用例,尽可能多覆盖尚未被覆盖有效等价类,重复,直到所有有效等价类被覆盖
③设计一新测试用例,仅覆盖一尚未被覆盖无效等价类重复,直到所有有效等价类被覆盖。
(3)边界值分析:选取刚好等于、稍小于、稍大于等价类边值的数据作为测试数据
(4)错误推测:(很大程度上靠直觉和经验进行)列举出程序中可能有的错误和容易发生错误的特殊情况
(5)因果图:前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输出条件之间的联系,相互组合等。考虑输入天剑之间的相互组合,可能会产生一些新的情况。
但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分传成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)
(四) 路径覆盖、条件覆盖、边界值分析等测试用例设计技术
路径覆盖:使程序的每条可能路径都至少执行一次
条件覆盖:不仅每个语句必须执行一次,而且使判定表达式中的每个条件都取到各种可能的结构
边界值分析:选取刚好等于、稍小于、稍大于等价类边值的数据作为测试数据
(五) 单元测试、集成测试、确认测试、系统测试
1、单元测试:着重从5个方面对模块进行测试:
①接口模块
②局部数据结构
③重要的执行通路
④出错处理通路
⑤边界条件
2、集成测试
①非渐增式测试:分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序
②渐增式测试:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完后再把下一个应该测试的模块结合进来测试
自上向下集成:
优点:不需要测试驱动程序,能够在测试阶段的早起实现并验证系统的主要功能,能在早期发现上层模块的接口错误
缺点:需要存根程序,底层关键模块的错误发现比较晚,而且用这种方法在早期不能充分展开人力
自底向上集成:(正好跟自上向下集成相反)
优点:不需要存根程序,底层关键模块的错误发现比较早,而且用这种方法在早期能充分展开人力
缺点:需要测试驱动程序,不能够在测试阶段的早起实现并验证系统的主要功能,不能在早期发现上层模块的接口错误
混合策略:两种的结合混合使用
3、确认测试:也称验收测试,目标是验证软件的有效性
①Alpha测试:由用户在开发者的场所进行,并且开发者对用户的指导下进行测试
②Beta测试:有软件的最终用户们在一个或多个客户场所进行。
4、系统测试
(六) 软件的可靠性
1、基本概念:
可靠性:程序在给定时间间隔及环境条件下,按照规格说明书规定,成功运行的概率。
可用性:给定的时间点,按照规格说明书规定,成功运行的概率。
2、系统可用性
其中
Tup是软件体统郑传给你运行时间的总和
Tdown是软件系统故障停机时间的总和
其中
MTTF是平均无故障时间
MTTR是平均维修时间
3、估算平均无故障时间
符 :
基本假设:
单位长度的错误数:(近似为常数:美国的一些统计数字表名为
失效率正比于软件中剩余的(潜藏的)错误数,而平均无故障时间MTTF与剩余的错误成反比
假设每发现一个错误都立即正确的改正:
有单位长度程序中剩余的错误数
估算平均无故障时间
经验表明无故障时间与耽误长度程序中剩余数成反比,即
其中
K为常数,他的值根据经验选取,美国的一些统计数字表明K=200
即
4、估算错误总数法
(1)植入错误法
其中
n:发现原有错误数
(2)分别测试法
有
(七) 调试
目的:进一步诊断和改正程序中潜在的错误
1、调试活动
(1)确定程序错误的性质和位置
(2)修改程序,排出错误
2、调试方法
(1)强行排错(蛮干法):内存内容打印出来分析;程序中插入特定语句
(2)回溯法排错(小程序常用):确定发现“症状”位置开始,人工沿程序控制流往回追踪分析源程序代码,知道找出错误原因
(3)原因排除法
①对分查找
②归纳法调试
③演绎法排除
(八)编写测试用例
包含项:
用例编 :根据项目定义编 ,进行唯一标识
用例名称:描述测试用例的名称
预置条件:要测试所需要的条件
测试步骤:实际操作的步骤
期望结果:检查点
所属模块
功能类型
优先级
提交人
提交时间
根据项目选取上述项进行组合得到测试用例模版,编写测试用例。
模版举例
举例1
举例2:百度百科给出
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!