第5章 结构化的实现_第1页
第5章 结构化的实现_第2页
第5章 结构化的实现_第3页
第5章 结构化的实现_第4页
第5章 结构化的实现_第5页
已阅读5页,还剩222页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

软件工程

SoftwareEngineering

2第5章结构化的实现结构化实现:编码测试编码:把软件设计翻译成计算机可以理解的形式——用某种程序设计语言书写的程序。测试:在软件投入生产性运行之前,尽可能多地发现软件中的错误。结构化实现结构化实现工作的内容和步骤设计阶段所设计定义的每一个模块进行程序过程设计、编码和单元测试工作。按结构图将各软件模块组装起来,进行组装测试、确认测试和系统测试等工作。交付用户使用并根据使用情况进行维护。在每个阶段都必须按照有关规范编写相应的说明书或报告。结构化实现结构化实现工作的内容和步骤结构化实现结构化实现阶段的主要任务:按总体设计方案购置和安装计算机网络系统。软件准备。人员培训。主要是用户培训。数据准备。没有一定基础的数据准备,系统调试就不能很好的运行。试运行。6结构化的实现编码软件测试基础软件测试方法软件测试步骤单元测试集成测试确认测试软件调试7编码程序设计语言的选择原则编码风格8程序设计语言的选择原则在选择编程语言时,可以考虑以下因素。应用领域:目标系统的应用领域不同,需要采取的系统开发范型也不同,所以要考虑支持相应范型的编程语言。系统用户的要求。软件运行环境。可得到的软件工具。工程规模。软件可移植性。程序员的知识。

9程序设计语言的选择原则C语言:适合系统底层实现。C语言、汇编语言、Ada:适合实时应用、或很特殊的复杂算法、代码优化要求高的领域。FORTRAN:工程领域,复杂的数值计算。Java:适合平台无关的应用、网络编程应用。Dephi:适合信息系统应用。PROLOG和LISP:人工智能领域。SQLServer、Oracle、Access:数据库操作。程序的复杂性及度量1.代码行度量法度量程序的复杂性,最简单的方法就是统计程序的源代码行数。常用的软件成本估量计量单位:源代码行工作量:一项任务所需的程序员平均工作时间。单位是人月、人年或人日。软件生产率:开发全过程中单位劳动量能够完成的平均软件数量。程序的复杂性及度量2.McCabe度量法由ThomasMcCabe提出的一种基于程序控制流的复杂性度量方法。先画出流图,然后用该图的环路数作为程序复杂性的度量值。流图是退化的程序流程图。把流程图中的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样的有向图叫做流图。有向图G结点数n=6弧数m=9环的个数V(G)=m-n+2=512环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。这种度量的缺点:不同种类的控制流的复杂度不能区分。简单IF语句与循环语句的复杂性是一样的。嵌套IF语句与简单CASE的复杂性是一样的。模块接口当成一个简单分支一样处理。一个具有1000行的顺序程序与一行语句的复杂性相同。1314编码风格1.源程序文档化编写源程序文档化的原则为:1)标识符应尽量具有实际意义2)程序应加注释主要内容有:说明每个模块的用途、功能。说明模块的接口形式、参数描述及从属模块的清单。该模块的数据描述:特殊的数组或变量的说明、约束或其他信息。开发历史:指程序的编写者、审阅者姓名及日期、修改说明及日期。152.数据说明变量、常量声明时说明其用途变量命名时采用一定的规范说明语句中变量排列有序化使用注释说明复杂数据结构例如:变量命名可采用匈牙利命名法nLength,szUserName常量采用全大写方式变量说明顺序示例: ①常量说明②简单变量类型说明 ③数组说明④公用数据块说明⑤所有的文件说明编码风格163.语句构造不要把多个语句写在一行避免多层循环或条件嵌套语句清晰采用缩进统一风格编码风格17一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;编码风格18FORI:=1TON-1DO//改进布局

BEGIN

T:=I;

FORJ:=I+1TONDO

IFA[J]<A[T]THENT:=J;

IFT≠ITHEN

BEGIN

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

ENDEND;编码风格19阶梯式布局IF(…)

THEN

IF(…)

THEN

……

ELSE

……

ENDIF

……

ELSE

……

ENDIF编码风格20程序编写首先应当考虑清晰性例如,有一个用Pascal语句写出的程序段:A[I]:=A[I]+A[J];A[J]:=A[I]-A[J];A[I]:=A[I]-A[J]; WORK:=A[J];A[J]:=A[I];A[I]:=WORK;编码风格214.输入/输出对所有输入数据进行检查输入采用简单、一致的格式输入提示输出数据统一格式,说明简洁无二义……编码风格225.效率效率是靠良好的设计来保证的。程序运行时间减少嵌套循环,避免多维数组,减少类型转换、采用占用内存少的数据类型。内存采用优化的算法输入/输出效率设计简单的人机接口编码风格23软件测试背景软件是人编的—所以不完美实例:1994-1995,迪斯尼的狮子王系统不支持问题1999年12月3日,美国航天局火星极地登陆飞船失踪1991年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度千年虫,世界各地解决2000年错误超过数亿美元24千年虫(Y2K)在上个世纪70年代,程序员为了节约非常宝贵的内存资源和硬盘空间,在存储日期时,只保留年份的后两位,如“1980”被存为“80”。当2000年到来的时候,问题就会出现,比如银行存款程序在计算利息时,应该用现在的日期“2000年1月1日”减去当时存款的日期,比如“1989年1月1日”,结果应该是11年,如果利息是3%,银行要付给顾客每100元,大约66元利息。如果程序没有纠正年份只存储两位的问题,其存款年数就变为-89年,变成顾客反要付银行巨额利息。就是为了这样一个简单的设计缺陷,全世界付出几十亿美元。25软件测试的背景1963年,美国飞往火星的火箭爆炸,损失$10million。原因:FORTRAN循环:

