《《软件测试基础教程》-杜文洁-电子教案 第二章 软件测试方法》由会员分享,可在线阅读,更多相关《《软件测试基础教程》-杜文洁-电子教案 第二章 软件测试方法(105页珍藏版)》请在金锄头文库上搜索。
1、软件测试基础教程,杜文洁 景秀丽 主编 中国水利水电出版社,第二章 软件测试方法,第二章 软件测试方法,2.1 软件测试方法概述 2.2 静态测试与动态测试 2.3 黑盒测试 2.4 白盒测试 习题,本章概要,第二章 软件测试方法,软件测试方法概述 静态测试和动态测试 黑盒测试和白盒测试,2.1 软件测试方法概述,第二章 软件测试方法,软件测试的方法多种多样,可以从不同角度加以分类: 从是否需要执行被测软件的角度,分为静态测试和动态测试; 从是针对系统的外部功能还是针对系统的内部结构的角度,分为黑盒测试和白盒测试; 从软件测试的策略和过程的角度,分为单元测试、集成测试、确认测试、系统测试和验收
2、测试等。,2.1 软件测试方法概述,第二章 软件测试方法,1从是否需要执行被测软件的角度分类 从是否需要执行被测软件的角度,软件测试可分为静态测试(Static Testing)和动态测试(Dynamic Testing)。顾名思义,静态测试就是通过对被测程序的静态审查,发现代码中潜在的错误。它一般用人工方式脱机完成,故亦称人工测试或代码评审(Code Review);也可借助于静态分析器在机器上以自动方式进行检查,但不要求程序本身在机器上运行。按照评审的不同组织形式,代码评审又可分为代码会审,走查以及办公桌检查,同行评分4种。对某个具体的程序,通常只使用一种评审方式。 动态测试是通常意义上的
3、测试,即使用和运行被测软件。动态测试的对象必须是能够由计算机真正运行的被测试的程序,它包含黑盒测试和白盒测试,在2.3节将会具体介绍这两种方法。,2.1 软件测试方法概述,第二章 软件测试方法,2从软件测试用例设计方法的角度分类 从软件测试用例设计方法的角度,可分为黑盒测试(Black-Box Testing)和白盒测试(White-Box Testing)。 黑盒测试是一种从用户角度出发的测试,又称为功能测试。数据驱动测试和基于规格说明的测试。使用这种方法进行测试时,把被测试程序当作一个黑盒,忽略程序内部的结构的特性,测试者在只知道该程序输入和输出之间的关系或程序功能的情况下,依靠能够反映这
4、一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结果的正确性。简单地说,若测试用例的设计是基于产品的功能,目的是检查程序各个功能是否实现,并检查其中的功能错误,则这种测试方法称为黑盒。 白盒测试基于产品的内部结构来进行测试,检查内部操作是否按规定执行,软件各个部分功能是否得到充分利用。白盒测试又称为结构测试,逻辑驱动测试或基于程序的测试。即根据被测程序的内部结构设计测试用例,测试者需要预先了解被测试程序的结构。,2.1 软件测试方法概述,第二章 软件测试方法,3从软件测试的策略和过程的角度分类。 按照软件测试的策略和过程分类,软件测试可分为单元测试(Unit Testing),集成测
5、试(Integration Testing),确认测试(Validation Testing),系统测试(System Testing)和验收测试(Verification Testing)。 单元测试是针对每个单元的测试,是软件测试的最小单位。它确保每个模块能正常工作。单元测试主要采用白盒测试方法,用以发现内部错误。 集成测试是对已测试过的模块进行组装,进行集成测试的目的主要在于检验与软件设计相关的程序结构问题。在集成测试过程中,测试人员采用黑盒测试和白盒测试两种方法,来验证多个单元模块集成到一起后是否能够协调工作。 确认测试是检验所开发的软件能否满足所有功能和性能需求的最后手段,通常采用黑
6、盒测试方法。 系统测试的主要任务是检测被测软件与系统的其他部分的协调性,通常采用黑盒测试方法。 验收测试是软件产品质量的最后一关。这一环节,测试主要从用户的角度着手,其参与者主要是用户和少量的程序开发人员,通常采用黑盒测试方法。,2.2 静态测试与动态测试,第二章 软件测试方法,根据程序是否运行可以把软件测试方法分为静态测试(Static Testing)和动态测试(Dynamic Testing)两大类。图2-1是静态测试与动态测试的比喻图。,图2-1 静态测试与动态测试的比喻图,2.2.1 静态测试,第二章 软件测试方法,静态方法的主要特征是在用计算机测试源程序时,计算机并不真正运行被测试
7、的程序,只对被测程序进行特性分析。因此,静态方法常称为“分析”,静态分析是对被测程序进行特性分析的一些方法的总称。所谓静态分析,就是不需要执行所测试的程序,而只是通过扫描程序正文,对程序的数据流和控制流等信息进行分析,找出系统的缺陷,得出测试报告。,静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。,2.2.1 静态测试,第二章 软件测试方法,通常在静态测试阶段进行以下一些测试活动: 检查算法的逻辑正确性,确定算法是否实现了所要求的功能; 检查模块接口的正确性,确定形参的个数、数据类型、顺序是否正确,确定返回值类型及返回
8、值的正确性; 检查输入参数是否有合法性检查。如果没有合法性检查,则应确定该参数是否不需要合法性检查,否则应加上参数的合法性检查; 检查调用其他模块的接口是否正确,检查实参类型、实参个数是否正确,返回值是否正确。若被调用模块出现异常或错误,程序是否有适当的出错处理代码; 检查是否设置了适当的出错处理,以便在程序出错时,能对出错部分进行重做安排,保证其逻辑的正确性;,检查表达式、语句是否正确,是否含有二义性。例如,下列表达式或运算符的优先级:=、&、|、+、-等; 检查常量或全局变量使用是否正确; 检查标识符的使用是否规范、一致,变量命名是否能够望名知义、简洁、规范和易记; 检查程序风格的一致性、
9、规范性,代码是否符合行业规范,是否所有模块的代码风格一致、规范; 检查代码是否可以优化,算法效率是否最高; 检查代码注释是否完整,是否正确反映了代码的功能,并查找错误的注释。,2.2.1 静态测试,第二章 软件测试方法,2.2.1 静态测试,第二章 软件测试方法,静态分析的差错分析功能是编译程序所不能替代的。编译系统虽然能发现某些程序错误,但这些错误远非软件中存在的大部分错误。目前,已经开发了一些静态分析系统作为软件静态测试的工具,静态分析已被当作一种自动化的代码校验方法。,2.2.2 动态测试,第二章 软件测试方法,动态方法是通过源程序运行时所体现出来的特征,来进行执行跟踪、时间分析以及测试
10、覆盖等方面的测试。动态测试是真正运行被测程序,在执行过程中,通过输入有效的测试用例,对其输入与输出的对应关系进行分析,以达到检测的目的。 动态测试方法的基本步骤: 选取定义域的有效值,或选取定义域外的无效值; 对已选取值决定预期的结果; 用选取值执行程序; 执行结果与预期的结果相比,不吻合则说明程序有错。 不同的测试方法各自的目标和侧重点不一样,在实际工作中要将静态测试和动态测试结合起来,以达到更加完美的效果。 在动态测试中,又可有基于程序结构的白盒测试(或称为覆盖测试)和基于功能的黑盒测试。,2.3 黑盒测试方法,第二章 软件测试方法,黑盒测试(Black-box Testing)又称为功能
11、测试、数据驱动测试和基于规格说明的测试。是一种从用户观点出发的测试,主要以软件规格说明书为依据,对程序功能和程序接口进行的测试。 黑盒测试的基本观点是:任何程序都可以看作是从输入定义域映射到输出值域的函数过程,被测程序被认为是一个打不开的黑盒子,黑盒中的内容(实现过程)完全不知道,只明确要做到什么。黑盒测试作为软件功能的测试手段,是重要的测试方法。它主要根据规格说明设计测试用例,并不涉及程序内部结构和内部特性,只依靠被测程序输入和输出之间的关系或程序的功能设计测试用例。,2.3.1 黑盒测试方法概述,第二章 软件测试方法,黑盒测试是以用户的观点,从输入数据与输出数据的对应关系出发进行测试的,它
12、不涉及到程序的内部结构。很明显,如果外部特性本身有问题或规格说明书的规定有误,用黑盒测试方法是发现不了的。黑盒测试方法着重测试软件的功能需求,是在程序接口上进行测试,主要是为了发现以下错误: 1.是否有不正确的功能,是否有遗漏的功能; 2.在接口上,是否能够正确地接收输入数据并产生正确的输出结果; 3.是否有数据结构错误或外部信息访问错误; 4.性能上是否能够满足要求; 5.是否有程序初始化和终止方面的错误。,2.3.1 黑盒测试方法概述,第二章 软件测试方法,黑盒测试有两个显著的特点: 黑盒测试不考虑软件的具体实现过程,当在软件实现的过程发生变化时,测试用例仍然可以使用; 黑盒测试用例的设计
13、可以和软件实现同时进行,这样能够压缩总的开发时间。 黑盒测试不仅能够找到大多数其他测试方法无法发现的错误,而且一些外购软件、参数化软件包以及某些自动生成的软件,由于无法得到源程序,在一些情况下只能选择黑盒测试。,2.3.1 黑盒测试方法概述,第二章 软件测试方法,黑盒测试有两种基本方法,即通过测试和失败测试。 在进行通过测试时,实际上是确认软件能做什么,而不会去考验其能力如何,软件测试人员只是运用最简单,最直观的测试案例。在设计和执行测试案例时,总是先要进行通过测试,验证软件的基本功能是否都已实现。 在确信了软件正确运行之后,就可以采取各种手段通过搞垮软件来找出缺陷。纯粹为了破坏软件而设计和执
14、行的测试案例,被称为失败测试或迫使出错测试。 黑盒测试的具体技术方法主要包括边界值分析法、等价类划分法、因果图法、决策表法等。这些方法是比较实用的,在项目中采用什么方法,在设计具体的测试方案时自然要针对开发项目的特点对设计方法进行适当的选择。,2.3.2 等价类划分法,第二章 软件测试方法,1. 等价类划分法概述 等价类划分法是黑盒测试用例设计中一种常用的设计方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。 等价类划分法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。所谓等价类是指输入
15、域的某个子集合,所有等价类的并集就是整个输入域。在等价类中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性。因此,测试某个等价类的代表值就是等价于对这一类中其他值的测试。也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。,2.3.2 等价类划分法,第二章 软件测试方法,软件不能只接收合理有效的数据,也要具有处理异常数据的功能,这样的测试才能确保软件具有更高的可靠性。 因此,在划分等价类的过程中,不但要考虑有效等价类划分,同时也要考虑无效等价类划分。 有效等价类是指对软
16、件规格说明来说,合理、有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足规格说明所规定的功能和性能。 无效等价类则和有效等价类相反,即不满足程序输入要求或者无效的输入数据所构成的集合。利用无效等价类可以检验程序异常情况的处理。 使用等价类划分法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,然后列出等价类表。,2.3.2 等价类划分法,第二章 软件测试方法,在确立了等价类之后,建立等价类表,列出所有划分出的等价类,如表2-1所示。 表2-1 等价类表,再根据已列出的等价类表,按以下步骤确定测试用例: 为每一个等价类规定一个唯一的编号; 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类 ,重复这个过程,直至所有的有效等价类均被测试用例所覆盖; 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这个过程,直至所有的无效等价类均被测试用例所覆盖。,以三角形问题为例,输入条件是: 三个数,分别作为三角形的三条边 都是整数 取值范围在1100之间 认真分析上述的输入条件,可以得出相关的等价类表(包括有效等价类和无效等价类),如表2-2