软件需求分析
软件需求分析是软件测试流程中的基础一环,用来明确软件测试对象以及测试范围,并作为测试覆盖的基础。其目的是确保所有风险承担者尽早地对项目功能达成共识并对将来的产品有个相同而清晰的认识。
测试需求分析阶段 | 责任 |
---|---|
主要负责人 | PM(项目经理/产品经理) |
测试人员 | 参与需求评审,提供评审意见,明确产品需求 |
输入文档 | 需求说明文档 |
输出文档 | 《需求规格说明书》 |
软件测试计划制定
软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试范围、测试配置、测试进度、测试资源、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是软件测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制软件测试进度,应对软件测试过程中的各种变更。
测试计划制定阶段 | 责任 |
---|---|
主要负责人 | 测试经理(制定总体测试计划) |
测试人员 | 制定部分测试计划内容汇报给测试经理 |
输入文档 | 《需求规格说明书》《项目开发计划》 |
输出文档 | 《软件测试计划》 |
软件测试用例设计
软件测试用例是指导软件测试工作的一种文档,它是通过使用在软件测试计划中确定的测试技术,对于已确定的软件测试需求进行逐步推敲而设计出来的。
软件测试用例设计完成,要进行综合评审,通过评审可以弥补软件需求中遗漏的一些因果关系和异常案例,可以改善测试分析和设计的过程。类似地,软件测试工作的其它产出文档,如软件测试计划、软件风险分析应该进行评审。
测试用例设计阶段 | 责任 |
---|---|
主要负责人 | 测试人员全体 |
测试人员 | 使用用例设计方法来设计测试用例并进行评审 |
输入文档 | 《需求规格说明书》《软件测试计划》《软件设计文档》 |
输出文档 | 《软件测试用例》 |
软件测试环境搭建
要顺利执行测试,首先要确定正确地搭建了软件测试环境。软件测试环境是指为了完成软件测试工作所必须的计算机硬件、软件、网络设备、历史数据的总称。测试环境的搭建是一项非常重要的工作,同时也可能是一项很耗时的工作。有些软件的测试环境要求比较复杂,需要在测试执行之前做好充分的准备。
在大数据系统的测试过程中,测试环境和数据的准备是测试过程中的重点。
大数据系统由于其自身的特点(数据规模大、数据多样、计算复杂度高、分布式结构等)使得对它的测试与传统软件测试有所不同,包括需要使用大数据测试工具、测试环境和数据的准备等,对测试人员提出了更高的专业要求。
大数据系统通常是分布式架构,测试环境复杂。接下来我们重点讲述大数据测试环境搭建时需要考虑的问题。搭建大数据测试,需要我们考虑以下几点:
- 环境是否具有分布式节点和分布式数据存储的集群;
- 环境是否有足够的空间来存储和处理大规模数据;
- 另外如果是做大数据系统的性能测试的话,还要考虑影响大数据系统性能的一些因素----网络环境、应用、虚拟化、数据质量等,所以还应考虑部署合适的监控系统,监控整个集群机器、服务、计算、存储、任务等层面的指标。
而根据对大数据所测场景不同,所需要的测试环境也有所不同,但测试环境的软硬件配置、软件模块的版本应与生产环境一致。
- 如果是在大数据新业务上线前对系统功能做验证测试,通常需要构造单独的类生产的迷你测试环境;
- 如果是测试实时数据处理业务或是做系统组件的升级测试,则可以按照系统生产环境进行等比例缩放;
- 如果是测试重要业务功能或是做系统的性能测试,则需要直接在生产环境上进行测试。
测试数据准备
目前很多互联网软件应用,后台都会有数据库做支撑,那就需要在测试的时候准备相应的测试数据,准备测试数据是软件测试工作的一项必备工作。如何快速地创建测试数据,也是测试工程师的重要能力之一。
创建测试数据的过程,往往需要很长的时间,传统的创建测试数据的方法分为手动创建和自动化创建两种方法。
手动创建测试数据一般有如下几种方法:
- 手动模拟用户的实际操作来创建重要业务流程的测试数据;
- 通过SQL语句中where查询条件和update方法来创建符合条件的测试数据;
- 导入本地机器上存储的一些符合条件的测试数据;
- 导入并加工线上数据变成测试数据。
使用自建脚本也可以生成测试数据,比如脚本语言Ruby或Python,Fit或FitNesse等工具以及Shell脚本等。
获取自有数据当然更好,因为数据准确、实时、高效。根据使用场景的不同,测试数据可以直接使用真实数据,也可以按照某种算法构造。
- 真实数据引流
- 生产环境数据复制。
- 构造数据
拿到数据之后,我们要对数据进行预处理。数据预处理是一种数据挖掘技术,本质就是为了把原始数据转换为可以理解的格式或者符合我们挖掘的格式。为什么要进行预处理呢?因为直接获取的数据通常质量比较低,主要表现为这些现象:
- 数据可能是不完整的,缺少某些属性值;
- 高维度,所谓的高维度是指数据的属性或字段太多;
- 数据可能存在重复;
- 数据可能会由于包含代码或者名称的差异导致跟实际需要的数据不一致
- 可能含噪声,所谓的含噪声就是指数据中存在着错误或异常数据。
数据预处理就是解决上面所提到的数据问题的可靠方法。首先要进行数据清洗,数据清洗完成之后接着进行或者同时进行数据集成、转换、归一化等一系列处理,这个过程就是数据预处理。一方面是提高数据的质量,另一方面可以让数据更好的适应特定的项目环境。初学者可以了解以下几种数据预处理的方法:
- 缺失值的处理。总的原则是:使用最可能的值代替缺失值,使缺失值与其他数值之间的关系保持最大。
- 异常值的处理。异常值是数据集中偏离大部分数据的数据。
- 数据的标准化处理。数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。
- 数据连续属性离散化。一些数据挖掘算法,特别是分类算法,要求数据是分类属性形式。常常需要将连续属性变换成分类属性,即连续属性离散化。
测试执行及缺陷处理
提交了测试对象并且测试对象满足了测试执行的进入准则后(测试的进入准则会在第3章软件测试计划中详细讲述,就是满足了一定的条件,才能开始执行测试),可以开始测试执行。
测试的执行只能有2种结果:Pass或者Fail。测试不通过的话,测试人员就应该把发现的问题及时记录下来,报告给开发人员做出相应的修改。缺陷记录是测试人员工作的具体表现形式,是测试人员与开发人员沟通的基础。因此,如何录入一个高质量的缺陷报告,是每个测试人员都要重视的问题。
测试执行阶段 | 责任 |
---|---|
主要负责人 | 测试经理(跟踪实际测试情况,处理疑难问题) |
测试人员 | 执行实际测试用例,提交缺陷,回归缺陷 |
输入文档 | 《需求规格说明书》《软件测试计划》《软件设计文档》《测试用例文档》《测试数据》 |
输出文档 | 《软件缺陷报告文档》 |
测试总结和报告
软件测试进行到一定程度就要进行测试评估了。测试评估可以在软件测试过程中阶段性进行,也可以是测试整体结束后进行。通过测试评估生成的测试总结报告(又叫测试评估报告)来确定测试是否达到了出口准则。
测试总结阶段 | 责任 |
---|---|
主要负责人 | 测试经理(编写测试总结报告) |
测试人员 | 提供自己负责部分的测试情况总结 |
输入文档 | 《需求规格说明书》《软件测试计划》《软件设计文档》《测试用例文档》《测试数据》《软件缺陷报告文档》 |
输出文档 | 《软件测试总结报告》 |
测试文件归档
软件测试到此是否就结束了呢?还有最后一个环节,那就是测试文件的归档。测试文件归档是在测试验收结束,宣布测试有效及结束测试后,对整个过程中涉及到的各种标准文档进行归档、存档。可以使用文档管理工具来完成此项工作。如Ftp、SVN、Git、VSS、Wiki等。
软件测试的过程,其实是一个完整的PDCA循环。测试不应该在执行完软件测试后就戛然而止,应该使用这次测试总结出来的经验和教训指导下一次测试的设计和执行。软件测试中到处都体现着PDCA循环的精神。
- 大的测试流程中,制定好测试计划、执行测试、通过测试结果来检查测试计划制定的合理性,然后分析计划偏离的原因,再把总结出来的经验用于指导下一次测试的计划,这样就形成了一个PDCA循环过程。
- 提交一个缺陷也可以应用PDCA循环,先写下来,再检查,然后提交审核,对提出的意见进行分析,总结写的不好的地方,把总结的经验用于指导下一次报告的编写,这样的过程同样是一个PDCA。
- 编写测试用例也是一个PDCA,选择好测试用例的编写方法,开始设计测试用例,然后通过评审来发现更多问题,或者通过执行测试用例来发现bug,再根据执行的情况和bug的情况来分析测试用例的有效性,把这些总结出来的经验用于指导下一次的测试用例设计。这也是一个PDCA循环。
软件测试的原则
-
所有的测试最终都应该以用户需求为依据
-
应尽早开展软件测试工作
-
软件测试中的Pareto法则
-
程序员应该尽量避免测试自己编写的程序
-
穷尽测试是不可能的
-
软件测试是有风险的
-
Good-Enough原则
-
程序中存在软件缺陷的可能性与该部分已经发现的缺陷成正比
-
软件测试经常会有免疫现象发生
-
无法通过软件测试发现所有的软件缺陷
-
并非所有的软件缺陷都会修复
-
前进两步,后退一步(这是指修复软件缺陷,总会以20%~50%的几率引入新的缺陷,所以整个过程是前进两步,后退一步的。通过合理的回归测试可以有效的解决部分这种问题.)