利用网站源代码建立网站,深圳网站建设哪个平台好,龙岩网络三剑客,wordpress手机版怎么做一、白盒测试 根据软件产品的内部工作过程#xff0c;在计算机上进行测试#xff0c;以证实每种内部操作是否符合设计规格要求#xff0c;所有内部成分是否已经过检查。这种测试方法就是白盒测试。白盒测试把测试对象看做一个打开的盒子#xff0c;允许测试人员利用程序内部…一、白盒测试 根据软件产品的内部工作过程在计算机上进行测试以证实每种内部操作是否符合设计规格要求所有内部成分是否已经过检查。这种测试方法就是白盒测试。白盒测试把测试对象看做一个打开的盒子允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例对程序所有逻辑路径进行测试。通过在不同点检查程序的状态确定实际的状态是否与预期的状态一致。 不论是黑盒测试还是白盒测试都不可能把所有可能的输入数据都拿来进行所谓的穷举测试。因为可能的测试输入数据数目往往达到天文数字。下面让我们看两个例子。 假设一个程序P有输入X和Y及输出Z参看图10-4-1。在字长为32位的计算机上运行。如果X 、Y只取整数考虑把所有的X 、Y值都做为测试数据按黑盒测试方法进行穷举测试力图全面、无遗漏地“挖掘”出程序中的所有错误。这样做可能采用的测试数据组XiYi的最大可能数目为 。如果程序P测试一组X、Y数据需要 1毫秒且一天工作24小时一年工作365天要完成264组测试需要5亿年。 图 10-4-1 黑盒子 而对一个具有多重选择和循环嵌套的程序不同的路径数目也可能是天文数字。设给出一个如图 10-4-2所示的小程序的流程图其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达 条若要对它进行穷举测试覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒同样假定一天工作24小时一年工作365 天那么要想把如图 10-4-2所示的小程序的所有路径测试完则需要3170年。 图 10-4-2 白盒测试中的穷举测试 以上的分析表明实行穷举测试由于工作量过大实施起来是不现实的。任何软件开发项目都要受到期限、费用、人力和机时等条件的限制尽管为了充分揭露程序中所有隐藏错误需要针对所有可能的数据进行测试但事实告诉我们这样做是不可能的。 软件工程的总目标是充分利用有限的人力、物力资源高效率、高质量、低成本地完成软件开发项目。在测试阶段既然穷举测试不可行为了节省时间和资源提高测试效率就必须要从数量极大的可用测试用例中精心地挑选少量的测试数据使得采用这些测试数据能够达到最佳的测试效果能够高效率地把隐藏的错误揭露出来。 常见的测试用例方法有逻辑覆盖属于白盒测试 等价类划分边界值分析因果图等属于黑盒测试。 二、逻辑覆盖 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。属白盒测试。这一方法要求测试人员对程序的逻辑结构有清楚的了解甚至要能掌握源程序的所有细节。由于覆盖测试的目标不同逻辑覆盖又可分为语句覆盖、判定覆盖、判定条件覆盖、条件组合覆盖及路径覆盖。 1.语句覆盖 语句覆盖就是设计若干个测试用例运行被测程序使得每一可执行语句至少执行一次。这种覆盖又称为点覆盖它使得程序中每个可执行语句都得到执行但它是最弱的逻辑覆盖准效果有限必须与其他方法交互使用。 2.判定覆盖 判定覆盖就是设计若干个测试用例运行被测程序使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。 判定覆盖只比语句覆盖稍强一些但实际效果表明只是判定覆盖还不能保证一定能查出在判断的条件中存在的错误。因此还需要更强的逻辑覆盖准则去检验判断内部条件。 3.条件覆盖 条件覆盖就是设计若干个测试用例运行被测程序使得程序中每个判断的每个条件的可能取值至少执行一次。 条件覆盖深入到判定中的每个条件但可能不能满足判定覆盖的要求。 4.判定条件覆盖 判定条件覆盖就是设计足够的测试用例使得判断中每个条件的所有可能取值至少执行一次同时每个判断本身的所有可能判断结果至少执行一次。换言之即是要求各个判断的所有可能的条件取值组合至少执行一次。 判定条件覆盖有缺陷。从表面上来看它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值需要将判定语句中给出的复合条件表达式进行分解形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。 图 10-4-3a 复合判定的例子 图 10-4-3b 改为单个条件判定的嵌套结构的例子 5.多重条件覆盖 多重条件覆盖就是设计足够的测试用例运行被测程序使得每个判断的所有可能的条件取值组合至少执行一次。 这是一种相当强的覆盖准则可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合还可覆盖所有判断的可取分支但可能有的路径会遗漏掉。测试还不完全。 6.路径测试 路径测试就是设计足够的测试用例覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时真正做到完全覆盖是很困难的必须把覆盖路径数目压缩到一定限度。下面我们做一分析。 三、关于控制结构测试的一些讨论 1.分支结构的路径数 当程序中判定多于一个时形成的分支结构可以分为两类嵌套型分支结构和连锁型分支结构。如图 10-4-4所示。对于嵌套型分支结构若有n个判定语句则需要n1个测试用例但对连锁型分支结构若有n个判定语句则需要有 个测试用例去覆盖它的 条路径。当n较大时将无法测试。 a嵌套型分支结构 b连锁型分支结构 图 10-4-4 分支的两种类型 为减少测试用例的数目可采用试验设计法抽取部分路径进行测试。由于抽样服从均匀分布因此在假定各条路径的重要性相同或暂不明确各条路径的重要性的情况下可以做到均匀抽样。如果明确了各条路径的重要性还可以采取加权的办法筛选掉部分路径再用如下的措施进行抽样。具体步骤如下 1 设耦合型分支结构中有n个判定计算满足关系式 的最小自然数m 2 设 取正交表L4并利用它设计测试数据。 例如一个耦合型分支结构中有三个判定语句P1P2P3。它全部路径是238条。先计算 的t得t 4。取正交表L4如图10-4-5a所示把每一列当做一个判定每一行当做可取的测试用例则正交表L4最多可取三个判定分别代之以P1P2P3。判定P1P2P3的取假分支和取真分支分别记作S1、S2S3、S4S5、S6用各个判定的取假分支取代正交表L4中的“0”用取真分支取代正交表中的“1”就建立起一个测试路径矩阵如图 10-4-5b所示。这样测试路径数目从 条减少到314条。 图 10-4-5a 正交表L4 图 10-4-5b 路径抽样矩阵 2.条件测试的策略 程序中的条件分为简单条件和复合条件。简单条件是一个布尔变量或一个关系表达式可加前缀NOT复合条件由简单条件通过逻辑运算符AND、OR、NOT和括号连接而成。如果条件出错至少是条件中某一成分有错。条件中可能的出错类型有布尔运算符错、布尔变量错、布尔括号错、关系运算符错、算术表达式错。 如果在一个判定的复合条件表达式中每个布尔变量和关系运算符最多只出现一次而且没有公共变量应用一种称之为BRO分支与关系运算符的测试法可以发现多个布尔运算符或关系运算符错以及其他错误。 BRO策略引入条件约束的概念。设有n个简单条件的复合条件C其条件约束为 其中 是条件C中第i个简单条件的输出约束。如果在C的执行过程中其每个简单条件的输出都满足D中对应的约束则称条件C的条件约束D由C的执行所覆盖。特别地布尔变量或布尔表达式的输出约束必须是真t或假f关系表达式的输出约束为符号、、。 1 设条件为 。其中 是布尔变量 的输出约束为 在此 和 或为t或为f。则 是 可能的一个约束。覆盖此约束的测试一次运行将令 为t 为f。BRO策略要求对 的可能约束集合 中的每一个分别设计一组测试用例。如果布尔运算符有错这三组测试用例的运行结果必有一组导致 失败。 2 设条件为 。其中 是布尔表达式 和 是算术表达式 的输出约束为 在此 或为t或为f 则是、 或。因此只有 与 中 的不同可以修改 的约束集合 导出 的约束集合。因为在 中“t”相当于“”“f”相当于“”或“”则 的约束集合为 。据此设计4组测试用例检查 中可能的布尔或关系运算符中的错误。 3 设条件为 。其中 都是算术表达式 的输出约束为 在此 和 的约束均为、、。 中只有 与 中的 不同可以修改 的约束集合 导出 的约束集合。因为在 中“t” 相当于“”f相当于“”或“”则 的约束集合为 。根据这个约束集合设计测试用例就能够检测 中的关系运算符中的错误。 3.循环测试 循环分为4种不同类型简单循环、连锁循环、嵌套循环和非结构循环见图 10-4-6。 对于简单循环测试应包括以下几种其中的n表示循环允许的最大次数。 1 零次循环从循环入口直接跳到循环出口。 2 一次循环查找循环初始值方面的错误。 3 二次循环检查在多次循环时才能暴露的错误。 4 m次循环此时的mn也是检查在多次循环时才能暴露的错误。 ·最大次数循环、比最大次数多一次的循环、比最大次数少一次的循环。 对于嵌套循环不能将简单循环的测试方法简单地扩大到嵌套循环因为可能的测试数目将随嵌套层次的增加呈几何倍数增长。这可能导致一个天文数字的测试数目。下面给出一种有助于减少测试数目的测试方法。 ·除最内层循环外从最内层循环开始置所有其他层的循环为最小值 ·对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外对越界值和非法值做类似的测试。 ·逐步外推对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值所有其它嵌套内层循环的循环变量取“典型”值。 ·反复进行直到所有各层循环测试完毕。 对全部各层循环同时取最小循环次数或者同时取最大循环次数。对于后一种测试由于测试量太大需人为指定最大循环次数。 对于连锁循环要区别两种情况。如果各个循环互相独立则连锁循环可以用与简单循环相同的方法进行测试。例如有两个循环处于连锁状态则前一个循环的循环变量的值就可以做为后一个循环的初值。但如果几个循环不是互相独立的则需要使用测试嵌套循环的办法来处理。 对于非结构循环应该使用结构化程序设计方法重新设计测试用例。 四、基本路径测试 如果把覆盖的路径数压缩到一定限度内例如程序中的循环体只执行零次和一次就成为基本路径测试。它是在程序控制流图的基础上通过分析控制构造的环路复杂性导出基本可执行路径集合从而设计测试用例的方法。 设计出的测试用例要保证在测试中程序的每一个可执行语句至少要执行一次。 1.程序的控制流图 控制流图是描述程序控制流的一种图示方法。基本控制构造的图形符号如图10-4-7所示。符号○称为控制流图的一个结点一组顺序处理框可以映射为一个单一的结点。控制流图中的箭头称为边它表示了控制流的方向在选择或多分支结构中分支的汇聚处即使没有执行语句也应该有一个汇聚结点。边和结点圈定的区域叫做区域当对区域计数时图形外的区域也应记为一个区域。 图 10-4-7 控制流图的各种图形符号 如果判定中的条件表达式是复合条件时即条件表达式是由一个或多个逻辑运算符ORANDNANDNOR连接的逻辑表达式则需要改复合条件的判定为一系列只有单个条件的嵌套的判定。例如对应图 10-4-8a的复合条件的判定应该画成如图 10-4-8b所示的控制流图。条件语句ifaORb中条件a和条件b各有一个只有单个条件的判定结点。 2.计算程序环路复杂性 进行程序的基本路径测试时程序的环路复杂性给出了程序基本路径集合中的独立路径条数这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。所谓独立路径是指包括一组以前没有处理的语句或条件的一条路径。如在图10-4-9b所示的控制流图中一组独立的路径是 path11-11 path21-2-3-4-5-10-1-11 path31-2-3-6-8-9-10-1-11 path41-2-3-6-7-9-10-1-11 路径path1path2path3path4组成了图 10-4-9b所示控制流图的一个基本路径集。只要设计出的测试用例能够确保这些基本路径的执行就可以使得程序中的每个可执行语句至少执行一次每个条件的取真和取假分支也能得到测试。基本路径集不是唯一的对于给定的控制流图可以得到不同的基本路径集。 a程序流程图 b控制流图 图 10-4-9 程序流程图与对应的控制流图 通常环路复杂性可用以下3种方法求得。 1 将环路复杂性定义为控制流图中的区域数。 2 设E为控制流图的边数N为图的结点数则定义环路复杂性为VGEN2。 3 若设P为控制流图中的判定结点数则有VGP1。 因为图 10-4-9b所示控制流图有4个区域。其环路复杂性为4。它是构成基本路径集的独立路径数的上界。可以据此得到应该设计的测试用例的数目。 3.导出测试用例 利用逻辑覆盖方法生成测试用例确保基本路径集中每条路径的执行。 参考资料: 1 白盒测试用例设计方法 http://www.51testing.com/html/72/n-226472-2.html 2 《实用软件工程》 8.3 白盒测试的测试用例设计 3 软件单元测试工具比较 http://blog.csdn.net/ajian005/article/details/6588314 转载http://m.blog.csdn.net/article/details?id31005607转载于:https://www.cnblogs.com/WuXuanKun/p/6195110.html