执行测试一S第四章_第1页
执行测试一S第四章_第2页
执行测试一S第四章_第3页
执行测试一S第四章_第4页
执行测试一S第四章_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

执行测试一S第四章软件测试技术2第四章执行测试4.1测试执行概述4.2执行系统测试4.3执行单元测试4.4执行集成测试3软件测试过程单元测试单元测试单元测试集成测试集成测试系统测试被测模块被测模块被测模块设计信息软件需求用户信息其它元素…*验收测试*交付用户…软件测试的过程流程44.1测试执行概述测试执行过程建立测试环境执行测试用例记录测试结果管理有软件错误报告测试结果执行测试的过程,也是不断发现缺陷的过程。在发现和记录了软件缺陷后,还需要对缺陷进行管理,包括对缺陷的分类、报告、重现、跟踪和统计分析。5例子#include<stdio.h>voidiszero(intm){if(m!=0)printf(“%d”,m);elseprintf(“%d”,1);}voidmain(void){inta[5];inti=0;printf(“pleaseinput5datas\n”);for(i=0;i<5;i++){scanf(“%d”,&a[i]);iszero(a[i]);}程序功能:若输入的数组元素不等于0,则输出元素值;若输入的数组元素值为0,则输出1。64.3执行单元测试什么是单元测试(unittesting)?指对软件中的最小可测试单元进行检查和验证。单元,一般应根据实际情况判定其具体含义,如,C中,单元指1个函数,java中,单元指1个类,图形化软件中也可以是1个窗口、1个菜单等,单元就是认为规定的最小被测试的模块。7在单元测试的过程中,会综合运用静态测试技术和动态测试技术。在进行单元测试的过程中,一般会使用白盒测试,但也会结合使用黑盒测试。单元测试是针对程序模块进行正确性检验的测试工作。在编码的过程中作单元测试,其花费是最小的,在代码编写完成后的单元测试工作主要分为两个步骤:人工静态检查动态执行跟踪84.3.1静态检查合格的代码应该具备以下性质:正确性:指代码逻辑必须正确,能够实现预期的功能清晰性:指代码必须简明、易懂,注释准确没有歧义规范性:指代码必须符合企业所定义的共同规范包括命名规则,代码风格等等一致性:指代码必须在命名上风格上都保持统一高效性:指代码不但要满足以上性质,而且需要尽可能降低代码的执行时间9单元测试时,静态测试常采用以下方式:代码走查桌面审查(同级复查)代码评审10通常的人工检查阶段需要执行下列内容:P113大多数单元测试会使用同级复查,即由开发人员的同伴(另外一个程序员)对文档和代码进行检验。不同公司、不同的项目会有不同的复查项检查清单,例如下面的一些典型复查项:函数入口处的形式参数的合法性有没有显然的数组越界操作代码的注释量是否符合公司规范是否设置了适当的出错处理……静态测试也可采用一些辅助工具软件进行,例如PC-Lint一款C/C++语言代码静态测试工具。11单元测试时,应该对模块进行如下检查:对模块内所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真“与”假“的情况至少各执行一次;在循环的边界和运行界限内执行循环体;测试内部数据的有效性等等。4.3.2动态跟踪测试—排错—调试12单元测试针对每个程序的模块,主要测试5个方面的问题:——模块接口、局部数据结构、边界条件、独立的路径和错误处理。模块模块接口局部数据结构独立的路径出错处理边界条件4.3.3单元测试的重点13单元测试的重点:模块接口:检查参数个数、数据类型、顺序是否正确,确定返回值的类型及有效性;局部数据结构:测试其内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。独立的路径:在单元测试中,最主要的测试是针对路径的测试。边界条件:软件常常在边界地区发生问题。错误处理:测试出错处理的要点是模块在工作中发生了错误,其中的出错处理设施是否有效。14单元测试的入口标准:通常在编码完成后进行,在前期应准备,如写单元测试计划、编测试用例、单元测试代码等。一般由白盒测试工程师、开发人员完成。单元测试的依据:项目的详细设计文档和源程序(包括代码和注释)。如何进行单元测试?一般先静态地检查代码是否符合规范,然后动态地运行代码并检查运行结果。测试方式:主要用白盒测试。