DO5I=1,3误写为DO5I=1.326软件测试的背景在整个软件开发中,测试工作量一般占30%~40%,甚至≥50%。在人命关天的软件(如飞机控制、核反应堆等)中,测试所花费的时间往往是其它软件工程活动时间之和的三到五倍。27Bug有人说,软件测试就是在寻找软件中的Bug。28关于Bug的一个有趣的小故事故事发生在1945年9月的一天,一个炎热的下午,机房是一间第一次世界大战时建造的老建筑,没有空调,所有窗户都敞开着。Hopper正领着她的研究小组夜以继日地工作,研制一台称为“MARKII”的计算机,它使用了大量的继电器(电子机械装置,那时还没有使用晶体管),一台不是纯粹的电子计算机。突然,MARKII死机了。研究人员试了很多次还是启动不来,然后就开始用各种方法找问题,看问题究竟出现在哪里,最后定位到板子F第70号继电器出错。Hopper观察这个出错的继电器,惊奇地发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例”,然后计算机又恢复了正常。从此以后,人们将计算机错误戏称为臭虫(Bug),而把找寻错误的工作称为“找臭虫”(Debug)。GraceHopper的事件记录本,连同那个飞蛾,现在都陈列在美国历史博物馆中。

29问题在哪里?

没有足够测试缺乏测试平台不正确的测试环境缺少集成测试缺少性能测试缺少强度测试缺少可靠性测试

……微软的经验Windows95有1000万行代码Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人测试人员/开发人员2.51.931软件测试行业前景软件测试行业前景看好,需求量已超过30万。有数据显示,目前软件测试行业人才需求量已超过30万,并且仍在以每年20%的速度增加。中国软件协会秘书长胡昆山表示,现阶段,我国软件测试基础人才不足,已成为制约我国软件产业发展的瓶颈。软件测试人才是职场的多面手,需要具备缜密的逻辑思维能力、全面的测试技术能力、较强的责任心和团队合作精神,以及出色的沟通能力等职业素质。32软件测试基础软件测试目标软件测试准则软件测试方法软件测试步骤功能测试和性能测试软件测试工具软件测试管理流程33软件测试目标测试是程序的执行过程,目的在于发现错误。好的测试用例在于能发现至今未发现的错误。成功的测试是发现了至今未发现的错误的测试。

