收藏 分销(赏)

第5结构化实现.pptx

上传人:快乐****生活 文档编号:4234919 上传时间:2024-08-28 格式:PPTX 页数:113 大小:569.08KB
下载 相关 举报
第5结构化实现.pptx_第1页
第1页 / 共113页
第5结构化实现.pptx_第2页
第2页 / 共113页
第5结构化实现.pptx_第3页
第3页 / 共113页
第5结构化实现.pptx_第4页
第4页 / 共113页
第5结构化实现.pptx_第5页
第5页 / 共113页
点击查看更多>>
资源描述

1、 所谓软件实现通常指的是编码和测试这两个阶段。所谓软件实现通常指的是编码和测试这两个阶段。编编码码就就是是把把软软件件设设计计的的结结果果翻翻译译成成用用某某种种程程序序设设计计语语言言书书写写的的程程序序。作作为为软软件件工工程程过过程程的的一一个个阶阶段段,编编码码是是软软件件设设计计的的自自然然结结果果,因因此此,程程序序的的质质量量主主要要取取决决于于软软件件设设计计的的质质量量。但但是是,所所选选用用的的程程序序设设计计语语言言的的特特点点和和编编程程时时的的风风格格,也也会会对对程程序序的的可可靠靠性性、可可读读性性、可可测测试试性性和和可可维维护性产生深远的影响。护性产生深远的影

2、响。正正如如任任何何产产品品在在交交付付使使用用之之前前都都必必须须经经过过严严格格的的检检验验过过程程一一样样,由由于于软软件件开开发发的的复复杂杂性性和和困困难难性性,软软件件产产品品在在交交付付使使用用之之前前尤尤其其应应该该经经过过严严格格的的质质量量检检验验过过程程。通通常常把把对对软软件件的的质质量量检检验验过过程程称称为为测测试试。目目前前,软软件件测测试试仍仍然然是是保保证证软软件件质质量量的的主主要要途途径径,它它是是对对软软件件需需求求规规格格说说明明、软软件设计和编码的最后复审。件设计和编码的最后复审。仅就测试而言,它的目标是发现软件中的错误,仅就测试而言,它的目标是发现

3、软件中的错误,但是,发现错误并不是我们的最终目的。软件工程的但是,发现错误并不是我们的最终目的。软件工程的根本目标,是开发出高质量的完全符合用户需要的软根本目标,是开发出高质量的完全符合用户需要的软件产品,因此,通过测试发现软件错误之后还必须诊件产品,因此,通过测试发现软件错误之后还必须诊断并改正错误,这就是调试(也称为纠错)的任务。断并改正错误,这就是调试(也称为纠错)的任务。调试是测试阶段最困难的工作。调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软件产品在对测试结果进行收集和评价的时候,软件产品所达到的可靠性也逐渐明朗了。软件可靠性模型使用所达到的可靠性也逐渐明朗了。软件

4、可靠性模型使用故障率数据,预测软件的可靠性。故障率数据,预测软件的可靠性。4.1 编编 码码4.2 软件测试概述软件测试概述4.3 白盒测试技术白盒测试技术4.4 黑盒测试技术黑盒测试技术4.5 测测 试试 策策 略略4.6 调调 试试4.7 软件可靠性软件可靠性4.8 小小 结结4.1 编编 码码4.1.1 选择适当的程序设计语言选择适当的程序设计语言 程程序序设设计计语语言言是是人人和和计计算算机机通通信信的的基基本本工工具具,它它的的特特点点不不可可避避免免地地会会影影响响人人思思维维和和解解决决问问题题的的方方式式,会会影影响响人人和和计计算算机机通通信信的的方方式式和和质质量量,也也

5、会会影影响响其其他他人人阅阅读读和和理理解解程程序序的的难难易易程程度度。因因此此,编编码码之之前前的的一一项项重重要要工工作作就就是是选选择择一一种种适适当的程序设计语言。当的程序设计语言。适适当当的的程程序序设设计计语语言言能能使使程程序序员员在在根根据据设设计计编编码码时时遇遇到到的的困困难难最最少少,可可以以减减少少需需要要的的程程序序测测试试量量,并并且且可可以以写写出出更更容容易易阅阅读读和和更更容容易易维维护护的的程程序序。由由于于软软件件系系统统的的绝绝大大部部分分成成本本用用在在生生命命周周期期的的测测试试和和维维护护阶阶段段,因因此此容容易易测测试试和和容容易易维维护是极端

