版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章软件测试软件测试的概念软件测试策略软件测试技术测试的管理软件的可靠性与容错技术1西安交通大学刘海岩5.1软件测试的概念
1、V&V与软件测试
1963年,美国,飞往火星的火箭爆炸,损失$10million。原因:FORTRAN循环:DO5I=1,3误写为DO5I=1.3软件测试的工作量约占整个项目工作量的40%左右,对于要求极高的系统测试工作量还要成倍增加。微软Exchange2000和Windows
2000中的人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人测试人员/开发人员2.51.92西安交通大学刘海岩
为什么需要这么多人、花这么多代价进行测试?目的何在?“证明程序正确!”对吗?
Myers对软件测试目的提出以下观点:(1)软件测试是为了发现错误而执行程序的过程。(2)一个好的测试用例能够发现至今尚未发现的错误。(3)一个成功的测试是发现了至今尚未发现的错误的测试。因此,测试阶段的基本任务应该是根据软件开发各阶段的文档资料和软件的结构,精心设计一组“高产”的测试用例,利用这些用例执行程序,找出软件中潜在的各种错误(Bug)和缺陷(Defect)。
3西安交通大学刘海岩验证与确认(VerificationandValidation,V&V)是整个软件生命周期中对各阶段(需求评审、设计评审、代码检查、产品测试)过程活动的结果检查和分析的过程,以确保软件既能符合定义中的要求,又能满足客户或用户的要求。Boehm给出了二者之间的不同:•验证:是否正确地建立一个产品?•确认:是否建立了一个正确的产品?验证的作用是检查软件在开发中是否符合它的描述中所定义的功能和非功能的需求。而确认要说明软件是否最终满足用户的要求。如需求中的一些错误和遗漏可能在系统完全实现后才能发现。4西安交通大学刘海岩在V&V过程中有两个主要活动:•软件检查检查各种文档,静态检验技术。•软件测试动态检验技术,实现运行检验。下图给出了两个技术活动在软件过程中的位置:软件检查需求描述高层设计形式化描述详细设计软件实现原型软件测试箭头指示的是该项技术活动在那个阶段使用5西安交通大学刘海岩静态技术只能检查程序及其描述之间的吻合程度,不能够说明软件真的是有用的,也不能检验软件的非功能特性。只有通过测试才能验证系统的有效性。测试和调试是两个不同的过程:•测试是一个发现软件缺陷(Defect)的过程。•调试是一个对缺陷定位和修改的过程。如图所示:测试结果描述测试用例定位错误修改设计错误修改代码对程序再测试调试过程6西安交通大学刘海岩
2、软件测试的原则
(1)测试用例不但应有输入数据,还应有预期的输出数据。这样便于对照检查,做到“有的放矢”。如信用卡有效性的测试用例描述:
输入:
一串代表信用卡号的数字和两个分别代表卡有效期的年和月的整数。
测试:·检查数字串中所有字节都是整数;·检查月份在1-12之间,年份大于或等于当前年份;·使用卡号的最前面的4位数字,检查卡的发行者是否有效,系统内部有一个有关卡发行者的表;·通过提交卡号和卡的截止日期信息给卡的发行者来验证卡的有效性。
输出:显示通过或卡无效的错误信息。7西安交通大学刘海岩
(2)测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。这样能更多地发现错误,提高程序的可靠性。对于不合理的输入数据,要将反馈信息提供给用户。(3)除了检查程序是否做了它应该做的事,还可检查程序是否做了它不应该做的事。例如程序正确地打印出用户所需信息的同时还是否打印出用户并不需要的多余信息。(4)应制定测试计划并严格执行,排除随意性。(5)长期保留测试用例,为以后进行的回归测试和维护提供方便。(6)对发现错误较多的程序段,应进行更深入的测试。因为在修改错误过程中容易引入新的错误。(7)为了达到最有效的测试效果,程序员避免测试自己的程序。8西安交通大学刘海岩3、测试阶段的信息流
测试评价调试可靠性分析软件配置测试配置测试结果分析结果错误可提交错误率数据预期结果预完善其中软件配置:需求说明书、设计说明书和源程序。测试配置:测试计划、测试工具、测试用例(Testcase)和测试驱动程序(Driver)、桩程序(Stub)等。9西安交通大学刘海岩
4、测试方法
分为两类:
(1)黑盒(Black-box)或闭盒(Closed-box)法不考虑被测程序的内部结构和处理过程,只关心它的输入和输出是否能达到预期结果,因此也称为功能性测试。(2)白盒(White-box)或开盒(Open-box)法使用更细致的测试策略,检查被测程序的内部逻辑与结构。黑盒测试法与白盒测试法互为补充,在测试的不同阶段使用以发现不同类型的错误。
10西安交通大学刘海岩5.2软件测试策略
软件测试策略包括测试计划、测试用例设计、测试结果评估等。软件测试的规划模型(V模型)见下页。软件开发多运用正向思维的方式,而软件测试工作则要根据原始需求、验证编码,在思维上更多使用逆向方式,根据已知的方向进行发挥,从中找出并预见到软件开发中的不完善之处。11西安交通大学刘海岩V&V规划该过程的规划应该在开发过程的早期开始。下图说明了测试计划如何从系统描述和设计中导出。有时也称之为V模型。见下图:需求描述实现系统设计详细设计单元测试子系统集成测试系统集成测试验收测试验收测试计划系统集成测试计划子系统集成测试计划单元测试计划12西安交通大学刘海岩对测试的规划主要是制定测试过程标准。主要组成部分见下表:测试过程描述测试过程的主要活动需求跟踪对每项需求都要单独测试测试的项目定义软件过程的产品需要进行测试的项目测试时间安排安排时间及相应资源测试程序记录记录测试结果,并对测试过程检查是否都已记录硬件和软件需求列出测试所要使用的软件工具和硬件设施约束影响测试过程的约束(如人员、工具短缺)13西安交通大学刘海岩下图列出了软件测试的具体步骤,包括各个测试活动之间的关系以及需要的信息。14西安交通大学刘海岩1、单元测试
完成对最小的软件设计单元-软件组件或模块的测试。使用详细设计描述作为指南。对重要的控制路径进行测试以发现错误,多采用白盒测试技术。该步骤可以针对系统中多个组件或模块并行进行。(1)测试任务:
․模块接口․局部数据结构․重要的执行路径․错误处理路径․边界条件15西安交通大学刘海岩
(2)测试环境
单元测试紧接在编码之后进行。但一个组件一般不能独立运行,测试时要对每个组件开发驱动程序(driver)和桩程序(stub)。•驱动程序:接收测试数据,调用被测程序,打印结果。需正确定义驱动程序与被测组件的接口。•桩程序:用来模拟测试时缺少的被调用组件的活动。将来由被测程序调用的真正组件替代。桩程序的接口同真正组件一致,内部只做少量处理,(如响应调用请求,打印“进入-退出”消息,或直接传回所需数据)。
16西安交通大学刘海岩2、集成测试也称为组装测试。对单个组件或模块的测试达到目标之后,将它们组合成一个能工作的系统以发现组件交互中的问题。一般根据设计中建造的软件体系结构采用黑盒技术进行测试。“单个模块能正常工作,组装起来不会有问题!”真的吗?
•单元测试使用的驱动模块和桩模块,与它们所代替的真正组件并不完全等效,因此单元测试有不彻底、不严格的情况。
•各个组件组装起来,穿越组件接口的数据可能会丢失。
•一个组件的功能可能会对另一个组件的功能产生不利的影响。
•各个组件的功能组合起来可能达不到预期的总的功能。17西安交通大学刘海岩
•单个组件可以接受的误差,组装起来可能积累和放大到不能接受的程度。
•
全局数据可能会出现问题。因此必须要进行集成测试,用于发现组件组装中可能出现的问题,最终构成一个符合要求的软件系统。深度优先自顶向下宽度优先渐增式三明治式集成的方法自底向上非渐增式
18西安交通大学刘海岩
集成测试的具体方法与步骤设系统是由组件组成的的层次结构。如图所示:
19西安交通大学刘海岩(1)自顶向下集成(top-downintegration)20西安交通大学刘海岩集成测试的步骤:①测试顶层模块(M),用桩模块(S)替代直接下层组件。②根据深度优先或宽度优先的策略,每次用一个实际组件(M)代换一个桩。③每结合进一个组件后进行测试④全部或部分地重复以前做过的测试。MS1S2M1S3S4M2S221西安交通大学刘海岩优点:能在早期发现高层组件接口、主要控制等方面的问题;初期的程序概貌可让人们较早地看到程序的主要功能,增强人们的信心。缺点:桩模块只是对低层组件的模拟,不能提供完整的信息,许多重要的测试须推迟进行;桩模块设计较多,测试开销大;早期不能并行工作,不能充分利用人力。22西安交通大学刘海岩(2)自底向上集成(Bottom-up
integration)23西安交通大学刘海岩自底向上集成步骤:①把底层组件(M)组合成族,每族实现一个子功能。②用驱动程序(D)输入测试数据,测试子功能族。③用实际组件(M)替代驱动程序,把子功能族组合成更大的族。④重复上述工作,直至系统整个结构都测试完毕。MMMMMMMMMMMMDDDDDD24西安交通大学刘海岩优点:随着上移,驱动模块逐步减少,测试开销较小;容易设计测试用例;早期可以并行工作;底层组件的错误能较早发现。缺点:系统整体功能最后才能看到;全局性的问题发现较晚。25西安交通大学刘海岩(3)三明治式集成(sandwichintegration)26西安交通大学刘海岩(4)一次性集成(big-bangintegration)
非渐增式测试。
优点:并行工作,充分利用人力。缺点:很难找出错误的原因;不易区分接口错误与其他类型的错误。27西安交通大学刘海岩集成策略的比较(Myers1979)自底向上自顶向下改进的自顶向下一次性集成三明治式改进的三明治式集成时间早早早晚早早能产生基本运行程序的时间晚早早晚早早需要驱动程序是否是是是是需要桩程序否是是是是是工作的并行性中等低中等高中等高测试特殊路径的能力容易难容易容易中等容易计划和控制顺序的能力容易难难容易难难28西安交通大学刘海岩微软的集成方法
微软的集成策略是由市场驱动的,基于尽快产生能运作的产品的需要,使得测试小组能随着开发人员对产品能做什么和应该做什么有更多的了解的同时,随时变动产品说明的特征。产品和项目按特征被划分成各部分,不同的小组负责不同的特征。里程碑的定义由特征的划分来决定,分为最重要的、期望的和最不重要的(最不关键的)。最重要的特征首先被开发和集成,而每个里程碑包含了“缓冲时间”,处理意外的复杂性或延迟。如果进度必须缩减,则从产品中删掉最不关键的特征。下图显示了里程碑的演化:29西安交通大学刘海岩30西安交通大学刘海岩3、系统测试
有如下过程:(1)
功能测试:检查集成的系统在运行时是否满足需求中指定的功能。单元测试和集成测试的重点是组件及组件间的交互。这里的测试不必知道正在执行哪个组件,但必须知道系统是作什么的。与功能相关的活动集合称为线程(thread),因此这里的功能测试有时称为线程测试。功能测试采用黑盒技术,测试用例从需求文档中产生。如,对一个文字处理系统的测试可以检查文档创建、文档修改、文档删除等功能。有时可分析需求的语义,用输入与输出之间或输入与转换之间的逻辑关系建立判定表来实现测试。
31西安交通大学刘海岩(2)
性能测试:
针对的是非功能性需求,即测试的类型由非功能性需求的定义来决定。
•强度测试(stresstest)评价系统在短时间内到达其极限时的表现。
•容量测试(volumetest)检查系统对大量数据的处理。
•恢复测试(environmentaltest)检查系统的容错(出错、故障、掉电等处理)能力,能否在指定时间内修正错误并重新启动系统。
•安全测试(securitytest)测试系统的保护措施及数据与服务的完整性、保密性等。还有许多方面的测试,如对用户的响应时间、执行某个功能的运行时间的计时测试,系统的可用性测试等。
32西安交通大学刘海岩以上是开发人员以需求规约为依据、采用黑盒技术,通过对系统及其目标的理解而进行的测试。开发人员的理解需要用户的认可,因此还要进行以下用户确认的测试。(1)验收测试:
也称确认测试。指验收软件的有效性,使用户确信他们需要的就是这个系统。有时在实际环境中进行,有时在开发环境中进行。除了检查系统功能性能外,还要进行软件配置审查,包括文档的完整性、一致性、准确性的检查,是否具有维护阶段必需的细节。(2)安装测试:在实际环境中进行的测试。测试系统的完备性及可能被现场条件影响的那些功能或非功能性特性。33西安交通大学刘海岩
还有2种被经常采用的系统确认测试的策略:(1)Alpha测试:软件提交用户,由用户在开发环境中由开发人员“指导”下进行的测试;或者在提交之前,由来自自己组织机构内部或公司的用户进行试验性的测试(内部测试)。(2)Beta测试:用户在目标环境(实际使用环境)下进行的测试。对于一些软件,要选择能代表系统所有使用方式的客户组来进行测试。如微软的“WindowsXP”Beta2测试版由用户免费试用,半年后测试版作废。34西安交通大学刘海岩面向对象软件的测试策略在面向对象系统中,Sommerville认为测试可分为4个层次:(1)测试与对象关联的单个操作(传统的单元测试),白盒、黑盒测试方法相结合。(2)测试单个对象类,黑盒测试原理不变。
(单元测试)(3)测试对象集群,严格的自顶向下或自底向上的集成不适用于一组关联对象,应使用其他方法,如基于用例或使用场景的测试。(集成测试)(4)测试面向对象系统。根据系统需求进行验证与确认。
35西安交通大学刘海岩
(1)单元测试(类或对象或组成的小簇)OO语境中,由于每个类或对象封装了属性和操作这些属性的服务,最小的可测试单位不是个体模块(单元的概念发生了变化),而是封装了多个操作的类或对象。类测试由封装在该类中的操作和类的状态行为驱动的。Sommerville在比较面向对象系统和使用功能模型开发的系统之间的差别时指出:“对象作为一个单独的组件一般要比一个功能模块大”。类包含一组不同的操作,并且某个特殊操作可能作为类的一部分存在(如子类中继承的操作),因此,单元实际上是类或若干相关的类组成的小簇。36西安交通大学刘海岩
单元测试不再孤立的测试单个操作(这是传统的单元测试的视角),而是将操作作为类的一部分。例如:命令execute()粘贴命令execute()拷贝命令execute()execute由基类定义并被一组子类继承,每个子类的execute被应用于每个子类定义的私有属性和操作的语境内,因此,仅在基类内测试execute是不充分的,应该在每个子类的语境内测试execute。当然,可在基类的测试要求和测试用例上添加新的要求和用例。37西安交通大学刘海岩单元测试若用于测试不发生请求的类(如“栈”类,其中操作有:pop(),push(),empty())时,同样要设计驱动程序,封装在一个测试类(包)中,测试类负责运行测试用例并给出结果,每个测试用例用一个操作名表示;单元测试如果测试发生请求的类,则需要设计桩程序,封装在桩类中。单元测试主要的参考模型是:类图、类的状态图、活动图。38西安交通大学刘海岩
(2)集成测试(大簇、构件、子系统)
这里的构件或子系统应该与系统的体系结构相对应。集成测试主要以检查这些构件、子系统的接口为目的。对于类之间的集成,RogerS.Pressman认为传统的自顶向下和自底向上集成的测试策略没有意义。他提出了两种集成测试策略:
•基于线程的测试(thread-basedtesting)集成一组相互协作的对某个输入或事件作出响应的类,每个线程单独地集成和测试,并使用回归测试以保证没有副作用产生。
•基于使用的测试(use-basedtesting)按层次测试系统。先测试不依赖服务器的独立类,如管理和显示数据的类,然后测试依赖独立类的其他类。逐步增加依赖类,直到测试完整个系统。Sommerville提出基于用例或场景的测试也是一种有效方法。39西安交通大学刘海岩
对于子系统之间的集成,如果系统划分为层次结构,则可以按自顶向下或自底向上集成,同时也需设计驱动类和桩类。如:一个OO系统的结构为:用户界面(A)应用逻辑(B)访问数据库(C)网络通信(D)应用系统的一个结构
该系统可以采用自顶向下、自底向上或三明治式进行集成测试。见下图。40西安交通大学刘海岩UI层桩桩UI层应用层桩桩UI层应用层数据库网络数据库层网络层驱动驱动数据库网络应用层驱动驱动UI层桩桩数据库层网络层驱动驱动自顶向下自底向上三明治式41西安交通大学刘海岩TestATestBTestCTestDTestA、BTestB、CTestB、DTestA、B、C、D单元测试集成测试集成测试测试过程(UML活动图)
集成测试的参考模型是:顺序图、协作图、活动图(概念层)42西安交通大学刘海岩(3)确认测试
在确认和系统测试层次,和传统的一样。测试的内容主要集中于用户可见的动作和用户可识别的系统输出(用户可见的功能),以及系统性能、强度、安全、质量属性等方面的需求。测试人员应该根据需求规约和用例模型设计测试用例。
43西安交通大学刘海岩5.3软件测试技术
白盒法和黑盒法是设计测试用例的基本方法,每一种方法对应着多个设计用例的技术,每种技术可达到一定的测试目的。1、白盒技术
白盒测试一般在测试过程的早期执行,被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用例。白盒测试的原则是:
•保证被测程序中每一条独立的路径至少执行一次。
•保证所有判断的每一分支至少执行一次。
•保证每一循环都在边界条件和一般条件下至少各执行一次。
•验证所有各内部数据结构的有效性,如每个变量的定义到该定义使用的每条路径。。44西安交通大学刘海岩(1)基本路径测试
主要思想:•该方法把要覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。•它是在程序控制流图的基础上,分析控制结构的环路复杂性,导出基本可执行路径集,由此设计一组测试用例,保证对程序中的每一个可执行语句至少执行一次。
45西安交通大学刘海岩
基本路径测试的步骤为:①以详细设计或源程序为基础导出程序的控制流图,简称为流图(flowgraph),它是反映控制流程的有向图。其中小圆圈○为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句,表示控制流的箭头称为边或路径。左图中显示了程序流程图及对应的流图:1046西安交通大学刘海岩
转换时注意:
•一条边必须终止于一个结点,在选择结构中分支汇聚处即使无语句也应有一个汇聚结点。•如果判断中的条件表达式是复合条件,则需改为一系列只有单个条件的嵌套判断。如下图所示:47西安交通大学刘海岩
②计算流图G的环路复杂性V(G)。有三种方法:V(G)=封闭区域数+1或V(G)=判定结点数+1或V(G)=E-N+2其中E为边的数量,N为节点数量例如,16页的流图V(G)=4。③确定只包含独立路径的基本路径集。一条独立路径是至少包含一条在其它独立路径中从未有过的边的路径,即至少包含一条新边。环路复杂性V(G)的值给出了程序基本路径集中独立路径的上界,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。基本路径集不唯一。对于给定的流图,可以得到不同的基本路径。48西安交通大学刘海岩例如,在18页图示的控制流图中,一组独立的路径是
path1:1-11
path2:1-2-3-4-5-10-1-11
path3:1-2-3-6-8-9-10-1-11
path4:1-2-3-6-7-9-10-1-11
路径path1,path2,path3,path4组成了控制流图的一个基本路径集。④设计测试用例,确保基本路径集中的每一条路径的执行。必须注意,某些独立的路径往往不能以独立的方式被测试,即穿越路径所需的数据组合不能形成程序的正常流,在这种情况下,这些路径的测试必须作为另一条路径测试的一部分进行测试。49西安交通大学刘海岩例:用基本路径测试方法对以下的程序(伪码描述)设计用例。Sort①
for(i=1;i<=n-1;i++)k=i;②for(j=i+1;j<=n;j++)if(a[k]>a[j])k=jendfor
③
④
if(k!=i)swap(a[i],a[k])
⑦
endfor
⑤
⑥endSort50西安交通大学刘海岩
Path1:1-7Path2:1-2-5-1-7Path3:1-2-5-6-1-7Path4:1-2-3-2-5-1-7Path5:1-2-3-4-2-5-6-1-7设计用例:输入预期输出结果通过路径n=1排序表中只有一个数Path1n≥2且输入表已排序的输出表Path4中已排序n≥2且输入表已排序的输出表Path5中未排序Path2和Path3无法单独测试,但已包含在Path4和Path5中测试过了。51西安交通大学刘海岩(2)图矩阵为了使基本路经测试自动化,称为图矩阵(graphmatrix)的数据结构很有用。P48页的流图可转化为如右图的连接矩阵。矩阵中的值为连接权值,可赋予如下属性:
•执行连接边的概率
•穿越连接的处理时间
•穿越连接时所需的内存
•穿越连接时所需的资源最简单的权值为1(有连接)或0(无连接)。111111111112345671234567连接矩阵结点连接到结点含有两个或两个以上项的行表示判定结点52西安交通大学刘海岩(3)循环覆盖要覆盖含有循环结构的所有路径是不可能的,可通过限制循环次数来测试(基本路径测试限制为一次)。给出以下设计原则:•单循环设n为允许执行循环的最大次数,作以下测试:
①跳过循环;
②仅循环一次;
③循环m次,m<n;④分别循环n-1次,n次,n+1次。•嵌套循环
①置外循环处于最小循环计数值,对内层进行单循环测试;②由里向外,回退到上一层循环测试。•并置循环若完全独立,采用单循环策略;若第一个循环的计数器作为第二个循环的初值,用嵌套循环策略。53西安交通大学刘海岩
2、黑盒技术黑盒测试的被测对象一般是功能独立的模块或构件。注重测试软件的功能需求,试图发现以下几类错误:․不正确或遗漏的功能;․接口错误;․数据结构或外部数据库访问错误;․行为或性能错误;․初始化和终止错误。几种具体的方法:
(1)基于图的测试方法首先理解软件建模中创建的对象(数据对象、模块或构件)及这些对象之间的关系。然后建立图:用结点表示对象,连接表示对象间的关系,结点权值表示结点的属性(数据值或状态行为),连接权值描述连接的某种特征。(下图)54西安交通大学刘海岩对象1对象2有向连接(连接权值)对象3无向连接并行连接(表示有几种不同的关系)a)图表示新建文件(菜单选择)文档窗口菜单选择生成(生成时间<1.0秒)文档文本表示为包含b)一个简单的例子编辑属性:起始维:缺省设置或偏好;背景颜色:白色文本颜色:缺省颜色或偏好55西安交通大学刘海岩
测试人员通过遍历图并覆盖图中所示的关系来设计测试用例,用于发现各种关系中的错误。Beizer描述了几种使用图的行为测试方法:
•事务流建模:结点表示事务的步骤,连接表示这些步骤间的逻辑关系。数据流图可用于辅助创建这种类型的图。
•有限状态建模:结点表示软件的状态,连接表示状态间的转换。状态图可用于辅助创建这种图。
•数据转换流建模:结点表示数据对象,连接表示数据对象的转换。
•时间建模:结点为程序对象,连接指对象间的执行顺序,连接权值指定程序所需的执行时间。56西安交通大学刘海岩
(2)等价类划分主要思想:根据被测对象的功能说明和输入域,按合理的或不合理划分为若干等价类,为每个等价类设计一个测试用例,这样大大减少测试次数,提高测试效率。该方法步骤如下:①划分等价类对被测程序功能说明的输入域或输出域划分等价类。以下是一些原则或经验:
•当规定了输入范围时可划分:
无效类[有效类]无效类•当规定了输入数据必须遵循的规则时,可确定一个合理等价类(符合规则)和若干不合理等价类(可从各种角度违反规则)。
57西安交通大学刘海岩例如:Windows文件名可以包含255个字符,但不能包含/、\、>、<、*、?、〝、|、:、;等字符。文件名的等价类划分为下表:输入条件合理等价类不合理等价类文件名字符个数1~2550个,≧256个文件名组成含合法字符含非法字符58西安交通大学刘海岩•为便于设计用例,每个等价类可划分为更小的等价类。
•当规定了输入的一组值,且对不同值做不同处理时,每个允许的输入值是一个合理的等价类,另有一个不合理的等价类(任何一个不允许的输入值)。以上经验也适用于对输出信息的划分。例如在一个序列中搜索某个给定关键字的元素,它的输出有两个明显的等价划分:•输入的关键字在这个序列中。•输入的关键字不在这个序列中。59西安交通大学刘海岩
②设计测试用例
•为每个等价类编号。
•设计一个测试用例,使其尽可能多地覆盖尚未被覆盖的合理等价类,重复这一步直到所有合理等价类都被覆盖。
•设计一个测试用例,使其只覆盖一个尚未被覆盖的不合理等价类,重复这一步直到所有不合理等价类都被覆盖。例1:某一报表处理模块要求用户先输入处理报表的日期。假定日期限制在2005年1月至2006年12月,即模块只能对该段时期内的报表进行处理。该模块的需求说明中规定输入日期由6位数字字符组成,前4位表示年,后两位表示月。现用等价类划分法设计用例以测试模块的日期检查功能。60西安交通大学刘海岩输入等价类
合理等价类不合理等价类报表日期的类型及长度1、6位数字字符2、有非数字字符3、少于6位数字字符4、多于6位数字字符年份范围5、2005和20066、小于20057、大于2006月份范围8、在1—12之间9、等于010、大于12
①划分等价类并编号:②为合理等价类设计测试用例:测试数据期望结果覆盖范围200605显示“输入日期有效”1,5,861西安交通大学刘海岩③为每一个不合理等价类设计测试用例:测试数据期望结果覆盖范围2006.5显示“输入日期有非数字字符”220065显示“输入日期少于6位数字字符”32006005显示“输入日期多于6位数字字符”4200412显示“输入日期年份小于2005”6200701显示“输入日期年份大于2006”7200600显示“输入日期月份为0”9200513显示“输入日期月份大于12”10(3)边界值分析输入域的边界比中间更容易发现错误,是一种补充等价类划分的设计测试用例技术。62西安交通大学刘海岩(4)错误推测根据经验或直觉推测程序中可能存在的各种错误,有针对性的设计检查这些错误的测试用例。如:输入、输出数据为零的情况;输入表格为空或输入表格只有一行的情况。(5)使用判定表如果功能说明中含有多个输入条件的逻辑组合,可以建立判定表,判定表的每一列对应一个测试用例。在实际测试中,综合使用这些方法,以达到最有效的测试。63西安交通大学刘海岩面向对象软件的测试用例设计
传统的测试用例设计是由软件的输入、加工、输出视图或个体模块的算法细节驱动的,面向对象测试关注于设计合适的操作序列以测试类的状态和用例的实现。(1)传统方法的可用性白盒测试:用于类级别的测试。测试类中封装的操作,检查类的状态以确定是否存在错误。黑盒测试:用于集成测试、确认测试。构件、子系统是黑盒。测试序列跟踪跨越类协作的操作流,即跟踪一个用例的实现。。(2)类级的测试用例设计(单元测试)着重于单个类及封装的操作。可按照以下方法设计用例:
64西安交通大学刘海岩
①随机测试考虑一个银行应用程序,其中account类有下列操作:open,setup,deposit,withdraw,balance,summarize,creditLimit和close。但问题的性质隐含了一些限制(例如,账号必须在其它操作可应用前被打开,在所有操作完成后被关闭)。一个account实例的最小行为生命历史包括下面操作:
open,setup,deposit,withdraw,close它们表示了account的最小测试序列。然而大量的其它行为可能在下面序列中发生:open,setup,deposit,[deposit|withdraw|balance|summarize|creditLimit]n,withdraw,close一系列操作序列可以随机产生,例如:测试用例1:open,setup,deposit,deposit,balance,summarize,withdraw,close65西安交通大学刘海岩
测试用例2:open,setup,deposit,withdraw,deposit,balance,creditLimit,withdraw,close可随机选取其它的测试序列以测试该类对象不同的生命历史。
②划分测试可以减少测试类所需的测试用例的数量,采用与传统测试的等价划分相同的方式,即输入、输出被分类,为处理每个类别设计测试用例。划分类别的具体方法是:
•基于状态的划分基于类操作改变类状态的能力来对类操作分类。类中有的操作改变类的状态(如account类中的deposit和withdraw),有的操作不改变类的状态(如balance,summarize和creditLimit)。因此分别独立测试改变状态的操作和不改变状态的操作。66西安交通大学刘海岩
•基于属性的划分根据操作使用的属性来划分类操作,即使用相同属性的操作划分在一个等价类中。如account类中,以属性creditLimit来定义划分,操作被定义成3个类别:
①使用creditLimit的操作,②修改creditLimit的操作,③不使用或不修改creditLimit的操作。然后对每个划分设计测试序列。
•基于操作类别的划分如在account类中的操作可被分类为:初始化操作(open、setup)、计算操作(deposit,withdraw)、查询操作(balance,summarize,creditLimit)和终止操作(close)。67西安交通大学刘海岩③从行为模型导出的测试类的STD可用于帮助导出测试类的动态行为的测试序列。下图是银行应用系统account类的STD。所涉及的测试应覆盖所有的状态,即操作序列应该导致account类的转换穿越所有允许的状态。68西安交通大学刘海岩测试用例1:open,deposit(initial),withdrawal(final),close(最小测试序列)测试用例2:open,deposit(initial),deposit,balance,credit,withdrawal(final),close测试用例3:open,deposit(initial),deposit,withdraw,accntInfo,withdrawal(final),closesetupacctworkingacctnonworkingacctopendeposit(initial)depositbalance,credit,accntInfowithdrawal(final)closewithdraw69西安交通大学刘海岩对类中的每个方法至少发送一个消息,使对象从α状态到ω状态,表明经过的所有方法均是可操作的。可以使用“宽度优先的方式”遍历STD:一个测试用例测试单个状态转换,当测试新的转换时,仅使用以前被测试过的转换。70西安交通大学刘海岩
(3)类间的测试用例设计(集成测试)
测试类或构件被组装后相互之间能否正常交互完成指定的功能。使用use-case作为测试的主要驱动,顺序图、协作图为测试提供帮助。和单个类一样,可通过应用随机和划分方法以及基于use-case场景和行为模型导出测试用例。
①随机测试Kirani等人建议用下面的步骤生成多类随机测试用例:
•对每个客户类,使用类操作列表生成随机测试序列,这些操作将向其他服务类发送消息。•对生成的每个消息,确定协作类和服务对象中的相应操作。•对服务对象中的每个操作(已被客户对象的消息调用),确定它所发送的消息。71西安交通大学刘海岩•对每个消息,确定下一层被调用的操作并将其引入到测试序列中。如,某一个应用问题的类协作图如下:ABCDEx1,x2,…x3x4对B的随机测试序列可能是x1,x2,…,为了考虑涉及到该测试的协作者,要考虑上述序列中每个操作相关联的消息。设B必须与C协作(需执行x3)以执行x1,B与D协作(需执行x4)以执行x2。因此,对B的测试序列应该是:x1[与x3协作],x2[与x4协作],…测试序列跟踪跨越类协作的操作流。基于用例的实现是产生随机测试序列的基础。72西安交通大学刘海岩
②划分测试类似于单个类划分测试方法,但需扩展测试序列以包括那些通过发送给协作类的消息而激活的操作。另一种方法是基于特殊类的接口来划分测试。如上图,B接收来自类A和类E的消息,可以通过将B中的方法划分为服务于A和服务于E的操作来测试。
③基于交互场景的测试先测试那些最常用到的交互场景,不寻常的或异常的场景放在稍后测试。交互场景可以从设计的用例中来,为了补充测试信息,需要用时序图来更详细说明对象是如何完成一个场景的。下图给出了气象台子系统在响应一个采集数据请求时的操作序列:
73西安交通大学刘海岩:通信控制器:气象台:气候数据Request(report)Acknowledge()Report()Summarise()Send(report)Reply(report)Acknowledge()收集气象数据的时序图可看出发出一个上报数据请求时产生以下的线程来执行:CommsController:request→WeatherStation:report→WeatherData:summarise74西安交通大学刘海岩当选择场景设计测试用例时,保证对每个类中的每个方法至少执行一遍。应该有一个对象类及其方法的核对清单,当选择了一个场景时,得到执行的方法用记号标记出来,至少保证了所有的单个方法被测试过。时序图也能用来找出测试中需要的输入和输出。(4)其它需要考虑的问题以上测试用例的设计主要考虑选取合适的操作序列,还要考虑操作的参数(接口),在选择参数时可对参数划分等价类,每个输入参数属于一个等价类,同时还需考虑参数的边界情况。75西安交通大学刘海岩有关的测试工具1、JUnit是对程序代码进行单元测试的开源Java框架。特点:编写测试用例简单、自动检验测试结果并提供反馈、允许组合多个测试等。2、JTest是Parasoft公司推出的自动化白盒测试工具。自动或半自动生成测试用例,并执行用例,监测代码的路径和分支覆盖率。另外还提供代码的静态检查功能、测试用例参数设置等功能。3、C++Test:自动生成测试用例、测试驱动函数和桩函数,支持白盒测试、黑盒测试、回归测试并监测测试覆盖率。4、TestWorks:包含了一套完整的集成的测试工具,包括测试管理和测试报告。4、LoadRunner:预测系统行为和性能的测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找系统性能问题。76西安交通大学刘海岩5.4测试的管理
1、测试文档为了控制测试的复杂性并提高测试效率,需建立测试文档:
•测试计划:目标,文档引用,系统输入/出及主要处理,主要测试,进度,所需材料等。
•测试说明:测试项标识,满足的需求,方法条件,测试用例,测试步骤等。
•问题报告和分析报告:记录每一个测试事件,给出测试结果的完整信息,分析实际测试结果和预期结果的差异及影响,并确定问题严重等级。见下图:77西安交通大学刘海岩78西安交通大学刘海岩计算机软件文档编制规范(GB/T8567-2006)
《软件测试说明》模版§1.范围§1.1标识文件状态(草稿/正式发布/正在修改);文件标识;当前版本;作者§1.2系统概述(名称、功能、性能、上下文关系、用户、开发者)§1.3文档概述(类型、描述方法、预期读者)§1.4基线§2.引用文件§3.测试计划§3.1测试进度(单元、集成、系统测试的时间段)§3.2测试方案(功能、性能)§3.3测试环境(配置要求)§3.4人员安排§4.测试说明§4.1功能测试(给出各个功能的测试用例)§4.2性能测试(压力、安全测试等)79西安交通大学刘海岩计算机软件文档编制规范(GB/T8567-2006)
《软件测试报告》模版§1.范围§1.1标识文件状态(草稿/正式发布/正在修改);文件标识;当前版本;作者§1.2系统概述(名称、功能、性能、上下文关系、用户、开发者)§1.3文档概述(类型、描述方法、预期读者)§1.4基线§2.引用文件§3.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国服装行业竞争力策略及投资盈利预测报告版
- 2024-2030年中国有机焦糖食用色素行业销售现状与供需前景预测报告
- 2024-2030年中国智能化数字显示仪表融资商业计划书
- 《基于过渡金属化合物柔性膜的锂金属电池性能研究》
- 智能地磅物联预警
- 《基于“三焦”水液停聚模型的桑白皮、葶苈子代谢组学研究》
- 2024-2030年中国托儿所服务行业改革创新模式及投资规划分析报告版
- 2024-2030年中国快捷酒店产业发展现状及投资经营模式分析报告版
- 2024-2030年中国微滤膜行业产量预测及投资潜力研究报告
- 2024-2030年中国建筑钢材行业发展分析及前景趋势与投资风险研究报告
- 2024年有子女无财产离婚协议参考范文(四篇)
- 2024欠款还款协议书
- 阿米巴巴长知识竞赛考试题库(含答案)
- 2024-2025学年部编版(2024)七年级历史上册知识点提纲
- 2024至2030年中国鸡蛋行业市场发展现状及投资规划建议报告
- 小学三年级下一字多义(答案)
- 六年级上册道德与法治全册教学课件
- XX集团内部审计人才库管理办法(专业完整格式模板)
- 《铸牢中华民族共同体意识》课件
- 创新创业通论(第三版)课件 第十章 企业创立与管理
- DB42T535-2020建筑施工现场安全防护设施技术规程
评论
0/150
提交评论