第六章程序的测试

上传人:m**** 文档编号:241814517 上传时间:2024-07-26 格式:PPT 页数:31 大小:230.51KB
返回 下载 相关 举报
第六章程序的测试_第1页
第1页 / 共31页
第六章程序的测试_第2页
第2页 / 共31页
第六章程序的测试_第3页
第3页 / 共31页
点击查看更多>>
资源描述
第六章、程序的测试 程序设计强调的是过程的实现。如何评价一个程序,首要的是看这个程序能否得出正确的结果。在保证正确性的前提下,看它执行程序的计算工作量(时间效率)和所占用的内存(空间效率)。在联赛的评分测试中,评分者一般采用的是黑箱测试,即不看你的程序编得如何,而是看你的程序是否完成了试题给出的任务。评分者不仅在编程者最有可能失误的环节上设置了测试数据,以考核程序的正确性,而且对编程者可能采用的各种算法也作了效率分析,通过设定时间槛值来判定算法的优劣。由此可见,选手测试程序和优化效率的能力是联赛考核的重要内容。正确性是考察程序质量永恒的准则,谁也不想设计一个得不出正确结果的程序,这是显而易见的事。然而错误的程序比比皆是,甚至被多数人认为是正确的题解,还在不断地发现小的程序错误。这是因为:(1)正确性是指程序本身具备且仅具备问题所列举的全部功能。至于验证这些功能的背景条件(例如试题描述)是否正确,不是正确性考核的范畴。(2)检验程序正确性的基本手段是测试,但测试只能指出程序的错误,而不能证明程序完全没有错误。因为要想把一个不太复杂的程序所有可能发生的值验算一遍,即便是频率为每秒千万次的计算机几十年也做不完,然而舍此又无法验证它的完全正确性。由上可知,测试是检验程序是否具备问题所列举的全部功能的途径。通过测试发现的错误越多,则程序的隐患越少,正确率越高,因而价值也就越大。第一节第一节 系统的测试工具系统的测试工具 程序设计是一项容易出现差错的工作。一般来说,程序的错误有两种:n语法错误。这类错误可由编译程序查出。避免这类错误发生的办法:认真学习和切实掌握语言的功能和规范。n语义错误。它是源程序经编译通过之后,在运行中出现的各种错误。通常有以下几种:书写错误的计算公式;忽视很少出现的极端情况,如溢出、越界、死锁、死循环等;程序结构或逻辑出错。如果程序被证明语义有错,就转入调试,确定程序中可疑错误的确切性质,改正错误。调试程序的方法一般有两种:(1)静态查错。不用执行程序,仅根据程序和框图对求解过程的描述来发现错误。(2)动态查错。在程序执行的过程中寻找错误的确切位置。这就要求选手必须熟悉所用语言(如Turbo Pascal)的集成环境,这些环境中含大量的动态调试工具。主要有:单步跟踪;执行到光标所在行;设置断点;状态检查等。第二节第二节 测试用例的选取方法测试用例的选取方法选取测试用例的方法一般有两种:n(1)逻辑覆盖测试的白箱法;n(2)根据程序功能导出测试用例的黑箱法。一、白箱法一、白箱法白箱测试是根据对程序内部逻辑结构的分析来选取测试用例。由于测试用例对程序逻辑覆盖的程度决定了测试完全性的程度,因此,白箱测试也称为逻辑覆盖测试。白箱测试用例的设计准则有:n(1)语句覆盖 n(2)分支覆盖 n(3)条件覆盖 n(4)组合条件覆盖1语句覆盖n语句覆盖准则是用足够多的测试用例,使程序中的每个语句都执行一遍,以尽可能多地发现程序中的错误。n例如,某程序段为:if(a1)&(b=0)x=x/a;if(a=2)|(x1)x=x+1;n下图为这个程序段的流程图。从流程图可以看出,只要能经过路径 ACBE,便可以将所有语句都执行一遍。显然,若取a=2与b=0(x任意)为测试数据,就可以完成这一测试任务。但是,这个测试用例不能检查出下列错误:第一个语句中的“and”误写为“or”;第二个语句中的“x1”误写为“x=1”等。因此,语句覆盖准则是很弱的,通常不宜采用。2分支覆盖分支覆盖准则也称判定覆盖准则。它要求通过足够多的测试用例,使程序中的每个分支至少通过一次。如在上图中,需要通过 ACBE 和 ABD 两条路径。为此,可以选用下列两个测试用例:(1)a=3,b=0,x=4(测试路径 ACBE);(2)a=1,x=1,b任意(测试路径 ABD)。也就是说,通过两次测试,就可以使程序中的每个分支都通过一次。分支覆盖准则比语句覆盖准则严密了一些,但还是不够充分。这是因为在一个判定中往往包含有多个条件,而用分支覆盖并没有考虑将每个条件都测试一次。3条件覆盖 条件覆盖准则是通过执行足够的测试用例,使每个判定中的每个条件都能得到两种不同的结果(true与false)。例如,上述例子中共有四个条件,有以下两个测试用例可使每个条件都能得到true值和false值。n(1)a=2,b=1,x=1(a1为true,b=0为false,a=2为true,x1为false);n(2)a=1,b=0,x=3(a1为false,b=0为true,a=2为false,x1为true);4.组合条件覆盖 通常,条件覆盖要比分支覆盖优越。但是条件覆盖并不能完全满足分支覆盖。例如,上述条件覆盖所使用的两个测试用例不能使第一个判定框为true,也不能使第二个判定框为false。于是,人们便提出一种更强的准则组合条件覆盖准则。组合条件覆盖准则要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次。例如,对于上述例子来说,第一个判定框中的两个条件有以下四种组合:n(1)条件组合1:a1,b=0;n(2)条件组合2:a1,b不等于0;n(3)条件组合3:a=1,b=0;n(4)条件组合4:a1;n(2)条件组合6:a=2,x1;n(4)条件组合8:a不等于2,x=1。下面的四个测试用例就可以覆盖上述八种可能的条件组合:n(1)a=2,b=0,x=4(覆盖条件组合1和5)n(2)a=2,b=1,x=1(覆盖条件组合2和6)n(3)a=1,b=0,x=2(覆盖条件组合3和7)n(4)a=1,b=1,x=1(覆盖条件组合4和8)组合条件覆盖准则既能满足分支覆盖准则,也能满足条件覆盖准则,但是,它也不是完全测试。如果仔细检查上述四个测试用例,就会发现漏掉了路径 ACBD。白箱法经常被编程者用来测试程序内部的逻辑错误。但问题是,在联赛中不管选手自以为测试后的程序如何“完美”,但评委们却全然不顾这一切,而是完全根据程序的功能要求设计测试用例,由测试结果衡量其正确程度的。“知己知彼,百战不殆”,对于以程序的功能要求为根据和准绳的黑箱测试方法,选手更应该掌握。二、黑箱法二、黑箱法 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有:n(1)等价分类法 n(2)边值分析法 n(3)因果图法 n(4)错误推测法1等价分类法 穷尽的黑箱测试是不现实的,通常只能选取少量最有代表性的输入数据,以期用较小的代价暴露出较多的程序错误。n等价分类是把所有可能的输入数据(有效的和无效的)划分成若干等价类,使每一类中的一个典型数据在测试中的作用与这一类中所有其他数据的作用相同。因此,在实际进行测试时,可以从每个等价类中只取一组数据作为测试用例。由此可知,等价分类法分为两步:n(1)划分等价类(包括有效等价类和无效等价类);n(2)从每个等价类中选取测试用例。n划分等价类的基本方法是:根据程序的功能说明,找出所有的输入条件,然后为每一个输入条件划分等价类。n例如,对计算n的程序划分等价类。由程序的功能可以得到输入条件为合理的x,其中包括分母不为零和根号内分于式的值大于等于0,即n可以得到等价类的划分如表所示。然后选取若干测试用例,使它们能够覆盖表。在给出了输入条件后,确定等价类大体上是一个启发的过程,取决于测试人员对问题的理解力和创造力,带有很大的试探性。通常,以下划分等价类的原则可以作为参考:n(1)如果输入数据通过文件进行且明确不须判错,则可以确定一个有效等价类;n(2)如果输入条件规定了值的个数或每个值的范围,则可以确定一个有效等价类和两个无效等价类;n(3)如果输入条件规定了一个输入值的有限集,且确信程序对每个输入值单独处理,则可以对集合中的每一个输入值确定一个有效等价类,同时可以确定一个无效等价类;n(4)如果输入条件规定了“必须如何”的条件,则可以确定一个有效等价类和一个无效等价类;n(5)如果确信某一等价类中的各元素在程序中的处理方式是有区别的,则应把这个等价类分成更小的等价类。2 边值分析法 经验表明,程序错误往往发生于边缘情况。因此,考虑边界条件的测试比没有考虑边界条件的测试效果要好得多。特别要指出的是,边值分析不是从等价类中随便选一个例子作为代表,而是着眼于使该等价类的边界情况成为测试的主要目标来选取测试用例;并且边值分析不仅要考虑输入条件,还要考虑输出条件。采用边值分析法设计测试用例,通常要考虑以下几条原则:n(1)如果输入条件规定了值的范围,则要对这个范围的边界情况以及稍超出范围的无效情况进行测试;n(2)如果输入条件规定了值的个数,则要分别对值的最大个数、最小个数、稍多于最大个数及稍少于最小个数的情况进行测试;n(3)对于输出条件使用上述(1)和(2);n(4)如果输入和输出是有序集,则应把注意力集中在第一个和最后一个元素上。3.因果图法上述的等价分类法与边值分析法的缺点是:只独立地检查了各个输入条件,而没有检查各种输入条件的组合。但要对各条件的组合进行检查并非易事。一般来说,没有一种系统的方法是不行的。因果图法是设计测试用例的一种系统方法,有助于测试人员系统地选择高效的测试用例。其基本思想是把输入条件视为“因”,输出条件视为“果”,把黑箱视为从因到果的逻辑网络图。通过因果图可以得到一张判定表,然后为判定表的每一列设计测试用例。4.错误推测法 也称猜错法。它无固定的规律可循,在很大程度上是凭经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写测试用例。例如,要测试一个排序程序,特别需要检查的情况有:n(1)输入表为空;n(2)输入表只含有一个元素;n(3)输入表中所有元素值相同;n(4)输入表实际有序。三、综合策略三、综合策略n前面叙述的各种方法都提供了部分实用的测试情况,但是没有一种方法能够单独地产生一套“完整”的测试用例。在实际进行测试时,可以将各种方法联合使用。n下面的综合策略可供参考。测试从黑箱法开始,突破那种“自以为是”的思维定势,全面客观地按照程序的功能要求设计测试用例:(1)如果程序功能说明中有输入条件的组合,便从因果图开始,以减少组合情况;(2)在任何情况下都要用边值分析法,通过分析输入和输出条件的边界值,补充一些测试用例;(3)判别输入/输出的有效和无效等价类,进一步补充测试用例;(4)利用错误推测法补充一些测试用例:(5)查看上述测试用例的覆盖程序,对未满足的覆盖标准,增加一些测试用例。通过黑箱法找出程序中不具备功能要求的地方后,应使用白箱法检测程序内部是哪些子程序段导致其错误。修改后再使用黑箱法测试结果。这样循环往复,提高程序的正确率。最后需强调的是,无论使用什么测试策略,都需要付出大量艰辛的劳动,而且还不一定能发现所有的错误。因此,测试工作是非常困难的事。本章作业1.程序测试的主要准则是:正确性和时空效率。2.程序的错误有两种:语法错误和语义错误。3.调试程序的方法一般有两种:静态查错、动态查错 4.选取测试用例的方法一般哪几种?5.白箱测试用例的设计准则有哪些?它们是如何定义的?相互有什么联系?6.常用的黑箱测试方法有哪些?7.什么是等价分类法,通常有哪些步骤?通常划分等价类的参考原则有哪些?8.可供参考的综合策略有哪些?
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 生活常识


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!