6、重要的。护是极端重要的。总总的的说说来来。高高级级语语言言明明显显优优于于汇汇编编语语言言,因因此此,除除了了在在很很特特殊殊的的应应用用领领域域(例例如如,对对程程度度执执行行时时间间和和使使用用的的空空间间都都有有很很严严格格限限制制的的情情况况;需需要要产产生生任任意意的的甚甚至至非非法法的的指指令令序序列列;体体系系结结构构特特殊殊的的微微处处理理机机,以以致致在在这这类类机机器器上上通通常常不不能能实实现现高高级级语语言言编编译译程程序序),或或者者大大型型系系统统中中执执行行时时间间非非常常关关键键的的(或或直直接接依依赖赖于于硬硬件件的的)一一小小部部分分代代码码需需要要用用汇汇

7、编编语语言言书书写写之之外外,其其他他程程序序应应该该一一律律用高级语言书写。用高级语言书写。为了使程序容易测试和维护以减少生命周期的总成本,选用为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。上述这和维护的成

8、本,选用的语言应该有良好的独立编译机制。上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。考虑理论上的标准,还必须同时考虑实用方面的各种限制。4.1.2 正确的编码风格正确的编码风格 虽虽然然选选取取了了好好的的程程序序设设计计语语言言有有助助于于写写出出既既可可靠靠又又容容易易阅阅读读、容容易易维维护护的的程程序序,但但是是,工工具具再再好好使使用用不不当当也也不不会会达达到到预预期期的的效效果果。按按照照软软件件工工程程方方法法学学开开发发软软件件,程程序序是是表表达达软

9、软件件设设计计结结果果的的一一种种更更具具体体的的形形式式,程程序序的的质质量量基基本本上上由由设设计计的的质质量量决决定定,但但是是,编编码码风风格格也也在在很很大大程程度度上上决定着程序的质量。决定着程序的质量。所所谓谓编编码码风风格格就就是是程程序序员员在在编编写写程程序序时时遵遵循循的的具具体体准准则则和和习习惯惯做做法法。源源程程序序代代码码的的逻逻辑辑简简明明清清晰晰、易易读读易易懂懂是是好好程程序序的的一一个个重重要要标标准准,为为了了写写出出好好程程序序应应该该遵遵循循下下述述规规则。则。1.程序内部必须有正确的文档程序内部必须有正确的文档 所所谓谓程程序序内内部部的的文文档档

10、包包括括恰恰当当的的标标识识符符、适适当当的的注注解解和程序的视觉组织等等。和程序的视觉组织等等。选选取取含含义义鲜鲜明明的的名名字字,使使它它能能正正确确地地提提示示程程序序对对象象所所代代表表的的实实体体,这这对对于于帮帮助助阅阅读读者者理理解解程程序序是是很很重重要要的的。如如果果使使用用缩缩写写,那那么么缩缩写写规规则则应应该该一一致致,并并且且应应该该给给每每个个名名字加注解。字加注解。注解是程序员和程序读者通信的重要手段,正确的注注解是程序员和程序读者通信的重要手段,正确的注解非常有助于对程序的理解。通常在每个模块开始处有一解非常有助于对程序的理解。通常在每个模块开始处有一段序言性

11、的注解,简要描述模块的功能、主要算法、接口段序言性的注解,简要描述模块的功能、主要算法、接口特点、重要数据以及开发简史。插在程序中间与一段程序特点、重要数据以及开发简史。插在程序中间与一段程序代码有关的注解,主要解释包含这段代码的必要性。对于代码有关的注解,主要解释包含这段代码的必要性。对于用高级语言书写的源程序,不需要用注解的形式把每个语用高级语言书写的源程序,不需要用注解的形式把每个语句翻译成自然语言,应该利用注解提供一些额外的信息。句翻译成自然语言,应该利用注解提供一些额外的信息。应该用空格或空行清楚地区分注解和程序。注解的内容一应该用空格或空行清楚地区分注解和程序。注解的内容一定要正确

12、,错误的注解不仅对理解程序毫无帮助,反而会定要正确,错误的注解不仅对理解程序毫无帮助,反而会妨碍对程序的理解。妨碍对程序的理解。程序清单的布局对于程序的可读性也有很大影响,应程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯形式使程序的层次结构清晰明显。该利用适当的阶梯形式使程序的层次结构清晰明显。2.数据说明应便于查阅易于理解数据说明应便于查阅易于理解 虽虽然然在在设设计计期期间间已已经经确确定定了了数数据据结结构构的的组组织织和和复复杂杂程程度度,然然而而数数据据说说明明的的风风格格却却是是在在写写程程序序时时确确定定的的。为为了了使使数数据据更更容容易易理理解解和和维维护护,

