




免费预览已结束,剩余38页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
补充ParasoftJtest(2),林若钦,第四部分Junit扩展,2,本章内容:,BugDetective进行静态代码分析Jtest动态测试桩函数,3,1、BugDetective进行静态代码分析简介(1),软件缺陷主要分为以下三种:需求实现不正确因为需求未被正确地实现,导致软件未如预期那样工作。需求缺失或不完整由于客户/开发者未预见到某些功能的必要性并且未给出相应需求或者由于开发者没有成功实现相应的需求,造成软件不能完成某些必要的操作或者处理某些特定情景。用户误操作软件设计时未考虑用户误操作的影响,从而导致软件形成不可预知的路径。,4,1、BugDetective进行静态代码分析简介(2),建立一个强健的回归测试套件(robustregressionsuite)是检测需求实现正确性最有效的方法,而负面测试(negativetesting)则是防止误操作的最佳方法。尽管如此,查找需求缺失还是一项很棘手的工作,因为开发者并不知道所查找的是什么。数据流分析是目前唯一已知能帮助开发者解决这些问题的自动化测试技术,它允许开发者在不运行程序的前提下分析代码中的路径。例如,假设数据流分析在Java程序中查找到一处空指针异常。通过检查造成该异常的路径,并且推敲造成该潜在程序终止的条件,开发者也许能找到缺失的需求诸如设计计划阶段未预见到的情况等。如果开发者只注重于编写验证需求的测试用例,这些问题是不可能被发现的。,5,1、BugDetective进行静态代码分析简介(3),除了需求缺失,数据流分析还能发现代码结构上存在的问题以及应用程序中的逻辑错误。类似于模式匹配静态分析、单元测试、http单元测试、容器测试(in-containertests)、模块测试、API测试以及其它所有用来验证软件的测试一样,数据流分析也应该被用作回归测试套件的一个部分。这样,自动日常地运行包括数据流分析和所有其它测试在内的完整回归测试套件就能确定用户的代码修改添加是否引入了新问题、破坏了既有功能或者造成其它未预见到的副作用。,6,1.、静态代码流分析-背景,静态代码分析这个术语对软件业的不同人有着不同的含义。在业界主要有以下两种静态代码分析方法:(1)执行程序或者基于数据流的分析;(2)基于模式(pattern-based)的分析。对于需要执行程序的这种方法,静态代码分析意味着从逻辑上执行程序,有时甚至仅仅是符号化地执行程序来查找诸如内存崩溃、泄漏以及异常等问题。这种测试的主要优点在于不需要测试用例就可以查找代码中的问题。当开发者正在编写某些代码时,这时他们对代码的细节是了如指掌的,这也是预防代码缺陷以及安全性漏洞的最佳时机,这种执行程序的分析方法能为开发者提供在桌面环境下迅速查找软件缺陷以及安全性漏洞所必需的“及时反馈”。,7,1.、Parasoft的静态代码分析以及BugDetective技术,Parasoft的静态代码分析技术支持基于数据流以及基于模式的这两种静态代码分析方法。Parasoft的这种基于数据流的静态代码分析技术被称为BugDetective,它能方便地为用户检测出跨越多个方法、类或者包的运行时问题以及程序不稳定性因素(诸如空指针异常、SQL以及其它注入、资源泄漏以及Java中的无效迭代等);使用ParasoftBugDetective,开发者能在早期发现、诊断并且修复基于模式的静态代码分析和/或单元测试所不能检测到的软件错误。在早期发现这些缺陷能节省软件开发过程中花在诊断以及可能的重复工作上的大量时间。在ParasoftJtest中,BugDetective包含以下两个用途:1.用作Jtest静态代码分析工具以检测代码中包含的上述缺陷。2.用以与Jtest单元测试引擎协同使用以验证单元测试中所报告的异常在实际运行时是否会被触发。,8,1.、BugDetective的优点(1),利用现有资源完成更全面的测试:BugDetective很好的补充了其它的测试技术,它允许用户在没有测试用例的情况下发现代码中的问题,从而免去了用户开发、执行以及维护复杂的测试用例的麻烦。通过检测程序中的潜在分支,BugDetective为用户提供了一个传统测试方法难以完成的路径覆盖率(pathcoverage)分析。因此,BugDetective通常能够检查出测试未覆盖到的程序在处理一些罕见情况下出现的问题。此外,如果对代码进行了修改,用户可以直接搜寻其中的缺陷而不必更新或重新生成测试用例。自动查找跨越多个类的缺陷:传统的自动化单元测试工具只能帮助用户查找包含在同一个类中的缺陷。这一差异很关键。大多数对类进行了深入测试的开发者都是先修改有明显问题的代码,然后还是遇到了诸如空指针异常一类错误,并且这样的错误一般都需要数天的时间才能被诊断出来,因为其原因往往是由隐蔽或复杂且又跨越多个函数甚至是多个封装的执行路径造成的。使用BugDetective能够在瞬间发现这些问题。,9,1.、BugDetective的优点(2),注重于实际运行中会出现的缺陷及误操作:BugDetective能自动准确地发现与数据或数据流相关的缺陷。在大多数情况下,BugDetective所报告的冲突都是在实际中的误操作(而不是单元测试所查找到的可能或假设的误操作)。例如,除非下述代码中的strlen函数被程序调用并且被赋予一个空值,否则BugDetective不会报告任何冲突,而单元测试则不管向strlen赋空值与否都会报告代码有问题:publicintstrlen(stringstr)Returnstr.length();,10,1.5、与BugDetective协同工作,BugDetective这种独特静态分析技术能判断应用程序的执行路径是否与用作规则的“可疑行为”的特征相符。每发现一处缺陷,BugDetective都详细列举出造成该缺陷的完整执行路径,并以缺陷自我暴露处的代码为终结。为了缩短诊断及修复缺陷的时间并降低其难度,BugDetective对数据流路径的细节加入了扩充标注(如针对空指针异常冲突的描述就包括了在任一时刻执行路径中包含空值的变量)。,11,1.、Bugdetective静态数据流分析的具体操作流程,1)打开随书附带的例程com.embest.eclipse.jtest.demo,展开这个工程,找到com.embest.eclipse.jtest.demo.bugdetectiveAndParameteredTest包下的“NullPointer.java”文件。2)在菜单栏中依次选择菜单“Jtest”-“TestUsing”-“Builtin”-“BugDetective(LicenseRequired)”,如下图示。,12,13,开始Bugdetective自动化检测,如图所示。,14,3)检测完成后,在这个对话框中可以查看相关信息:,15,4)在菜单栏中依次选择菜单项“Jtest”-“ShowView”-“Tasks”,在Jtest视图中依次展开节点,可以查看比较详细的Error信息,如图示:,16,结果分析,通过上图可以清楚看到有两个比较重要的点:冲突源点(Violationorigin):这是冲突的“根源”。通常,这是“错误数据”的发源地。例如,在空指针异常规则中,其冲突源点也就是空值的源头,本例子中的第19行和第20行。冲突节点(Violationpoint):这是对“错误数据”的使用导致在程序中产生缺陷的节点。在空指针异常这个例子当中,该点既是变量间接引用该空值的地方,本例子中的第29行和第39行。,17,5)右键单击报告中的冲突(用黄色提示图标显示出的节点)并在快捷菜单中选择相应的命令(ShowViolationOrigin或者ShowViolationPoint)能够让用户方便地访问冲突源点以及冲突节点。例如,“空指针异常”规则的冲突将会弹出ShowViolationOrigin(赋空值处)和ShowViolationPoint(发生空指针异常处)命令来帮助用户理解代码中产生该异常的原因。,18,6)用户也可以右键选择冲突源点和冲突节点,在弹出的菜单中选择“Goto”,如图所示,即可定位到源代码中出错的位置,如图所示。,19,7)当然用户也可以双击Jtest视图中的冲突源点和冲突节点,来查看源代码中源点和节点的位置。上述三种方法都可以定位到源代码中可能存在bug的地方,如图所示:,20,8)由于第19行为变量sFirstLine对象赋值null,那么在第29行就存在隐含的问题:当程序执行完try这个模块后,还存在sFirstLine为null的可能性,那么在第29行使用该对象的属性的时候,就抛出异常。如果测试人员发现代码中隐含的bug,那么请及时通知软件开发人员。如果是开发人员发现,或者开发人员受到测试人员的报告,则应及时修正。,21,1.7小结,BugDetective的这种独特的数据流分析技术能帮助软件开发团队在不实际运行代码的情况下发现关键的运行时缺陷,同时,它还能验证单元测试用例所暴露出的缺陷是否是在运行时会表现出来的“实际缺陷”。BugDetective能检测出很多能够逃避模式匹配静态分析以及单元测试的缺陷,而且这些缺陷往往也是人工测试以及检测所难以发现的。当BugDetective同模式匹配静态分析、单元测试、容器测试(针对Java而言)、API测试、模块测试等测试一起构成完整的回归测试套件时,它能帮助开发团队:迅捷可靠地修改代码帮助开发团队迅速建立一个回归测试安全网,它能在缺陷被引入代码后迅速地将其定位出来,并且还能帮助开发团队确定代码修改是否破坏了其既有功能性,即使项目庞大的代码库没有通过测试或者只进行了很少量的测试。控制开发成本以及项目结点尽早发现错误,以最低成本最迅速地对这些错误进行修复,同时广泛地测试潜在用户路径以查找难以发现的问题,避免推迟软件发布周期以及发布补丁包的可能。优化开发资源自动纠正约80%的编码问题,节约大量花在逐行审查代码以及调试上的时间,使开发者能更加着重于检查设计、算法以及实现等方面的问题。低风险地享受前沿技术带来的便捷降低测试复杂的企业级程序的难度(如SOA/Web服务程序以及JavaEE应用程序等)。获取对Java代码的质量以及完成程度有个可视化的报告提供按需定制的客观代码资源的评估并且以质量和项目节点为目标全程跟踪开发流程。,22,动态测试指通过人工或者利用工具运行程序进行检查,分析程序的执行状态和程序的外部表现。动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,由构造测试实例、执行程序、分析程序的输出结果三部分组成。单元测试、集成测试、确认测试、系统测试、验收测试、白盒测试、黑盒测试等都是动态测试。Jtest的自动化动态测试完成单元测试、集成测试、白盒测试、黑盒测试等工作,可以自定义所执行测试的级别和范围,以便体现用户不同的需求和测试习惯。关于Jtest的容器测试、回归测试、覆盖率分析以及Tracer测试将按照独立的章节进行详细介绍。,2Jtest动态测试引述,23,2.1基于Jtest自动化测试,Jtest提供了高效的方法执行白盒测试。完全自动执行所有的白盒测试过程,自动生成和执行精心设计的测试用例。自动标记任何运行失败,并以一种简单的图示化结构显示。Jtest允许定制白盒测试用例的生成,和在什么层次上(项目、文件、类或方法)执行测试;Jtest通过自动生成大量测试用例,向程序注入数据流,考察程序是否会由于非法数据的输入而产生异常,导致程序不可控,从而检测程序的坚固性。同时,Jtest根据程序功能定义好每个入口,自动生成大量的功能性的测试用例,对程序进行功能测试,从而检测程序的功能。通过自动化黑盒测试的大部分操作,减轻了这类测试的负担。,24,2.1.1了解和熟悉自动化单元测试配置,1)启动Jtest后,在菜单栏依次选择菜单项:“Jtest”-“TestConfigurations”,在弹出的TestConfigurations对话框的左边树形视图中,依次展开结点“Builtin”-“UnitTesting”,如图所示,在UnitTesting结点下列出了ParasoftJtest单元测试所有方法。如“GenerateUnitTests”,用来自动化生成单元测试用例;“RunUnitTests”,用来自动化执行测试用例,等等。后面重点介绍桩函数,回归测试,容器测试,以及Monitoring测试。2)对如何自定义和修改配置在前面讲静态测试时做了详细的讲述,这里在使用自定义配置来进行动态测试,是一样的,不做详细赘述。,25,2.2自动化生成并执行测试用例,下面讲述如何使用ParasoftJtest的自动化单元测试功能。1)打开例程com.embest.eclipse.jtest.demo。2)选定目标进行测试,用户可针对文件、包或工程进行测试。这里展开com.embest.eclipse.jtest.demo,选择com.embest.eclipse.jtest.demo.bugdetectiveAndParameteredTest分支,选择SortArrayList.java文件。3)自动生成测试用例。打开菜单依次选择菜单项“Jtest”-“TestUsing”-“Builtin”-“UnitTesting”-“GenerateUnitTests”;开始针对要测试的源码生成单元测试用例;,26,在执行完成后,在工作空间中会生成在原来工程名后添加了.jtest的工程,27,4)用户可以通过在TestConfigurations对话框中,复制此配置到User-Defined结点下,然后进行编辑修改配置:依次在编辑界面上选择标签页GenerationTestClass,如图所示:,28,5)在TestClass中可以进行对生产的用例进行配置,对输出的Class进行的名称或者路径需要修改,可以通过点击选择按钮“Edit”打开对话框EditPatternforUnitTestClasses,如图所示,进行修改编辑,在每个参数的编辑框中可以通过点击按钮“AddVariable”在打开的对话框AddVariable中选择抽取对应的参数。,29,6)依次展开生成的工程,如图所示,工程包和文件都是遵照之前的配置生成的,其中文件SortArrayListTest.java为生成的用例文件。,30,7)在生成的测试用例中,用户可以查看到对于被测文件的每个方法,都会根据不同的条件,产生相对应的测试用例。如果用例中出现一些exception,会以注释的方式出现相对应的用例处,以提示用户。另外用户可以在Testconfigurations中将RunUnitTests或者GeneralandRunUnitTests复制到UserDefined结点下进行设置,通过选择标签页ExecutionSeverities,打开Severities标签页,如图所示:,31,8)在InitialSeverityLevels组中,点击Add按钮,打开Specifyexceptionandseverity对话框,在Exception文本框中输入java.lang.NullPointerException异常,然后在Severity组合框中设置安全等级,这里设置为Severity1,如图示:,完成后点击Ok,最后在关闭TestConfigurations对话框的之前,点击按钮Apply,将先编辑的配置应用。再此选择被测文件,使用配置的测试规则,进行测试,本例使用RunUnitTests再次进行测试。测试完成后,在Jtest视图中查看到以下问题:,32,2.3提取参数化的测试用例,1)在生成测试用例后,用户还可以在生成的对应测试工程中右键选择测试文件SortArrayListTest.java,在打开的菜单中依次选择菜单项JtestExtractParameterizedTestCase,如图示:,33,2)打开TestCaseParameterization对话框,选择通过生成含有探索和边角用例值的Excel工作薄,如图所示,如果不需要其他配置,直接使用默认配置点击按钮“Finish”:,34,完成后在测试用例的目录中生成Excel文件,如图所示:,35,在用例文件中,会自动添加一段代码,如图示,36,3)将文件保存,选择菜单JtestTestUsingBuiltinRunUnitTests。测试结果如图所示:,37,2.4总结,本节举例讲述如何利用ParasoftJtest的自动化单元测试功能。开发测试人员首先使用工具对待测代码自动生成测试用例,然后自动化执行测试用例。此类测试可暴露意料之外的异常,并检查类在结构方面是否合理;助于开发测试人员在早期发现程序存在的问题,并提高程序的坚固性。,38,桩函数提供被调函数的占位,使得可以独立地进行单元测试而不依赖外部文件或函数。在使用桩函数时,Jtest会重定向执行流程,调用一个桩函数替代原有函数。桩函数主要有两个用途:将正在测试的代码从集成环境中隔离出来。在不可能影响函数行为、且需要使用替代实施的情况下进行测试。用户可以为任何测试用例定义自己的桩函数,不管是自动生成的测试用例还是用户定义的测试用例。当用户使用用户定义的桩函数时,可以完全控制外部函数的返回值无需具有真正可用的外部函数。,3桩函数引述,39,3.1Jtest桩函数的使用,1)打开菜单栏依次选择菜单项JtestTestConfigurations,打开TestConfigurations对话框,在此对话框中,依次展开左边树形视图的结点BuiltinUnitTesting。在UnitTesting结点下,可以看到有几项如GeneralAggressiveStubsandRunTests、GeneralExternalStubsandRunTests等,如图所示。这些定制的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电动客车融资租赁行业当前发展现状及增长策略研究报告
- 2025年应用软件行业当前发展趋势与投资机遇洞察报告
- 2024年基金从业资格基金法律法规、职业道德与业务规范综合知识考试题库(附含答案与解析)
- 播控系统基本知识培训课件
- 2025年(美甲师护理、修饰等)服务技能资格基础知识考试题与答案
- 2025年社区工作者招聘考试题库及答案解析
- 2024年高级焊工技能及安全知识考试题(附含答案)
- (2025)公务员结构化面试万能模板
- 2025年安徽省淮南市考研专业综合预测试题含答案
- 2025至2030年中国银杏叶茶行业投资分析及发展战略研究咨询报告
- 卤素灯制造工艺流程
- NY/T 5006-2001无公害食品番茄露地生产技术规程
- 建设施工企业法律法规标准和其他要求合规性评价记录参考模板范本
- 北京四方世纪科贸有限公司
- 天然气制氢工艺及设备简介课件
- 一个华为客户经理回忆录资料讲解
- 中国文学理论批评史全套教学课件
- 加药系统改造方案(共6页)
- 内蒙古电网典型事故分析
- 工厂规章制度员工守则.doc
- 螺栓各部位的英文名称
评论
0/150
提交评论