软件测试层面

发布于 2021-05-10 10:47 ,所属分类:软件测试工程师学习资料

软件测试通常在整个开发和维护过程的不同层面上执行。层面可以根据测试的对象来区分,称为目标,或者根据目的来区分,称为目标(测试层面)。

2.1测试的目标

测试的目标可以是不同的:单个模块、一组这样的模块(根据目的、使用、行为或结构相关),或者整个系统。可以区分三个测试阶段:单元测试、集成测试和系统测试。这三个测试阶段并不意味着任何过程模型,也不认为其中任何一个比其他两个更重要。

2.1.1单元测试

单元测试验证独立可测试的软件要素的功能。根据环境的不同,这些可以是单独的子程序,也可以是由高内聚单元组成的更大的组件。通常,单元测试是在访问被测试代码和调试工具的支持下进行的。编写代码的程序员通常(但并非总是)进行单元测试。

2.1.2集成测试

集成测试是验证软件组件之间交互的过程。经典的集成测试策略,如自上而下和自下而上,通常用于分层结构的软件。

现代的系统集成策略通常是架构驱动的,这涉及到基于确定的功能线程增量地集成软件组件或子系统。集成测试通常是在开发的每个阶段进行的活动,在此期间,软件工程师抽象出较低层次的透视图,并集中于他们正在集成的层次的透视图。对于小而简单的软件,增量集成测试策略通常比一次性将所有组件放在一起更受青睐,这通常被称为“大爆炸”测试。

2.1.3系统测试

系统测试关心的是测试整个系统的行为。有效的单元和集成测试将识别出许多软件缺陷。系统测试通常被认为适合于评估非功能系统需求——例如安全性、速度、准确性和可靠性(参见软件需求知识领域中的功能和非功能需求,以及软件质量知识领域中的软件质量需求)。其他应用程序、实用程序、硬件设备或操作环境的外部接口通常也在这个层面进行评估。

2.2测试的目的Objectives of Testing

测试是根据特定的目的进行的,这些目的或多或少是明确的,并且精确度不同。用精确的、定量的术语陈述测试的目标可以支持测试过程的测量和控制。

测试的目的是验证不同的性能。测试用例可以被设计来检查功能规范是否被正确实现,这在文献中被称为一致性测试、正确性测试或功能测试。然而,其他一些非功能属性也可以测试——包括性能、可靠性和可用性,以及其他许多属性(参见软件质量知识领域中的模型和质量特征)。

测试的其他重要目标包括但不限于可靠性测量、安全漏洞的识别、可用性评估和软件验收,这些都将采取不同的方法。注意,通常,测试目标随测试目标而变化;不同层面的测试处理不同的目的。

下面列出的子主题是文献中最常引用的。请注意,有些类型的测试更适合裁剪的软件包——例如安装测试——而其他类型的测试更适合消费产品,比如beta测试。

2.2.1验收/资格测试

验收/资格鉴定测试确定一个系统是否满足其验收标准,通常通过根据客户的需求检查所需的系统行为。因此,顾客或顾客代表指定或直接进行活动来检查他们的要求是否得到满足,或者就消费产品而言,检查组织是否满足了目标市场所规定的要求。这个测试活动可能涉及系统的开发人员,也可能不涉及。

2.2.2安装测试

通常,在完成系统和验收测试之后,在目标环境中安装软件时进行验证。安装测试可以看作是在硬件配置和其他操作约束的操作环境中进行的系统测试。安装过程也可以进行验证。

2.2.3Alpha和Beta测试

在软件发布之前,有时会将其提供给一小群经过选择的潜在用户进行试用(alpha测试)和/或提供给一组较大的代表性用户(beta测试)。这些用户报告产品的问题。Alpha和beta测试通常是不受控制的,并且并不总是在测试计划中提及。

2.2.4可靠性、成就和评价

测试通过识别和纠正错误来提高可靠性。此外,可靠性的统计度量可以通过根据软件的操作概要随机生成测试用例而得到(参见3.5节中的操作概要,基于使用的技术)。后一种方法称为操作测试。使用可靠性增长模型,可以同时追求这两个目标

(参见寿命试验、可靠性评估部分4.1,被测程序的评价)。

2.2.5回归测试

按照回归测试的定义,回归测试是“对系统或组件进行选择性的重新测试,以验证修改没有造成意外的影响,并且系统或组件仍然符合其指定的需求。”在实践中,这种方法是为了显示软件仍然通过了以前在测试套件中通过的测试(实际上,它有时也被称为非回归测试)。对于增量式开发,回归测试的目的是显示软件行为在增量式变更中没有改变,除非它应该改变。在某些情况下,必须在每次做出变更时回归测试所提供的保证和执行回归测试所需的资源之间做出权衡,由于可能要执行大量测试,这可能会非常耗时。回归测试涉及到选择、最小化和/或对现有测试套件中的测试用例子集进行优先级排序。回归测试可以在第2.1节(测试的目标)中描述的每个测试层面上进行,并且可以应用于功能和非功能测试。

2.2.6性能测试

性能测试验证软件是否满足指定的性能要求,并评估性能特征——例如,容量和响应时间。

2.2.7安全性Security测试

安全性测试的重点是验证软件是否受到了外部攻击的保护。特别是,安全性测试验证系统及其数据的机密性、完整性和可用性。通常,安全测试包括对软件或系统的误用和滥用的验证(负面测试)。

2.2.8压力测试

压力测试在最大设计负载下进行软件测试,目标是确定行为限制,并测试关键系统中的防御机制。

2.2.9背对背测试

IEEE/ISO/IEC标准24765将背对背测试定义为“在相同的输入下执行一个程序的两个或多个变体,比较输出,并在出现差异时分析错误的测试”。

2.2.10恢复测试

恢复测试的目的是在系统崩溃或其他“灾难”后验证软件的重新启动能力。

2.2.11接口测试

接口缺陷在复杂系统中很常见。接口测试的目的是验证组件接口是否正确,提供数据和控制信息的正确交换。通常测试用例是从接口规范生成的。接口测试的一个特定目标是模拟终端用户应用程序对api的使用。这涉及API调用参数的生成、外部环境条件的设置和影响API的内部数据的定义。

2.2.12配置测试

在为不同用户构建软件的情况下,配置测试在不同的指定配置下验证软件。

2.2.13可用性和人机交互测试

可用性和人机交互测试的主要任务是评估最终用户学习和使用软件的容易程度。一般来说,它可能包括测试支持用户任务的软件功能、帮助用户的文档以及系统从用户错误中恢复的能力(参见软件设计知识领域中的用户接口设计)。


相关资源