13、有有一一些些比比较较简简单单的的原原则则应应该遵循。该遵循。数数据据说说明明的的次次序序应应该该标标准准化化(例例如如,按按照照数数据据结结构构或或数数据据类类型型确确定定说说明明的的次次序序)。有有次次序序就就容容易易查查阅阅,因因此能够加速测试、调试和维护的过程。此能够加速测试、调试和维护的过程。当当多多个个变变量量名名在在一一个个语语句句中中说说明明时时,应应该该按按字字母母顺顺序排列这些变量。序排列这些变量。如如果果设设计计时时使使用用了了一一个个复复杂杂的的数数据据结结构构,则则应应该该用用注注解解说说明明用用程程序序设设计计语语言言实实现现这这个个数数据据结结构构的的方方法法和和特

14、特点。点。3.语句应该尽量简单清晰语句应该尽量简单清晰 设设计计期期间间确确定定了了软软件件的的逻逻辑辑结结构构,然然而而个个别别语语句句的的构构造造却却是是编编写写程程序序的的一一个个主主要要任任务务。构构造造语语句句时时应应该该遵遵循循的的原原则则是是,每每个个语语句句都都应应该该简简单单而而直直接接,不不能能为为了了提提高高效效率率而而使使程程序序变变得得过过分分复复杂杂。下下述述规规则则有有助助于于使使语语句句简单明了:简单明了:不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行;尽量避免复杂的条件测试;尽量避免复杂的条件测试;尽量减少对尽量减少对“非非”条

15、件的测试;条件的测试;避免大量使用循环嵌套和条件嵌套;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次序清晰直观。利用括号使逻辑表达式或算术表达式的运算次序清晰直观。4.正确的输入正确的输入/输出风格输出风格 在在设设计计和和编编写写程程序序时时应应该该考考虑虑下下述述有有关关输输入入/输输出出风风格格的的规则:规则:对所有输入数据都进行检验;检查输入项重要组合的合法性;检查输入项重要组合的合法性;保持输入格式简单;使用数据结束标记,不要求用户指定数据的数目;使用数据结束标记,不要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边界数值;当程序设计语

16、言对格式有严格要求时,应保持输入格式一致;设计良好的输出报表;设计良好的输出报表;给所有输出数据加标志。给所有输出数据加标志。5.不要盲目追求高效率不要盲目追求高效率 效率主要指处理机时间和存储器容量两个方面。虽效率主要指处理机时间和存储器容量两个方面。虽然值得提出提高效率的要求,但是在进一步讨论这个问然值得提出提高效率的要求,但是在进一步讨论这个问题之前应该记住三条原则:首先,效率是性能要求,因题之前应该记住三条原则:首先,效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。软件应该此应该在需求分析阶段确定效率方面的要求。软件应该像对它要求的那样有效,而不应该如同人类可能做到的像对它要

17、求的那样有效,而不应该如同人类可能做到的那样有效。其次,效率是靠好设计来提高的。第三,程那样有效。其次,效率是靠好设计来提高的。第三,程序的效率和程序的简单程度是一致的。不要牺牲程序的序的效率和程序的简单程度是一致的。不要牺牲程序的清晰性和可读性来不必要地提高效率。清晰性和可读性来不必要地提高效率。4.2 软件测试概述软件测试概述测试阶段的目标测试阶段的目标测试的基本原则测试的基本原则测试的基本步骤测试的基本步骤静态分析与动态测试静态分析与动态测试软件测试的目标软件测试的目标 什么是测试?它的目标是什么?什么是测试?它的目标是什么?G.Myers给出了关于测试给出了关于测试的一些规则,这些规则

18、也可以看作是测试的目标或定义:的一些规则,这些规则也可以看作是测试的目标或定义:(1)测试是为了发现程序中的错误而执行程序的过程;)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。)成功的测试是发现了至今为止尚未发现的错误的测试。完全测试是不可能的完全测试是不可能的软件测试时有风险的活动软件测试时有风险的活动测试无法显示潜伏的软件缺陷和故障测试无法显示潜伏的软件缺陷和故障充分注意测试中的群集现象充分注意测试中的群集现象杀虫

19、剂现象杀虫剂现象并非所有的软件缺陷都要修复并非所有的软件缺陷都要修复软件测试必须有预期结果软件测试必须有预期结果尽早地、不断地进行软件测试尽早地、不断地进行软件测试程序员应该避免检查自己的程序程序员应该避免检查自己的程序测试的基本原则测试的基本原则软件测试的基本步骤单元测试集成测试确认测试系统测试验收测试静态分析与动态测试静态方法l桌前检查l代码会审l步行检查调用图数据流分析图4.2.3 两类测试方法两类测试方法 怎样对程序进行测试呢?测试任何产品都有两种方怎样对程序进行测试呢?测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测法:如果已经知道了产品应该具有的功能,可以通过

