什么是软件测试?
从五个方面来阐述软件测试:
- 根本目的:确保被测系统符合用户需求
- 基本手段:设计测试用例
- 执行方式:手工/自动化
- 测试策略:动态运行/静态审阅
- 通用流程:设计、计划、实施、评估
为什么需要软件测试?
确保产品质量,是软件产品质量保证的重要措施之一。
什么是软件缺陷?
- 软件未达到需求规格说明书中指明的功能,则是缺陷;
- 软件出现了需求规格说明书中指明不会出现的错误,则是缺陷;
- 软件功能超出需求规格说明书中指明的范围,则是缺陷;
- 软件未达到需求规格说明书中虽未达到但应达到的目标,则是缺陷。
什么是测试用例?
测试用例组成:输入 + 输出 + 测试环境
输入:测试数据和操作步骤
输出:系统预期执行结果
测试环境:系统环境设置,即进行软件测试所必须的工作平台和前提条件
以输入数据为例,设计测试用例:
什么是软件质量?
- 软件产品中能满足给定需要的性质和特性的总体。
- 软件具有所期望的各种属性的组合程度。
- 顾客和用户觉得软件满足其综合期望的程度。
- 确定软件在使用中将满足顾客预期要求的程度。
软件测试的定义?
测试是发现并指出软件中存在的缺陷的过程,这个过程指明和标注问题存在的正确位置,详细记录导致问题出现的操作步骤及当时存储时的错误状态。
软件测试 vs 软件质量
- 软件测试
目的:保证被测软件系统符合用户需求
手段:通过找bug来判断软件与需求的一致性 - 软件质量
定义:是反映软件满足明确或隐含需要能力的特性总和
狭义的质量:产品无缺陷
广义的质量:产品质量、过程质量、客户满意度
软件测试分类
- 动态测试
通过测试用例的执行来完成对系统的测试。基本步骤:
(1)选取程序输入定义域的有效值或选取定义域外的无效值;
(2)决定已选输入值的预期结构;
(3)用选取输入值执行程序;
(4)比较执行结果和预期结果,不吻合时说明程序出错。
需要做的工作:
(1)提供被测对象,可以是可执行程序、数据或文档;
(2)准备相关预期作为测试一句,主要是开发过程中得到的一些文档。例如:需求规格说明,概要设计文档或详细设计文档;
(3)根据需求设计测试用例(测试工作核心之一);
(4)搭建测试环境,即运行系统需要的软硬件配置;
(5)运行测试用例,即在配置好的测试环境中将测试用例施加给被测对象;
(6)检查每一个测试用例的执行结果判断实际结果是否符合原始需求;
(7)记录测试过程,并针对失败的测试用例报告缺陷;
(8)针对程序员的回复执行回归测试。
在这个过程中,测试人员的主要交付件包括:测试用例、驱动或桩模块(为测试需要而额外开发的代码)、缺陷报告。
- 静态测试
测试程序不被真正运行。包括代码检查、静态结构分析、代码质量度量等。通常在静态测试阶段进行以下一些测试活动:
(1)检查算法的逻辑正确性,如检查算法是否实现了所要求的功能;
(2)检查模块接口的正确性,如检查参数个数、参数类型、返回值类型的正确性;
(3)检查调用其它模块接口的正确性,如检查实参个数、实参类型、返回值类型是否与模块接口匹配,被调用模块是否出现异常;
(4)检查表达式、语句的正确性,如检查容易产生歧义的表达式或运算符优先级;
(5)检查长量或全局变量使用的正确性;
(6)检查输入参数是否会有合法性检查;
(7)检查编程风格的规范性,如检查变量命名、代码、注释是否规范。
需要做的工作:
(1)提供被测对象;
(2)准备相关预期;
(3)阅读的代码及相关文档或模拟运行及阅读评审;
(4)报告发现的缺陷;
(5)执行回归测试。
这个过程中,测试人员的主要交付件:缺陷报告。少数情况下,阅读代码时,需要设计少量简单的测试用例。
- 从测试阶段或对象角度分
- 单元测试 <对应> 编码阶段 [对象]单个模块或组件
- 集成测试 <对应> 详细设计 [对象]一组模块或组件
- 系统测试 <对应> 概要设计 [对象]整个软件系统
- 验收测试 <对应> 需求分析 [对象]整个软件系统
- 从测试技术的角度分
-
白盒测试
关注的是与代码内部相关的缺陷,因此需要测试人员掌握一定的编程技术。 -
黑盒测试
关注的是与产品外部行为相关的缺陷,此时并不考虑产品的内部结构或运行逻辑。 -
灰盒测试
综合运用黑盒测试和白盒测试技术的一种混合测试方法。
- 从测试目标的角度分
- 回归测试、功能测试、性能测试、Alpha测试、Beta测试
- 压力测试、负载测试、安全性测试
- 配置测试、安装测试、可用性测试、可恢复性测试等。
功能测试:针对软件功能需求进行测试,目的是检查应用程序的行为是否符合预期。
性能测试:用于验证系统是否满足规格说明的性能需求,例如容量和响应时间等。
Alpha测试:在软件发布前,有时会让小规模、有代表性的潜在用户使用软件,如果由开发机构人员来模拟潜在用户开展测试,则称为Alpha测试。
Beta测试:软件早期版本发布给具有代表性用户来测试,称为Beta测试。例如游戏内测。
回归测试:载软件版本修改后,重新测试,可应用于所有测试界别,目的是为了确保被修改组件的行为没有改变,不会造成意外结果。
压力测试:以设计的最大负载或超过最大负载来运行软件,用于确定系统运行的负载界限。
负载测试:通过测试系统在资源超负荷的情况下的表现,以发现设计上的错误或验证系统的负载能力。
安全性测试:用于验证产品是否符合安全需求定义和产品质量。用于测试系统在遭遇未授权访问,计算机犯罪和破坏时是否能保护自己。有时需要安全专家和黑客来破坏系统来检测系统安全性。
配置测试:当开发的系统需要应用于多种环境配置时,需要对每种配置进行测试,以检测系统运行行为是否符合规格要求。包含硬件配置和软件配置。
安装测试:在目标环境中通过安装来验证软件及其安装过程。目的是确保软件在正常或异常情况下都能进行安装。
可用性测试:用于评估系统使用的建议程度,交互是否具有人机工程学设计以及用户文档使用的有效性。
可恢复性测试:用于检验系统在灾难或意外宕机后的重启能力。
- 从测试执行方式的角度分
- 手动测试
人工执行测试。 - 自动化测试
软件测试的自动化,将以人为驱动的测试行为转化为机器执行的过程。目的是节省人力。时间或硬件资源并提高测试效率。