3.4 软件测试

【考点1】软件测试的目的和定义

(1)软件测试的定义

规定条件下运行系统或构件的过程:在此过程中观察和记录结果,并对系统或构件的某些方面给出评价。

软件项目的过程:检测现有状况和所需状况的不同(即bug),并评估软件项目的特性。

(2)软件测试的目的

为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。

【注意】软件测试的目的为常考点,一定要记住。

【真题演练】

1程序测试的目的是(  )。[2014年3月真题]

A.执行测试用例

B.发现并改正程序中的错误

C.发现程序中的错误

D.诊断和改正程序中的错误

【答案】C

【解析】程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误,调试是在测试的基础上去改正错误。答案选择C选项。

2下面叙述中错误的是(  )。[2014年9月真题]

A.软件测试的目的是发现错误并改正错误

B.对被调试的程序进行“错误定位”是程序调试的必要步骤

C.程序调试通常也称为Debug

D.软件测试应严格执行测试计划,排除测试的随意性

【答案】A

【解析】A项错误,软件测试是程序的执行过程,目的是尽可能多的发现错误。程序调试基于软件测试时发现的错误,其任务是诊断和改正程序中的错误。B项正确,程序调试的基本步骤有:错误定位;修改设计和代码,以排除错误;进行回归测试,防止引进新的错误。C项正确,Bug指程序调试过程中发现的问题,Debug代表程序调试。D项,软件测试的基本准则有:所有测试都应追溯到需求;严格执行测试计划,排除测试的随意性;充分注意测试中的群集现象;应避免程序员检查自己的程序;不可能穷举测试;妥善保存测试计划等文件。答案选择A选项。

【考点2】软件测试的准则

(1)所有测试都应追溯到需求;

(2)严格执行测试计划,排除测试的随意性;

(3)充分注意测试中的群集现象;

(4)程序员应避免检查自己的程序;

(5)穷举测试不可能;

(6)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。

【考点3】软件测试方法与技术综述

对于软件测试方法和技术,可以从不同的角度加以分类。

若从是否需要执行被测软件的角度,可以分为静态测试和动态测试方法。

若按照功能划分可以分为白盒测试和黑盒测试方法。

(1)静态测试与动态测试

静态测试

静态测试包括代码检查、静态结构分析、代码质量度量等。

a.代码检查

代码检查包括代码审查、代码走查、桌面检查、静态分析等具体方式。

动态测试

动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

(2)白盒测试方法与测试用例设计

白盒测试方法也称结构测试或逻辑驱动测试。它是根据软件产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规格要求。

白盒测试的基本原则:

a.保证所测模块中每一独立路径至少执行一次;

b.保证所测模块所有判断的每一分支至少执行一次;

c.保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;

d.验证所有内部数据结构的有效性。

白盒测试采用穷举路径测试,测试者必须检查程序内部结构,但即使每条路径都测试了仍可能有错误。

白盒测试的主要方法有逻辑覆盖、基本路径测试等。

a.逻辑覆盖测试

逻辑覆盖是泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。通常所指的程序中的逻辑表示有判断、分支、条件等几种表示方式。

第一,语句覆盖

选择足够的测试用例,使得程序中每个语句至少都能被执行一次。

第二,路径覆盖

执行足够的测试用例,使程序中所有可能的路径都至少经历一次。

第三,判定覆盖

使设计的测试用例保证程序中每个判断的每个取值分支(T或F)至少经历一次。

第四,条件覆盖

设计的测试用例保证程序中每个判断的每个条件的可能取值至少执行一次。

第五,判断-条件覆盖

设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次同时每个判断的所有可能取值分支至少执行一次。

b.基本路径测试

基本路径测试的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。

(3)黑盒测试方法与测试用例设计

黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试是在软件接口处进行,完成功能验证。

黑盒测试主要诊断:功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错。

黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。

a.等价类划分法

将程序的所有可能的输人数据划分成若干部分(即若干等价类),然后从每个等价类中选取数据作为测试用例。

第一,等价类分类

有效等价类:合理、有意义的输入数据构成的集合。可以检验程序中符合规定的功能、性能。

无效等价类:不合理、无意义的输入数据构成的集合。可以检验程序中不符合规定的功能、性能。

第二,等价类划分法实施步骤

先划分等价类,然后根据等价类选取相应的测试用例。

第三,划分等价类常用的几条原则:

.若输入条件规定了确切的取值范围,则可划分出一个有效等价类和两个无效等价类。

.若输入条件规定了输入值的集合(或有“必须如何”的条件),可确定一个有效等价类和一个无效等价类。

.若输入条件是一个布尔量,则可确定一个有效等价类和一个无效等价类。