20、测试来检验是否每个功能都能正常使用;如果知道产品内试来检验是否每个功能都能正常使用;如果知道产品内部预定的工作过程,可以通过测试来检验产品内部动作部预定的工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一个方法称为是否按照规格说明书的规定正常进行。前一个方法称为黑盒测试,后一个方法称为白盒测试。黑盒测试,后一个方法称为白盒测试。对于软件测试而言,黑盒测试法把程序看成一个黑对于软件测试而言,黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序说,黑盒测

21、试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如,数据库或文件)的完整性。黑盒测试又外部信息(如,数据库或文件)的完整性。黑盒测试又称为功能测试。与黑盒测试法相反,白盒测试法的前提称为功能测试。与黑盒测试法相反,白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部全了解程序的结构和处理过程。这种方

22、法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。白盒测试又称为结构测试。定要求正确工作。白盒测试又称为结构测试。粗看起来,不论采用上述哪种测试方法,只要对粗看起来,不论采用上述哪种测试方法,只要对每一种可能的情况都进行测试,就可以得到完全正确每一种可能的情况都进行测试,就可以得到完全正确的程序。包含所有可能情况的测试称为穷尽测试,对的程序。包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。于实际程序而言,穷尽测试通常是不可能做到的。因为不可能进行穷尽测试,所以软件测试不可能因为不可能进

23、行穷尽测试,所以软件测试不可能发现程序中的所有错误,也就是说,通过测试并不能发现程序中的所有错误,也就是说,通过测试并不能证明程序是正确的。但是,我们的目的是要通过测试证明程序是正确的。但是,我们的目的是要通过测试保证软件的可靠性,因此,必须仔细设计测试方案,保证软件的可靠性,因此,必须仔细设计测试方案,力争用尽可能少的测试发现尽可能多的错误。力争用尽可能少的测试发现尽可能多的错误。4.2.4 软件测试准则软件测试准则 为为了了能能够够设设计计出出有有效效的的测测试试方方案案,软软件件工工程程师师必必须须充充分分理理解解并并正正确确运运用用指指导导软软件件测测试试工工作作的的基基本本准准则则。

24、下下面面叙叙述述主主要的测试准则:要的测试准则:所所有有测测试试都都应应该该能能够够追追溯溯到到用用户户需需求求。正正如如前前面面讲讲过过的的,软软件件测测试试的的目目标标是是发发现现程程序序中中的的错错误误。从从用用户户角角度度看看,最最严严重重的的错错误误是是程程序序不不能能满满足足用用户户需需求求的的那那些些错错误误,因因此此应应该围绕用户的需求来测试程序。该围绕用户的需求来测试程序。应应该该在在开开始始测测试试之之前前预预先先制制定定出出测测试试计计划划。一一旦旦完完成成了了需需求求分分析析就就可可以以着着手手制制定定测测试试计计划划,在在确确定定了了设设计计模模型型之之后后就就可可以

25、以立立即即开开始始设设计计详详细细的的测测试试方方案案。因因此此,在在编编码码之之前前就可以对所有测试工作进行计划和设计。就可以对所有测试工作进行计划和设计。在软件测试过程中应该应用在软件测试过程中应该应用Pareto原理。原理。Pareto原理告诉原理告诉我们,测试所发现的错误中的我们,测试所发现的错误中的80%很可能是由程序中很可能是由程序中20%的模块造成的。因此,应该尽量找出这些可疑的模块并彻的模块造成的。因此,应该尽量找出这些可疑的模块并彻底地测试它们。底地测试它们。应该从应该从“小规模小规模”测试开始,逐步过渡到测试开始,逐步过渡到“大规模大规模”测试。测试。通常,首先测试单个程序

26、模块,进一步的测试重点随后转通常,首先测试单个程序模块,进一步的测试重点随后转向在集成的模块簇中寻找错误,最后对整个软件系统进行向在集成的模块簇中寻找错误,最后对整个软件系统进行测试。测试。穷举测试是不可能的。在上一小节已经举例说明了这穷举测试是不可能的。在上一小节已经举例说明了这个事实,此处不再赘述。这个事实表明,测试只能证明个事实,此处不再赘述。这个事实表明,测试只能证明程序中有错误,不能证明程序中没有错误。但是,精心程序中有错误,不能证明程序中没有错误。但是,精心设计测试方案,有可能充分覆盖程序逻辑并发现大部分设计测试方案,有可能充分覆盖程序逻辑并发现大部分程序错误。程序错误。为了达到最

