资源预览内容
第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
第9页 / 共43页
第10页 / 共43页
第11页 / 共43页
第12页 / 共43页
第13页 / 共43页
第14页 / 共43页
第15页 / 共43页
第16页 / 共43页
第17页 / 共43页
第18页 / 共43页
第19页 / 共43页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,高效单元测试,补充,Parasoft Jtest(,2,),林假设钦,第四局部 Junit扩展,本章内容:,BugDetective 进展静态代码分析,Jtest动态测试,桩函数,1、BugDetective 进展静态代码分析 简介(1),软件缺陷主要分为以下三种:,需求实现不正确 由于需求未被正确地实现,导致软件未如预期那样工作。,需求缺失或不完整 由于客户/开发者未预见到某些功能的必要性并且未给出相应需求或者由于开发者没有成功实现相应的需求,造成软件不能完成某些必要的操作或者处理某些特定情景。,用户误操作 软件设计时未考虑用户误操作的影响,从而导致软件形成不行预知的路径。,1、BugDetective 进展静态代码分析 简介(2),建立一个强健的回归测试套件robust regression suite是检测需求实现正确性最有效的方法,而负面测试negative testing则是防止误操作的最正确方法。尽管如此,查找需求缺失还是一项很麻烦的工作,由于开发者并不知道所查找的是什么。数据流分析是目前唯一能帮助开发者解决这些问题的自动化测试技术,它允许开发者在不运行程序的前提下分析代码中的路径。例如,假设数据流分析在Java程序中查找到一处空指针特殊。通过检查造成该特殊的路径,并且推敲造成该潜在程序终止的条件,开发者或许能找到缺失的需求 诸如设计准备阶段未预见到的状况等。假设开发者只留意于编写验证需求的测试用例,这些问题是不行能被觉察的。,1、BugDetective 进展静态代码分析 简介(3),除了需求缺失,数据流分析还能觉察代码构造上存在的问题以及应用程序中的规律错误。类似于模式匹配静态分析、单元测试、单元测试、容器测试in-container tests、模块测试、API测试以及其它全部用来验证软件的测试一样,数据流分析也应当被用作回归测试套件的一个局部。这样,自动日常地运行包括数据流分析和全部其它测试在内的完整回归测试套件就能确定用户的代码修改添加是否引入了新问题、破坏了既有功能或者造成其它未预见到的副作用。,1.、静态代码流分析-背景,静态代码分析这个术语对软件业的不同人有着不同的含义。在业界主要有以下两种静态代码分析方法:,1执行程序或者基于数据流的分析;,2基于模式pattern-based的分析。,对于需要执行程序的这种方法,静态代码分析意味着从规律上执行程序,有时甚至仅仅是符号化地执行程序来查找诸如内存崩溃、泄漏以及特殊等问题。这种测试的主要优点在于不需要测试用例就可以查找代码中的问题。当开发者正在编写某些代码时,这时他们对代码的细节是了如指掌的,这也是预防代码缺陷以及安全性漏洞的最正确时机,这种执行程序的分析方法能为开发者供给在桌面环境下快速查找软件缺陷以及安全性漏洞所必需的“准时反响”。,1.,、Parasoft的静态代码分析以及BugDetective技术,Parasoft的静态代码分析技术支持基于数据流以及基于模式的这两种静态代码分析方法。Parasoft的这种基于数据流的静态代码分析技术被称为BugDetective,它能便利地为用户检测出跨越多个方法、类或者包的运行时问题以及程序不稳定性因素诸如空指针特殊、SQL以及其它注入、资源泄漏以及Java中的无效迭代等;,使用Parasoft BugDetective,开发者能在早期觉察、诊断并且修复基于模式的静态代码分析和/或单元测试所不能检测到的软件错误。在早期觉察这些缺陷能节省软件开发过程中花在诊断以及可能的重复工作上的大量时间。,在Parasoft Jtest中,BugDetective包含以下两个用途:,1.用作Jtest静态代码分析工具以检测代码中包含的上述缺陷。,2.用以与Jtest单元测试引擎协同使用以验证单元测试中所报告的特殊在实际运行时 是否会被触发。,1.、BugDetective的优点(1),利用现有资源完成更全面的测试:,BugDetective很好的补充了其它的测试技术,它允许用户在没有测试用例的状况下觉察代码中的问题,从而免去了用户开发、执行以及维护简洁的测试用例的麻烦。通过检测程序中的潜在分支,BugDetective为用户供给了一个传统测试方法难以完成的路径掩盖率path coverage分析。因此,BugDetective通常能够检查出测试未掩盖到的程序在处理一些罕见状况下消逝的问题。此外,假设对代码进展了修改,用户可以直接搜寻其中的缺陷而不必更新或重新生成测试用例。,自动查找跨越多个类的缺陷:,传统的自动化单元测试工具只能帮助用户查找包含在同一个类中的缺陷。这一差异很关键。大多数对类进展了深入测试的开发者都是先修改有明显问题的代码,然后还是遇到了诸如空指针特殊一类错误,并且这样的错误一般都需要数天的时间才能被诊断出来,由于其缘由往往是由隐蔽或简洁且又跨越多个函数甚至是多个封装的执行路径造成的。使用BugDetective能够在瞬间觉察这些问题。,1.、BugDetective的优点(2),留意于实际运行中会消逝的缺陷及误操作:,BugDetective能自动准确地觉察与数据或数据流相关的缺陷。在大多数状况下,BugDetective所报告的冲突都是在实际中的误操作而不是单元测试所查找到的可能或假设的误操作。例如,除非下述代码中的strlen函数被程序调用并且被赐予一个空值,否则BugDetective不会报告任何冲突,而单元测试则不管向strlen赋空值与否都会报告代码有问题:,public int strlen(string str),Return str.length;,1.5、与BugDetective协同工作,BugDetective这种独特静态分析技术能推断应用程序的执行路径是否与用作规章的“可疑行为”的特征相符。每觉察一处缺陷,BugDetective都具体列举出造成该缺陷的完整执行路径,并以缺陷自我暴露处的代码为终结。为了缩短诊断及修复缺陷的时间并降低其难度,BugDetective对数据流路径的细节参与了扩大标注如针对空指针特殊冲突的描述就包括了在任一时刻执行路径中包含空值的变量。,1.、Bugdetective 静态数据流分析的具体操作流程,1翻开随书附带的例程com.embest.eclipse.jtest.demo,开放这个工程,找到com.embest.eclipse.jtest.demo.bugdetectiveAndParameteredTest包下的“NullPointer.java”文件。,2在菜单栏中依次选择菜单“Jtest”-“Test Using”-“Builtin”-“BugDetective(License Required)”,如以以下图示。,开头Bugdetective自动化检测,如以下图。,3检测完成后,在这个对话框中可以查看相关信息:,4在菜单栏中依次选择菜单项“Jtest”-“Show View”-“Tasks”,在Jtest视图中依次开放节点,可以查看比较具体的Error信息,如图示:,结果分析,通过上图可以清晰看到有两个比较重要的点:,冲突源点Violation origin:这是冲突的“根源”。通常,这是“错误数据”的发源地。例如,在空指针特殊规章中,其冲突源点也就是空值的源头,本例子中的第19行和第20行。,冲突节点Violation point:这是对“错误数据”的使用导致在程序中产生缺陷的节点。在空指针特殊这个例子当中,该点既是变量间接引用该空值的地方,本例子中的第29行和第39行。,5右键单击报告中的冲突用黄色提示图标显示出的节点并在快捷菜单中选择相应的命令Show Violation Origin或者Show Violation Point能够让用户便利地访问冲突源点以及冲突节点。例如,“空指针特殊”规章的冲突将会弹出Show Violation Origin赋空值处和Show Violation Point发生空指针特殊处命令来帮助用户理解代码中产生该特殊的缘由。,6用户也可以右键选择冲突源点和冲突节点,在弹出的菜单中选择“Go to”,如以下图,即可定位到源代码中出错的位置,如以下图。,7固然用户也可以双击Jtest视图中的冲突源点和冲突节点,来查看源代码中源点和节点的位置。上述三种方法都可以定位到源代码中可能存在bug的地方,如以下图:,8由于第19行为变量sFirstLine对象赋值null,那么在第29行就存在隐含的问题:当程序执行完try这个模块后,还存在sFirstLine为null的可能性,那么在第29行使用该对象的属性的时候,就抛出特殊。,假设测试人员觉察代码中隐含的bug,那么请准时通知软件开发人员。假设是开发人员觉察,或者开发人员受到测试人员的报告,则应准时修正。,1.7小结,BugDetective的这种独特的数据流分析技术能帮助软件开发团队在不实际运行代码的状况下觉察关键的运行时缺陷,同时,它还能验证单元测试用例所暴露出的缺陷是否是在运行时会表现出来的“实际缺陷”。BugDetective能检测出很多能够躲避模式匹配静态分析以及单元测试的缺陷,而且这些缺陷往往也是人工测试以及检测所难以觉察的。,当BugDetective同模式匹配静态分析、单元测试、容器测试针对Java而言、API测试、模块测试等测试一起构成完整的回归测试套件时,它能帮助开发团队:,迅捷牢靠地修改代码 帮助开发团队快速建立一个回归测试安全网,它能在缺陷被引入代码后快速地将其定位出来,并且还能帮助开发团队确定代码修改是否破坏了其既有功能性,即使工程浩大的代码库没有通过测试或者只进展了很少量的测试。,把握开发本钱以及工程结点 尽早觉察错误,以最低本钱最快速地对这些错误进展修复,同时广泛地测试潜在用户路径以查找难以觉察的问题,避开推迟软件公布周期以及公布补丁包的可能。,优化开发资源 自动订正约80%的编码问题,节省大量花在逐行审查代码以及调试上的时间,使开发者能更加着重于检查设计、算法以及实现等方面的问题。,低风险地享受前沿技术带来的便捷 降低测试简洁的企业级程序的难度如SOA/Web效劳程序以及Java EE应用程序等。,猎取对Java代码的质量以及完成程度有个可视化的报告 供给按需定制的客观代码资源的评估并且以质量和工程节点为目标全程跟踪开发流程。,动态测试指通过人工或者利用工具运行程序进展检查,分析程序的执行状态和程序的外部表现。动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和强健性等性能,由构造测试实例、执行程序、分析程序的输出结果三局部组成。单元测试、集成测试、确认测试、系统测试、验收测试、白盒测试、黑盒测试等都是动态测试。,Jtest的自动化动态测试完成单元测试、集成测试、白盒测试、黑盒测试等工作,可以自定义所执行测试的级别和范围,以便表达用户不同的需求和测试习惯。,关于Jtest的容器测试、回归测试、掩盖率分析以及Tracer测试将依据独立的章节进展具体介绍。,2,Jtest,动态测试,引述,2.,1,基于,Jtest,自动化测试,Jtest供给了高效的方法执行白盒测试。完全自动执行全部的白盒测试过程,自动生成和执行细心设计的测试用例。自动标记任何运行失败,并以一种简洁的图示化构造显示。,Jtest允许定制白盒测试用例的生成,和在什么层次上工程、文件、类或方法执行测试;Jtest通过自动生成大量测试用例,向程序注入数据流,考察程序是否会由于非法数据的输入而产生特殊,导致程序不行控,从而检测程序的坚固性。,同时,Jtest依据程序功能定义好每个入口,自动生成大量的功能性的测试用例,对程序进展功能测试,从而检测程序的功能。通过自动化黑盒测试的大局部操作,减轻了这类测试的负担。,2.1.1了解和生疏自动化单元测试配置,1启动Jtest后,在菜单栏依次选择菜单项:“Jtest”-“Test Configurations”,在弹
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6