论文部分内容阅读
[摘要]不论采用什么技术和方法,软件中仍然会有错。软件测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错。软件测试的目的之一就是尽可能早地发现软件中存在的错误,所以单元测试很重要。重点论述单元测试中最常用到的静态测试技术。也论述黑盒测试与白盒测试等动态测试技术的运用。
[关键词]软件测试 单元测试 静态测试 黑盒测试 白盒测试
中图分类号:TP3 文献标识码:A 文章编号:1671—7597(2009)1010074—01
软件是相对于硬件而存在的,硬件是可以直观感觉到、触摸得到的物理产品,软件则是逻辑的、知识性的产品集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化。软件是智慧和知识的结晶。软件工程学出现后,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。统计表明。在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中用在测试上的开销要占30%到50%。
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。按阶段进行测试(单元测试、集成测试、系统测试、验收测试)是一种基本的测试策略,在测试过程中应该依据每一个阶段的不同特点,采用不同的测试方法和技术,制定不同的测试目标。
单元测试是测试执行过程中的第一阶段,单元测试是对软件基本组成单元进行的测试,测试对象是软件设计的最小单元——模块,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。进行单元测试的原因是:错误发现越早,成本越低,越到后期复杂度越高,发现解决BUG就越困难,成本也就越高。确保各单元模块被正确地编码是单元测试的主要目标,但是单元测试的目标不仅要测试代码的功能性,还需确保代码在结构上可靠且健全,并且能够在所有条件下正确响应。在单元测试中既会用到静态测试技术,有时也会运用黑盒与白盒等动态测试技术。
一、静态测试
静态测试技术是单元测试最重要的手段之一,静态测试就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行,适用于新开发的和重用的代码。主要有走查、审查和评审。
(一)走查。走查(walk through)是一种使用静态分析方法的非正式评审过程。走查过程是由被指定作为测试员的小组成员提出一批测试实例,让与会成员充当计算机,对每个测试实例用头脑来执行程序,在纸上或黑板上监视程序的状态。大多数走查中,在怀疑程序的过程中所发现的缺陷比通过测试实例本身发现的缺陷更多。
(二)审查。审查(inspection)是一种正式的检查和评估方法。它是用逐步检查源代码中有无逻辑或语法错误的办法来检测故障,可以认为它是拿代码与标准和规范对照的补充,因为它不但需要软件开发者自查,而且要组织代码检查小组进行代码检查。检查过程所采用的主要技术是设计与使用缺陷检查表。首先由程序编写小组成员逐句阐明程序的逻辑,在此过程中可由程序员或测试小组成员提出问题,追踪缺陷是否存在,然后利用缺陷检查表来分析讨论。会议后把发现的缺陷填入表中交给程序开发小组。如发现重大缺陷,那么在改正缺陷之后,还要重新开审议会议。审查结束后要完成《静态分析错误报告》。
(三)评审。评审(review)通常在审查会后进行,审查小组根据代码审查的错误记录来评估该程序,决定是否需要重新进行审议。《静态分析错误报告》中必须写明错误的类型、影响域、位置和原因等,需交给程序编写者并同时存档。
二、动态测试
完成静态测试后,还需真正地将程序运行起来完成动态测试。动态测试就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。这就需要设计系列的测试用例确保测试的完整性和有效性,在测试用例的设计上,通常会综合黑盒与白盒测试方法。
(一)黑盒测试。黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员针对程序接口和用户界面进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息并且保持外部信息(如;数据库或文件)的完整性。其具体方法有等价类划分法、边界值分析法、错误推测法、因果图法等。黑盒法着眼于程序外部结构,不考虑内部逻辑结构,只针对软件界面和软件功能进行测试,它主要用于软件验收测试。黑盒测试时,必须在所有可能的输入条件和输出条件中确定测试数据。测试情况实际上有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试,另外,还得考虑接口测试、性能测试、内存测试等。黑盒测试中不可能做到穷举测试,因此局限于功能测试是远远不够的,还要结合白盒测试方法,进行逻辑和路径测试。
(二)白盒测试。白盒测试也称结构测试或逻辑驱动测试,也就是已知产品内部工作过程情况下,清楚最终生成软件产品的计算机程序的结构和语句,按照程序内部的结构测试程序,测试程序内部的变量状态、逻辑结构、运行路径等,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合。跟条件有关的覆盖就有三种,条件覆盖是指覆盖所有的条件表达式,不考虑计算结果:条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。白盒测试的主要方法有逻辑驱动、基本路径测试等。白盒法是穷举路径测试,主要用于软件验证。白盒法是“基于覆盖的测试”,应朝着提高覆盖率的方向努力,尽可能多地进行测试,找出那些被忽视的错误。
以上测试方法各有所长,每种方法都可设计出一组有用的测试用例,用这组测试用例可以比较容易地发现某种类型的错误,却不易发现另一种类型的错误,因此在实际测试中,应结合各种测试方法,形成综合策略。
[关键词]软件测试 单元测试 静态测试 黑盒测试 白盒测试
中图分类号:TP3 文献标识码:A 文章编号:1671—7597(2009)1010074—01
软件是相对于硬件而存在的,硬件是可以直观感觉到、触摸得到的物理产品,软件则是逻辑的、知识性的产品集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化。软件是智慧和知识的结晶。软件工程学出现后,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。统计表明。在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中用在测试上的开销要占30%到50%。
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。按阶段进行测试(单元测试、集成测试、系统测试、验收测试)是一种基本的测试策略,在测试过程中应该依据每一个阶段的不同特点,采用不同的测试方法和技术,制定不同的测试目标。
单元测试是测试执行过程中的第一阶段,单元测试是对软件基本组成单元进行的测试,测试对象是软件设计的最小单元——模块,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。进行单元测试的原因是:错误发现越早,成本越低,越到后期复杂度越高,发现解决BUG就越困难,成本也就越高。确保各单元模块被正确地编码是单元测试的主要目标,但是单元测试的目标不仅要测试代码的功能性,还需确保代码在结构上可靠且健全,并且能够在所有条件下正确响应。在单元测试中既会用到静态测试技术,有时也会运用黑盒与白盒等动态测试技术。
一、静态测试
静态测试技术是单元测试最重要的手段之一,静态测试就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行,适用于新开发的和重用的代码。主要有走查、审查和评审。
(一)走查。走查(walk through)是一种使用静态分析方法的非正式评审过程。走查过程是由被指定作为测试员的小组成员提出一批测试实例,让与会成员充当计算机,对每个测试实例用头脑来执行程序,在纸上或黑板上监视程序的状态。大多数走查中,在怀疑程序的过程中所发现的缺陷比通过测试实例本身发现的缺陷更多。
(二)审查。审查(inspection)是一种正式的检查和评估方法。它是用逐步检查源代码中有无逻辑或语法错误的办法来检测故障,可以认为它是拿代码与标准和规范对照的补充,因为它不但需要软件开发者自查,而且要组织代码检查小组进行代码检查。检查过程所采用的主要技术是设计与使用缺陷检查表。首先由程序编写小组成员逐句阐明程序的逻辑,在此过程中可由程序员或测试小组成员提出问题,追踪缺陷是否存在,然后利用缺陷检查表来分析讨论。会议后把发现的缺陷填入表中交给程序开发小组。如发现重大缺陷,那么在改正缺陷之后,还要重新开审议会议。审查结束后要完成《静态分析错误报告》。
(三)评审。评审(review)通常在审查会后进行,审查小组根据代码审查的错误记录来评估该程序,决定是否需要重新进行审议。《静态分析错误报告》中必须写明错误的类型、影响域、位置和原因等,需交给程序编写者并同时存档。
二、动态测试
完成静态测试后,还需真正地将程序运行起来完成动态测试。动态测试就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。这就需要设计系列的测试用例确保测试的完整性和有效性,在测试用例的设计上,通常会综合黑盒与白盒测试方法。
(一)黑盒测试。黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员针对程序接口和用户界面进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息并且保持外部信息(如;数据库或文件)的完整性。其具体方法有等价类划分法、边界值分析法、错误推测法、因果图法等。黑盒法着眼于程序外部结构,不考虑内部逻辑结构,只针对软件界面和软件功能进行测试,它主要用于软件验收测试。黑盒测试时,必须在所有可能的输入条件和输出条件中确定测试数据。测试情况实际上有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试,另外,还得考虑接口测试、性能测试、内存测试等。黑盒测试中不可能做到穷举测试,因此局限于功能测试是远远不够的,还要结合白盒测试方法,进行逻辑和路径测试。
(二)白盒测试。白盒测试也称结构测试或逻辑驱动测试,也就是已知产品内部工作过程情况下,清楚最终生成软件产品的计算机程序的结构和语句,按照程序内部的结构测试程序,测试程序内部的变量状态、逻辑结构、运行路径等,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合。跟条件有关的覆盖就有三种,条件覆盖是指覆盖所有的条件表达式,不考虑计算结果:条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。白盒测试的主要方法有逻辑驱动、基本路径测试等。白盒法是穷举路径测试,主要用于软件验证。白盒法是“基于覆盖的测试”,应朝着提高覆盖率的方向努力,尽可能多地进行测试,找出那些被忽视的错误。
以上测试方法各有所长,每种方法都可设计出一组有用的测试用例,用这组测试用例可以比较容易地发现某种类型的错误,却不易发现另一种类型的错误,因此在实际测试中,应结合各种测试方法,形成综合策略。