15单元测试的一般步骤:静态测试,检查代码是否符合规范,参看“编码规范”,如变量、类、方法的命名规范等。编译运行程序,进行语法正确性验证动态测试,深入检查代码的正确性、容错性和边界值等。需要提前设计一些测试步骤、测试用例。如何进行单元测试?16案例单元测试例子#include<stdio.h>voidiszero(intm){if(m!=0)printf(“%d”,m);elseprintf(“%d”,1);}voidmain(void){inta[5];inti=0;printf(“pleaseinput5datas\n”);for(i=0;i<5;i++){scanf(“%d”,&a[i]);iszero(a[i]);}程序功能:若输入的数组元素不等于0,则输出元素值;若输入的数组元素值为0,则输出1。17静态测试,参照c语言编码规范,检查程序中是否存在不符合规范的地方,发现没有注释编译运行该程序,无语法错误,编译通过动态测试运行时,输入数据,包括合法数据,非法数据,边界值.运行:合法数据,输入12340,输出为12341,符合预期结果注意:边界值问题,如输入1234567;数组的边界值等;非法数据的输入,如输入abcde,则结果出现某些数,因为scanf()的`错误判断能力不强造成的。18单元测试代码单元测试中的辅助测试模块:(1)驱动模块(Driver)指模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收测试数据,将相关数据传送给被测模块,启动被测模块,并输出结果。(2)桩模块(Stub)指模拟被测模块所调用的模块。一般只进行很少的数据处理,如打印入口和返回。

19单元测试的测试结构测试用例被测模块驱动模块测试结果桩模块1桩模块2桩模块3桩模块n桩模块…驱动模块和桩模块20驱动模块主要完成以下事情:1、接受测试输入;2、对输入进行判断;3、将输入传给被测单元,驱动被测单元执行;4、接受被测单元执行结果,并对结果进行判断;5、将判断结果作为用例执行结果输出。被测单元用什么语言,驱动就用什么语言写。

总而言之,写驱动和桩不需要太高深编程知识。如果有模板或框架作为参考的话,差不多就成了一个体力活。21#include<stdio.h>voidmain(void){inta=1,b=2,c;c=fun1(a,b);printf(“%d”,c);}intfun1(intx,inty){returnx+y;}main函数fun1函数例如22#include<stdio.h>voidmain(void){inta=1,b=2,c;c=fun1(a,b);printf(“%d”,c);}intfun1(intx,inty){returnx+y;}假设main()和fun1()分别由两个程序员开发且进度不同,进行测试时:若没有main()函数,如何测试fun1()?

若没有fun1()函数,如何测试main()?

23#include<stdio.h>//驱动模块voidmain(void){inta=1,b=2,c;c=fun1(a,2*b);printf(“%d”,c);}intfun1(intx,inty){returnx+y;}假设main()和fun1()分别由两个程序员开发且进度不同,进行测试时:若没有main()函数,如何测试fun1()?构建一个驱动模块(main()函数的驱动模块),里面至少能够调用fun1()并输出调用结果。如何测试fun1模块?24#include<stdio.h>voidmain(void){inta=1,b=2,c;c=fun1(a,b);printf(“%d”,c);}//桩模块intfun1(intx,inty)

{return2*x+y;}假设main()和fun1()分别由两个程序员开发且进度不同,进行测试时:若没有fun1()函数,如何测试main()?构建一个桩模块(fun1()的桩模块),至少能够被main()调用并有一个返回值。如何测试main模块?25驱动模块一般结构:IntDriverModule(){….调用被测试的模块;处理运行结果;

….}

单元测试代码应该与单元代码保持一致,每当单元代码发生变化,需确认单元测试代码是否需要更新;单元测试代码通常不完全等同于所模拟的真实模块,一般只模拟一个或一些运行情况,返回一个执行所需要的值。桩模块一般结构:

Int

StubModule(.…){….

Return返回值;

….}单元测试代码的一般结构26驱动模块和桩模块都是额外的开销,虽然在单元测试中必须编写,但并不需要作为最终的产品提供给用户。

27单元测试的通过标准正确地实现规定的功能错误处理正确边界条件处理正确达到预定的代码覆盖率(语句覆盖、判定覆盖、条件组合覆盖、路径覆盖等)。一般要求语句覆盖率达到100%。少于30代码行的函数一般不需要做单元测试,只要代码走查即可。28测试与调试调试:利用测试结果和测试过程中提供的信息进行全面分析,找出bug的根源和出错原因,修正已发现的bug的过程。

