您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件测试-软件工程简单说明
第五章软件测试§5.1基本概念•软件开发过程必须伴有质量保证活动。•软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。•软件产品最大的成本是检测软件错误、修正软件错误的成本。在整个软件开发中,测试工作量一般占30%~40%,甚至≥50%。在人命关天的软件(如飞机控制、核反应堆等)测试所花费的时间往往是其它软件工程活动时间之和的三到五倍例:•Windows95有1000万行代码•Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人软件测试背景软件是人编的—所以不完美实例:•Intel的pentium处理器•1994年浮点除法缺陷•200年8月28日,1.13MHZ处理器一个可能导致运行程序被挂起的执行指令问题•1999年12月3日,美国航天局火星极地登陆飞船失踪•1991年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度•千年虫,世界各地解决2000年错误超过数亿美元软件测试的问题•软件缺陷是什么?•谁执行测试?•开发者?•单独的测试人员?•两方面人员?•测试什么?•每个部分都测试?•测试软件中高风险部分?•什么时候测试?•怎样测试?•测试应进行到什么程度?5.1.1测试的目的与地位G.J.Myers在软件测试技巧中认为:1.测试是为了寻找错误而运行程序的过程。2.一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试。3.一个成功的测试是揭示了迄今为止尚未发现的错误的测试。E.W.Dijkstra指出:“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.把证明程序无错当作测试目的不仅是不正确的,完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的.软件测试要设法使软件发生故障,暴露软件错误测试的“成功”与“失败”能够发现错误的测试是成功的测试,否则是失败的测试。“测试的目的是说明程序正确地执行它应有的功能”这种说法正确吗?例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用“测试用例”(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否就可认为程序是正确的?测试设计中需要考虑的22种测试类型•黑盒测试•白盒测试•单元测试•累计综合测试•集成测试•功能测试•系统测试•端到端测试•健全测试•衰竭测试•接受测试•负载测试•强迫测试•性能测试•可用性测试•安装/卸载测试•恢复测试•兼容测试•安全测试•比较测试•Alpha测试•Beta测试质量控制技术质量控制活动分类开发方法学配置管理验证技术评审正确性验证性能调试组件测试集成测试系统测试原子事务模块冗余性检错质量控制避免错误容错调试测试软件质量问题以软件测试为中心的软件质量保障技术软件静态测试技术质量软件度量技术控制动态测试技术技术配置管理技术修改控制与管理技术软件测试是保证软件质量,提高软件可靠性的关键5.1.2测试原则(1)所有的测试都应追溯到用户需求最严重的错误(从用户角度)是那些导致软件无法满足需求的错误。程序中的问题根源可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。测试与开发前期工作的关系决定软件与系统的配合关系需求分析概要设计详细设计编码单元测试集成测试确认测试系统测试测试活动和相关工作产品项目协议对象设计客户开发人员用户集成策略系统分解功能性需求非功能性需求单元测试集成测试结构测试功能测试性能测试来自ODD来自TP来自SDD来自RAD来自RAD用户手册验收测试安装测试现场测试日常操作开发前期出现错误的扩展计划需求分析设计编码测试AB软件生存期各阶段间需保持的正确性用户要求用户:我要什么?运行结果计算机:程序运行得到的结果源程序程序员:我要让计算机什么做?设计说明书设计员:我要让软件做什么?需求说明书分析员:我可以提供什么?12345理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?软件开发面临的实际问题项目开发前分析员的理解、设想软件开发面临的实际问题分析员的描述完成的设计软件开发面临的实际问题程序员做出的产品软件开发面临的实际问题现场的安装软件开发面临的实际问题用户原来的设想软件开发面临的实际问题测试原则(2)概要设计时应完成测试计划,详细的测试用例定义可在设计模型确定后开始,所有测试可在任何代码被产生之前进行计划和设计。软件测试不等于程序测试软件测试应贯穿于软件定义与开发的整个期间;据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错误约占64%,属于程序编写的错误仅占36%。程序编写的许多错误是“先天的”。测试阶段工作步骤•单元测试:检验每个模块能否单独工作•集成测试:检验概要设计中模块接口设计问题•确认测试:以需求规格说明书为检验尺度•系统测试:综合检验测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量.测试原则(3)pareto原则:测试发现的错误中80%很可能起源于20%的模块中。应孤立这些疑点模块重点测试。(4)穷举测试是不可能的测试原则例:测试计算器程序•加法测试1+0=……1+99999999999999999999999999999999=2+0=……2+99999999999999999999999999999999=……99999999999999999999999999999999+99999999999999999999999999999999=1.0+0.1=1.0+0.2=……•减法测试•乘法测试•除法测试•求平方根•百分数•倒数测试原则(5)应由独立的第三方来构造测试。(开发和测试队伍分别建立)(6)测试用例应由输入数据和预期的输出结果两部分组成.(7)兼顾合理的输入和不合理的输入数据(8)程序修改后要回归测试(9)应长期保留测试用例,直至系统废弃。测试原则:软件测试是有风险的行为数量遗漏软件缺陷数目测试费用测试中测试后软件测试工作量每一个软件项目都有一个最优的测量量最优测量量“好”测试的属性:•发现错误的可能性高•不冗余•在目的相似的测试中,应使用最可能找到错误的测试•每一个测试应独立执行测试(test)调试(debug)以已知条件开始,使用预先定义的程序,有预知的结果以不可知内部条件开始,结果一般不可预见有计划被动的由独立的测试组,在不了解软件设计的条件下完成由程序作者进行发现错误找出错误位置,排除测试与调试(排错)软件错误分类•功能错(需求分析错误)•软件结构错•数据错•编码错•软件集成错•测试定义与测试执行错误5.1.4测试用例设计测试用的一组输入数据。选择测试用例是软件测试员最重要的一项工作。测试用例的属性:属性描述name测试用例的名称location可执行的完全路径名input输入数据或命令oracle期待测试结果log测试产生的输出程序测试举例例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。判断三角型的测试用例设计:输入数据预期结果(1)6;6;6等边(2)8;8;4等腰(3)4;5;6一般还应输入非法数据:0;7;9-7;3;5a;2;7等5.1.5软件测试信息流软件配置测试测试配置测试工具结果分析排错可靠性分析测试结果错误预期结果出错率改正的软件预测的可靠性需求规格说明书软件设计说明书被测源程序测试计划测试用例(测试数据)测试驱动程序5.1.6测试的方法与技术软件测试的策略和方法静态测试方法动态测试方法人工测试方法计算机辅助静态分析方法白盒测试方法黑盒测试方法静态测试:基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。静态测试约可找出30~70%的逻辑设计错误.对需求规格说明书、软件设计说明书、源程序做检查和审阅,包括:•是否符合标准和规范;•通过结构分析、流图分析、符号执行指出软件缺陷;动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素:•被测试程序•测试数据(测试用例)动态黑盒测试—闭着眼睛测试软件软件输入不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。输出动态白盒测试—带上X光眼镜测试软件??????????????3581322.293419985680302829734315250*(1+0.015)*((1+0.015)^360-1)/0.015250*(1+0.015)*((1+0.015)^360-1)/0.015假如知道一个盒子包含一台计算机,而另一个盒子是人用纸笔计算,就会选择不同的测试用例了解软件的运作方式会影响测试手段黑盒测试与白盒测试比较黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。白盒测试是根据程序内部逻辑结构进行测试。黑盒测试与白盒测试能发现的错误CBAD-只能用黑盒测试发现的错误A-只能用白盒测试发现的错误-两种方法都能发现的错误-两种方法都不能发现的错误BCD黑盒测试与白盒测试优缺点比较黑盒测试白盒测试优点缺点性质①适用于各阶段测试②从产品功能角度测试③容易入手生成测试数据①可构成测试数据使特定程序部分得到测试②有一定的充分性度量手段③可或较多工具支持①某些代码得不到测试②如果规格说明有误,则无法发现③不易进行充分性测试①不易生成测试数据(通常)②无法对未实现规格说明的部分进行测试③工作量大,通常只用于单元测试,有应用局限是一种确认技术,回答“我们在构造一个正确的系统吗?”是一种验证技术,回答“我们在正确地构造一个系统吗?”§5.3白盒测试的测试用例设计5.3.1逻辑覆盖法(1)语句覆盖(2)判定覆盖(3)条件覆盖(4)判定/条件覆盖(5)条件组合覆盖(6)路径覆盖(7)点覆盖(8)边覆盖例:PROCEDURESAMPAL(A,B:REAL;VARX:REAL);BEGINIF(A1)AND(B=0)THENX:=X/AIF(A=2)OR(X1)THENX:=X+1END;开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce(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+1FFTTabdceA=3,B=0,X=3A=2,B=1,X=1例:可设计两组测试用例:•A=3,B=0,X=3可覆盖c、d分支•A=2,B=1,X=1可覆盖b、e分支两组测试用例可覆盖所有判定的真假分支判定覆盖仍是弱的逻辑覆盖(3)条件覆盖使每个判定的每个条件的可能取值至少执行一次。开始(A1)AND(B=0)(A=2)OR(X1)返回X=X/AX=X+1FFTTabdce满足条件:T1,T1,T2,T2T3,T3T4,T4第一判定表达式:设条件A1取真记为T1假T1条件B=1取真记为T2假T2第二判定表达式:设条件A=2取真记为T3假T3条件X1取真记为T4假T4测试用例通过满足的覆盖ABX路径条件分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e两个测试用例覆盖了四个条件八种可能取值。未覆盖c、d分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖(4)判定/条件覆盖选取足够多的测试用例,使判断中的每个条件
本文标题:软件测试-软件工程简单说明
链接地址:https://www.777doc.com/doc-4497690 .html