34软件测试目标程序测试能证明错误的存在,但不能证明错误不存在。测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错。35软件测试目标如果软件中的问题没有人发现,那么它算不算软件缺陷?古谚:“一片树叶飘落在森林中没有人听见,谁能说它发出了声音?”由于不能报告没有看见的问题,因此,没有看见就不能说存在软件缺陷。只有看到了,才能断言软件缺陷。36测试的目的是说明程序正确地执行它应有的功能”这种说法正确吗?例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用“测试用例”(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否就可认为程序是正确的?软件测试目标37对测试的理解编程大师说:“任何一个程序,无论它多么小,总存在着错误。”初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?”“这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”但初学者不满足,他问:“如果操作系统不失效,那么会怎样?”“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”没有错误的程序世间难求。[编程之道(郭海等译),清华大学出版社]38(1)所有的测试都应追溯到用户需求最严重的错误(从用户角度)是那些导致软件无法满足需求的错误。软件测试的准则39(2)应该在测试开始之前的相当长时间,就制定出测试计划。概要设计时应完成测试计划。软件测试不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间。软件测试的准则40软件测试的准则(3)把Pareto原理应用于软件测试。Pareto原理告诉我们,测试发现的错误中的80%很可能是由程序中20%的模块造成的。

41软件测试的准则(4)测试应该从“小规模”开始,并逐步进行“大规模”测试。(5)穷举测试是不可能的。例Sum(inta,intb,intc) 假定int类型为16位整数

{ 需要测试216*216*216次

return(a+b+c); 每次1ms,约要1万年

}42(6)为了达到最佳的测试效果,应该由独立的第三方来从事测试工作。开发和测试队伍分别建立。软件测试的准则43软件测试是有风险的行为软件数量遗漏软件缺陷数目测试费用测试中测试后测试工作量最优测量量44软件测试方法静态测试方法动态测试方法白盒测试方法黑盒测试方法软件测试方法45静态测试静态测试技术:不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。静态测试约可找出30~70%的逻辑设计错误。方法:走查:WalkThrough审查:Inspection评审:ReviewMichaelFaganIBM46静态测试-走查走查:开发组内部进行的,主要是个人通过检查和阅读等手段来查找错误的活动。经验:限时避免跑题不要现场修改检查要点逻辑错误代码标准/规范/风格47静态测试-审查审查:开发组内部进行的,分配了相关的角色,采用讲解、提问并使用Checklist方式进行的查找错误的活动。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告。参加人员:经验丰富的开发人员、和本模块相关的开发人员、本项目组的新人。由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录。不要现场修改。检查要点设计需求代码标准/规范/风格48静态测试-评审评审:开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。参加人员:经验丰富的开发人员、和本模块相关的开发人员、测试组和相关人员。由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录。不要现场修改。检查要点设计需求代码标准/规范/风格文档的完整性和一致性49动态测试动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素:被测试程序测试数据(测试用例)50动态测试白盒测试(结构测试)测试者完全知道程序的内部结构和处理算法黑盒测试(功能测试)测试者完全不知道程序的内部结构和处理算法51白盒测试—基于代码的测试52黑盒测试—基于需求的测试软件输入输出53CBAD-A:只能用黑盒测试发现的错误-B:只能用白盒测试发现的错误-C:两种方法都能发现的错误-D:两种方法都不能发现的错误黑盒测试与白盒测试能发现的错误54穷举测试例:输入三角形的三条边长可采用的测试用例数(设字长16位)=216X216X216≈3X1014执行时间:

设测试一次需1ms,共需一万年。黑盒测试黑盒测试55穷举测试例:从A到B的可能路径51+52+..+519+520≈1014执行时间:设测试一次需2ms

穷举测试需5亿年。不论黑盒还是白盒测试都不能进行穷尽测试AB白盒测试56白盒测试技术白盒测试技术将介绍:逻辑覆盖基本路径测试循环测试57白盒测试技术--逻辑覆盖逻辑覆盖是设计白盒测试方案的一种技术。设计测试方案是测试阶段的关键技术问题。测试方案包括具体的测试目的(例如,要测试的具体功能),应该输入的测试数据和预期的输出结果。测试数据和预期的输出结果称为测试用例。58不同的测试数据发现程序错误的能力差别很大,为了提高测试效率降低测试成本,应该选用高效的测试数据。因为不可能进行穷尽的测试,选用少量“最有效的”测试数据,做到尽可能完备的测试就更重要了。有选择地执行程序中某些最有代表性的通路是对穷尽测试的唯一可行的替代办法。逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。59测试数据从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准。 语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖60测试数据:A=2,B=0,X=4语句覆盖是最弱的逻辑覆盖1.语句覆盖语句覆盖的含义是,选择足够多的测试数据,使被测程序中每个语句至少执行一次。61测试数据:A=3,B=0,X=1

覆盖sacbdA=2,B=1,X=3

覆盖sabed2.判定覆盖判定覆盖又叫分支覆盖,使每个判定的真假分支都至少执行一次判定覆盖仍是弱的逻辑覆盖只覆盖了全部路径的一半62测试数据:A=2,B=0,X=4

满足A>1,B=0,A=2,X>1条件 覆盖sacbedA=1,B=1,X=1

满足A≤1,B≠0,A≠2,X≤1条件 覆盖sabda点各种情况:A>1,A≤1,B=0,B≠0

b点各种情况:A=2,A≠2,X>1,X≤13.条件覆盖判定表达式中的每个条件都取到各种可能的结果。条件覆盖强于判定覆盖条件覆盖的每个条件都取到了两个不同的结果判定覆盖的每个判定表达式都取到了两个不同的结果63测试数据:A=2,B=0,X=1

满足A>1,B=0,A=2,X≤1条件 覆盖sacbedA=1,B=1,X=2

满足A≤1,B≠0,A≠2,X>1条件 覆盖sabed条件覆盖不一定满足判定覆盖第二个判定表达式的值为假的情况没有考虑。64判定覆盖不一定包含条件覆盖。条件覆盖也不一定包含判定覆盖。一种能同时满足这两种覆盖标准的是: 判定/条件覆盖。65测试数据:A=2,B=0,X=4

覆盖sacbedA=1,B=1,X=1

覆盖sabd4.判定/条件覆盖判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果能同时满足判定、条件两种覆盖。判定/条件覆盖不一定满足路径覆盖。665.条件组合覆盖

每个判定表达式中条件的各种可能组合都至少出现一次。

测试数据:A=2,B=0,X=4 1,5组合,覆盖sacbedA=2,B=1,X=1 2,6组合,覆盖sabedA=1,B=0,X=2 3,7组合,覆盖sabedA=1,B=1,X=1 4,8组合,覆盖sabd八种组合:

(1)A>1,B=0(2)A>1,B≠0(3)A≤1,B=0(4)A≤1,B≠0

(5)A=2,X>1(6)A=2,X≤1(7)A≠2,X>1(8)A≠2,X≤1676.路径覆盖

覆盖每一个可能的路径。测试数据:A=1,B=1,X=1

覆盖sabdA=1,B=1,X=2

覆盖sabedA=3,B=0,X=1

覆盖sacbdA=2,B=0,X=4

覆盖sacbed686种覆盖标准的对比发现错误能力覆盖标准要求弱强语句覆盖每条语句至少执行一次判定覆盖每个判定的每个分支至少执行一次条件覆盖每个判定的每个条件应取到各种可能的值判定/条件覆盖同时满足判定覆盖和条件覆盖条件组合覆盖每个判定中各条件的每一种组合至少出现一次路径覆盖使程序中每一条可能的路径至少执行一次69流图流图在设计测试方案时,往往需要仔细分析程序的控制流。为了突出表示程序的控制流,可以使用流图(也称为程序图)。流图仅仅描绘程序的控制流程,它完全不表现对数据的具体操作以及分支或循环的具体条件。70流图在流图中用圆表示节点,一个圆代表一条或多条语句。程序流程图中的一个处理框序列和一个菱形判定框,可以映射成流图中的一个节点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个节点,即使这个节点并不代表任何语句(实际上相当于一个空语句)。由边和节点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。71流图图把程序流程图映射成流图(a)程序流程图;(b)流图72流图PDLprocedure:sort1:dowhilerecordsremain

readrecord;2:ifrecordfield1=03:thenprocessrecord;

storeinbuffer;

incremertcounter;4:elseifrecordfield2=05:thenresetcounter;6:elseprocessrecord;

storeinfile;7a:endif

endif7b:enddo8:end图

由PDL翻译成的流图73白盒测试技术--基本路径测试基本路径测试基本路径测试是TomMcCabe提出的一种白盒测试技术。通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。74设计基本路径测试的步骤(1)以详细设计或源程序为基础,导出程序流程图的拓扑结构——程序图。(a)程序流程图(b)程序图图:程序流程图和程序图75(2)程序图G的环路复杂性V(G)的计算例如,图(b)的V(G)=4,还可以按如下两种方法计算:V(G)=判定结点数+1=3+1=4。V(G)=边的数量-节点数量+2=11-9+2=4。(3)确定只包含独立路径的基本路径集。例如,在图(b)所示的图中,一组独立的路径是:path1:1—11path2:1—2—3—4—5—10—1—11path3:1—2—3—6—8—9—10—1—11path4:1—2—3—6—7—9—10—1—11(4)设计测试用例,确保基本路径集合中每条路径的执行。76使用基本路径测试技术设计测试用例的步骤如下:1.根据过程设计结果画出相应的流图2.计算流图的环形复杂度3.确定线性独立路径的基本集合4.设计可强制执行基本集合中每条路径的测试用例77白盒测试技术--循环测试循环测试循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。在结构化的程序中通常只有三种循环:简单循环串接循环嵌套循环78图三种循环79白盒测试技术--循环测试1.简单循环使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。跳过循环。只通过循环一次。通过循环两次。通过循环m次,其中m<n-1。通过循环n-1,n,n+1次。for(i=1;i<=n;i++){ …}80白盒测试技术--循环测试2.嵌套循环如果把简单循环的测试方法直接应用到嵌套循环,可能的测试数就会随嵌套层数的增加按几何级数增长,这会导致不切实际的测试数目。B.Beizer提出了一种能减少测试数的方法。从最内层循环开始测试,把所有其他循环都设置为最小值。对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试。由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。继续进行下去,直到测试完所有循环。for(i=1;i<=m;i++) for(j=1;j<=n;j++){ …}设i=1,对内层循环做简单测试81白盒测试技术--循环测试

3.串接循环如果串接循环的各个循环都彼此独立,则可以使用前述的测试简单循环的方法来测试串接循环。如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。82黑盒测试技术黑盒测试着重测试软件的功能需求。黑盒测试并不能取代白盒测试技术,它是与白盒测试互补的方法。83黑盒测试技术黑盒测试力图发现下述类型的错误:①功能不正确或遗漏了功能;②界面错误;③数据结构错误或外部数据库访问错误;④性能错误;⑤初始化和终止错误。白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于测试过程的后期。黑盒测试故意不考虑程序的控制结构,而把注意力集中于信息域。84黑盒测试方法等价类划分边界值分析错误推测因果图综合策略85黑盒测试--等价类划分等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值等价于对这一类其他值的测试。如果某个等价类中的一个数据作为测试数据进行测试查出了错误,那么使用这一等价类中的其他数据进行测试也会查出同样的错误;若使用某个等价类中的一个数据作为测试数据进行测试没有查出错误,则使用这个等价类中的其他数据也同样查不出错误。86等价类的划分有两种不同的情况:(1)有效等价类:是指对于程序的规格说明来说,是合理的、有意义的输入数据构成的集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。(2)无效等价类:是指对于程序的规格说明来说,是不合理的、无意义的输入数据构成的集合。程序员主要利用这一类测试用例检查程序中功能和性能的实现是否有不符合规格说明要求的地方。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。黑盒测试--等价类划分87划分等价类的规则:(1)如果输入条件规定了取值范围或值的个数,可定义一个有效等价类和两个无效等价类。例:输入值是学生成绩,范围是0~100无效等价类成绩>1000100

有效等价类0≤成绩≤100

无效等价类成绩<0黑盒测试--等价类划分88黑盒测试--等价类划分(2)如果规格说明规定了数据值的集合,或者是规定了“必须如何”的条件,这时可确定一个有效等价类和一个无效等价类。例如,在C中对变量标识符规定为“以字母开头的……串”,那么所有以字母开头的串构成有效等价类,而不在此集合内(不以字母开头)的串归于无效等价类。(3)如果规格说明中规定的是一个条件数据,则可确定一个有效等价类和一个无效等价类。例如:“……成人(年满18岁)须……”,则考虑成人为一个有效等价类;未满18岁者为一个无效等价类。(4)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。(5)如果我们确知,已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。90黑盒测试--等价划分用等价类划分法设计测试用例步骤:(1)形成等价类表,每一等价类规定一个唯一的编号;(2)设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,复重这一步骤直到所有有效等价类都被覆盖为止。(3)设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。91例1:用等价类划分法设计测试用例例如,有一报表处理系统,要求用户输入处理报表的日期。假设日期限制在1990年1月至1999年12月,即系统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误信息。该系统规定日期由年、月的6位数字字符组成,前4位代表年,后两位代表月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。

如何用等价类划分法设计测试用例,来测试程序的日期检查功能?

92(1)划分等价类并编号划分成3个有效等价类,7个无效等价类,如表所示。

表:“报表日期”的输入条件的等价类表输入等价类合理等价类不合理等价类报表日期的类型及长度(1)6位数字字符(2)有非数字字符(3)少于6个数字字符(4)多于6个数字字符年份范围(5)在1990~1999之间(6)小于1990(7)大于1999月份范围(8)在1~12之间(9)等于0(10)大于1293(2)为合理等价类设计测试用例对于表中编号为1,5,8对应的3个合理等价类,用一个测试用例覆盖。

测试数据 期望结果 覆盖范围

199905 输入有效 1,5,8(1)6位数字字符(2)年在1990~1999之间(3)月在01~12之间94(3)为每一个不合理等价类至少设计一个测试用例

测试数据 期望结果 覆盖范围

99MAY

输入无效 219995

输入无效 31999005

输入无效 4

198912 输入无效 6

200001 输入无效 7199900

输入无效 9199913

输入无效 10不能出现相同的测试用例本例的10个等价类至少需要8个测试用例95例2:用等价类划分法设计测试用例用等价划分法设计一个简单程序的测试方案。假设有一个把数字串转变成整数的函数。运行程序的计算机字长16位,用二进制补码表示整数。这个函数是用C语言编写的,它的说明如下:intstrtoint(chararray[7])96被处理的数字串是右对齐的,也就是说,如果数字串比六个字符短,则在它的左边补空格。如果数字串是负的,则负号和最高位数字紧相邻(负号在最高位数字左边一位)。考虑到C编译程序固有的检错功能,测试时不需要使用长度不等于6的数组做实在参数,更不需要使用任何非字符数组类型的实在参数。97输入等价类合理等价类不合理等价类数字字符串的类型及长度1~6个数字字符组成(最高位数字不是零)最高位数字是零最高位数字左邻是负号的数字串(4)空字符串(全是空格)(5)左部填充的字符既不是零也不是空格(6)最高位数字右面由数字和空格混合组成;(7)最高位数字右面由数字和其他字符混合组成;(8)负号与最高位数字之间有空格。(1)划分等价类并编号98输出等价类合理等价类不合理等价类数字字符串的类型及长度(9)在计算机能表示的最小负整数和零之间的负整数(10)零(11)在零和计算机能表示的最大正整数之间的正整数。(12)比计算机能表示的最小负整数还小的负整数(13)比计算机能表示的最大正整数还大的正整数。若计算机字长16位,用二进制补码表示整数,所以能表示的最小负整数是-32768,能表示的最大正整数是32767。99(2)为合理等价类设计测试用例对于表中编号为1,5,8对应的3个合理等价类,用一个测试用例覆盖。

测试数据 期望结果 覆盖范围

1 1 1 000001 1 2,11 -00001 -1 3,9 000000 0 2,10

100(3)为每一个不合理等价类至少设计一个测试用例

测试数据期望结果 覆盖范围‘’ 错误——没有数字 4‘ab1’ 错误——填充错 5‘1

2’ 错误——无效输入 6‘1ab2’ 错误——无效输入 7‘-12’ 错误——负号位置错 8-47561

错误——无效输入 12132767

错误——无效输入 13本例的13个等价类至少需要11个测试用例例3参看书P201/等价类划分测试实例102黑盒测试--边界值分析边界值分析边界值是指输入等价类或输出等价类边界上的值。实践经验表明,程序往往在处理边界情况时发生错误。在测试过程中,边界值分析法是对等价类分析法的补充,专注于每个等价类的边界值。检查边界情况的测试用例是比较高效的,可以查出更多的错误。103边界值-基本思想最小值:Min略高于最小值:Min+正常值:Normal略低于最大值:Max-最大值:Maxa<=X1<=b||c<=X2<=d黑盒测试--边界值分析104

边界值分析-健壮性测试略低于最小值:Min-最小值:Min略高于最小值:Min+正常值:Normal略低于最大值:Max-最大值:Max略高于最大值:Max+a<=X1<=b||c<=X2<=d黑盒测试--边界值分析105边界值分析法与等价类划分法区别:(1)边界值分析不是从某等价类中随便挑一个作为代表,而是等价类的每个边界都要作为测试条件。(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况被测试子域测试内点测试外点

如果在悬崖峭壁边可以自信地安全行走,平地就不在话下。如果软件在能力达到极限时能够运行,那么在正常情况下就不会出什么问题。边界与悬崖很类似黑盒测试--边界值分析黑盒测试边界值分析法的测试用例是由等价类的边界值产生的,根据输入/输出等价类,选取稍高于边界值或稍低于边界值等特定情况作为测试用例。107前例中划分等价类划分成3个有效等价类,7个无效等价类,如表所示。

表:“报表日期”的输入条件的等价类表输入等价类合理等价类不合理等价类报表日期的类型及长度(1)6位数字字符(2)有非数字字符(3)少于6个数字字符(4)多于6个数字字符年份范围(5)在1990~1999之间(6)小于1990(7)大于1999月份范围(8)在1~12之间(9)等于0(10)大于12108表:“报表日期”边界值分析法测试用例

输入等价类测试用例说明测试数据期望结果选取理由报表日期的类型及长度1个数字字符5个数字字符7个数字字符有1个非数字字符全部是非数字字符6个数字字符51999519990051999.5May---199905显示出错显示出错显示出错显示出错显示出错显示有效仅有一个合法字符比有效长度少1比有效长度多1只有一个非法字符6个非法字符类型及长度均有效年份范围年份为1990年份为1999年份为1989年份为2000199001199912198912200001输入有效输入有效显示出错显示出错最小日期最大日期刚好小于最小日期刚好大于最大日期月份范围月份为1月月份为12月月份<1月份>12199801199812199800199813输入有效输入有效显示出错显示出错最小月份最大月份刚好小于最小月份刚好大于最大月份黑盒测试--边界值分析应用边界值分析方法设计测试用例的实例

假如一个为学生标准化考试批阅试卷、产生成绩报告的程序,程序的输入文件由一些有80个字符的记录(卡片)组成。输入数据记录格式如右图所示。

把以上所有记录分为3组:(1)标题。这一组只有一个记录,其内容是成绩报告的名字。(2)各题的标准答案。每个记录均在第80个字符处标以数字“2”。该组的第1个记录的第1~3个字符为试题数(取值为1~999)。第10~59个字符给出第1~50题的标准答案(每个合法字符表示一个答案)。该组的第2、第3……个记录相应为第51~100题、第101~150题……题的标准答案。(3)学生的答卷。每个记录均在第80个字符处标以数字“3”,每个学生的答卷在若干个记录中给出。例如,某甲的首记录第1~9个字符给出学生的学号,第10~59个字符列出的是某甲所作的第1~50题的解答。若试题数超过50,则其第2、第3……个记录分别给出的第51~100题、第101~150……题的解答。然后是某乙的答卷记录。学生人数不超过200人,试题个数不超过999。程序的输出有4个报告。黑盒测试--边界值分析①按学号排列的成绩单,列出每个学生的成绩(百分制)、名次。②按学生成绩排序的成绩单。③平均分数及标准偏差的报告。④试题分析报告。按试题号排列,列出各题学生答对的百分比。下面分别考虑输入数据和输出数据,以及边界条件,选择测试用例。

黑盒测试--边界值分析黑盒测试--边界值分析113黑盒测试--错误推测错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。例如,对于一个排序程序,列出以下几项需特别测试的情况:(1)输入表为空。(2)输入表只含一个元素。(3)输入表中所有元素均相同。(4)输入表中已排好序。测试人员要站在用户的角度,考虑他们要输入的信息,而不管这些信息看起来是合法的输入还是非法的输入。114黑盒测试--因果图等价类划分和边界值分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。因果图能有效地检测输入条件的各种组合可能会引起的错误。因果图因果图导出测试用例的步骤:分析软件规格说明描述中哪些是原因(即输入条件或输入条件等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。在因果图上用一些记号表明约束或限制条件。把因果图转换成判定表。将判定表的每一列作为依据,设计测试用例。116黑盒测试--因果图因果图基本符号黑盒测试--因果图117约束符号图118因果图方法实例某电力公司有A、B、C、D四类收费标准,并规定:居民用电<100度/月 按A类收费≥100度/月 按B类收费动力用电<10000度/月,非高峰,B类收费≥10000度/月,非高峰,C类收费

<10000度/月,高峰,C类收费≥10000度/月,高峰,D类收费黑盒测试--因果图119居民用电动力用电<100度/月<10000度/月高峰12345黑盒测试--因果图

用因果图表明输入和输出间的逻辑关系1I12ABC435DI4I3I2因果居民用电动力用电<100度/月<10000度/月高峰取反

用因果图表明输入和输出间的逻辑关系1I12AB∨∧C435∧DI4I3I2∨∧∧∧∧因果居民用电动力用电<100度/月<10000度/月高峰把因果图转换为判定表组合条件条件(原因)

动作(结果)ABC123123456101100011000110000100001104101050011D000110010000测试用例123为判定表每一列设计一个测试用例:1列居民电,90度/月 A2列居民电,110度/月 B3列动力电,8000度/月, 非高峰 B4列动力电,1.2万度/月, 非高峰 C5列动力电,0.9万度/月, 高峰 C6列动力电,1.1万度/月, 高峰 D

条件测试用例预期结果组合(输入数据)(输出动作)黑盒测试--因果图因果图法测试实例一个处理单价为5角钱的饮料的自动售货机测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,按下“橙汁”或“啤酒”按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示“零钱找完”的红灯亮,这时在投入1元硬币并按下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示“零钱找完”的红灯灭,在送出饮料的同时退还5角硬币。因果图法测试实例因:1.售货机有零钱2.投入1元硬币3.投入5角硬币4.按下啤酒按钮5.按下橙汁按钮果:售货机“零钱找完”红灯亮退还1元硬币退还5角硬币送出啤酒饮料送出橙汁饮料因果图法测试实例1.画因果图的条件和结果1262.因果图—选商品、钱付清1272.因果图—应找零钱1282.因果图—能够找零钱1292.因果图—找零钱1302.因果图—5角钱付清1312.因果图—退1元钱1323.判定表1333.判定表—去除无效用例1343.判定表—合并判定表136黑盒测试策略的综合运用针对具体某个页面或模块,应用等价类的思想划分输入范围(重点测试边界值);可以使用错误推测法追加一些测试用例,这需要依靠测试工程师的智慧和经验。如果涉及多个输入条件的组合情况,再用因果图法考虑所有情况的排列组合。黑盒测试因果图法等价类法边界值法错误推测法137黑盒测试策略的综合运用案例:计算三角形面积程序。输入三个整数A、B、C,输出以A、B、C为三边的三角形面积(1<=A、B、C<100),结果保留2位小数。请运用等价类划分方法,编写测试用例。边长数值非数值整数小数(7)字母(8)能构成三角形(1)空格(10)空白(11)1-99<1(5)>99(6)不能构成三角形a+b<c(2)b+c<a(3)a+c<b(4)特殊字符(9)

划分等价类用例编号所属等价类输入数据预期结果11(有效等价类)A=1,B=1,C=10.4321(有效等价类)A=99,B=99,C=994243.9632(无效等价类)A=1,B=2,C=4提示“3边不能构成三角形”43(无效等价类)A=4,B=1,C=2提示“3边不能构成三角形”54(无效等价类)A=1,B=4,C=2提示“3边不能构成三角形”65(无效等价类)A=0,B=0,C=0提示“请输入1-99之间的整数”76(无效等价类)A=100,B=100,C=100提示“请输入1-99之间的整数”87(无效等价类)A=4.1,B=5.6,C=4.8提示“请输入整数”98(无效等价类)A=ABCD,B=ABCD,C=ABCD提示“请输入1-99之间的整数”109(无效等价类)A=!#$$,B=!#$$,C=!#$$提示“请输入1-99之间的整数”1110(无效等价类)A=空格,B=空格,C=空格提示“请输入1-99之间的整数”1211(无效等价类)A=空白,B=空白,C=空白提示“请输入1-99之间的整数”140实用测试策略(1)例:程序Triangle读入三个整数值,这三个整数代表同一个三角形三条边的长度,程序根据这三个值判断三角形属于不等边、等腰或等边三角形中的那一种。abcTrianglea,b,c三角形的类型?黑盒测试(等价划分)

正常的三角形(a,b,c)不等边三角形(8,10,12);(10,8,12);(10,12,8)等边三角形(10,10,10)等腰三角形(10,10,17);(10,17,10);(17,10,10)

不能构成三角形的非法数据(a,b,c)a+b<c(10,10,21)b+c<a(21,10,10)c+a<b(10,21,10)

退化的三角形(a,b,c)不等边三角形(10,6,4)等边三角形(0,0,0)等腰三角形(10,5,5);(5,10,5);(10,5,5)黑盒测试(边界值分析)

一条边长度为零的情况(0,10,12);(10,0,12);(10,12,0)两条边的长度为零的情况(0,0,17);(0,17,0);(17,0,0)三条边的长度为零的情况(0,0,0)输入数据中包含负整数(-10,-10,-10)……输入数据不全(不足三个正整数)(10,-,-)……输入数据中包含非整数型的数据(a,b,c)(1.2,6e-4,7.8)……黑盒测试(错误推测)141单元测试被测模块集成测试设计信息单元测试被测模块单元测试被测模块已经测试过的模块确认测试系统测试软件需求其它系统元素已集成的软件已确认的软件可交付的软件软件测试步骤142软件测试步骤(1)单元测试(2)集成测试(3)确认测试(4)系统测试1431.什么是单元测试对软件中的最小可测试单元进行检查和验证。单元?1个函数1个类1个窗口、1个菜单…单元测试1442.什么时候进行单元测试程序员编码之后,代码已经通过编译后进行单元测试。前期做一些准备工作:撰写单元测试计划编写单元测试用例单元测试145单元测试3.谁来进行单元测试白盒测试工程师或开发人员。如果有开发人员来测试,做到交叉测试,避免一个人只测试自己的程序。146单元测试4.单元测试的依据是什么源程序本身:代码和注释《详细计划》文档147单元测试5.单元测试通过标准是什么(参考)程序通过所有单元测试的用例语句的覆盖率达到100%分支的覆盖率达到85%148单元测试6.国内单元测试的现状很不正规。只是开发人员简单的编译和调试一下自己的程序,没有相应的单元测试计划、单元测试用例和代码覆盖率的统计。149单元测试7.如何进行单元测试单元测试主要是白盒测试方法。先静态地检查代码是否符合规范再动态运行代码,检查实际运行结果。150单元测试的案例该程序实现的功能如下:#include<stdio.h>voidiszero(intm){ if(m!=0) printf(“%d”,m); else printf(“%d”,1);}voidmain(){inta[5],i=0;printf(“请输入5个整数\n”);for(i=0;i<=4;i++){ scanf(“%d”,&a[i]); iszero(a[i]);}}151单元测试的案例(1)编译运行程序首先编译程序,没有语法上的错误,编译通过。然后运行程序,输入12340,按回车。输出12341,符合预期结果。(2)静态检查检查程序中不符合编码规范的地方,发现程序没有任何注释,应该注明程序的基本信息和各函数的主要功能。152单元测试的案例(3)动态测试边界值问题输入1234567,按回车,运行结果仍然为12345,与预期相符。虽结果正确,但最好能够在程序中加以提示。非法数据的容错性输入5个小数。输入数据时中间不加空格,有可能是逗号。153单元测试的内容:主要对模块的五个基本特性进行评价。单元测试154(1)模块接口测试在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:调用本模块的输入参数是否正确;本模块调用子模块时输入给子模块的参数是否正确全局量的定义在各模块中是否一致(2)局部数据结构测试不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值变量名拼写错或书写错不一致的数据类型全局数据对模块的影响单元测试155(3)路径测试选择适当的测试用例,对模块中重要的执行路径进行测试。应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误.对基本执行路径和循环进行测试可以发现大量的路径错误。(4)错误处理测试出错的描述是否难以理解出错的描述是否能够对错误定位显示的错误与实际的错误是否相符对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起系统的干预等。单元测试156(5)边界条件测试注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。单元测试157单元测试单元测试方法:人工测试计算机测试158单元测试1.单元测试—人工测试由编写者本人非正式地进行。由审查小组正式进行称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出30%~70%的逻辑设计错误和编码错误。审查小组最好由下述四人组成:组长,他应该是一个很有能力的程序员,而且没有直接参与这项工程;程序的设计者;程序的编写者;程序的测试者。1592.单元测试—计算机测试

模块不是独立的程序,自己不能运行,要靠其它部分来调用和驱动,要为每个单元测试开发两个软件:(1)驱动模块(驱动程序)相当于主模块(2)桩模块(测试存根、连接程序)代替所测模块调用的子模块单元测试160BACDE待测试模块单元测试161被测模块B

驱动模块(模拟模块A)桩模块(测试存根)(模拟模块E)测试用例测试结果单元测试162单元测试的测试环境

(a)软件结构(b)模块B的测试环境图:单元测试的测试环境163集成测试单元测试单元测试单元测试单元测试单元测试164集成测试1.什么是集成测试在单元测试的基础上,需要将所有模块按照设计要求组装成为系统,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;

一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。165集成测试2.什么时候进行集成测试单元和集成测试同步进行。在单元测试中先测试几个函数的自身功能,然后再集成测试一下这几个函数的接口(即参数传递)。3.由谁来进行集成测试白盒测试工程师或是开发人员4.集成测试的依据是什么单元测试模块以及《概要设计》文档166集成测试方案:自顶向下集成测试自底向上集成测试核心系统先行集成测试高频集成测试深度优先广度优先集成测试167自顶向下集成测试(需要桩模块)从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。分两种方法:先深度:按照结构,用一条主控制路径将所有模块组合起来;先宽度:逐层组合所有下属模块,在每一层水平地集成测试

沿着移动。

集成测试模块测试结合顺序深度优先:A、B、E、C、D、F广度优先:A、B、C、D、E、F168自顶向下测试的组装模块的方法1)自顶向下结合有两种组合策略:(1)深度优先策略:

图:一个软件结构图

图:采用深度优先策略自顶向下结合模块的过程

(2)宽度优先策略:逐层结合直接下属的所有模块。结合顺序为M,A,B,C,D,E。169自顶向下集成测试组装过程分以下五个步骤:步骤一:用主控模块作为测试驱动程序,其直接下属模块用桩模块来代替;步骤二:根据所选择的集成测试法(先深度或先宽度),每次用实际模块代替下属的桩模块步骤三:在组合每个实际模块时都要进行测试;步骤四:完成一组测试后再用一个实际模块代替另一个桩模块;步骤五:可以进行回归测试(即重新再做所有的或者部分已做过的测试),以保证不引入新的错误。

集成测试170集成测试自底向上集成(需要驱动程序)自底向上的集成是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)事前已经完成组装并经过测试,所以不再需要编制桩模块。171自底向上测试的组装模块的方法自底向上测试测试步骤为:(1)把低层模块组合成实现一个个特定功能的族。如图所示。

图一个软件结构图(2)为每一个族编写一个驱动模块,以协调测试用例的输入和测试结果的输出。如图所示,其中di模块为驱动模块。

图为每个族分别进行测试172自底向上测试的组装模块的方法(3)对模块族进行测试。(4)按软件控制结构图依次向上扩展,用实际模块替换驱动模块,形成一个个更大的族。如图所示。

图形成3个更大的族进一步测试(5)重复(2)~(4)步,直至软件系统全部测试完毕。核心系统先行集成测试先对核心软件部件进行集成测试,在测试通过的基础上再按各外围软件部件的重要程度逐个集成到核心系统中。每次加入一个外围软件部件都产生一个产品基线,直至最后形成稳定的软件产品。方案点评:该集成测试方法对于快速软件开发很有效果,适合较复杂系统的集成测试,能保证一些重要的功能和服务的实现。缺点是采用此法的系统一般应能明确区分核心软件部件和外围软件部件,核心软件部件应具有较高的耦合度,外围软件部件内部也应具有较高的耦合度,但各外围软件部件之间应具有较低的耦合度。核心系统先行集成测试步骤如下:步骤一:对核心系统中的每个模块进行单独的、充分的测试,必要时使用驱动模块和桩模块;步骤二:对于核心系统中的所有模块一次性集合到被测系统中,解决集成中出现的各类问题。在核心系统规模相对较大的情况下,也可以按照自底向上的步骤,集成核心系统的各组成模块。步骤三:按照各外围软件部件的重要程度以及模块间的相互制约关系,拟定外围软件部件集成到核心系统中的顺序方案。方案经评审以后,即可进行外围软件部件的集成。步骤四:在外围软件部件添加到核心系统以前,外围软件部件应先完成内部的模块级集成测试。步骤五:按顺序不断加入外围软件部件,排除外围软件部件集成中出现的问题,形成最终的用户系统。

高频集成测试高频集成测试是指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。如某些自动化集成测试工具能实现每日深夜对开发团队的现有代码进行一次集成测试,然后将测试结果发到各开发人员的电子邮箱中。该集成测试方法频繁地将新代码加入到一个已经稳定的基线中,以免集成故障难以发现,同时控制可能出现的基线偏差。使用高频集成测试需要具备一定的条件:可以持续获得一个稳定的增量,并且该增量内部已被验证没有问题;大部分有意义的功能增加可以在一个相对稳定的时间间隔(如每个工作日)内获得;测试包和代码的开发工作必须是并行进行的,并且需要版本控制工具来保证始终维护的是测试脚本和代码的最新版本;必须借助于使用自动化工具来完成。高频集成一个显著的特点就是集成次数频繁,显然,人工的方法是不胜任的。高频集成测试一般采用如下步骤来完成:

步骤一:选择集成测试自动化工具。如很多Java项目采用Junit+Ant方案来实现集成测试的自动化,也有一些商业集成测试工具可供选择。步骤二:设置版本控制工具,以确保集成测试自动化工具所获得的版本是最新版本。如使用CVS进行版本控制。步骤三:测试人员和开发人员负责编写对应程序代码的测试脚本。步骤四:设置自动化集成测试工具,每隔一段时间对配置管理库的新添加的代码进行自动化的集成测试,并将测试报告汇报给开发人员和测试人员。步骤五:测试人员监督代码开发人员及时关闭不合格项。按照步骤三至步骤五不断循环,直至形成最终软件产品。高频集成测试方案点评:该测试方案能在开发过程中及时发现代码错误,能直观地看到开发团队的有效工程进度。在此方案中,开发维护源代码与开发维护软件测试包被赋予了同等的重要性,这对有效防止错误、及时纠正错误都很有帮助。该方案的缺点在于测试包有时候可能不能暴露深层次的编码错误和图形界面错误。集成测试方案的选择在现代复杂软件项目集成测试过程中,通常采用核心系统先行集成测试和高频集成测试相结合的方式进行。自底向上的集成测试方案在采用传统瀑布式开发模式的软件项目集成过程中较为常见。应结合项目的实际工程环境及各测试方案适用的范围进行合理的选型。确认测试(validationtesting)又称有效性测试。它的任务是验证软件的有效性,即验证软件的功能和性能及其他特性是否与用户的要求一致。在确认测试阶段需要做的工作如下图所示。

确认测试

从上图中可看出,首先要进行有效性测试以及软件配置复审,然后进行验收测试和安装测试,在通过了专家鉴定之后,才能成为可交付的软件。1.进行有效性测试(黑盒测试)有效性测试是在模拟的环境(可能就是开发的环境)下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。确认测试

2.软件配置复查软件配置复查的目的是保证软件配置的所有成分都齐全,各方面的质量都符合要求,具有维护阶段所必须的细节,而且已经编排好分类的目录。除了按合同规定的内容和要求,由人工审查软件配置之外,在确认测试的过程中,应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。必须仔细记录发现的遗漏和错误,并且适当地补充和改正。

确认测试

3.测试和测试在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是无法预测的。

很多软件产品生产者采用一种称之为测试和测试的测试方法,以发现可能只有最终用户才能发现的错误。确认测试

测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。

软件在一个自然设置状态下使用,开发者坐在用户旁边,随时记下错误情况和使用中的问题。

测试的目的是评价软件产品的FLURPS(即功能、局域化、可使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论