《buct软件测试复习.ppt》由会员分享,可在线阅读,更多相关《buct软件测试复习.ppt(105页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件测试技术软件测试技术Software Testing Software Testing TechnologyTechnology赵瑞莲赵瑞莲 E-E-Mail:Mail:软件测试的基本概念软件测试的基本概念IEEE在软件工程标准术语中给软件测试下的定义是:在软件工程标准术语中给软件测试下的定义是:“使使用用人人工工或或自自动动手手段段来来运运行行或或测测定定某某个个系系统统的的过过程程,其其目目的的在在于于检检验验它它是是否否满满足足规规定定的的需需求求或或是是弄弄清清预预期期结果与实际结果之间的差别结果与实际结果之间的差别”。该定义包含了两方面的含义:该定义包含了两方面的含义:1 1)是
2、否满足规定的需求是否满足规定的需求2 2)是否有差别是否有差别这一定义非常明确地提出了这一定义非常明确地提出了软件测试以检验软件是否满足需求为目标。软件测试以检验软件是否满足需求为目标。软件测试的基本概念软件测试的基本概念对测试人员,测试的最好定义是:对测试人员,测试的最好定义是:测试是为了发现故障而执行程序的过程。测试是为了发现故障而执行程序的过程。这一定义非常明确地提出了这一定义非常明确地提出了软件测试以发现故障为目的。软件测试以发现故障为目的。发现故障的测试是成功的测试发现故障的测试是成功的测试.软件测试的基本概念软件测试的基本概念 软软件件测试测试是根据是根据软软件开件开发发各各阶阶段
3、的段的规规格格说说明和程序明和程序的内部的内部结结构而精心构而精心设计设计一批一批测试测试用例(即用例(即输输入数据及入数据及其其预预期的期的输输出出结结果),并利用果),并利用这这些些测试测试用例去运行程用例去运行程序,以序,以发现软发现软件件故障故障的的过过程。程。软件测试的基本概念软件测试的基本概念软件测试主要涉及软件测试主要涉及5 5方面的问题:方面的问题:谁来执行测试谁来执行测试?测试测试什么什么?什么时候测试什么时候测试?怎怎样进样进行行测试测试?测试测试停止停止的的标标准是什么准是什么?与任何事物一与任何事物一样样,软软件也有一个从孕育、件也有一个从孕育、诞诞生、生、成成长长到衰
4、亡的生存到衰亡的生存过过程程,通常称通常称为软为软件生存周期。件生存周期。包括包括制定制定计计划、划、需求分析、需求分析、设计设计、程序程序编码编码、测试测试运行运行维护维护六个六个阶阶段段。软件生存周期软件生存周期软件生存期与软件测试软件生存期与软件测试 如如同同任任何何产产品品离离不不开开质质量量检检验验一一样样,软软件件测测试试是是在在软软件件投投入入运运行行前前,对对软软件件需需求求分分析析、设设计计规规格格说说明明和和编编码码实实现现的的最最终终审审定定,贯贯穿穿于于软软件件定定义义与与开开发发的的整整个个期期间间,在在软软件件生生存存期期中中占占据据着着非非常常突出的重要位置。突出
5、的重要位置。软件测试并不等于程序测试。软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。软件测试应贯穿于软件定义与开发的整个期间。软件开发与软件测试软件开发与软件测试V V模型模型软件开发与软件测试软件开发与软件测试W W模型模型软件开发是一个软件开发是一个自顶向下自顶向下,逐步细化的过程。,逐步细化的过程。软件测试则是依相反顺序的软件测试则是依相反顺序的自底向上自底向上,逐步集成的,逐步集成的过程。低一级的测试为上一级的测试准备条件。过程。低一级的测试为上一级的测试准备条件。软件测试过程软件测试过程单元测试单元测试 单元测试一般在编码之后进行。单元测试一般在编码之后进行。n
6、 由于每个模块在整个软件中并不是孤立的,在对每由于每个模块在整个软件中并不是孤立的,在对每 个模块进行单元测试时,需要考虑它和周围模块的个模块进行单元测试时,需要考虑它和周围模块的 相互联系。为模拟这一联系,在进行单元测试时,相互联系。为模拟这一联系,在进行单元测试时,必须设置若干个辅助测试模块。必须设置若干个辅助测试模块。单元测试单元测试n 这些辅助模块分为两种:这些辅助模块分为两种:驱动模块驱动模块(driverdriver):用以模拟被测模块的上用以模拟被测模块的上级级 模块,相当于被测模块的主程序。模块,相当于被测模块的主程序。桩模块桩模块(stubstub):用以模拟被测模块的下级模
7、块,用以模拟被测模块的下级模块,相当于被测模块调用的子模块。相当于被测模块调用的子模块。单元测试的环境单元测试的环境单元测试完成单元测试完成集成测试集成测试n软件集成测试又称组装测试,即对程序模块采用自软件集成测试又称组装测试,即对程序模块采用自 顶向下或自底向上组装起来,对系统的接口进行正顶向下或自底向上组装起来,对系统的接口进行正 确性检验的测试工作。确性检验的测试工作。n软件集成测试由项目经理组织软件测试工程师依据软件集成测试由项目经理组织软件测试工程师依据概要设计说明书概要设计说明书和和集成测试计划集成测试计划进行。进行。集成测试集成测试一些模块单独能够工作,并不能保证连接起来也能正常
8、工作。一些模块单独能够工作,并不能保证连接起来也能正常工作。程序在某些局部反映不出的问题,在全局上很可能暴露出来,影程序在某些局部反映不出的问题,在全局上很可能暴露出来,影响功能的发挥。响功能的发挥。集成测试是将多个模块组合在一起进行测试的过程。集成测试是将多个模块组合在一起进行测试的过程。集成测试集成测试非增式测试非增式测试 增式测试增式测试 自顶向下测试自顶向下测试自底向上测试自底向上测试独立地测试程序的每个模块,然后再把独立地测试程序的每个模块,然后再把它们组合成整个程序的集成测试方法。它们组合成整个程序的集成测试方法。把下一个待测试的模块组合到已经测把下一个待测试的模块组合到已经测试过
9、的那些模块上去,再进行测试。试过的那些模块上去,再进行测试。从主控模块开始,从主控模块开始,按照软件的控制层按照软件的控制层次结构,逐步把各次结构,逐步把各个模块集成在一起。个模块集成在一起。从最下层的模块开始,按照程序的从最下层的模块开始,按照程序的层次结构,逐渐形成完整的整体。层次结构,逐渐形成完整的整体。集成测试集成测试系统测试系统测试n系统测试是将通过确认测试的软件,作为整个基于系统测试是将通过确认测试的软件,作为整个基于 计算机系统的一个元素,与计算机硬件、外设、计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合某些支持软件、数据和人员等其它系统元素
10、结合 在一起测试。在一起测试。n在实际运行(使用)环境下,对计算机系统进行一在实际运行(使用)环境下,对计算机系统进行一 系列的组装测试和确认测试。系列的组装测试和确认测试。系统测试系统测试静态测试与动态测试静态测试与动态测试 静态测试是指不利用计算机运行被测试的程序,静态测试是指不利用计算机运行被测试的程序,通过其它手段达到检测的目的通过其它手段达到检测的目的,是对被测程序进是对被测程序进行特性分析的一些方法的总称。行特性分析的一些方法的总称。动态测试则是指通常意义上的测试动态测试则是指通常意义上的测试通过运行和使用被测程序,发现通过运行和使用被测程序,发现软件故障,以达到检测的目的。软件故
11、障,以达到检测的目的。经验表明,使用静态测试经验表明,使用静态测试可以发现大约可以发现大约30%到到70%的逻辑设计和编码错误。的逻辑设计和编码错误。验证测试与确认测试验证测试与确认测试验验证证是是对对软软件件产产品品进进行行人人工工检检查查或或评评审审。验验证证测测试试针针对对开开发发过过程程中中的的任任何何中中间间产产品品进进行行,是是为为确确定定某某一一开开发发阶阶段段的的产产品品是是否否满满足足在在该该阶阶段段开开始始时时提提出出的的要要求而对系统或部件进行评估的过程。求而对系统或部件进行评估的过程。验证验证就是对诸如需求规格说明,设计规格说明和代码之就是对诸如需求规格说明,设计规格说
12、明和代码之类的产品进行评估、审查和检查的过程,属于静态测试。类的产品进行评估、审查和检查的过程,属于静态测试。确认确认是是“基于计算机的测试基于计算机的测试”过程,属于动态测试。过程,属于动态测试。确认测试是对照软件需求规格说明书,确认测试是对照软件需求规格说明书,对软件产品进行评估以确定其对软件产品进行评估以确定其是否满足需求规格是否满足需求规格的过程。的过程。验证活动验证活动验证活动是测试生存周期中的一个阶段,验证活动是测试生存周期中的一个阶段,包括需求验证、功能设计验证、详细设计验证和代包括需求验证、功能设计验证、详细设计验证和代码验证。码验证。在每一类的验证活动中,都要考虑以下问题:在
13、每一类的验证活动中,都要考虑以下问题:使用的验证方法使用的验证方法(审查、走查、伙伴检查等审查、走查、伙伴检查等);产品中要验证的和不要验证的范围产品中要验证的和不要验证的范围;没有验证的部分所承担的风险没有验证的部分所承担的风险;需要优先进行验证的范围需要优先进行验证的范围;资源、进度、工具和责任等资源、进度、工具和责任等.回归测试是对程序进行测试以确定是否因故障修回归测试是对程序进行测试以确定是否因故障修 复而引入了新的故障。复而引入了新的故障。回归测试不是一种新的测试活动,它是为检查是回归测试不是一种新的测试活动,它是为检查是 否因修复故障引入了新的故障而重新执行某些否因修复故障引入了新
14、的故障而重新执行某些 或所有测试用例的过程。或所有测试用例的过程。可以为每一个测试活动进行回归测试,比如,单可以为每一个测试活动进行回归测试,比如,单 元测试、可用性测试、功能测试、系统测试等。元测试、可用性测试、功能测试、系统测试等。回归测试回归测试 测试测试n 测试是由一个用户在开发环境下进行的测试,测试是由一个用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作也可以是开发机构内部的用户在模拟实际操作 环境下进行的测试。环境下进行的测试。n 测试的目的是评价软件产品的功能、可使用性、测试的目的是评价软件产品的功能、可使用性、可靠性、性能和支持,尤其注重产品的界面和特可靠性
15、、性能和支持,尤其注重产品的界面和特 色。色。n 测试可以从软件产品编码结束之时开始,或在测试可以从软件产品编码结束之时开始,或在 模块(系统模块(系统)测试完成之后开始,也可以在确认测试完成之后开始,也可以在确认 测试过程中产品达到一定的稳定和可靠程度之后测试过程中产品达到一定的稳定和可靠程度之后 再开始。再开始。测试测试n 测试是由软件的多个用户在一个或多个用户的实测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。与际使用环境下进行的测试。与 测试不同的是,开测试不同的是,开发者通常不在测试现场。发者通常不在测试现场。n 只有当只有当 测试达到一定的可靠程度时,才能开始测试
16、达到一定的可靠程度时,才能开始 测测试,它处在整个测试的最后阶段。同时,产品的所有试,它处在整个测试的最后阶段。同时,产品的所有手册文本也在此阶段定稿。手册文本也在此阶段定稿。测试生命周期测试生命周期黑盒测试与白盒测试黑盒测试与白盒测试n 黑盒测试和白盒测试是两类广泛使用的软件测黑盒测试和白盒测试是两类广泛使用的软件测试方法。试方法。黑盒测试(功能性测试)黑盒测试(功能性测试)功能性测试是一类广泛使用的软件测试方法。功能性测试是一类广泛使用的软件测试方法。功能性测试的基本观点是功能性测试的基本观点是将被测程序看作一个打不开的黑盒,将被测程序看作一个打不开的黑盒,测试人员在完全不考虑程序内部结构
17、和内部特性的情况下,测试人员在完全不考虑程序内部结构和内部特性的情况下,只依靠被测程序输入和输出之间的关系,只依靠被测程序输入和输出之间的关系,或程序的功能来或程序的功能来设计测试用例设计测试用例。功能性测试(黑盒测试)功能性测试(黑盒测试)采用功能性方法标识测试用例,采用功能性方法标识测试用例,所使用的唯一信息就是软件的规格说明。所使用的唯一信息就是软件的规格说明。功能性测试用例具有两个优点:功能性测试用例具有两个优点:1 1)功能性测试与软件如何实现无关。)功能性测试与软件如何实现无关。如果实现发生了变化,测试用例仍然可以使用。如果实现发生了变化,测试用例仍然可以使用。2 2)测试用例的开
18、发可以和实现并行进行。)测试用例的开发可以和实现并行进行。可以缩短项目的开发时间。可以缩短项目的开发时间。功能性测试(黑盒测试)功能性测试(黑盒测试)采用功能性方法标识测试用例,采用功能性方法标识测试用例,所使用的唯一信息就是软件的规格说明。所使用的唯一信息就是软件的规格说明。功能性测试用例也常常带来两个问题:功能性测试用例也常常带来两个问题:1 1)测试用例之间可能存在严重的冗余。)测试用例之间可能存在严重的冗余。2 2)可能会有未被测试的软件漏洞。)可能会有未被测试的软件漏洞。功能性测试(黑盒测试)功能性测试(黑盒测试)测试用例集合完全局限在已描述行为的集合内。测试用例集合完全局限在已描述
19、行为的集合内。功能性测试方法是基于已描述行为的,功能性测试方法是基于已描述行为的,因此很难想象这些方法能够标识没有被描述的行为。因此很难想象这些方法能够标识没有被描述的行为。Specification ProgramTest case (Method A)Specification ProgramTest case (Method B)Comparing functional test case identification methods黑盒测试(功能性测试)黑盒测试(功能性测试)常用的黑盒测试方法有:常用的黑盒测试方法有:边界值分析、边界值分析、等价类划分、等价类划分、决策表驱动法等。决策
20、表驱动法等。边界值测试边界值测试边界值分析边界值分析 边边界界值值分析的基本思想是利用分析的基本思想是利用输输入入变变量量值值的的最小最小值值,稍大于最小,稍大于最小值值,正常正常值值,稍小于最大,稍小于最大值值,最大,最大值值。边界值分析基于一种假设,边界值分析基于一种假设,在可靠性理论中称为在可靠性理论中称为“单缺陷单缺陷”假设,假设,即由即由两个(或两个以上)故障同时出现两个(或两个以上)故障同时出现而导致软件失效的情况很少。而导致软件失效的情况很少。x1abdx2图图2有两个变量程序的边界值分析测试用例有两个变量程序的边界值分析测试用例c,一个含一个含n n个变量的程序,个变量的程序,
21、边界值分析边界值分析要取要取4 4n n1 1个测试用例。个测试用例。边界值分析边界值分析abdx2两个变量程序的健壮性测试用例两个变量程序的健壮性测试用例x1abdx2x1健壮性测试健壮性测试一个含一个含n n个变量的程序,个变量的程序,健壮性测试健壮性测试要取要取6 6n n1 1个测试用例。个测试用例。n变量函数的最坏情况测试,变量函数的最坏情况测试,会产生会产生5n个测试用例。个测试用例。图图4两个变量程序的最坏情况测试用例两个变量程序的最坏情况测试用例abdx2x1最坏情况测试最坏情况测试边界值分析测试用例是最坏情况测试用例的真子集。边界值分析测试用例是最坏情况测试用例的真子集。最坏
22、情况测试显然更彻底,也意味着更多的工作。最坏情况测试显然更彻底,也意味着更多的工作。abdx2图图5两个变量程序的健壮性最坏情况测试用例两个变量程序的健壮性最坏情况测试用例x1n变量函数的健壮最坏情况测试,变量函数的健壮最坏情况测试,会产生会产生7n个测试用例。个测试用例。最坏情况测试最坏情况测试等价类测试等价类测试(Equivalence Class Testing)(Equivalence Class Testing)等价类测试等价类测试 等价类划分把程序的输入域划分成若干个互不相等价类划分把程序的输入域划分成若干个互不相交的一组子集交的一组子集等价类。等价类。所谓等价类是指输入域的某个集
23、合,等价类的并所谓等价类是指输入域的某个集合,等价类的并便是整个输便是整个输入入域。域。这对于测试有两个非常重要的意义:这对于测试有两个非常重要的意义:表示整个输入域提供了一种形式的完备性,表示整个输入域提供了一种形式的完备性,而互不相交则可保证一种形式的无冗余性。而互不相交则可保证一种形式的无冗余性。等价类由等价关系决定。等价类由等价关系决定。因此等价类中的元素有一些共同的特点:因此等价类中的元素有一些共同的特点:如果用等价类中的一个元素作为测试数据进行测如果用等价类中的一个元素作为测试数据进行测试不能发现程序中的故障,那么使用集合中的其试不能发现程序中的故障,那么使用集合中的其它元素进行测
24、试也不可能发现程序故障。它元素进行测试也不可能发现程序故障。对揭露程序中的故障来说,对揭露程序中的故障来说,等价类中的每个元素是等效的。等价类中的每个元素是等效的。等价类测试等价类测试有效等价类:有效等价类:有有效效等等价价类类是是指指对对程程序序规规格格说说明明,是是有有意意义义的的,合合理的输理的输入入数据所构成的集合。数据所构成的集合。在考虑等价类时,应注意区别在考虑等价类时,应注意区别有效等价类有效等价类和和无效等价类无效等价类。利用有效等价类,可以检验程序是否实现了规格说明利用有效等价类,可以检验程序是否实现了规格说明预先规定的功能和性能。预先规定的功能和性能。在具体问题中,有效等价
25、类可以是一个,也可以是多在具体问题中,有效等价类可以是一个,也可以是多个。个。等价类测试等价类测试 无效等价类:无效等价类:无无效效等等价价类类是是指指对对程程序序规规格格说说明明,是是不不合合理理或或无无意意义的输入数据所构成的集合。义的输入数据所构成的集合。利用无效等价类,可以检查程序功能和性能的实利用无效等价类,可以检查程序功能和性能的实现是现是 否有不符合规格说明要求的地方。否有不符合规格说明要求的地方。对于具体的问题,无效等价类至少应有一个,对于具体的问题,无效等价类至少应有一个,也可能有多个。也可能有多个。等价类测试等价类测试 1)为每个等价类规定一个唯一的编号。)为每个等价类规定
26、一个唯一的编号。2)设设计计一一个个新新的的测测试试用用例例,尽尽可可能能多多地地覆覆盖盖尚尚未未被被覆覆盖盖的的有有效效等等价价类类,重重复复这这一一步步,直直到到测测试试用用例例覆覆盖了所有的有效等价类。盖了所有的有效等价类。3)设计一个新的测试用例,使其覆盖并且只覆盖一设计一个新的测试用例,使其覆盖并且只覆盖一个还没有被覆盖的无效等价类。重复这一步,直至个还没有被覆盖的无效等价类。重复这一步,直至测试用例覆盖了所有的无效等价类。测试用例覆盖了所有的无效等价类。根据已列出的等价类表,按以下步骤确定测试用例:根据已列出的等价类表,按以下步骤确定测试用例:等价类测试等价类测试弱一般等价类测试弱
27、一般等价类测试x1有效等价类有效等价类a,b,(,(b,c),),c,dx2有效等价类有效等价类e,f,f,gabcdefgx1x2图图1弱一般等价类测试用例弱一般等价类测试用例测试用例的数量测试用例的数量和含最大子集数目和含最大子集数目的等价类中的数目相同。的等价类中的数目相同。强一般等价类测试强一般等价类测试x1有效等价类有效等价类a,b,(,(b,c),),c,dx2有效等价类有效等价类e,f,f,g 测试用例的数量测试用例的数量3*2=63*2=6。abcdefgx1x2图图2强一般等价类测试用例强一般等价类测试用例弱健壮等价类测试弱健壮等价类测试x1有效等价类有效等价类a,b,(,(
28、b,c),),c,dx2有效等价类有效等价类e,f,f,gx1无效等价类无效等价类 x1d x2无效等价类无效等价类 x2g测试用例的数量测试用例的数量3+2*2=73+2*2=7。abcdefgx1x2图图3弱健壮性等价类测试用例弱健壮性等价类测试用例强健壮等价类测试强健壮等价类测试x1有效等价类有效等价类a,b,(,(b,c),),c,dx2有效等价类有效等价类e,f,f,gx1无效等价类无效等价类 x1dx2无效等价类无效等价类 x2g测试用例的数量测试用例的数量(3+23+2)*(2+22+2)=20=20。abcdefgx1x2图图4强健壮性等价类测试用例强健壮性等价类测试用例基于决
29、策表的测试基于决策表的测试(DecisionTable-BasedTesting)决策表测试决策表测试 决策表最突出的优点是,它能把复杂的问题按决策表最突出的优点是,它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。也可避免遗漏。因此利用决策表可以设计出完整的测试用例集合。因此利用决策表可以设计出完整的测试用例集合。在所有的黑盒测试方法中,基于决策表的在所有的黑盒测试方法中,基于决策表的测试是最严格,最具有逻辑严格性的测试测试是最严格,最具有逻辑严格性的测试方法。方法。决策表决策表决策表通常由决策表通常由4 4个部分组成:个
30、部分组成:条件桩部分列出了问题的所有条件条件桩部分列出了问题的所有条件,动作桩则给出了问题规定的可能采取的操作。动作桩则给出了问题规定的可能采取的操作。动作项和条件项紧密相关,动作项和条件项紧密相关,指出了在条件项的各组取值情况下应采取的动作。指出了在条件项的各组取值情况下应采取的动作。NextDate函数的测试用例函数的测试用例 使用决策表设计测试用例,使用决策表设计测试用例,我们可以把我们可以把条件解释为输入,把行动解释为输出。条件解释为输入,把行动解释为输出。设计出完整的测试用例集合。设计出完整的测试用例集合。结构性测试结构性测试结构性测试结构性测试n结构性测试方法的突出特点是它们都基于
31、结构性测试方法的突出特点是它们都基于被测程序的被测程序的源代码源代码,而不是软件规格说明,而不是软件规格说明。n和其它软件测试技术相比,结构性测试方和其它软件测试技术相比,结构性测试方法更容易发现软件故障,常用于法更容易发现软件故障,常用于单元测试单元测试中。中。Control Flow graph Based TestingData Flow Based TestingnUse CFGs to guide selection of tests for white box or structural testing.nThe flow of data in a program is vital
32、 to the computation it performs.nAnalysis of the definition and use of data in execution paths.程序控制图 程序控制图的重要性:程序控制图的重要性:程序的执行对应于从源节点到汇节点的路径。程序的执行对应于从源节点到汇节点的路径。测试用例必然要执行某条程序路径。测试用例必然要执行某条程序路径。可以清楚明确地描述可以清楚明确地描述测试用例和测试用例所执行测试用例和测试用例所执行的程序部分的程序部分之间的关系。之间的关系。Control Flow GraphsnA CFG models all execut
33、ions of a method by describing control structuresnNodes:Statements or sequences of statements(basic blocks)nEdges:Transfers of controlnBasic Block:A sequence of statements such that if the first statement is executed,all statements will be(no branches)nRules for translating statements into graphs CF
34、G:The if Statementif(x=yxyx=yy=0 x=x+1if(x=yxyy=0 x=x+1CFG:The if-Return Statementif(x=yxyreturnprint(x)returnNoedgefromnode2to3.Thereturnnodesmustbedistinct.CFG:while and for Loopsx=0;while(x=yxy2dummynodeLoops require“extra”nodes to be added.CFG:while and for Loopsfor(x=0;x=yxyy=f(x,y)4x=0implicit
35、lyinitializesloopimplicitlyincrementsloopLoops require“extra”nodes to be added.CFG:do Loop,break and continuex=0;do y=f(x,y);x=x+1;while(x=yxyprintln(y)CFG:do Loop,break and continuex=0;while(x y)y=f(x,y);if(y=0)break;else if(y 0)y=y*2;continue;x=x+1;print(y);1x=083x=x+1breaky024567y=f(x,y)y=0y=y*2c
36、ontinuePrint(y)CFG:The case(switch)Structureread(c);switch(c)case N:y=25;break;case Y:y=50;break;default:y=0;break;print(y);51read(c);c=Ny=0;break;243c=Ydefaulty=50;break;y=25;break;print(y);逻辑覆盖逻辑覆盖逻辑覆盖是一种使用最广泛的结构测试方法。逻辑覆盖是一种使用最广泛的结构测试方法。逻辑覆盖以程序内部的逻辑结构为基础设计逻辑覆盖以程序内部的逻辑结构为基础设计测试用例,要求对被测程序的逻辑结构有清楚测试用
37、例,要求对被测程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。的了解,甚至要能掌握源程序的所有细节。逻辑覆盖要求对被测程序的结构作到一定程逻辑覆盖要求对被测程序的结构作到一定程度的覆盖。度的覆盖。由于覆盖测试的目标不同,逻辑覆盖又可分为:由于覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖、判定覆盖、条件覆盖、判定语句覆盖、判定覆盖、条件覆盖、判定条件条件覆盖及路径覆盖。覆盖及路径覆盖。逻辑覆盖逻辑覆盖它的程序流程图如下:它的程序流程图如下:a、b、c、d和和e为控制流上的若干程序点为控制流上的若干程序点。1语句覆盖语句覆盖语句覆盖要求设计若干个测试用语句覆盖要求设计若干个测试用例,运
38、行被测程序,使程序中的例,运行被测程序,使程序中的每个可执行语句至少被执行一次。每个可执行语句至少被执行一次。这里所谓这里所谓“若干若干”,自然是越少越好。,自然是越少越好。我们如果选择:我们如果选择:Test1:age=50,sex=M,comm=2500作为测试用例,则程序按路径作为测试用例,则程序按路径ace执行。执行。这样该程序段的这样该程序段的4个语句都得到执个语句都得到执行,从而作到了语句覆盖。行,从而作到了语句覆盖。逻辑覆盖逻辑覆盖它的程序流程图如下:它的程序流程图如下:a、b、c、d和和e为控制流上的若干程序点为控制流上的若干程序点。2判定覆盖判定覆盖判定覆盖要求设计若干测试用
39、例,判定覆盖要求设计若干测试用例,运行被测程序,使得程序中运行被测程序,使得程序中每个每个判断的取真分支和取假分支至少判断的取真分支和取假分支至少执行一次,即判断的真假值均要执行一次,即判断的真假值均要被检测。被检测。判定覆盖又称为分支覆盖。判定覆盖又称为分支覆盖。逻辑覆盖逻辑覆盖它的程序流程图如下:它的程序流程图如下:a、b、c、d和和e为控制流上的若干程序点为控制流上的若干程序点。3.3.条件覆盖条件覆盖条件覆盖要求设计若干测试用例,条件覆盖要求设计若干测试用例,执行被测程序,使得程序中每个执行被测程序,使得程序中每个判断的每个条件的可能取值至少判断的每个条件的可能取值至少被执行一次。被执
40、行一次。逻辑覆盖逻辑覆盖它的程序流程图如下:它的程序流程图如下:a、b、c、d和和e为控制流上的若干程序点为控制流上的若干程序点。4.4.判定判定/条件覆盖条件覆盖判定判定/条件覆盖要求设计足够的条件覆盖要求设计足够的测试用例,执行被测程序,使得测试用例,执行被测程序,使得判断中每个条件的所有可能取值判断中每个条件的所有可能取值至少被执行一次,同时每个判断至少被执行一次,同时每个判断的所有可能判断结果也至少被执的所有可能判断结果也至少被执行一次。行一次。逻辑覆盖逻辑覆盖 路路径径能能否否被被全全面面覆覆盖盖在在软软件件测测试试中中是是一一个个重重要要的的问问题题,因因为为程程序序要要取取得得正
41、正确确的的结结果果,就就必必须须消消除除遇遇到到的的各各种种障障碍碍,沿沿着着特特定定的的路路径径顺顺利执行。利执行。如如果果程程序序中中的的每每一一条条路路径径都都得得到到考考验验,才才能说程序受到了全面检验。能说程序受到了全面检验。基本路径测试 数学上,向量空间都有一个基。数学上,向量空间都有一个基。向量空间的基是一组相互独立的向量,其中的向量空间的基是一组相互独立的向量,其中的任何其他向量都可以用基向量来表示。任何其他向量都可以用基向量来表示。一组基向量在一定程度上可以代表整个向量空一组基向量在一定程度上可以代表整个向量空间的本质,如果一个基向量被删除,则这种覆盖间的本质,如果一个基向量
42、被删除,则这种覆盖特性就会丧失。特性就会丧失。对对测试的意义是,测试的意义是,如果把程序看做是一个向量空间,如果把程序看做是一个向量空间,则这种空间的基就是要测试的非常有意义的元素集。则这种空间的基就是要测试的非常有意义的元素集。如果基没有问题,则认为用基表示的一切都没有问题。如果基没有问题,则认为用基表示的一切都没有问题。数据流测试数据流测试数据流分析数据流分析 数据流分析数据流分析(data flow analysis)在软件开发、在软件开发、测试和维护中起着十分重要的作用。测试和维护中起着十分重要的作用。它将程序中变量的出现分为变量的定义和引用。它将程序中变量的出现分为变量的定义和引用。
43、若语句若语句k执行时改变了程序变量执行时改变了程序变量V的值,则称的值,则称k定义了定义了(definition)变量变量v;若语句若语句k执行时引用了变量执行时引用了变量v的值,则称的值,则称k引用引用了了(use)变量变量v。定义使用测试定义使用测试为描述定义使用测试,先定义几个基本术语。为描述定义使用测试,先定义几个基本术语。变量变量v v的定义结点的定义结点n n,记做记做DEF(vDEF(v,n)n)结点结点n n G(P)G(P)是变量是变量v v V V的定义结点,的定义结点,当当且仅当变量且仅当变量v v的值由对应结点的值由对应结点n n的语句或语句片的语句或语句片段所定义。段
44、所定义。输入语句、赋值语句、循环控制语句和过程输入语句、赋值语句、循环控制语句和过程调用,都可以定义变量。调用,都可以定义变量。如果执行了对应这些语句的结点,那么与被如果执行了对应这些语句的结点,那么与被定义变量关联的存储单元的内容就会改变。定义变量关联的存储单元的内容就会改变。定义使用测试定义使用测试 变量变量v v的使用结点的使用结点n n,记做记做USE(vUSE(v,n)n)结点结点n n G(P)G(P)是变量是变量v v V V的使用结点,当且仅的使用结点,当且仅当当变量变量v v的值在对应结点的值在对应结点n n的语句或语句片段中的语句或语句片段中被引用。被引用。输出语句、赋值语
45、句、条件语句、循环控制语输出语句、赋值语句、条件语句、循环控制语句和过程调用,都是使用变量的结点。句和过程调用,都是使用变量的结点。但是,执行对应这些语句的结点,并不改变与但是,执行对应这些语句的结点,并不改变与被引用变量关联的存储单元的内容。被引用变量关联的存储单元的内容。定义使用测试定义使用测试 谓词使用,谓词使用,记做记做P-useP-use USE(vUSE(v,n)n)是一个谓词使用,当且仅当语句是一个谓词使用,当且仅当语句n n是是谓词语句;否则,谓词语句;否则,USE(vUSE(v,n)n)是计算使用,记做是计算使用,记做C-useC-use。条件语句、循环控制语句中变量的使用一
46、般是条件语句、循环控制语句中变量的使用一般是谓词使用,而赋值语句中变量的使用一般是计谓词使用,而赋值语句中变量的使用一般是计算使用。算使用。定义使用测试定义使用测试 定义定义/使用路径使用路径,记做,记做du-pathdu-path 如如果果对对某某个个变变量量v v V V,存存在在一一个个定定义义、使使用用结结点点对对,即即DEF(vDEF(v,m)m)和和USE(vUSE(v,n)n),使使得得变变量量v v在在结结点点m m处处被被定定义义,在在结结点点n n处处被被使使用用,则则从从m m到到n n的的结结点点序序列列称称为为一一条条定定义义/使使用用路路径径,结结点点m m称称为为
47、该该定定义义/使使用用路路径径的的开开始始结结点点,而而结结点点n n则则称称为为该该定定义义/使使用路径的结束结点。用路径的结束结点。定义使用测试定义使用测试 定定义义清清晰晰路路径径(definition-clear definition-clear pathpath),记记做做dc-pathdc-path 如如果果对对某某个个变变量量v v V V,存存在在一一个个定定义义、使使用用结结点点对对,即即DEF(vDEF(v,m)m)和和USE(vUSE(v,n)n),使使得得变变量量v v在在结结点点m m处处被被定定义义,在在结结点点n n处处被被使使用用,并并且且从从m m到到n n的
48、的结结点点序序列列中中没没有有其其他他结结点点对对变变量量v v进进行行过过定定义义,则则从从m m到到n n的的结结点点序序列列称称为为一一条条定定义义清清晰晰路路径径,结结点点m m称称为为该该定定义义/使使用用路路径径的的开开始始结结点点,而而结结点点n n则则称称为为该定义该定义/使用路径的结束结点。使用路径的结束结点。Recall Our ExampleFor just the variable x in IF(.)THEN x:=1 ELSE x:=2 FI;y:=50;IF(x=1)THEN x:=2 ELSE DO.OD FI;x:=x-1ddupduc dThis is ad
49、u pathThis is nota dc pathRecall Our Exampleddupduc dThis is a du pathFor just the variable x in IF(.)THEN x:=1 ELSE x:=2 FI;y:=50;IF(x=1)THEN x:=2 ELSE DO.OD FI;x:=x-1定义定义/使用路径测试覆盖使用路径测试覆盖 所有定义所有定义/使用路径覆盖准则使用路径覆盖准则 集合集合T满足程序满足程序P的所有定义的所有定义/使用路径覆盖准使用路径覆盖准则,当且仅当对所有的变量则,当且仅当对所有的变量v V,T包含了从包含了从v的的每每个个定
50、定义义结结点点到到v的的所所有有使使用用结结点点的的定定义义清清晰晰路路径径。All du Paths:ADUPFor every variable and for every definition d of that variable and for every use u of d and for every du-path from d to u there is test which exercises that path.ExampleFor the variable x in IF(.)THEN x:=1 ELSE x:=2 FI;y:=50;IF(x=1)THEN x:=2 EL