您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 软件测试第5章-单元测试和集成测试--2017
软件测试第2版第5章单元测试和集成测试问题从传统制造业得到什么启发?第5章内容5.1什么是单元测试5.2单元测试的方法5.3白盒测试方法的用例设计5.4代码审查5.5集成测试5.6单元测试工具5.1什么是单元测试单元测试就是对已实现的软件最小单元进行测试,以保证构成软件系统的各个单元的质量单元测试活动中,强调被测试对象的独立性单元测试应采用不同方式、从不同角度对单元内部算法、外部功能实现等进行检验,包括对程序代码的评审和通过运行单元程序来验证其功能特性等内容。单元测试的目标单元实现了其特定的功能,返回正确的值单元的运行能够覆盖预先设定的各种逻辑在单元工作过程中,其内部数据能够保持完整性,包括全局变量的处理、内部数据的形式、内容及相互关系等不发生错误可以接受正确数据,也能处理非法数据,在数据边界条件上,单元也能够正确工作该单元的算法合理,性能良好代码经过扫描,符合代码规范,不存在安全性等问题第5章内容5.1什么是单元测试5.2单元测试的方法5.3白盒测试方法的用例设计5.4代码审查5.5集成测试5.6单元测试工具5.2单元测试的方法5.2.1黑盒方法和白盒方法5.2.2驱动程序和桩程序单元测试的方法单元测试主要采用白盒测试方法,辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序检验之中,而黑盒测试方法则应用于模块、组件等大单元的功能测试之中黑盒方法和白盒方法黑盒测试方法(Blake-boxTesting),也称数据驱动测试,是把程序看作一个黑盒子,不考虑程序内部结构和内部特性,而是考察系统的(数据)输入/输出、外部事件和条件限制,完成测试。白盒测试方法(White-boxTesting),也称结构化测试或逻辑驱动测试,是基于内部逻辑结构(如程序语句、路径、变量状态等)来进行测试,检验程序中的各个分支条件是否得到满足、每条执行路径是否按预定要求正确的工作。驱动程序和桩程序驱动程序(driver),对下层模块进行单元测试时所编制的调用被测模块的程序,用以模拟被测模块的上级模块桩程序(stub),也有人称为存根程序,对上层模块进行测试时,所编制的替代下层模块的程序,用以模拟被测模块工作过程中所调用的模块。示例ABCDEFGTest驱动程序调用运行桩程序桩程序测试结果被测模块B第5章内容5.1什么是单元测试5.2单元测试的方法5.3白盒测试方法的用例设计5.4代码审查5.5集成测试5.6单元测试工具5.3白盒测试方法5.3.1分支覆盖5.3.2条件覆盖法5.3.3基本路径测试法白盒方法的测试覆盖目标语句覆盖,使得程序中每一条可执行语句至少被执行一次分支覆盖,使得程序中每一个分支都至少被执行一次条件覆盖,程序中每一个条件至少有一次被满足路径覆盖,对程序模块的所有独立的基本路径至少要测试一次分支覆盖(BranchCoverage)的基本思想是设计若干个测试用例,运行被测程序,使程序中的每个分支至少被执行一次判定?代码块1代码块2分支覆盖实例设计分析节点①N0:如N=-1,-2,…,-10,…N=0:如N=1,2,…,10,…节点③(KN)and(R=Max)成立(True)(KN)and(R=Max)不成立(False)节点⑤R=MaxRMaxN=-2,Max=10:覆盖①②③④③④③⑥N=5,Max=1:覆盖①②③④③④③⑦分支覆盖vs.语句覆盖i:=i+1;result:=result+i;(iN)and(result=maxint)result=maxintN0N:=-N;output(result);output(toolarge);exitstartyesnonoyesyesnoN0举例:maxintN10-10-1覆盖了所有语句,但不能保证覆盖了所有分支(N=0)result=0i=0条件覆盖vs.分支覆盖分支一.T.a0,b0:a=1,b=1分支二.F.a0,b=0:a=1,b=-1a=0,b0:a=-1,b=1a=0,b=0:a=-1,b=-1判断条件:{a0andb0}只有两个分支(.T./.F.),但条件有a0,a=0,b0,b=0,构成四种组合条件覆盖vs.分支覆盖条件覆盖不能保证分支覆盖,例如设计两个测试用例N=1、Max=-1和N=0、Max=1(KN)and(R=Max)=.T.的分支没有被覆盖设计两个测试用例N=3、Max=10和N=-1、Max=0,即覆盖了所有条件,也覆盖了所有分支基本路径覆盖路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证被测试程序的每个可执行语句至少被执行一次。程序流程图示例环路复杂性V(G)=区域数目V(G)=边界数目–节点数目+2V(G)=判断节点数目+1示例计算结果:V(G)=4确定基本路径获得测试用例A-C-E-F-HA-C-E-G-HA-B-C-D-C—E-F-HA-B-C-D-C—E-G-HN=0,Max=10N=0,Max=-1N=-2,Max=10N=-10,Max=10图形矩阵每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接第5章内容5.1什么是单元测试5.2单元测试的方法5.3白盒测试方法的用例设计5.4代码审查5.5集成测试5.6单元测试工具5.4代码审查5.4.1代码审查的范围和方法5.4.2代码规范性的审查5.4.3代码缺陷检查表代码审查的范围和方法代码审查的目的就是为了产生合格的代码,检查源程序编码是否符合详细设计的编码规定,确保编码与设计的一致性和可追踪性审查的内容最佳实践业务逻辑的审查算法的效率代码风格编程规则代码规范性的审查代码规范性的审查将助于更早地发现缺陷,代码质量的提高,而且可以帮助程序员遵守规则、养成好的习惯,以达到预防缺陷的目的代码风格和编程规则两者不可缺一,都应列入代码评审的范围中命名规则、缩进与对齐、注释和函数处理等代码缺陷检查表把程序设计中可能发生的各种缺陷进行分类,以每一类列举尽可能多的典型缺陷,形成代码缺陷检查表。代码评审常常会使用这类检查表,以表的内容为检查依据、要点,防止人为的疏漏,并提高评审效率。在每次评审之后,对新发现的缺陷也要进行分析、归类,不断充实缺陷检查表详见表5-4第5章内容5.1什么是单元测试5.2单元测试的方法5.3白盒测试方法的用例设计5.4代码审查5.5集成测试5.6单元测试工具5.5集成测试5.5.1集成测试的模式5.5.2自顶向下集成测试5.5.3自底向上集成测试5.5.4混合策略5.5.5持续集成测试为什么总是集成不起来?集成测试的模式非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。比较各自的优缺点非渐增式测试模式因为所有的模块一次集成的,所以很难确定出错的真正位置。这种方法并不推荐在任何系统中使用,但可以在规模较小的应用系统中使用。渐增式测试模式自顶向下法(Top-downIntegration)自底向上法(Bottom-upIntegration)自底向上法的主要优缺点混合策略混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合三明治集成方法(SandwichIntegration)采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。改善的三明治集成方法改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底。持续集成的由来Inmyearlydaysinthesoftwareindustry,oneofthemostawkwardandtensemomentsofasoftwareprojectwasintegration.ModulesthatworkedindividuallywereputtogetherandthewholeusuallyfailedinwaysthatwereinfuriatinglydifficulttofindTheessenceofthistransformationisthepracticeofintegratingmorefrequently.Atonepointadailybuildwasconsideredtobeanambitioustarget.MostprojectsItalktonowintegratemanytimesaday.持续集成Continuousintegration持续集成是软件开发越来越普遍的一种优秀实践,即团队开发成员经常集成他们的工作,通常每天新完成的代码至少集成一次,也就意味着每天可能会发生多次集成什么是持续集成?ContinuousIntegrationisasoftwaredevelopmentpracticewheremembersofateamintegratetheirworkfrequently,usuallyeachpersonintegratesatleastdaily-leadingtomultipleintegrationsperday.Eachintegrationisverifiedbyanautomatedbuild(includingtest)todetectintegrationerrorsasquicklyaspossible论持续集成如何做好持续集成?I.MaintainaSingleSourceRepository.II.AutomatetheBuildIII.MakeYourBuildSelf-TestingIV.EveryoneCommitsTotheMainlineEveryDayV.EveryCommitShouldBuildtheMainlineonanIntegrationMachineVI.FixBrokenBuildsImmediatelyVII.KeeptheBuildFastVIII.TestinaCloneoftheProductionEnvironmentIX.MakeitEasyforAnyonetoGettheLatestExecutableX.Everyonecanseewhat'shappeningXI.AutomateDeployment:持续集成原理47开发本地统一的SourceCode控制定时checkin本地测试通过的代码良好的版本控制自动、快速地构建产品版本Checkout自动部署自动验证Dashboard呈现各种状态接近生产环境的测试环境持续集成的内涵持续检查(用工具扫描分析代码)持续构建(Build)持续部署持续验证、测试持续集成环境(基础设施)持续报告示例:Maven覆盖整个CI生命周期•validate:验证项目是否正确以及相关信息是否可用•compile:编译•test:通过JUnit等单元测试•package:根据事先指定的格式(比如jar)进行打包•integration-test:部署到运行环境中,准备集成测试•
本文标题:软件测试第5章-单元测试和集成测试--2017
链接地址:https://www.777doc.com/doc-7227499 .html