调试与测试的区别:测试的目的:寻找和发现缺陷。测试可由非开发人员完成。调试的目的:找出缺陷的原因,并修正缺陷。调试必须由开发人员完成。

通常,在测试以后紧接着要进行调试。实际上,测试工作和调试工作是交叉进行的。29进行测试找出缺陷缺陷分配进行调试30注意:即使通过单元测试后没有出现问题的模块,集成在一起也有可能出现问题。即使一个软件成功运行了许多年,仍然会不断出现bug,干扰软件的使用某个单元中可以接受的误差,可能经过多次集成后被扩大到无法接受的程度,这是集成测试要重点关注的。(单元缺陷的累积扩散效应)31什么是集成测试(integrationtesting)?也称为组装测试或综合测试,是单元测试的下一个阶段,指按照设计的程序结构图,将通过测试的单元模块组装成系统或子系统,再进行测试。4.4执行集成测试32主要是单元之间的接口测试:检查单元调用关系、数据传递等,如函数形参中的类型、个数、顺序必须与实参相匹配。一个单元是否使其他单元出现问题?全局数据结构的使用是否出现问题(建议少用全局变量)?几个模块组合起来可否实现主功能?误差不断积累达到不可接受的程度?集成测试的内容33什么时候进行集成测试?理论上是在单元测试之后进行,但效率低,实际几乎可以同步进行。依据?通过了单元测试的模块以及《概要设计》文档。由谁来进行集成测试?主要是开发人员或白盒测试工程师。34集成测试的模式非增量式测试模式(非渐增式)增量式测试模式(渐增式)35非增量式测试非增量式测试也称为一次性集成,是采用一步到位的方法来构造测试:

——对所有模块进行独立的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。

36采用非增量式测试方法进行集成测试AS3S4S5d2Cd4Ed5Fd1Bs1d3s2DABCDEFABCDEF(1)程序结构图(3)集成测试示意图(2)各模块的单元测试示意图37非增量式测试的缺点:需要所有单元被测试过,而实际上集成测试可以和单元测试重叠并行,因此不利于开发进度;问题定位比较困难,集成后一旦出现问题,很难判定出错的具体原因和位置。

适合于规模较小的应用。38增量式测试增量式测试的集成是逐步实现的:

逐次将未曾集成测试的模块和已经集成测试的模块结合成程序包,再将这些模块集成为较大系统。

按照不同的实施次序,增量式集成测试又可以分为:(1)自顶向下增量式测试(2)自底向上增量式测试(3)自顶向下与自底向上相结合(“三明治”测试)39自顶向下法(top-downintegration)自顶向下法:逐步集成和逐步测试是按照结构图自上而下进行的,即首先集成主控模块(主程序),然后依照控制层次结构向下进行集成,逐渐将各模块集成。策略有两种,深度优先方式(纵向)或者广度优先方式(横向)。深度优先方式的集成:——首先集成在结构中的一个主控路径下的所有模块,主控路径的选择是任意的。

广度优先方式的集成:——首先沿着水平方向,把每一层中所有直接隶属于上一层的模块集成起来,直到底层。40自顶向下增量式测试(续)集成过程由3个步骤完成:(1)经过测试的主控模块作为测试驱动器。(2)根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。(3)在每个模块被集成前,都必须进行单元测试。重复第2步,直到整个系统被测试完成。

41自顶向下增量式测试(续)ABCDEFAS1S2S3ABCDS4S5ABCDEF(1)(2)(3)广度优先方式42自顶向下增量式测试(续)ABCDEFAS1S2S3ABS2S3S4ABCS3E(1)(2)(3)深度优先方式(4)43自底向上法(bottom-upintegration)自底向上法,按结构图自下而上,从程序模块结构的最底层模块开始集成和测试。由于是从最底层开始集成,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经集成并测试完成,所以不再需要使用桩模块进行辅助测试,而是使用驱动模块。

44采用自底向上增量式测试方法进行集成测试ABCDEFd2Cd1Ed3Fd4BEd5FDABCDEF45

增量测试方式的优点:增量式测试方式不需要所有单元就绪,使单元测试与集成测试的重叠并行是可行的;增量测试是逐步集成和逐步测试的,把可能出现的错误分散暴露出来

温馨提示

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

评论

0/150

提交评论