您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 12确认测试白盒测试
本堂课讲授重点确认测试白盒测试技术确认测试确认测试的概念确认测试的范围软件配置复查Alpha和Beta测试确认测试的概念确认测试的目标是验证软件的有效性验证:“保证软件正确地实现了某个特定要求的一系列活动”确认:“为了保证软件确实满足了用户需求而进行的一系列活动”软件的有效性:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的需求分析阶段产生的软件需求规格说明书是进行确认测试的基础确认测试的范围必须有用户积极参与,以用户为主进行。用户应该参与设计测试方案,使用用户界面输入测试数据并且分析评价测试的输出结果通常使用黑盒测试法保证软件:能满足所有功能要求能达到每个性能要求文档资料准确完整能满足其他预定的要求(如安全性、可移植性、兼容性、可维护性等)软件配置复查保证软件配置所有成分齐全,包括:可行性研究报告需求分析规格说明书总体设计说明书详细设计说明书源代码清单测试计划、测试方案、测试结果同时,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,已经编好目录。还有用户手册的完整性合正确性。Alpha和Beta测试大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试,Alpha测试是内测,Beta测试是公测。Alpha测试Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Beta测试由软件的最终用户在一个或多个客户场所进行,开发者通常不在Beta测试现场。Beta测试是软件在开发者不能控制的环境中的“真实”应用,用户记录在Beta测试过程中遇到错误,并且定期把这些问题报告给开发者。开发者对软件产品进行必要的修改和升级,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。Alpha测试举例2004年3月,微软BillGates证实,微软年内将拿出官方Alpha测试版的Longhorn操作系统,微软BillGates也同时证实,Longhorn要到2006年才能正式上市销售。微软这款下一代桌面操作系统将内建DirectX10,并且采用3D操作界面,采用WinFS文件系统,采用新一代安全机制。白盒测试技术问题提出概念白盒测试技术主要包括:逻辑覆盖控制结构测试白盒测试概念白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路(虽然这是不可能的)是否都有能按预定要求正确工作,而不顾它的功能。测试方案:--包括具体的测试目的,应该输入的测试数据和预期的结果测试用例:--测试数据和预期的输出结果测试数据不同的测试数据发现程序错误的能力差别很大不可能进行穷尽的测试应该选用高效的测试数据,提高测试效率降低测试成本。设计测试数据的技术包含白盒测试时设计测试数据的技术和黑盒测试时设计测试数据的技术。问题提出“我们应该更注重于保证程序需求的实现,为什么要花费时间和精力来担心(和测试)逻辑细节?”逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。当我们设计和实现主流之外的功能、条件或控制时,错误往往开始出现在我们的工作中。日常处理往往被很好地了解(和很好地细查),而“特殊情况”的处理则难于发现。我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。程序的逻辑流有时是违反直觉的,这意味着我们关于控制流和数据流的一些无意识的假设可能导致设计错误,只有路径测试才能发现这些错误。例如,考虑100行C语言程序,在一些基本的数据声明之后,程序包含两个嵌套循环,根据输入的条件分别执行1到20次,在内部循环中,需要四个if-then-else结构,该程序中大约有1014条可能路径!为了正确表达这个数值,我们假设开发了一个有魔力的测试处理器(“有魔力”是因为不存在这样的处理器)进行穷举测试。该处理器能在一毫秒内开发一个测试用例、进行运行并评估结果,如果每天运行24小时,每年运行365天,则需要3170年的时间来测试这个程序。不可否认,这将导致大多数开发进度表的混乱,对大型软件系统不可能进行穷举测试。然而,白盒测试不应该被抛弃,可选择有限数量的重要逻辑路径进行测试,检测重要数据结构的有效性逻辑覆盖定义:是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试包括如下:.语句覆盖.判定覆盖.条件覆盖.判定-条件覆盖.条件组合覆盖.点覆盖.边覆盖.路径覆盖。(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TTFFabdce测试路径图L1(ace)={(A1)and(B=0)}and{(A=2)or(X/A1)}={(A1)and(B=0)and(A=2)}or{(A1)and(B=0)and(X/A1)}={(A=2)and(B=0)}or{(A1)and(B=0)and(X/A1)}L2(abd)=not{(A1)and(B=0)}andnot{(A=2)or(X1)}={not(A1)ornot(B=0)}and{not(A=2)andnot(X1)}={not(A1)andnot(A=2)andnot(X1)}or{not(B=0)andnot(A=2)andnot(X1)}L3(abe)=not{(A1)and(B=0)}and{(A=2)or(X1)}={not(A1)ornot(B=0)}and{(A=2)or(X1)}={not(A1)and(A=2)}or{not(A1)and(X1)}or{not(B=0)and(A=2)}or{not(B=0)and(X1)}L4(acd)={(A1)and(B=0)}andnot{(A=2)or(X/A1)}=(A1)and(B=0)andnot(A=2)andnot(X/A1)测试路径逻辑语句覆盖语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在图例中,正好所有的可执行语句都在路径L1上,所以选择路径L1设计测试用例,就可以覆盖所有的可执行语句。测试用例的设计格式如下【输入的(A,B,X),输出的(A,B,X)】为图例设计满足语句覆盖的测试用例是:【(2,0,4),(2,0,3)】覆盖ace【L1】{(A=2)and(B=0)}or{(A1)and(B=0)and(X/A1)}判定覆盖判定覆盖就是设计若干个测试用例,运行时,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:【(2,0,4),(2,0,3)】覆盖ace【L1】【(1,1,1),(1,1,1)】覆盖abd【L2】条件覆盖条件覆盖就是设计若干个测试用例,运行时使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。例如,对于第一个判断:条件A>1取真为,取假为条件B=0取真为,取假为T1T1T2T2对于第二个判断:条件A=2取真为,取假为条件X>1取真为,取假为测试用例覆盖分支条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,0,1),(1,0,1)】L2(b,d)【(2,1,1),(2,1,2)】L3(b,e)T3T3T4T4TTTT12344321TTTTTTTT1234判定-条件覆盖判定-条件覆盖就是选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果andorA1TB=0TX=X/ATFFA=2TFX1FX=X+1测试用例覆盖分支条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)TTTT1234TTTT1234{(A=2)and(B=0)}or{(A1)and(B=0)and(X/A1)}{not(A1)andnot(A=2)andnot(X1)}or{not(B=0)andnot(A=2)andnot(X1)}条件组合覆盖条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。记①A>1,B=0作②A>1,B≠0作③A≯1,B=0作④A≯1,B≠0作TT12TT12TT12TT12⑤A=2,X>1作⑥A=2,X≯1作⑦A≠2,X>1作⑧A≠2,X≯1作测试用例覆盖条件覆盖组合【(2,0,4),(2,0,3)】(L1)①,⑤【(2,1,1),(2,1,2)】(L3)②,⑥【(1,0,3),(1,0,4)】(L3)③,⑦【(1,1,1),(1,1,1)】(L2)④,⑧TT34TT34TT34TT34TTTT1234TTTT1234TTTT1234TTTT1234逻辑覆盖总结:语句覆盖对程序的逻辑覆盖很少判定覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高,上面的测试数据只覆盖了程序全部路径的一半。条件覆盖通常比判定覆盖强,因为它使判定表达式中每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。判定/条件覆盖也并不一定比条件覆盖更强条件组合覆盖是更强的逻辑覆盖标准,但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。点覆盖如果连通图G的子图G´是连通的,而且包含G的所有节点,则称G´是G的点覆盖。与语句覆盖标准相同。边覆盖如果连通图G的子图G´是连通的,而且包含G的所有边,则称G´是G的边覆盖。通常与判定覆盖标准相同。路径覆盖路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。测试用例通过路径覆盖条件【(2,0,4),(2,0,3)】ace(L1)【(1,1,1),(1,1,1)】abd(L2)【(1,1,2),(1,1,3)】abe(L3)【(3,0,3),(3,0,1)】acd(L4)TTTT1234TTTT1234TTTT1234TTTT3412控制结构测试基本路径测试条件测试循环测试基本路径测试基本路径测试是在程序控制图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次(如让循环体只执行一次)。例子基本路径测试例子voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum0)5{6if(0==iType)7x=y+2;9else8if(1==iType)10x=y+10;12else11x=y+20;13}14}环形复杂度第二步:计算环形复杂度环形复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以下三种方法计算圈复杂度:★流图中区域的数量对应于环型的复杂性;★给定流图G的圈复杂度-V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;★给定流图G的圈复杂度-V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径:√路径1:4-14√路径2:4-6-7-14√路径3:4-6-8-10-1
本文标题:12确认测试白盒测试
链接地址:https://www.777doc.com/doc-3342990 .html