软件测试技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 软件测试分类

为了达到软件测试的目的,在软件工程中有许多测试活动,这些测试活动都会有自己具体的目标。我们可以从不同的角度对这些测试活动进行分类。

1.4.1 按照测试阶段分类

按照测试阶段可以将软件测试分为单元测试、集成测试、确认测试、系统测试与验收测试。这种分类方式与我们之前讲过的瀑布模型相契合,主要是为了检验软件开发各个阶段是否符合要求。

1.单元测试

单元测试是最小单位测试,又称为模块测试。单元测试是在软件开发过程中要进行的最低级别的测试活动。在不同的编程语言中,单元可能表现为一个函数、过程或者类。单元测试主要是测试一个单元是否正确地实现了规定的功能、逻辑是否正确、输入输出是否正确,从而发现模块内部存在的各种错误。

单元测试的价值在于尽早发现程序中的错误,以降低错误修复的代价,同时为后续的测试活动提供一个比较好的开端。单元测试的依据是模块的详细设计文档,这些测试一般会由开发人员或者测试人员和开发人员共同完成。

2.集成测试

集成测试是在单元测试的基础上将已经通过测试的单元模块按照设计要求组装成系统或子系统后再进行的测试。集成测试的目的是找出被测试系统组件之间接口中的错误,如接口参数不匹配、接口数据丢失、数据误差积累引起的错误等,目标是验证各个模块组装起来之后是否满足软件的设计要求。虽然集成的各个模块均已经通过单元测试,但在集成时可能会暴露大量的接口错误,以及一个模块可能会对另一个模块产生不利影响,从而造成集成失败。

3.确认测试

确认测试也称为有效性测试,主要是由软件的开发方组织的。由集成测试进入系统测试之前,需要对软件是否可以进入系统测试进行评价,这个过程就是确认测试。确认测试需要做的工作包括有效性测试和软件配置审查。

4.系统测试

系统测试是将通过确认测试的软件,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖测试。系统测试的目标是确认软件的应用系统能按预期工作并满足应用的需求。系统测试不能由开发团队实施,只能由独立的测试团队、用户或第三方机构进行,否则不能达到系统测试的目的。

5.验收测试

验收测试由最终用户或由用户委托的第三方机构在生产环境下对系统进行鉴定,确认系统能达到交付要求,这些要求可能最初是通过项目的招投标文件、合同或任务约定的。验收测试可以增加用户或非特定用户参与,如Alpha测试和Beta测试。

Alpha测试(α测试)是由用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由开发人员或测试人员完成,可由其指导或辅助。

Beta测试(β测试)是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由开发人员或测试人员完成。

3个主要测试类型对比如表1-1所示。

表1-1 3个主要测试类型对比

1.4.2 按照是否执行代码分类

按照测试活动是否执行代码来进行分类,可以将测试分为动态测试和静态测试。

静态测试是不运行被测试程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。静态测试通过分析或者检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出问题。静态测试需要对代码进行走查,即阅读代码并分析其是否存在错误。一般采用人工走查的方式,也可以利用静态分析工具对程序特性进行分析,以发现程序中的逻辑错误。

动态测试通过运行被测试程序,输入相应的测试数据,检查执行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。

1.4.3 按照是否关联代码分类

按照是否关联代码来进行分类,软件测试可以分为黑盒测试、白盒测试和灰盒测试,区别在于测试时测试人员是否知道软件是如何实现的,具体如下。

黑盒测试(Black-box Testing)又称为功能测试、数据驱动测试或者基于规格说明书的测试。黑盒测试是通过软件的外部表现行为进行测试的方法,它不关心程序的内部结构和如何实现,只关心程序的输入和输出,因此在这种测试方法中软件就像是被放入一个无法看见内容的黑盒子中。测试人员在测试时主要依据需求规格说明来设计测试用例,分析在特定的输入情况下预期的输出结果,然后获取软件的实际运行结果来判断程序是否存在错误。黑盒测试如图1-6所示。

白盒测试(White-box Testing)又称结构测试、逻辑驱动测试或基于程序本身的测试,是指测试人员开展测试时完全清楚被测试程序的内部结构、语句及工作过程,这个程序就像是放入一个完全打开的盒子中,可以被看清一切细节。当采用白盒测试方法时,测试人员将结合内部结构和工作逻辑设计测试用例,测试程序中的变量状态、逻辑结构及执行路径等,从而判定程序是否在按需求和设计的要求正常工作。白盒测试如图1-7所示。

图1-6 黑盒测试

图1-7 白盒测试

灰盒测试是介于黑盒测试与白盒测试之间的测试方法,既关注黑盒测试方法中的输入输出,也在一定程度上关注程序的内部情况,是黑盒测试和白盒测试的融合。灰盒测试会交叉使用白盒测试和黑盒测试的测试方法,较多地应用于软件的集成测试中。

1.4.4 按照软件质量特性分类

按照软件质量特性划分的测试是结合我们在前面提到的软件质量特性模型,来针对软件产品的这些特性或者子特性来开展测试的。在软件工程中形成了系统的功能测试、性能测试、易用性测试、界面测试、兼容性测试、安全性测试等,下面分别进行简单介绍。

1.功能测试(Functional Testing)

功能测试是根据产品特征、操作描述和用户方案测试一个产品的特性和可操作行为,以确认它们能满足设计需求。

2.性能测试(Performance Testing)

性能测试是在指定条件下使用时,测试软件的性能及效率满足需求的程度,包括时间特性、资源利用率和容量。性能测试包括负载测试、强度测试、数据库容量测试、基准测试等类型。

3.易用性测试(Usability Testing)

易用性测试主要从使用的合理性和方便性等角度对软件系统进行检查,发现人为因素或使用上的问题。在保证足够详细的前提下,用户界面要便于使用,对输入的响应时间和响应方式合理,输出有意义,出错信息能够引导用户去解决问题,文档全面、描述恰当等。易用性测试多数情况下没有一个量化的指标,主观性较强。

4.界面测试(User Interface Testing)

指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字、图片组合是否完美,操作是否友好等。

5.兼容性测试(Compatibility Testing)

测试软件是否和系统的其他与之交互的元素兼容。

6.安全性测试(Security Testing)

检查系统对非法侵入的防范能力,检查系统中已经存在的系统安全性、保密性措施是否发挥作用,有无漏洞。

1.4.5 其他分类

在进行软件测试分类时还有一些名词是测试活动中经常出现的,需要大家理解。

1.冒烟测试(Smoke Testing)

冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。

2.回归测试(Regression Testing)

在发生修改之后,重新测试以保证修改的正确性。理论上,对软件的任何新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新版本上再现,并确认曾经通过的功能不会出现问题。

不论是开发过程中修复了所发现的缺陷,还是修改了设计,甚至需求发生变化,都需要开展回归测试。回归测试发生在软件有变动的情况下,如果这种变动是对缺陷的修复,回归测试首先要验证缺陷是否确实被正确修复了,然后测试因此缺陷修复而可能影响到的功能是否依然正确。如果软件的变动是增加了新的功能,那么回归测试除验证新功能的正确性之外还要测试可能受到影响的其他功能。