单元测试与集成测试知识分享.ppt_第1页
单元测试与集成测试知识分享.ppt_第2页
单元测试与集成测试知识分享.ppt_第3页
单元测试与集成测试知识分享.ppt_第4页
单元测试与集成测试知识分享.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第五章单元测试与集成测试,目录,1,单元测试的目标和任务,测试的4个阶段:单元测试集成测试系统测试验收测试按阶段进行测试是一种基本的测试策略,1.什么是单元测试,定义:单元测试是对软件基本组成单元进行的测试。单元测试测试的软件最小的可执行单元的正确性,即类或方法单元测试通常是一段可执行代码,并能验证执行结构是否和预期相等每个单元测试至少应该有两个测试例子:Negative/Positive单元测试可以是黑盒也可以是白盒,取决于执行方法单元测试是其他类型测试的基础。不认真,完整的单元测试会导致其他类型测试起不到好的效果程序员最了解自己的程序单元,最适合做单元测试传统的重量级的方法学里,UTtestcase由设计人员在系统设计阶段开发,并用来验证编码人员的工作质量,1.什么是单元测试,时机:单元测试和编码是同步进行,但在TDD中,强调测试在先,编码在后。单元测试一般由开发人员完成,QA人员辅助,2.为何要进行单元测试?,尽早发现错误错误发现越早,成本越低开发人员过于自信,后期复杂度高,发现解决BUG困难检查代码是否符合设计和规范,3.单元测试的目标和任务,单元测试的目标单元测试的目标是检查每个模块是否正确地实现了设计说中的功能、性能、接口和其他设计约束要求,确保每个元都被正确地编码。单元测试需要达到以下一些具体目标。信息能否正确地流入和流出单元;单元工作过程中,其内部数据能否保持完整性,包括内部数据的形式、内容及相互关系不发生错误,全局变量在单元中的处理和影响;控制数据处理的边界能否正确工作;单元的运行能否做到满足特定的逻辑覆盖;对于单元中发生的错误,其出错处理措施是否有效。,3.单元测试的目标和任务,单元测试的任务任务:模块独立执行通路测试检查每一条独立执行路径的测试。保证每条语句被至少执行一次。Checklist:算符优先级。混合类型运算。精度不够。表达式符号。循环条件,死循环。其它,3.单元测试的目标和任务,任务2:模块局部数据结构测试检查局部数据结构完整性Checklist:不适合或不相容的类型说明。变量无初值。变量初始化或默认值有错。不正确的变量名或从来未被使用过。出现上溢或下溢和地址异常。其它,3.单元测试的目标和任务,任务3:模块接口测试检查模块接口是否正确Checklist:输入的实际参数与形式参数是否一致。【个数、属性、量纲】调用其他模块的实际参数与被调模块的形参是否一致。【个数、属性、量纲】全程变量的定义在各模块是否一致。【外部输入、输出】文件、缓冲区、错误处理其它,3.单元测试的目标和任务,任务4:模块边界条件测试检查临界数据处理的正确性Checklist:普通合法数据的处理。普通非法数据的处理。边界值内合法边界数据的处理。边界值外非法边界数据的处理。其它,3.单元测试的目标和任务,任务5:模块的各条错误处理通路测试预见、预设的各种出错处理是否正确有效。Checklist:输出的出错信息难以理解。记录的错误与实际不相符。程序定义的出错处理前系统已介入。异常处理不当。未提供足够的定位出错的信息。其它,2,单元的静态测试,1.静态测试技术,静态测试:通过检查和评审软件而不是运行软件对软件进行测试的方法。静态测试可以手工进行,也可以借助软件工具自动进行测试对象:与软件相关的需要测试的产物,如各类文档、源代码等,2.为什么需要静态测试,识别缺陷的成效静态测试的成效:最多识别软件所有缺陷中70-75%的缺陷动态测试的成效:最多识别软件所有缺陷中30-35%的缺陷识别缺陷的成本需求阶段识别一个重要缺陷平均花费2-3小时;设计阶段识别一个重要缺陷平均花费3-4小时;代码评审阶段识别一个重要缺陷3-5小时;动态测试识别一个重要缺陷平均花费15-25小时,2.为什么需要静态测试,解决缺陷的成本需求及设计阶段消除一个重要缺陷花费5-10小时代码评审阶段消除一个重要缺陷花费5-15小时动态测试识别消除一个重要缺陷平均花费30-80小时投入回报比较(实例)航天飞机搭乘项目:在设计或代码评审时消除一个缺陷的成本为1美元,在系统测试时为13美元,交付使用后为92美元(Paulketal,1995),1392:1电信公司审查时发现和纠正一个缺陷的平均费用为200美元,客户验收测试发现的缺陷平均花费4200美元(BoehmandBasili2001),21:1印度Infosys公司经验表明:在代码审查上多花费一天,这个产品就有期望在后期修改缺陷节省3-6天,36:1,3.静态测试包括的内容,编码的标准和规范走查(WalkThrough)审查(Inspection)评审(Review),3.静态测试包括的内容,编码的标准和规范标准:建立起来必须遵守的规则。规范:建议最佳做法,推荐更好方式。实施标准和规范的原因:可靠性。可读性和可维护性。可移植性。,3.静态测试包括的内容,走查(WalkThrough)定义:采用讲解、讨论和模拟运行的方式进行的查找错误的活动。注意:引导小组成员在走查前通读设计和编码。限时,避免跑题。发现问题适当记录,避免现场修改。检查要点是代码是否符合标准和规范,是否有逻辑错误。,3.静态测试包括的内容,审查(Inspection)定义:采用讲解、提问方式进行,一般有正式的计划、流程和结果。主要方法采用缺陷检查表。注意:以会议形式,制定会议目标、流程和规则,结束后要编写报告。按缺陷检查表逐项检查。发现问题适当记录,避免现场修改。发现重大缺陷,改正后会议需要重开。检查要点是缺陷检查表,所以该表要根据项目不同不断积累完善。,3.静态测试包括的内容,走查与审查的比较,3.静态测试包括的内容,评审(Review)定义:通常在审查会后进行,审查小组根据记录和报告进行评估。注意:充分审查了所规定的代码,并且全部编码准则被遵守。审查中发现的错误已全部修改。,3,驱动程序和桩程序,1.动态测试,动态测试需要真正将程序运行起来,需要设计系列的测试用例保证测试的完整性和有效性。在测试用例的设计中,通常会综合白盒与黑盒测试方法,2.白盒测试,白盒测试在单元测试中的应用技术有逻辑驱动法和基本路径法语句覆盖。判定覆盖。条件覆盖。判定/条件覆盖。条件组合覆盖。路径覆盖。循环覆盖。,2.白盒测试,逻辑覆盖测试的6种标准,3.黑盒测试,黑盒测试方法主要运用于单元的功能和性能方面的测试黑盒常用的技术和方法等价类划分法边界值分析法错误推测法因果图法在功能测试方面通常会利用三种数据来进行测试,即正常数据、边缘数据和错误数据另外,还得考虑接口测试、性能测试、内存测试等,4.驱动模块和桩模块,运行单元程序有时需要基于被测单元的接口,开发相应的驱动模块和桩模块。,4.驱动模块和桩模块,驱动模块(drive):对底层或子层模块进行(单元或集成)测试时所编制的调用被测模块的程序,用以模拟被测模块的上级模块。桩模块(stub):也有人称为存根程序,对顶层或上层模块进行测试时,所编制的替代下层模块的程序,用以模拟被测模块工作过程中所调用的模块,4.驱动模块和桩模块,A,B,C,D,E,F,G,Test,4.驱动模块和桩模块,Driver,Stub,Functionundertest,5.类测试,传统的单元测试是针对程序的函数、过程或完成某一定功能的程序块。沿用单元测试的概念,实际测试类成员函数。一些传统的测试方法在面向对象的单元测试中都可以使用。面向对象的单元就是类,单元测试实际测试的就是对类的测试。类测试的目的主要确保一个类的代码能够完全满足类的说明所描述的要求,5.类测试,对类的测试可以分成两个层次进行:方法内测试方法间测试类测试一般有两种主要的方式:功能性测试和结构性测试,即黑盒测试和白盒测试。功能性测试以类的规格说明为基础,它主要检查类是否符合其规格说明的要求结构性测试则从程序出发,它需要考虑其中的代码是否正确,5.类测试,构建类测试用例根据OCL规范构建测试用例为所有可能出现的组合情况确定测试用例需求,在这些可能的组合情况下,可以满足前置条件,也能够达到后置条件。创建测试用例表达这些需求(创建特定输入的测试用例;增加违反前置条件的测试用例)根据状态转换图构建测试用例根据被测试的类的对象所处的状态以及状态之间的转移来构造测试用例,5.类测试,类测试系列的充分性标准:基于状态的覆盖率:以测试系列覆盖了状态转换图中的多少个状态为依据。基于约束的覆盖率:根据有多少对的前置条件和后置条件被覆盖来表示充分性。基于代码的覆盖率:以执行了多少实现类的代码为依据,衡量操作序列的代码覆盖率。,5.类测试,测试驱动程序是一个运行测试用例并收集运行结果的程序。编写测试驱动程序通常采用三种方法:在被测类的实现文件中实现主函数在被测类中实现一个静态成员函数实现一个单独的测试类,5.类测试,子类的测试父类中已经测试过的成员函数,两种情况需要在子类中重新测试:继承的成员函数在子类中做了改动成员函数调用了改动过的成员函数抽象类的测试方法:单独定义一个被测试抽象类的具体子类作为抽象类的第一个具体子类测试人工审查,4,代码评审案例分析,1.空指针保护,/通过用户UI界面输入的用户名,传递Action层,进行用户角色识别操作publicStringgetUserRole(HttpServletRequestrequest)StringuserRole=;StringuserName=request.getParameter(userName);if(userName.equals(admin)/这是系统初始化时默认的管理员账号,如果是,则做以下的验证操作./非系统初始化的账号,做以下验证操作.returnuserRole;,2.格式化数字错误,/通过用户输入的年龄,转换为数值型publicintgetUserAge(HttpServletRequestrequest)intage=0;StringuserAge=request.getParmeter(userAge);if(userAge!=null)age=Integer.parseInt(userAge);returnage;,3.字符串或数组越界,/假设电话号码字串设计的标准格式为:国家编码-区位号码-电话号码-分级号码,例如86,0551,2313222,8093publicstaticStringgetPhoneNumber(StringstrPhoneNumber)if(strPhoneNumber=null|.equals(strPhoneNumber)return;StringarrPhone=strPhoneNumber.split(,);returnarrPhone2;,4.其它示例,指定的页面找不到的错Error404或Error500案例分析没有合理的关闭资源导致系统性能下降或最终崩溃不当使用synchronized导致系统性能下降或最终崩溃调用不当方法导致结果出错,5,分层单元测试,1.Action层的单元测试,MockMock就是模型,模拟被测试对象关联的对象及测试数据什么时候需要Mock对象真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情)真实对象很难被创建(比如具体的web容器)真实对象的某些行为很难触发(比如网络错误)真实情况令程序的运行速度很慢真实对象有用户界面测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了)真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍,1.Action层的单元测试,StrutsTestCaseStrutsTestCase是基于Junit的一个方便测试struts框架的测试框架。它提供模拟对象(MockObject)和Cactus两种方式来“真实”的运行StrutsActionServlet,它允许你在不启动servlet引擎的情况下测试你的struts代码。,1.Action层的单元测试,StrutsTestCase如何工作通常测试服务器端代码有两种比较常用的测试方法:模仿对象(mockobjects)它通过假设服务器端容器来达到测试效果;容器内测试(in-containertesting),它则是在真实的容器内达到测试效果;StrutsTestCase则在对你的测试代码最小影响下能分别扮演上边两种角色。因此我们不得不说到它的这两种实现是如何完成的?StrutsTestCase提供两种基类(他们分别继承标准的JunitTestCase):MockStrutsTestCase:通过名字也可以知道他是通过第一种方法在不启动servlet的条件下来模仿一些HttpServlet实现假设容器环境的。CactusStrutsTestCase:它是体现在容器内测试(真实环境测试)的,其通过另外一种测试框架struts代码。,2.数据层的单元测试,DbUnitDbUnit是junit的扩展,主要针对Dao层对数据库操作的单元测试,可以在不改变数据库原始数据的情况下,进行测试。DBunit通过维护真实数据库与数据集(IDataSet)之间的关系来发现与暴露测试过程中的问题。IDataSet代表一个或多个表的数据。此处IDataSet可以自建,可以由数据库导出,并以多种方式体现,xml文件、XLS文件和数据库查询数据等。基于DBUnit的测试的主要接口是IDataSet,可以将数据库模式的全部内容表示为单个IDataSet实例。这些表本身由Itable实例来表示。,2.数据层的单元测试,IDataSet的实现有很多,每一个都对应一个不同的数据源或加载机制。最常用的几种IDataSet实现为:FlatXmlDataSet:数据的简单平面文件XML表示QueryDataSet:用SQL查询获得的数据DatabaseDataSet:数据库表本身内容的一种表示XlsDataSet:数据的excel表示,2.数据层的单元测试,测试流程建立数据库连接备份表调用Dao层接口从数据库取实际结果事先准备的期望结果断言回滚数据库关闭数据库连接,2.数据层的单元测试,关于数据集DBUnit可以把所有表的记录存在一个数据集中:既可以是数据库中的表,也可以是文件中的数据。我们在此用FlatXmlDataSet来讲述。在FlatXmlDataSet对应的XML文件里,元素名称对应数据库表名,元素的属性(attribute)对应表的列。如:,3.Servlet的单元测试,在开发复杂的servlet时,需要对servlet本身的代码块进行测试,可以选择HttpUnitHttpUnitHttpUnit是一个集成测试工具,主要关注Web应用的测试,提供的帮助类让测试者可以通过Java类和服务器进行交互,并且将服务器端的响应当作文本或者DOM对象进行处理。HttpUnit还提供了一个模拟Servlet容器,让你可以不需要发布Servlet,就可以对Servlet的内部代码进行测试。,3.Servlet的单元测试,如何使用HttpUnit处理页面的内容WebConversation类是HttpUnit框架中最重要的类,它用于模拟浏览器的行为WebRequest类,模仿客户请求,通过它可以向服务器发送信息WebResponse类,模拟浏览器获取服务器端的响应信息,3.Servlet的单元测试,如何使用HttpUnit进行测试对页面内容进行测试HttpUnit中的这部分测试完全采用了JUnit的测试方法,即直接将你期望的结果和页面中的输出内容进行比较。对Servlet进行测试使用HttpUnit测试Servlet时,请创建一个ServletRunner的实例,他负责模拟Servlet容器环境。如果你只是测试一个Servlet,你可以直接使用registerServlet方法注册这个Servlet,如果需要配置多个Servlet,你可以编写自己的web.xml,然后在初始化ServletRunner的时候将它的位置作为参数传给ServletRunner的构造器。在测试Servlet时,应该记得使用ServletUnitClient类作为客户端,他和前面用过的WebConversation差不多,都继承自WebClient,所以他们的调用方式基本一致。要注意的差别是,在使用ServletUnitClient时,他会忽略URL中的主机地址信息,而是直接指向他的ServletRunner实现的模拟环境。,4.Struts+Spring+Hibernate的测试,Struts:MVCFramework,用于快速开发JavaWeb应用Spring:轻型容器,其核心是BeanFactory,用以构造所需的ModelHibernate:对象关系映射框架,对JDBC使用进行了封装,这样可以随心所欲使用对象编程思维来操纵数据库Spring的测试机制用SpringMock对Spring进行单元测试用HSQLDB对Hibernate进行单元测试,4.Struts+Spring+Hibernate的测试,SpringMock类Mock对象是一个术语,原来主要流行于eXtreme程序员和JUnit小组中。在单元测试上下文中,一个mock对象是指这样的一个对象它能够用一些“虚构的占位符”功能来“模拟”实现一些对象接口。在测试过程中,这些虚构的占位符对象可用简单方式来模仿对于一个组件的期望的行为和结果,从而让你专注于组件本身的彻底测试而不用担心其它依赖性问题。,4.Struts+Spring+Hibernate的测试,Spring从J2EE的Web端为每个关键接口提供了一个mock实现:MockHttpServletRequest几乎每个单元测试中都要使用这个类,它是J2EEWeb应用程序最常用的接口HttpServletRequest的mock实现。MockHttpServletResponse此对象用于HttpServletResponse接口的mock实现。MockHttpSession这是另外一个经常使用的mock对象(后文将讨论此类在会话绑定处理中的应用)。DelegatingServletInputStream这个对象用于ServletInputStream接口的mock实现。DelegatingServletOutputStream这个对象将代理ServletOutputStream实现。在需要拦截和分析写向一个输出流的内容时,你可以使用它。,4.Struts+Spring+Hibernate的测试,对Spring进行单元测试Spring从Web端为每个关键接口提供了Mock类使用Spring-mock.jar:创建BaseTestCase来继承AbstractTransactionalDataSourceSpringContextTests,其他测试用例继承BaseTestCase类,4.Struts+Spring+Hibernate的测试,用HSQLDB对Hibernate进行单元测试下载hsqldb.jar放在web-inf/lib目录下。编写test.script文件,创建数据库结构,如createtable编写perties文件,配置hsqldb数据属性。在spring中配置sessionFactorybean,其中dataSource配置成hsqldb,hibernate方言为org.hibernate.dialect.HSQLDialect,6,单元测试常用工具简介,1.单元测试工具列表,2.JUnit,Junit()是一个开放源代码的Java测试框架(单元测试框架体系xUnit的一个实例),用在编写和运行可重复的的测试上,包括如下特性:提供了编写测试类的框架,使测试代码的编写更方便共享测试数据的测试工具方便地组织和运行测试的测试套件可以使测试代码与产品代码分开,这更有利于代码的打包发布和测试代码的管理易于集成到程序构建过程中,JUnit和Ant的结合还可以实施增量开发。具有很强的扩展性,2.JUnit,Junit的优点可以使测试代码与产品代码分开,这更有利于代码的打包发布和测试代码的管理针对某一个类的测试代码,通地较少的改动便可以应用另一个类的测试,JUnit提供了一个编写测试类的框架,使测试代码的编写更加方便。易于集成到程序中的构建过程中,JUnit和Ant的结合还可以实施增量开发。JUnit的源代码是公开的,故而可以进行二次开发。JUnit具有很强的扩展性,可以方便地对JUnit进行扩展,2.JUnit,Junit框架,2.JUnit,JUnitassertXXX()使用一系列的assertXXX方法来判断执行结果是否和预期相符,不符则执行失败,不会再继续case(当前方法)的余下部分,2.JUnit,JUnitSetUpandTearDownsetUp()提供初始化方法tearDown提供清除方法如果几个测试case(方法)共享同样的初始化合清除方法,如dao对象的创建,可以使用setUp/tearDown方法如果需要在几个test方法中共享某一个变量,请使用static的类变量,因为junit为每个方法都重新创建一个对象。,setUp(),TestXXX(),tearDown,2.JUnit,TestSuite处理测试用例有6个规约测试用例必须是公有类(Public)测试用例必须继承于TestCase类测试用例的测试方法必须是公有的(Public)测试用例的测试方法必须被声明为Void测试用例中测试方法的前置名词必须是test测试用例中测试方法无任何传递参数,2.JUnit,JUnit经验总结不要用TestCase的构造函数初始化,而要用setUp()和tearDown()方法。不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。将测试代码和工作代码放在一起,一边同步编译和更新。,2.JUnit,测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。测试要尽可能地小,执行速度快。,3.Junit+Ant构建自动的单元测试,AntAnt(AnotherNeatTool)是一种基于Java的build工具。Ant是使用Java语言编写的,可以让构建过程在多种平台上使用。Ant的特性包括:类可扩展性:Java类而不是shell命令用于扩展构建特性。开放源代码:类扩展示例很充足。XML可配置:假设构建实际上是分层的,那么使用XML描述make过程就是其逻辑层。了解XML使学习配置构建更简单。,4.微软VSTS的单元测试,VisualStudioTeamSystem(VSTS)是一套工具集,全面整合了软件设计、开发、测试、部署和人员协作工具,其开发版(DevelopmentEdition)提供了静态分析、代码剖析、代码涵盖以及其它单元测试所需的功能特性。创建单元测试项目。设置项目引用。添加适当的测试类(一个或多个)。生成主干的单元测试框架(UnitTestFramework)类和属性。创建单个测试方法。创建适合特定接口的逻辑,4.微软VSTS的单元测试,VSTS架构,4.微软VSTS的单元测试,VSTS单元测试属性,4.微软VSTS的单元测试,VSTS断言,5.代码的静态检测工具,Checkstyle定义:Checkstyle是一款检查Java程序源代码样式的工具。特点:它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的样式规范和统一。Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了使用它提供的几种常见标准之外,你也可以定制自己的标准。Checkstyle提供了支持大多数常见IDE的插件,大部分插件中就含有最新的Checkstyle,就不用费心再部署一份了。Checkstyle可以检查代码的很多方面,从传统观点看,它主要是用来检查代码层面的,自从第三版以后,它的内部架构作了重大改变,很多其它意图的检测加了进来,现在Checkstyle可以检查像类设计的问题,重复代码,如锁的双重检查的bug模式。,5.代码的静态检测工具,CheckStyle的主要流程是:对Java文件进行词法语法分析,生成语法树。载入配置文件(checkstyle-metadata.xml以及自定义的配置文件)registercheck事件。按照深度优先遍历对语法树进行解析,按照注册的事件,在到达某些节点(AST)时进行style检查(AST,Achild-SiblingTree,是语法树中的某个节点,其类型在TokenTypes类中定义。)我们所说的自定义Style的检查,就是在第二步设定的。,5.代码的静态检测工具,5.代码的静态检测工具,5.代码的静态检测工具,5.代码的静态检测工具,PMDPMD是一个代码检查工具,它用于分析Java源代码,找出潜在的问题:潜在的bug:空的try/catch/finally/switch语句未使用的代码:未使用的局部变量、参数、私有方法等可选的代码:String/StringBuffer的滥用复杂的表达式:不必须的if语句、可以使用while循环完成的for循环重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs,5.代码的静态检测工具,PMD特点:与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。,5.代码的静态检测工具,5.代码的静态检测工具,5.代码的静态检测工具,FindBugsFindBugs是一个开源的静态代码分析工具,基于LGPL开源协议,无需运行就能对代码进行分析的工具。不注重style及format,注重检测真正的bug及潜在的性能问题,尤其注意了尽可能抑制误检测(falsepositives)的发生。以bytecode(*.class、*.jar)为对象进行检查。除了单独动作,还可以用作Eclipse的plug-in,以及嵌入Ant作为task之一进行利用。,5.代码的静态检测工具,Findbugs的一些特点:FindBugs主要着眼于寻找代码中的缺陷,这就与其他类似工具有些区别了,直接操作类文件(class文件)而不是源代码。FindBugs可以通过命令行、各种构建工具(如Ant、Maven等)、独立的SwingGUI或是以Eclipse和NetBeansIDE插件的方式来运行。FindBugs输出结果既可以是XML的,也可以是文本形式的。开发者可以通过多种方式来使用FindBugs,最常见的是在新编写模块的代码分析以及对现有代码进行更大范围的分析。不注重style及format,注重检测真正的bug及潜在的性能问题,尤其注意了尽可能抑制误检测(falsepositives)的发生。,5.代码的静态检测工具,5.代码的静态检测工具,5.代码的静态检测工具,CheckStyle/PMD与FindBugs比较,5.代码的静态检测工具,SourceMonitor利用SourceMonitor可以为C+、C、C#、Java、Delphi、VisualBasic和HTML的源代码文件测试代码数量和性能。最终结果可以描绘成图、输出打印。众多的实践与经验证明如果一个代码过于复杂那么这个代码出现BUG会成几何级数的上升,并且给后期的维护带来很大的困难,所以用SourceMonitor检查后一方面测试人员可以对代码自身复杂度高,深度嵌套深的类进行有针对性的加强测试,开发人员也应该要考虑重构,对已有方法进行合理的抽取提练与分层。,6.开源单元测试工具,C/C+语言单元测试工具:CppTest、CppUnit、Java语言单元测试工具:TestNG、PMD、Checkstyle、Findbugs、JalopyMockObject类工具:MockObjects、Xdoclet、EasyMock、MockCreator、MockEJB、ObjcUnit、jMock等其它,7.商业单元测试工具,C/C+语言的单元测试工具以商业工具为主,例如ParasoftC+、PRQAC/C+、CompuWareDevPartnerforVisualC+BoundsCheckerSuite、PanoramaC+等内存资源泄漏检查工具,如CompuWareBounceChecker,IBMRationalPurifyPlus等代码覆盖率检查工具,如CompuWareTrueCoverage,IBMRationalPureCoverage,TeleLogicLogiscope等。代码性能检查工具,如Logiscope和Macabe等,7,集成测试,1.集成测试目的与意义,考虑以下问题:在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;各个子功能组合起来,能否达到预期要求的父功能;一个模块的功能是否会对另一个模块的功能产生不利的影响;全局数据结构是否有问题单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。要想发现并排除在模块连接中可能发生的上述问题,就需要进行集成测试。,2.集成测试的基本概念,集成测试又称组装测试、联合测试、子系统测试或部件测试。集成测试是在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成子系统或系统进行的测试活动。单元测试完成后便进入集成测试阶段。,2.集成测试的基本概念,集成测试与单元测试的区别集成测试关注的是模块间的接口,接口之间的数据传递关系,单元组合后是否实现预计的功能。集成测试组装的对象比单元测试的对象级别要高。,3.集成测试的模式与方法,集成测试基本可以概括为以下两种:非渐增式测试模式(一次性集成):先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。非渐增式测试模式优缺点:工作量较小;发现模块间接口错误较晚;发现错误较难诊断,可以并行测试。渐增式测试模式优缺点:要编写的软件较多,工作量较大;发现模块间接口错误较早;测试执行更彻底;需要较多的机器时间。,3.集成测试的模式与方法,渐增式测试模式有两种方式:自

温馨提示

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

最新文档

评论

0/150

提交评论