




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fault injection实现原理与应用 富曲 个人简介 l简历 2010年9月加入淘宝,先后从事自动化测试平台建设、报表 引擎设计、性能测试工具关键技术攻关,目前专注于java字 节码测试方法探索与研发。 l工作职责 代码覆盖率 Fault injection 字节码检查 字节码测试方法论 团队建设 大纲 为何要fault injection? 什么是fault injection? 最佳实践 小结 实现原理 核心技术点现场演示 展望 为何要fault injection? 测试过程中可能遇到的问题: 系统依赖 系统A 依赖 系统B ,我希望在系统B有故障情形下,测试 系统A的稳定性,如何做? 硬件故障 如何模拟因为硬盘坏道或空间满导致的写文件失败的情形 ? 网络故障 如何模拟网络延迟导致远程调用大量超时的情形? 并发测试 如何验证可能含有线程安全问题的代码? 传统解决办法 暴力模式:关机、拔网线、拔硬盘 温柔模式:故意改坏代码,并重新发布,然后恢复 不好解决的问题 不能精确模拟某个组件出现问题的情形 造成较大范围的故障,可能影响他人工作 服务器在托管机房,无法自由操作 麻烦,不够优雅 什么是fault injection? Fault injection故障注入 是指人为的向被测软件的代码中某个指 定的位置加入一些指令,以模拟出软件不 能正常运行的情形(或者说状态),这些 情形可能包括:抛出异常、运行缓慢等。 人们通常把这种方法作为检测系统的整体 稳定性表现的常用手段。 Fault injection部署架构 Fault injection流程 指定故障注入对对象 开始测试测试 登陆陆Defensor 执执行故障注入 最佳实践一:稳定性验证 最佳实践一:稳定性验证 需要做的验证: 当deployTemplate 为空时,上层组件的表现是否符合期 望。 现实的麻烦: 但在正常的情况下,deployTemplate不会为空。 传统做法: 需要准备一些数据,过程中到某一步骤时还需要手工修改数 据库等操作,经过相当麻烦的过程才能让deployTemplate为空。 fault injection: 可以免去一切数据准备过程,可以直接抛出空指针异 常。 最佳实践一:稳定性验证 最佳实践一:稳定性验证 最佳实践一:稳定性验证 例子一:稳定性验证 最佳实践一:稳定性验证 这时,测试人员可以很容易看到,当系统 指定组件出现问题时,被测功能的表现是 否符合预期,并根据测试结果要求开发改 进异常处理逻辑。 最佳实践二:线程安全验证 什么样的类可能含有线程安全问题? 类实例存在并发访问 类中含有成员变量,并且在方法有被改变的可能 最佳实践二:稳定性验证 需要做的验证: 进行并发测试,让程序暴露出问题,或者证明它没有问题。 现实的麻烦: find bugs难以证明程序有或者没有问题 要足够快的发起两次或更多的请求需要借助压测工具 传统做法: 需要借助性能压测工具,还要录脚本,准备数据,但最后也 无法证明程序没有问题,因为并发并不能100%触发线程安全 问题。 fault injection: 可以免去一切数据准备过程,无需借助性能压测工具,可以 证明程序没有问题。 最佳实践二:线程安全验证 最佳实践二:线程安全验证 最佳实践二:线程安全验证 开始验证: 使用浏览器在15秒内相继向含有故障的页 面发起两个请求即完成了验证工作,根本不需 要性能压测。 结论: fault injection相比传统方法,可以节省至少 80%的时间与精力。 问题解决了吗? 测试过程中可能遇到的问题: 系统依赖 系统A 依赖 系统B ,我希望在系统B有故障情形下,测试系统A的 稳定性,如何做?-在系统B注入异常。 硬件故障 如何模拟因为硬盘坏道或空间满导致的写文件失败的情形?-在 有文件操作的地方抛出io异常。 网络故障 如何模拟网络延迟导致远程调用大量超时的情形?-在有网络通 讯的地方,sleep并且随后抛出Socket超时异常。 并发测试 如何验证可能含有线程安全问题的代码?-在可能有异 常处sleep。 小结 如何才能用好fault injection,发挥它的最大价 值? 对系统主要流程的底层依赖进行故障注入测试,找出问题 或者证明它足够健壮。 结合find bugs等静态代码检查工具使用,对检查出可能有 问题的代码进行故障注入。 不盲目注入故障,这样只会增加测试成本,却很难发现 BUG。 故障注入工具的实现原理 取回远程JVM内存中正在运行的class字节码 实时的回传到远程JVM中,并让其立即生效 修改,生成新的字节码 故障注入工具的实现原理 关键技术点: 1、生成正确的JVM指令并写入到class文件中。 2、如何做到像eclipse远程debug那样,让修改后的class 字节码实时生效? 3、熟识java class文件结构,熟悉jvm指令,推荐阅读 Java虚拟机规范 故障注入工具的实现原理 关键技术点1: 生成正确的JVM指令并写入到class文件中,可以 使用下面的插件,可以轻易取得java源码对应的Asm代码 ,然后使用ASM框架改写class字节码,插件地址: http:/andrei.gmxhome.de/eclipse/。 Java源码: JVM指令: ASM代码 : 故障注入工具的实现原理 关键技术点2: 如何做到像eclipse远程debug那样,让修改后的 class字节码实时生效? 实时生成类转换器并传送到目标服务器上 远程执行类换器,完成类的转换并重新加载 故障注入工具的实现原理 类传换器入口类代码: 故障注入工具的实现原理 核心技术点现场演示 现场演示一个动态修改JVM中正在运行的类的 例子 展望 将fault injectio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纪昌学射教课件
- 校园流行风校园作文8篇范文
- 纪念周恩来课件
- 纪念刘和珍路课件
- 2025年软件设计师考试软件测试用例设计与执行试题
- 七年级收心考数学试卷
- 青海省小考数学试卷
- 纪委书记课件
- 去年沭阳小升初数学试卷
- 2024年天津市烟草专卖局(公司)招聘考试真题
- 结直肠癌肝转移外科治疗策略2025
- 打造国际化教育环境-学校的外部合作关系构建
- 2025-2030全球无纸化病案管理系统行业调研及趋势分析报告
- 涉密项目保密风险评估及防控措施
- 第六单元碳和碳的氧化物
- JJG(京) 47-2013 出租汽车计价器(行车测距法)检定规程
- 收益法资产评估评估程序表(适用于非整年)
- 5.3 一元一次方程的应用 七年级数学北师大版(2024)上册课时优化训练(含答案)
- 男方因病丧失劳动能力自愿离婚协议书(2篇)
- 化工厂拆除施工方案
- 资产并购咨询合同模板
评论
0/150
提交评论