.若输入数据是一组值,且程序要对每个值分别处理。可为每个输入值确定一个有效等价类和一个无效等价类。

.若规定了输入数据必须遵守一定规则,则可确定一个有效等价类和若干个无效等价类。

.若已划分的等价类中各元素在程序中处理方式不同,须将该等价类进一步划分(更小的等价类)。

b.边界值分析法

边界值分析法是对各种输入、输出范围的边界情况设计测试用例的方法。

边界值分析方法的使用要注意以下几点:

第一,如果输入条件规定了取值范围或数据个数,则可选择正好等于边界值、刚刚在边界范围内和刚刚超越边界外的值进行测试;

第二,针对规格说明的每个输入条件,使用上述原则;

第三,对于有序数列,选择第一个和最后一个作为测试数据。

c.错误推测法

第一,基本思想

列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。错误推测法针对性强,可以直接切入可能的错误,直接定位,是一种非常实用、有效的方法。但是它需要丰富的经验和专业知识。

第二,实施步骤

对被测软件首先列出所有可能有的错误和易错情况表,然后基于该表设计测试用例。

【真题演练】

1下面属于白盒测试方法的是(  )。[2015年3月真题]

A.边界值分析法

B.基本路径测试

C.等价类划分法

D.错误推测法

【答案】B

【解析】白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。白盒测试的主要技术有逻辑覆盖测试、基本路径测试等,B选项正确。常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等,ACD三项错误。答案选择B选项。

2下面不属于黑盒测试方法的是(  )。[2014年3月真题]

A.边界值分析法

B.基本路径测试

C.等价类划分法

D.错误推测法

【答案】B

【解析】常见的黑盒测试方法有:等价类划分法、边界值分析法、错误推测法以及因果图等;常见的白盒测试方法有:逻辑覆盖测试和基本路径测试。答案选择B选项。

3在黑盒测试方法中,设计测试用例的主要根据是(  )。[2015年3月真题]

A.程序内部逻辑

B.程序外部功能

C.程序数据结构

D.程序流程图

【答案】B

【解析】黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能规格说明。答案选择B选项。

【考点4】软件测试的策略

(1)定义

软件测试的策略是指在软件测试过程中对各种活动的组织和管理。

(2)步骤

软件测试过程一般按4个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试。

通过这些步骤的实施来验证软件是否合格,能否交付用户使用。

单元测试

a.单元测试的目的是发现各模块内部可能存在的各种错误。

b.单元测试的依据是详细设计说明书和源程序。

c.单元测试的技术可以采用静态分析和动态测试。对动态测试通常以白盒动态测试为主,辅之以黑盒测试。

d.单元测试主要针对模块的下列5个基本特性进行:

第一,模块接口测试——测试通过模块的数据流。

第二,局部数据结构测试。

第三,重要的执行路径的检查。

第四,出错处理测试,检查模块的错误处理功能。

第五,影响以上各点及其他相关点的边界条件测试。

集成测试

集成测试是测试和组装软件的过程。它是把模块在按照设计要求组装起来的同时进行测试。其主要目的是发现与接口有关的错误。集成测试的依据是概要设计说明书,涉及的内容包括软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试等。

集成测试时将模块组装成程序通常采用两种方式:

a.非增量方式(一次性组装方式)

将测试好的每一个软件单元一次组装在一起再进行整体测试。

b.增量方式

将已经测试好的模块逐步组装成较大系统,在组装过程中边连接边测试,以发现连接过程中产生的问题。最后通过增值,逐步组装到所要求的软件系统。

第一,自顶向下的增量方式

第二,自底向上的增量方式

第三,混合增量方式

针对自顶向下、自底向上方法各自的优点和不足,人们提出了自顶向下和自底向上相结合、从两头向中间逼近的混合式组装方法,被形象称为“三明治”方法。这种方式结合考虑软件总体结构的良好设计原则,在程序结构的高层使用自顶向下方式,在程序结构的低层使用自底向上方式。

确认测试

确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中确定的各种需求,以及软件配置是否完全、正确。

系统测试

系统测试目的是在真实的系统工作环境下检验软件是否能与系统正确连接,发现软件与系统需求不一致的地方。

系统测试具体实施一般包括:功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试等。

【真题演练】

通常软件测试实施的步骤是(  )。[2013年3月真题]

A.集成测试、单元测试、确认测试

B.单元测试、集成测试、确认测试

C.确认测试、集成测试、单元测试

D.单元测试、确认测试、集成测试

【答案】B

【解析】软件测试的实施过程主要有4个步骤:单元测试、集成测试、确认测试(验收测试)和系统测试。答案选择B选项。