软件测试(第2版)
上QQ阅读APP看书,第一时间看更新

1.6 软件测试的层次和类型

为了先让读者掌握一个相对完整的、全面的软件测试,有必要给大家介绍软件测试的不同维度,如:


•不同层次的软件测试

•不同类型的软件测试

•软件测试工程过程

•软件测试项目的管理过程


在这一节,我们介绍软件测试的层次和类型,在下一节介绍软件测试的过程。

1.6.1 软件测试的层次

软件测试的对象是软件产品本身,包括软件的半成品(如设计文档、代码),或者从另一个角度看,软件=可运行的程序+文档,所以软件测试就是对需求文档、设计文档、代码、子系统/系统、用户手册等进行检查、质量评估,发现缺陷。测试不同于传统意义上说的质量保证(quality assurance,QA),QA更侧重过程定义、过程评审,预防缺陷的产生。

从软件测试对象看,可以分为构成系统的单元、单元之间的接口、系统、业务需求,而对应的测试则分为单元测试、集成测试、系统测试和验收测试,如图1-4所示。

图1-4 不同层次的软件测试

(1)单元测试是对软件基本组成单元进行的测试,其测试对象是软件设计的最小单位——模块或组件,也可以包括类或函数。软件单元测试尽量保证其测试的相对独立,将它与系统其他部分隔离开来,从而能够准确、彻底地完成单元测试,单元测试包括代码评审(静态测试)和运行单元程序测试(动态测试),单元测试不仅是功能测试,而且可以进行性能测试、安全性测试等。

(2)集成测试是将已分别通过测试的单元按设计要求组合起来再进行测试,以检查这些单元之间的接口、参数传递是否存在问题。集成测试,一般是一个逐渐加入单元进行测试的持续过程,直至所有单元被组合在一起,成功地构成完整的、可以正常运行的软件系统。

(3)系统测试就是操作或模拟运行软件系统,以验证系统是否满足产品的质量需求,特别是能否满足事先定义的系统功能特性和非功能特性。系统测试主要是指系统功能测试、系统性能测试、系统兼容性测试、系统安全性测试和系统可靠性测试等,而功能测试是验证软件功能是否符合产品规格设计说明和满足用户的需求。

(4)验收测试是指在软件产品完成了功能测试和系统测试之后、产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试,一般根据产品规格说明书,严格检查产品,逐行逐字地对照说明书上对软件产品所做出的各方面要求,确保所开发的软件产品符合用户预期的各项要求,即验收测试是检验产品和产品规格说明书(包括软件开发的技术合同)的一致性,同时应该考虑用户的实际使用环境、数据和习惯等。验收测试的重要特征就是用户参与。

1.6.2 不同类型的软件测试

了解了不同层次的软件测试层次后,进一步了解不同类型的测试——功能测试、回归测试、性能测试、可靠性测试、安全性测试和兼容性测试等。这其实来源于质量属性,即系统的功能性需求和非功能性需求。这些测试类型也可以发生在不同的层次,如单元功能测试、单元性能测试、系统功能测试、系统性能测试。当然,不同的层次有其主要的测试目的,例如单元测试侧重功能,验收测试侧重功能和易用性等,如图1-5所示,其中对应不同层次的测试类型比重通过右边矩形区域大小来表示。

图1-5 不同层次的测试类型


•功能测试(functionality test),也称正确性测试(correctness testing):验证每个功能是否按照事先定义的要求那样正常工作。

•压力测试(stress testing),也称负载测试(load test):用来检查系统在不同负载(如数据量、并非用户、连接数等)条件下的系统运行情况,特别是高负载、极限负载下的系统运行情况,以发现系统不稳定、系统性能瓶颈、内存泄漏、CPU使用率过高等问题。

•性能测试(performance testing):测定系统在不同负载条件下的系统具体的性能指标。

•可靠性测试(reliability testing):检验系统是否能保持长期稳定、正常的运行,如确定正常运行时间,即平均失效时间(mean time between failures,MTBF)。可靠性测试包括强壮性测试(robustness testing)和异常处理测试(exception handling testing)。

•灾难恢复性测试(recovery testing):在系统崩溃、硬件故障或其他灾难发生之后,重新恢复系统和数据的能力测试。

•安全性测试(security testing):测试系统权限设置有效性、应对非授权的内部/外部访问、防范非法入侵、数据备份和恢复能力等。

•兼容性测试(compatibility testing):测试在系统不同运行环境(网络、硬件、第三方软件等)下的实际表现。

•回归测试(regression testing):回归测试的目的是发现原来正常的功能特性出现新的问题,即为保证软件中新的变化(新增加的代码、代码修改等)不会对原有功能的正常使用有影响而进行的测试。回归测试伴随着测试过程,单元测试、集成测试和系统测试中,一旦有变更或修正,都要进行相应的回归测试。

•烟雾测试(smoke testing):在代码被检入(check in)代码库之前对代码修改进行验证活动,一般是对系统的最基本的功能进行测试,以确认代码的修改符合基本要求,不会造成软件包构建的失败。

•安装测试(installation testing):在一个真实的或近似的用户环境中,验证系统是否能按照安装说明书成功地完成系统的安装,其中要考虑环境的不同设置或配置、安装文档的准确性等。