软件测试
软件测试目的和作用
1.测试是程序的执行过程,目的在于发现错误;
2.一个好的测试用例在于能发现至今未发现的错误;
3.一个成功的测试是发现了至今未发现的错误的测试。
作用
1、测试是为了要找出缺陷,但同时,也可以通过对缺陷的度量和统计,分析缺陷产生的原因和缺陷的分布特征,分析产品的质量、工作效率、诊断开发过程中的问题,并通过改进各个开发过程提高过程能力,最终降低缺陷数量和缺陷密度。
2、没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
分类:
黑盒测试是从用户观点出发的测试,它又称功能测试、数据驱动测试或基于规格说明书或用户手册的测试。它所依据的是程序的外部特性!
基于需求规格说明书的测试(需求矩阵)
A 需求列表
B 设计列表:概要设计和详细设计
B 测试用例与需求的对照表
白盒测试又称结构测试、逻辑驱动测试或基于程序的测试
白盒测试的覆盖准则
语句覆盖
-在测试时,设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少执行一次。分支覆盖-在测试时,设计若干测试用例,运行被测程序,使程序中的每个判断真假的分支至少遍历一次。
条件覆盖
-在测试时,设计若干测试用例,运行被测程序,使程序中的每个条件的可能取值至少满足一次。
条件分支覆盖
-在测试时,设计足够的测试用例,使得判断中每个条件的所有可能取值至少出现一次,并且每个判断本身的判定结果也至少出现一次。
路径覆盖
- 设计足够多的测试用例,要求覆盖程序中所有可能的路径。
软件测试成果的衡量标准
需求的覆盖
需求追溯表/需求矩阵
缺陷数量
多、新
缺陷重现率
BUG能按照一定的测试过程稳定重现
效率
平均每人天发现的BUG数
成本
少。合理的测试人力和软、硬件资源安排
重用价值
测试的数据或者样例可以重用
单元测试的内容:
1、模块接口测试
2、检查局部数据结构能否保持完整性
3、模块边界条件测试
4、模块执行路径测试
5、检查模块内部错误处理是否有效
单元测试方法:
白盒测试为主
对模块进行正确性检验的测试工作,测试用例以白盒测试为主、黑盒测试为辅.
逻辑和算法:正确实现了逻辑和算法
数据结构(全局和局部):使用了全局数据结构?哪些?如果有,作了哪些关于全局数据的假设?这些假设正确吗?使用了局部数据?在算法执行的所有步骤期间,保持局部数据的完整性了吗?
接口:来自调用模块的数据匹配被调用的模块的期望接收的数据?被调用模块的数据匹配调用的模块提供的数据?
独立路径:标识了所有穿过模块的独立路径?执行了吗?
边界条件:了解边界条件吗?进行了测试确保该模块在其边界条件上的适当的操作了吗?
出错处理:所有出错处理路径均执行到了吗?
集成测试(Integration test): 将通过单元测试的多个模块组合成更大的模块或子系统或产品,然后进行测试。
测试内容:各单元的接口是否吻合、代码是否符合规定的标准、界面标准是否统一等。
人员安排:既要求参与的人熟悉单元的内部细节,又要求他们能够从足够高的层次上观察整个系统。一般由有经验的测试人员和主要的软件开发者来完成集成测试的计划。
集成测试计划:集成测试计划由系统设计人员在设计阶段制定,它是和设计规格说明同时完成的。内容有:
测试的描述和范围
测试环境
测试时间表
集成次序
测试用例以及测试的预期结果等
测试方法:集成测试阶段是以黑盒法为主
经过集成测试之后,分散开发的模块被联接起来,构成完整的程序,其中各模块间接口存在的种种问题都已基本消除。测试开始进入到系统测试的阶段。
为了发现缺陷并度量产品质量,按照系统的功能和性能需求进行的测试
一般使用黑盒测试技术
一般由独立的测试人员完成
系统测试(System test):
应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。这里所谓的系统不仅仅包括软件本身,而且还包括计算机硬件及其相关的外围设备,数据及其收集传输机构,甚至掌握计算机运行的人员及其操作等。
通常意义上的系统测试包括:功能测试、压力测试(Stress test)、性能测试(Performance test)、容量测试(Capacity test)、用户界面测试、兼容性测试等。
压力测试:
也称为强度测试。压力测试的目的就是在软件投入使用以前或软件负载达到极限以前,通过执行可重复的负载测试,预先分析出软件可承受的并发用户极限值和性能瓶颈,以帮助软件厂商或用户优化自己的程序。
容量测试:
对软件容量的测试,能让用户明白到底此软件能一次性承担多大访问量。有了对软件负载的准确预测,不仅能让用户对软件在实际使用中的性能状况充满信心,同时也可以帮助用户最经济地规划自己的网络配置,避免无谓的硬件投入,还可以减少网络系统的宕机时间和因此带来的经济损失。
性能测试:
对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能,系统性能测试就是为了完成这一任务。
压力测试、容量测试和性能测试的手段和方法很相似,有时可以交织在一起进行测试。压力测试的重点在于发现功能性测试所不易发现的系统方面的缺陷。容量测试和性能测试更着力于提供性能与容量方面的数据,以供制造者参考改进或进行广告宣传。
其他还有一些关于测试的分类,例如:
健壮性测试
容灾测试
内存泄漏测试
并发性测试
安全性测试
配套产品测试。
实际上,这些测试都是因为测试的目的不同,而在制定测试策略和测试设计的时候有不同的侧重点。
必做的测试:
安装测试
功能测试
值域测试
界面测试
可用性测试
说明书测试
配置测试
加密问题测试
裸机测试
可选的测试:
内存泄漏测试
接口测试
性能测试
并发性测试
安全性测试
破坏性测试
配套产品测试