27、佳的测试效果,应该由独立的第三方来从为了达到最佳的测试效果,应该由独立的第三方来从事测试工作。所谓事测试工作。所谓“最佳测试效果最佳测试效果”是指用尽可能少的是指用尽可能少的测试方案发现了尽可能多的程序错误。由于在测试方案发现了尽可能多的程序错误。由于在4.2.2小节小节中已经讲过的原因,创建软件系统的软件工程师并不是中已经讲过的原因,创建软件系统的软件工程师并不是完成全部测试工作的最佳人选(他们通常主要承担模块完成全部测试工作的最佳人选(他们通常主要承担模块测试工作)。测试工作)。4.3 白盒测试技术白盒测试技术 白白盒盒测测试试方方法法是是按按照照程程序序内内部部预预期期应应有有的的逻逻辑

28、辑测测试试程程序序,检检验验程程序序中中的的每每条条执执行行通通路路是是否否都都能能按按预预定定要要求求正确工作。正确工作。设设计计测测试试方方案案是是测测试试阶阶段段的的关关键键技技术术问问题题。所所谓谓测测试试方方案案包包括括下下述述三三方方面面内内容容:具具体体的的测测试试目目的的(例例如如,要要测测试试的的具具体体功功能能),应应该该输输入入的的测测试试数数据据和和预预期期的的输输出出结结果果。通通常常又又把把测测试试数数据据和和预预期期的的输输出出结结果果称称为为测测试试用例。用例。不不同同的的测测试试数数据据发发现现程程序序错错误误的的能能力力差差别别很很大大,为为了了提提高高测测

29、试试效效率率降降低低测测试试成成本本,应应该该选选用用高高效效的的测测试试数数据据。因因为为不不可可能能进进行行穷穷尽尽的的测测试试,选选用用少少量量“最最有有效效的的”测试数据,做到尽可能完备的测试就更重要了。测试数据,做到尽可能完备的测试就更重要了。4.3.1 逻辑覆盖逻辑覆盖 逻逻辑辑覆覆盖盖是是设设计计白白盒盒测测试试方方案案的的一一种种常常用用技技术术。通通常常不不可可能能进进行行穷穷尽尽的的测测试试,因因此此,有有选选择择地地执执行行程程序序中中某某些些最最有有代代表表性性的的通通路路,是是用用白白盒盒方方法法测测试试程程序序时时对对穷穷尽尽测测试试惟惟一一可可行行的的替替代代办办

30、法法。所所谓谓逻逻辑辑覆覆盖盖,是是对对一一系系列列测测试试过过程程的的总总称称,这这组组测测试试过过程程逐逐渐渐进进行行越越来来越越完完整整的的通通路路测测试试。测测试试数数据据执执行行(或或称称为为覆覆盖盖)程程序序逻逻辑辑的的程程度度可可以以划划分分成成哪哪些些不不同同的的等等级级呢呢?从从覆覆盖盖源源程程序序语语句句的详尽程度分析,大致有以下一些不同的覆盖标准。的详尽程度分析,大致有以下一些不同的覆盖标准。1.语句覆盖语句覆盖 为为了了暴暴露露程程序序中中的的错错误误,至至少少每每个个语语句句应应该该执执行行一一次次。语语句句覆覆盖盖的的含含义义是是,选选择择足足够够多多的的测测试试数

31、数据据,使被测程序中每个语句至少执行一次。使被测程序中每个语句至少执行一次。例如,图例如,图4.2是一个被测模块是一个被测模块的流程图,它的源程序(用的流程图,它的源程序(用PASCAL语言书写)应该如下:语言书写)应该如下:图4.2被测试模块的流程图PROCEDURE EXAMPLE(A,B:REAL;VAR X:REAL););BEGINIF(A1)AND(B0)THEN X:XA;IF(A2)OR(X1)THEN X:X1END;为了使每个语句都执行一次,程序的执行路径应该是为了使每个语句都执行一次,程序的执行路径应该是sacbed,为此只需要输入下面的测试数据(实际上,为此只需要输入下

32、面的测试数据(实际上X可以可以是任意实数):是任意实数):A2,B0,X42.判定覆盖判定覆盖 判判定定覆覆盖盖又又叫叫分分支支覆覆盖盖,它它的的含含义义是是,不不仅仅每每个个语语句句必必须须至至少少执执行行一一次次,而而且且每每个个判判定定的的每每种种可可能能的的结结果果都都应应该该至至少少执执行行一一次次,也也就就是是每每个个判判定定的的每每个个分分支支都都至至少少执行一次。执行一次。对对于于上上述述例例子子来来说说,能能够够分分别别覆覆盖盖路路径径sacbed和和sabd的的两两组组测测试试数数据据,或或者者可可以以分分别别覆覆盖盖路路径径sacbd和和sabed的的两两组组测测试试数数

