您好,欢迎访问三七文档
第七章软件测试概论Jones广泛的研究程序员的生产力,包括错误的查找和修正的本性。查阅了历史上一千万行的代码,他发现代码检查纠除了85%多的错误。Jones研究的其他方法从未如此成功,实际上,没有一个能够除去一半以上的错误。Jones最近更多的调查建议典型的准备时间和会议时间,表8.2显示。表8。2典型的准备时间和会议时间(1991)开发产品准备时间会议时间需求文档每小时25页每小时12页功能描述每小时45页每小时15页逻辑描述每小时50页每小时20页源代码每小时150行代码每小时75行代码用户手册每小时35页每小时20页概论韦勒(1993)在公牛信息系统3年检查数据。来自几乎7,000个检查会议的尺度包括大约11557个错误信息和14677页的设计文献。他发现,一个3人低准备率测试小组和一个4人高准备率小组工作效率一样;他提出准备率,并非小组大小,确定测试效率。他也发现小组的有效性和效率取决于他们对产品的熟悉:越熟悉,越好。另一方面,韦勒发现好代码检查结果能建立错误的信任。在一项12000行C语言的工程上,需求和设计没被复查;检查从代码开始。比较代码检查数据和测试数据,韦勒发现代码检查鉴定主要编码或者低水平设计错误,但是测试主要发现需求和结构的错误。因此,代码检查不在系统里处理源代码的变化性,它的结果没代表真实的系统质量。表8。3发现活动中发现的错误(Jones1991)发现活动每千行代码发现的错误需求复查2.5设计复查5.0代码检查10.0集成测试3.0接受性测试2.0概论Grady在惠普解释到,为代码检查做计划一般需要2个小时,接着30分钟的小组会议。然后个人准备2个小时发现错误和90分钟汇报错误。小组花费30分钟集体讨论错误的发现并推荐采取的措施。当错误修正后,代码检查会议的主持人在花费半个小时书写和发布摘要文档。Jones总结了他的工程信息的数据,画了一个不同的图,比较复查,检查和其他发现方法的不同。因为产品在尺寸上变化广泛,然而,研究员继续研究那些形式的行为比其它的更容易发现不同类的错误。例如,代码检查善于发现代码错误,但是原型系统更容易鉴别需求的错误。Fagan在IBM发布检查代码的方针后,许多其它的组织机构,包括惠普,ITT和AT&T都采纳了代码检测作为推荐或标准实施。代码检测的成功应用继续在文献中出现,一些在网站上有参考文献。概论证明代码正确假想你已经编完你的组件,自己检查完毕,小组复查完毕。下一步测试是,以更加结构化的方式详细审查确保它的正确性。为了单元测试,一个程序是正确的,当它正确实现设计中说明的功能和数据和它与其它组件正确接口。一种研究程序的正确性方式是把代码看成语句的逻辑流。如果我们能够用正式的逻辑系统(诸如一系列关于数据的语句和暗示)复写程序,我们就能测试新的语句的正确性。我们在设计的方面解释正确性,我们希望我们的表达遵循数学逻辑的规则。公式证明技巧。让我们看看公式证明是怎么工作的。我们按照一系列步骤转换代码为逻辑副本:§7.1基本概念软件产品最大的成本是检测软件错误、修正软件错误的成本。在整个软件开发中:测试工作量≥50%软件质量问题以软件测试为中心的软件质量保障技术软件静态测试技术质量软件度量技术控制动态测试技术技术配置管理技术修改控制与管理技术软件测试是保证软件质量,提高软件可靠性的关键软件测试的目标(1)预防错误:几乎不可实现(2)发现错误:软件测试目的找错7.1.1测试的目的与地位G.J.Myers在软件测试技巧中认为:“程序测试是为了发现错误而执行程序的过程.”E.W.Dijkstra指出:“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.把证明程序无错当作测试目的不仅是不正确的,完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的.软件测试要设法使软件发生故障,暴露软件错误测试的“成功”与“失败”能够发现错误的测试是成功的测试,否则是失败的测试。“测试的目的是说明程序正确地执行它应有的功能”也是错误的.例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用“测试用例”(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否就可认为程序是正确的?测试(test)调试(debug)以已知条件开始,使用预先定义的程序,有预知的结果以不可知内部条件开始,结果一般不可预见有计划被动的由独立的测试组,在不了解软件设计的条件下完成由程序作者进行发现错误找出错误位置,排除测试与调试(排错)程序中的问题根源可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。测试与开发前期工作的关系决定软件与系统的配合关系需求分析概要设计详细设计编码单元测试集成测试确认测试系统测试测试阶段工作步骤单元测试:检验每个模块能否单独工作.集成测试:检验概要设计中模块接口设计问题确认测试:以需求规格说明书为检验尺度系统测试:综合检验测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量.开发前期出现错误的扩展计划需求分析设计编码测试AAB软件生存期各阶段间需保持的正确性用户要求用户:我要什么?运行结果计算机:程序运行得到的结果源程序程序员:我要让计算机什么做?设计说明书设计员:我要让软件做什么?需求说明书分析员:我可以提供什么?12345理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?软件测试的对象软件测试不等于程序测试软件测试应贯穿于软件定义与开发的整个期间;据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错误约占64%,属于程序编写的错误仅占36%。程序编写的许多错误是“先天的”。7.1.2测试的基本原则“测试用例”要求测试用的一组输入数据、环境平台和运行条件。测试的基本原则(1)开发和测试队伍分别建立(2)测试用例应由输入数据和预期的输出结果两部分组成.(3)兼顾合理的输入和不合理的输入数据(4)应检查程序是否作了不该做的事(5)程序修改后要回归测试(6)应长期保留测试用例,直至系统废弃。程序测试举例例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。判断三角型的测试用例设计:输入数据预期结果(1)6;6;6等边(2)8;8;4等腰(3)4;5;6一般还应输入非法数据:0;7;9-7;3;5a;2;7等软件错误分类功能错(需求分析错误)软件结构错数据错编码错软件集成错测试定义与测试执行错误7.1.3软件测试信息流测试过程需要三类输入:软件配置:需求规格说明书软件设计说明书被测源程序测试配置:测试计划测试用例(测试数据)测试驱动程序测试工具:7.1.3软件测试信息流软件配置测试测试配置测试工具结果分析排错可靠性分析测试结果错误预期结果出错率改正的软件预测的可靠性7.1.4测试的方法与技术软件测试的策略和方法静态测试方法动态测试方法人工测试方法计算机辅助静态分析方法白盒测试方法黑盒测试方法穷举测试方法静态测试:基本特征是在对软件进行分析、检查和测试是不实际运行被测试的软件。静态测试约可找出30~70%的逻辑设计错误.对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错.动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素:被测试程序测试数据(测试用例)动态测试方法(1)选取定义域有效值,或定义域外无效值.(2)对已选取值决定预期的结果(3)用选取值执行程序(4)执行结果与(2)结果相比,不吻和,程序有错.§7.2两种类型的测试7.2.1黑盒测试又称:功能测试数据驱动测试基于规格说明书的测试7.2.2白盒测试又称:结构测试玻璃盒测试基于覆盖的测试.根据被测程序的逻辑结构设计测试用例;力求提高测试覆盖率;黑盒测试与白盒测试比较黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。白盒测试是根据程序内部逻辑结构进行测试。7.2.3穷举测试例:输入三条边长黑盒测试可采用的测试用例数(设字长16位)执行时间:设测试一次需1ms共需一万年.=2X2X2≈3X10161616147.2.3穷举测试白盒测试例:含4个分支,循环次数≤20,从A到B的可能路径执行时间:设测试一次需2ms穷举测试需5亿年.=5+5+..+5+5≈1020121914AB不论黑盒还是白盒测试都不能进行穷尽测试,所以软件测试不可能发现程序中存在的所有错误,因此需精心设计测试方案,力争尽可能少的次数,测出尽可能多的错误.黑盒测试与白盒测试能发现的错误CBAD-只能用黑盒测试发现的错误A-只能用白盒测试发现的错误-两种方法都能发现的错误-两种方法都不能发现的错误BCD§7.3白盒测试的测试用例设计7.3.1逻辑覆盖法例:PROCEDURESAMPAL(A,B:REAL;VARX:REAL);BEGINIF(A1)AND(B=0)THENX:=X/AIF(A=2)OR(X1)THENX:=X+1END;逻辑覆盖准则:(1)语句覆盖(2)判定覆盖(3)条件覆盖(4)判定/条件覆盖(5)条件组合覆盖(6)路径覆盖(7)点覆盖(8)边覆盖1语句覆盖开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce使程序中每个语句至少执行一次只需设计一个测试用例:输入数据:A=2,B=0,X=4即达到了语句覆盖;语句覆盖是最弱的逻辑覆盖2判定覆盖开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce使每个判定的真假分支都至少执行一次例:可设计两组测试用例:A=3,B=0,X=3可覆盖c、d分支A=2,B=1,X=1可覆盖b、e分支两组测试用例可覆盖所有判定的真假分支语句覆盖仍是弱的逻辑覆盖(3)条件覆盖使每个判定的每个条件的可能取值至少执行一次第一判定表达式:设条件A1取真记为T1假T1条件B=1取真记为T2假T2第二判定表达式:设条件A=2取真记为T3假T3条件X1取真记为T4假T4条件覆盖开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce满足条件:T1,T1,T2,T2T3,T3T4,T4测试用例通过满足的覆盖ABX路径条件分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e两个测试用例覆盖了四个条件八种可能取值。未覆盖c、d分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖(4)判定/条件覆盖选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.判定/条件覆盖开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce满足条件:T1,T1,T2,T2T3,T3T4,T4测试用例通过满足的覆盖ABX路径条件分支204aceT1,T2,T3,T4c,e211abdT1,T2,T3,T4b,d能同时满足判定、条件两种覆盖标准。取值。测试用例通过满足的覆盖ABX路径条件分支203aceT1,T2,T3,T4c,e211abeT1,T2,T3,T4b,e103abeT1,T2,T3,T4b,e111abdT1,T2,T3,T4b,d(5)条件组合覆盖所有可能的条件取值组合至少执行一次A1,B=0A1,B≠0A≯1,B=0A≯1,B≠0A=2,X1A=2,X≯1A≠2,X1A≠2,X≯1测试用例通过满足的覆盖ABX路径条件分支203aceT1,T2,T3,T4c,e211abeT1,T2,T3,T4b,e001abeT1,T2,T3,T4b,e
本文标题:软件工程5(精)
链接地址:https://www.777doc.com/doc-3765807 .html