五、软件测试
(一)术语解释:
错误(Error):在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
缺陷(Defect):软件缺陷是存在于软件产品之中的那些不希望或不可接受的偏差,其结果是软件运行于某一特定条件时出现故障。
故障(Fault):软件运行过程中出现的一种不希望或不可接受的内部状态,若无适当措施(容错加以及时处理,便产生软件失效。
失效(Failure):软件运行时产生的一种不希望或不可接受的外部行为结果
(二)软件测试策略:
1、对象:
需求规格说明、设计规格说明、源程序
2、测试流程
3、测试类型:
(三)软件测试分类
1、单元测试
也称组件测试,验证开发人员所书写的单元模块的代码是否符合预期结果
由驱动模块和桩模块组成,驱动模块模拟被测模块的上级,将测试数据传入测试模块;桩模块模拟被测单元的下级,模拟实现子函数的功能
2、集成测试
在单元测试的基础上将所有模块按照总体设计的要求组装成系统进行测试
一次性集成:在完成单元测试之后一次性将所有单元组装在一起,难以定位错误,错误很多
增量式集成:分为自顶向下和自底向上,逐步把各模块集成在一起。自顶向下可以尽早测试程序的主要控制但是需要设计很多的桩模块;自底向上需要加入最后一个模块才有整体形象,设计相对简单
3、系统测试
在实际运行环境中进行非功能性测试,包括负载测试、性能测试、压力测试、恢复测试、安全测试和可靠性测试等
恢复测试是检验系统从软件或者硬件失败中恢复的能力,即采用各种人工干预方式使软件出错,而不能正常工作,从而检验系统的恢复能力(断电、恢复日志)
安全性测试是检查系统对非法入侵的防范能力
压力测试是检查系统在资源超负荷的情况下的表现(高并发,高数据输入)
性能测试常与压力测试一起进行,测试系统性能
4、验收测试
在系统发布之前的测试,验证软件的功能和性能是否满足用户所期望的要求
5、回归测试
在软件生命周期中任何一个阶段只要软件发生了改变就需要回归测试
6、静态测试与动态测试
静态测试:通过人工分析或程序正确性证明的方式来确认程序正确性
动态测试:通过动态分析和程序测试等方法来检查程序执行状态,以确认程序是否有问题
7、手工测试与自动化测试
手工测试:测试人员根据测试大纲中所描述的测试步骤和方法,手工地输入测试数据并记录测试结果
自动化测试:相对于手工测试而言,主要是通过所开发的软件测试工具、脚本等手段,按照测试工程师的预定计划对软件产品进行的自动测试
手工测试是不可替代的,自动化测试的工具并不灵活,也不具想象力,一般只能发现15%-30%的缺陷,手工测试能发现70%-85%
8、白盒测试和黑盒测试
(四)白盒测试
把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试
测试用例尽可能覆盖程序实现,范围越大越优良
1、语句覆盖
被测试程序中的每条可执行语句至少被执行一次
2、判定覆盖
每个判定的分支至少执行一次
3、条件覆盖
判定中的每个条件,真假至少各执行一次,要注意与或的短路功能,(&&语句中前面不成立,后面的判断不会执行),
4、判定/条件覆盖
满足判定和条件覆盖,和条件覆盖是等价的
5、条件组合覆盖
每个判定中的每个条件组合至少执行一次
6、基本路径测试
1.以设计或源代码为基础,画出相应的流图,每个节点只能有一个条件的判断,如果有如and这种逻辑运算符要分两个节点
2.确定所得流图的环复杂度
环复杂度=封闭区域数量+1
=边数-节点数+2
=判定节点数+1
3.确定独立路径的基本集合
独立路径:一条至少包含一条之前未经过的边的路径
所有独立路径的集合就相当于遍历执行了所有语句
独立路径条数<=环复杂度
4.准备测试用例,执行基本集合中每条路径
根据每条路径设计测试用例,有些独立路径可能不能独立被测试,只能作为另一个路径测试的一部分
7、循环测试
也是一种白盒测试技术,循环运行程序来发现错误,分为四种,无结构循环不能测试。
(五)黑盒测试
又称“功能测试” 、 “数据驱动测试”或“基于规格说明书的测试”,是一种从用户观点出发的测试。
将测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明
黑盒测试要求覆盖需求和风险,因为无法观测到内部构造所以应该穷举所有输入得到所有输出,并验证这些输出
1、等价类测试
穷举所有数据显然是不现实的,所以将无穷多数据缩减到有限个等价区域中,在每个等价类中选取少量具有代表性的数据作为测试数据,这样就可以通过测试等价区域完成穷尽测试
每一个输入一定且唯一属于一个等价类
等价类可以划分成有效等价类和无效等价类,有效等价类是一组有意义的数据集合用来检验系统指定功能和性能的;无效等价类是一组无意义的数据的集合,用来检验系统的容错性(边界值)
有效等价类的测试用例要包含尽可能多的有效等价类,这样方便测试
无效等价类只能包含一个,因为包含多个的话出错了你不知道是哪个类的原因
步骤:先划分等价类,再设计测试用例
2、边界值测试
是对输入或输出的边界值进行测试的一种方法, 它通常作为等价类划分法的补充,这种情况下的测试用例来自等价类的边界
3、场景法测试
系统运行存在一个基本流(主线任务)和多个备选流(支线任务)
设计场景来运行这些流线,每一个场景就相当于跑一个支线(主线是前提)
|