33、据据,都都满满足足判判定定覆覆盖盖标标准准。例例如如,用下面两组测试数据就可做到判定覆盖:用下面两组测试数据就可做到判定覆盖:.A3,B0,X3(覆盖(覆盖sacbd).A2,B1,X1(覆盖(覆盖sabed)判判定定覆覆盖盖比比语语句句覆覆盖盖强强,但但是是对对程程序序逻逻辑辑的的覆覆盖盖程程度度仍仍然然不不高高,例例如如,上上面面的的测测试试数数据据只只覆覆盖盖了了程程序序全全部部路路径的一半。径的一半。3.条件覆盖条件覆盖 条条件件覆覆盖盖的的含含义义是是,不不仅仅每每个个语语句句至至少少执执行行一一次次,而而且使判定表达式中的每个条件都取到各种可能的结果。且使判定表达式中的每个条件都取

34、到各种可能的结果。图图4.2的的例例子子中中共共有有两两个个判判定定表表达达式式,每每个个表表达达式式中中有有两两个个条条件件,为为了了做做到到条条件件覆覆盖盖,应应该该选选取取测测试试数数据据使使得得在在a点有下述各种结果出现:点有下述各种结果出现:A1,A1,B0,B0 在在b点有下述各种结果出现:点有下述各种结果出现:A2,A2,X1,X1只需要使用下面两组测试数据就可以达到上述覆盖标准:只需要使用下面两组测试数据就可以达到上述覆盖标准:.A2,B0,X4(满足(满足A1,B0,A2和和X1的条件,执行路径的条件,执行路径sacbed).A1,B1,X1(满足(满足A1,B0,A2和和X

35、1的条件,执行路径的条件,执行路径sabd)条件覆盖通常比判定覆盖强,因为它使判定表达式中条件覆盖通常比判定覆盖强,因为它使判定表达式中每个条件都取到了两个不同的结果,判定覆盖却只关心整每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。例如,上面两组测试数据也同时满足个判定表达式的值。例如,上面两组测试数据也同时满足判定覆盖标准。但是,也可能有相反的情况:虽然每个条判定覆盖标准。但是,也可能有相反的情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个件都取到了两个不同的结果,判定表达式却始终只取一个值。例如,如果使用下面两组测试数据,则只满足条件覆值。例如,如果

36、使用下面两组测试数据,则只满足条件覆盖标准并不满足判定覆盖标准(第二个判定表达式的值总盖标准并不满足判定覆盖标准(第二个判定表达式的值总为真):为真):.A2,B0,X1(满足(满足A1,B0,A2和和X1的条件,执行路径的条件,执行路径sacbed).A1,B1,X2(满足(满足A1,B0,A2和和X1的条件,执行路径的条件,执行路径sabed)4.判定判定/条件覆盖条件覆盖 既既然然判判定定覆覆盖盖不不一一定定包包含含条条件件覆覆盖盖,条条件件覆覆盖盖也也不不一一定定包包含含判判定定覆覆盖盖,自自然然会会提提出出一一种种能能同同时时满满足足这这两两种种覆覆盖盖标标准准的的逻逻辑辑覆覆盖盖,

37、这这就就是是判判定定/条条件件覆覆盖盖。它它的的含含义义是是,选选取取足足够够多多的的测测试试数数据据,使使得得判判定定表表达达式式中中的的每每个个条条件件都都取取到到各各种种可可能能的的值值,而而且且每每个个判判定定表表达达式式也也都都取取到到各各种种可可能能的结果。的结果。对对于于图图4.2的的例例子子而而言言,下下述述两两组组测测试试数数据据满满足足判判定定/条条件覆盖标准:件覆盖标准:.A2,B0,X4.A1,B1,X1 但但是是,这这两两组组测测试试数数据据也也就就是是为为了了满满足足条条件件覆覆盖盖标标准准最最初初选选取取的的两两组组数数据据,因因此此,有有时时判判定定/条条件件覆

38、覆盖盖也也并并不不比比条件覆盖更强。条件覆盖更强。5.条件组合覆盖条件组合覆盖 条条件件组组合合覆覆盖盖是是更更强强的的逻逻辑辑覆覆盖盖标标准准,它它要要求求选选取取足足够够多多的的测测试试数数据据,使使得得每每个个判判定定表表达达式式中中条条件件的的各各种种可可能能组组合合都都至至少少出出现现一一次次。对对于于图图4.2的的例例子子,共共有有八八种种可可能能的的条条件件组组合合,它们是:它们是:(1)A1,B0(2)A1,B0(3)A1,B0(4)A1,B0(5)A2,X1(6)A2,X1(7)A2,X1(8)A2,X1 和和其其他他逻逻辑辑覆覆盖盖标标准准中中的的测测试试数数据据一一样样,

39、条条件件组组合合(5)(8)中中的的X值是指在程序流程图第二个判定框(值是指在程序流程图第二个判定框(b点)的点)的X值。值。下面的四组测试数据可以使上面列出的八种条件组合每下面的四组测试数据可以使上面列出的八种条件组合每种至少出现一次:种至少出现一次:.A2,B0,X4(针对(针对1,5两种组合,执行路径两种组合,执行路径sacbed).A2,B1,X1(针对(针对2,6两种组合,执行路径两种组合,执行路径sabed).A1,B0,X2(针对(针对3,7两种组合,执行路径两种组合,执行路径sabed).A1,B1,X1(针对(针对4,8两种组合,执行路径两种组合,执行路径Sabd)显显然然,

40、满满足足条条件件组组合合覆覆盖盖标标准准的的测测试试数数据据,也也一一定定满满足足判判定定覆覆盖盖、条条件件覆覆盖盖和和判判定定/条条件件覆覆盖盖标标准准。因因此此,条条件件组组合合覆覆盖盖是是前前述述几几种种覆覆盖盖标标准准中中最最强强的的。但但是是,满满足足条条件件组组合合覆覆盖盖标标准准的的测测试试数数据据并并不不一一定定能能使使程程序序中中的的每每条条路路径径都都执执行行到到,例例如如,上上述述四四组组测测试试数数据据都都没没有有测测试试到到路路径径sacbd。4.3.2 控制结构测试控制结构测试 另外一类重要的白盒测试技术,是根据程序的控制另外一类重要的白盒测试技术,是根据程序的控制

41、结构设计测试用例的技术,本节讲述其中一些常用的技结构设计测试用例的技术,本节讲述其中一些常用的技术。术。1.流图流图 按照程序的控制结构设计测试用例时,往往需要仔按照程序的控制结构设计测试用例时,往往需要仔细分析程序的控制流。为了突出表现程序的控制流,可细分析程序的控制流。为了突出表现程序的控制流,可以使用流图(也称为程序图)。流图仅仅描绘程序的控以使用流图(也称为程序图)。流图仅仅描绘程序的控制流程,它完全不表现对数据的具体操作以及分支或循制流程,它完全不表现对数据的具体操作以及分支或循环的具体条件。环的具体条件。在流图中用圆表示节点,一个圆代表一条或多条语在流图中用圆表示节点,一个圆代表一

42、条或多条语句。程序流程图中一个顺序执行的处理框序列和一个菱句。程序流程图中一个顺序执行的处理框序列和一个菱形判定框,可以映射成流图中的一个节点。流图中的箭形判定框,可以映射成流图中的一个节点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个节点,即使这个制流。在流图中一条边必须终止于一个节点,即使这个节点并不代表任何语句(实际上相当于一个空语句)。节点并不代表任何语句(实际上相当于一个空语句)。由边和节点围成的面积称为区域,当计算区域数时应该由边和节点围成的面积称为区域,当计算区域数时应该包括图外部未被

43、围起来的那个区域。包括图外部未被围起来的那个区域。图图4 4.3 3举举例例说说明明把把程程序序流流程程图图映映射射成成流流图图的的方方法法。图4.3把程序流程图映射成流图(a)程序流程图;(b)流图 事事实实上上,用用任任何何方方式式表表示示的的过过程程设设计计结结果果,都都可可以以翻翻译译成成流流图图。下下面面讲讲述述基基本本路路径径测测试试方方法法时时,将将把把用用PDL描述的一个处理过程转换成流图。描述的一个处理过程转换成流图。当当过过程程设设计计结结果果中中包包含含复复合合条条件件时时,翻翻译译成成流流图图的的方方法法稍稍微微复复杂杂一一些些。所所谓谓复复合合条条件件,就就是是在在判

44、判定定条条件件中中包包含含了了一一个个或或多多个个布布尔尔运运算算符符(逻逻辑辑OR,AND,NAND,NOR)。在在这这种种情情况况下下,应应该该把把复复合合条条件件分分解解为为若若干干个个简简单单条条件件,每每个个简简单单条条件件对对应应流流图图中中的的一一个个节节点点。通通常常把把包包含含条条件件的的节节点点称称为为判判定定节节点点,从从每个判定节点引出两条或多条边。每个判定节点引出两条或多条边。图图4.4是由包含复合是由包含复合条件的条件的PDL片断翻译成片断翻译成的流图,注意,与复合的流图,注意,与复合条件条件“a OR b”对应的节对应的节点有两个,这两个节点点有两个,这两个节点分

45、别标记为分别标记为“a”和和“b”。图4.4由包含复合条件的PDL映射成的流图 基基本本路路径径测测试试是是一一种种常常用用的的白白盒盒测测试试技技术术。使使用用这这种种技技术术设设计计测测试试用用例例时时,首首先先计计算算被被测测过过程程的的逻逻辑辑复复杂杂度度,并并依依据据算算出出的的复复杂杂度度定定义义执执行行路路径径的的基基本本集集合合,从从该该基基本本集集合合导导出出的的测测试试用用例例可可以以保保证证程程序序中中的的每每条条语语句句至至少少被被执执行行一一次次,而而且且每每个个判判定定条条件件在在执执行行时时都都分分别别取取true(真)和(真)和false(假)两个值。(假)两个

46、值。使用基本路径测试技术设计测试用例的步骤如下:使用基本路径测试技术设计测试用例的步骤如下:第第1步步 依据过程设计的结果画出相应的流图。依据过程设计的结果画出相应的流图。2.基本路径测试基本路径测试 例如,为了测试下列例如,为了测试下列的用的用PDL描述的求平均值描述的求平均值的过程,首先画出图的过程,首先画出图4.5所所示的流图。注意,为了正示的流图。注意,为了正确地画出流图,我们把被确地画出流图,我们把被映射为流图节点的映射为流图节点的PDL语语句编了号。句编了号。图4.5求平均值过程的流图第第2步步 计算流图的环形复杂度。计算流图的环形复杂度。环环形形复复杂杂度度定定量量度度量量程程序

47、序逻逻辑辑的的复复杂杂程程度度。画画出出描描绘绘程程序序控控制制流流的的流流图图之之后后,可可以以使使用用下下述述三三种种方方法法中中的任一种来计算环形复杂度。的任一种来计算环形复杂度。(1)流图中的区域数等于环形复杂度。)流图中的区域数等于环形复杂度。(2)流图)流图G的环形复杂度的环形复杂度V(G)由下式计算:)由下式计算:V(G)EN2 其中,其中,E是流图中边的条数,是流图中边的条数,N是流图中节点数。是流图中节点数。(3)流图)流图G的环形复杂度的环形复杂度V(G)也可由下式计算:)也可由下式计算:V(G)P1 其中,其中,P是流图中判定节点的数目。是流图中判定节点的数目。例例如如,

48、使使用用上上述述任任何何一一种种方方法法,都都可可以以计计算算出出图图4.5所示流图的环形复杂度为所示流图的环形复杂度为6。第第3步步 确定线性独立路径的基本集合。确定线性独立路径的基本集合。所所谓谓线线性性独独立立路路径径是是指指这这样样的的路路径径,该该路路径径至至少少引引入入了了程程序序的的一一个个新新处处理理语语句句集集合合或或一一个个新新条条件件,用用流流图图术术语语描描述述,独独立立路路径径中中至至少少包包含含一一条条在在定定义义该该路路径径之之前前不曾用过的边。不曾用过的边。使使用用基基本本路路径径测测试试法法设设计计测测试试用用例例时时,程程序序的的环环形形复复杂杂度度决决定定

49、了了程程序序中中独独立立路路径径的的数数量量,而而且且这这个个数数是是确确保保程程序序中中所所有有语语句句至至少少被被执执行行一一次次所所需需要要的的测测试试数数量量的的上限。上限。第第4步步 设计出可强制执行基本集合中每条路径的测试用设计出可强制执行基本集合中每条路径的测试用例。例。应该选取测试数据,使得在测试每条路径时都适当地应该选取测试数据,使得在测试每条路径时都适当地设置好了各个判定节点的条件。设置好了各个判定节点的条件。在在测测试试过过程程中中,执执行行每每个个测测试试用用例例并并把把程程序序实实际际输输出出的的结结果果与与预预期期结结果果相相比比较较。一一旦旦执执行行完完全全部部测

50、测试试用用例例,就就可可以以确确保保程程序序中中所所有有语语句句都都至至少少被被执执行行了了一一次次,而而且且每每个个判定条件都分别取过判定条件都分别取过true值和值和false值。值。应应该该注注意意,某某些些独独立立路路径径(例例如如,本本例例中中的的路路径径1和和路路径径3)不不能能以以独独立立的的方方式式测测试试,也也就就是是说说,程程序序的的正正常常流流程程不不能能形形成成独独立立执执行行该该路路径径所所需需要要的的数数据据组组合合(例例如如,为为了了执执行行本本例例中中的的路路径径1,需需要要满满足足条条件件total.valid0,然然而而独独立立执执行行路路径径1无无法法满满

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服