软件测试基础
一、软件测试质量
软件研发过程中,通常定义了2个软件质量相关的角色:
- QC就是测试人员,职责是尽可能早地发现软件的缺陷,并确保缺陷得到修复
- QA是流程的监督者,职责是创建和执行 改进软件开发过程, 并防止软件缺陷发生的标准和方法
二、软件测试概念
- 目的:发现bug、提高质量、降低成本
- 概念:在规定的条件下对程序进行操作, 以发现错误,对软件质量进行评估。
三、软件测试原则
- 所有的软件测试都应追溯到用户需求
- 应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭
- 完全测试是不可能的,测试需要终止
- 测试无法显示软件潜在的缺陷
- 充分注意测试中的群集现象
- 开发工程师应避免测试自己的程序
- 尽量避免测试的随意性
- 测试的抗药性
四、软件测试对象(重要)
- 软件包括程序、数据、文档,所以软件测试应该贯穿于 整个软件生命周期中
- 在整个软件生命周期中,各阶段又有不同的测试对象, 形成了不同开发阶段的不同类型的测试
五、软件测试分类
1.按阶段划分
(1)单元测试
- 单元测试又称为模块测试,是针对程序的一种测。
- 在实际中,很多的单元测试工作都是程序员在做。
- 实际意义:一开始并不把程序作为一个整体来测,而首先 集中测试最小单元,这样能尽早的发现问题,解决问题。
- 实际演示一个单元测试例子。
(2)集成测试
- 时常有这样的情况发生,每个模块都能单独工作,但是将这些 模块组装起来之后却不能正常工作。
- A程序员写了代码,这些代码的功能提供给B程序员调用,但是 由于A和B之间在方法的命名,大小写等问题上不一致,所以根 本无法让A的数据给B用。
- 集成测试又称为接口测试,是针对程序接口的一种测试。 接口:模块与模块之间的耦合。
- 在实际中,很多的集成测试工作都是程序员在做。
- 实际意义:单元测试做完后,方法已经没有问题了,局部 不出问题了,程序员之间的各个功能整合起来,集中测试, 要保证整合后的代码和代码实现的功能完全对接,没有问题。 因此集成测试就显得非常有必要。
(3)确认测试
- 确认测试:对照软件需求规格说明,对软件产品进行评估以 确定其是否满足需求的过程。主要是对软件需求满足程度的一 种评价和评估。
- 经过确认测试,应该得出的评价无非2种情况:
① 经过检验,软件功能、性能及其他方面的要求都已满足 软件需求规格说明的规定,是一个合格的软件。
② 经过检验,发现与软件需求规格说明书有相当的偏离, 得到了一个缺陷清单,这就需要开发部分和用户进行协 调,找出解决的办法。 - 实际工作中,很多公司都不做确认测试,直接从集成测试跳 到系统测试,即集成完成后,马上开始系统测试。
(4)系统测试
- 系统测试是针对整个产品系统进行的测试,目的是验证系 统是否满足了需求规格的定义,找出与需求规格不符或与之 矛盾的地方,从而提出更加完善的方案。
- 将已经确认的软件、计算机硬件、外设、网络等其他元素 结合在一起,进行信息系统的各种组装测试和确认测试。
- 对象不仅仅包括需测试的软件,还要包含软件所依赖的硬 件、外设甚至包括某些数据、某些支持软件及其接口等
- 系统测试范围:功能、性能、界面、强度、容量、安全性、 配置、安装、卸载、数据库等
(5)验收测试
- 验收测试:可以类比为建筑的使用者对建筑进行的检测。
产品:以公司调查研为主 (一直研发下去)
项目:以客户需求为主 (一般都是一次性投入软多)-UAT - 验收形式:
① Alpha: Alpha测试是在用户组织模拟软件系统的运行环 境下的一种验收测试,由用户或第三方测试公司进行的 测试,模拟各类用户行为对即将面市的软件产品进行测 试,试图发现并修改错误。
② Beta:Beta测试是用户公司组织各方面的典型终端用户在 日常工作中实际使用beta版本,并要求用户报告异常情 况,提出批评意见。 - 实际过程中:初验、终验
2.按是否运行程序划分
3.按是否查看代码划分
- 静态测试:不运行被测试的软件,而只是静态的检查代码、界面或者文档。
- 动态测试:实际运行被测试的软件,输入相应的测试数据,检查实际的输 出结果是否和预期结果相一致的过程。
4.其他划分
- 黑盒测试:把软件看成一个黑盒子,不管内部逻辑和内部特性,只依据规格说明书检查程序的功能是否符合功能说明。
- 白盒测试:又称为结构测试。着重于程序内部结构和算法,不关心功能和性能指标。
- 灰盒测试:介于白盒和黑盒测试之间,基于程序运行时刻的外部表现同时又结合程序内部 逻辑结构来设计用例,执行程序并采集程序路径执行信息和外部用户接口结果的 测试技术。
- 回归测试:
①测试新建bug,开发修改后将状态修改为“已修改”后通知测试进行验证,此 时测试人员所进行的测试称为回归测试。
②当测试回归后没有问题,但所测试的功能和其他模块或功能有一定的关系 (如数据有交叉和公式计算等),这时测试人员要针对这个部分再次测试, 保证不会因为修改了这个bug而导致新bug的产生(开发在修改代码或注释时 容易注释错),此时测试人员所进行的测试也称为回归测试。
③当项目(或模块和功能)快上线,测试经理会通知测试人员再把所有功能测 试一次,保证上线后不会出问题,此时测试人员所进行的测试称为回归测试。
- 冒烟测试(BVT测试(Build Verification Test ))
①发布一个版本时,先对该版本进行最基本功能的测试,用以确认该版本基 本功能正常后再开展进一步的测试工作;如基本功能不通过,打回给开发, 直到冒烟通过
②只有公司需要时才冒烟,并不是任何时候都冒烟,因为实际工作中项目往 往比较紧
③部分公司是让开发做冒烟,会给开发提供一个checklist - 随机测试(又名猴子测试-预测试)
随机选择测试数据做测试,主要根据经验进行功能和性能等抽查 - 敏捷测试(敏捷开发引发)
敏捷最大特点是高度迭代,有周期性,并且能够及时、持续 地响应客户的频繁反馈。简单点理解:天下武功,唯快不破。
六、软件测试风险
1.软件测试中的软件风险分析是根据预测软件将出现的风险,制定软件 测试计划并排列优先等级,风险分析是对软件中潜在的问题进行识别、 估计和评价的过程。
2.风险也包括进度风险、质量风险、人员风险、变更风险、成本风险等
- 变更风险:进行评审需求是否可以修改
- 人员风险:各项目调动人员
- 进度风险:加班,加配人员
- 质量风险:再次评审成本预算