- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
faultinjection实现原理和应用
Fault injection实现原理与应用
富曲
个人简介
简历
2010年9月加入淘宝,先后从事自动化测试平台建设、报表引擎设计、性能测试工具关键技术攻关,目前专注于java字节码测试方法探索与研发。
工作职责
代码覆盖率
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
您可能关注的文档
- chapt3—1二维随机变量及其分布.ppt
- chapter3—林子雨—大数据技术原理与应用—分布式文件系统hdfs(2016年1月26日版本).ppt
- chapter4几种重要分布.ppt
- chapter4ccs集成开发环境.ppt
- chapter6.2样本和抽样分布.ppt
- chapter-3外部环境剖析[演示课件].ppt
- chapter7-2参数估量假设检验.ppt
- chapter6随机变量函数和其分布.ppt
- chapter4—porousmediamodel.ppt
- cho7第7节共轭元和共轭子群.ppt
- 汽车4S店员工内训课件07奥迪4S店新员工培训.pdf
- 辽宁省第二届职业技能大赛(轨道车辆技术赛项)理论参考试题库(含答案).pdf
- 2024年第四届全国工业设计职业技能大赛决赛(包装设计师)理论考试题库(含答案).pdf
- 精品解析:2022年广西壮族自治区学业水平考试押题预测卷 (一)历史试题(原卷版).docx
- 2024版《立体构成》全套课件完整版.ppt
- 《机上应急医疗》习题及答案.docx
- 2024年儿童保健技能大赛理论考试题库500题(含答案).pdf
- 计算机整机装配调试员技能竞赛备考试题库(含答案).pdf
- 《机床电气控制与PLC》期末试卷-A卷及答案.doc
- C++程序设计教程课件-C++多态与虚函数课件.pdf
最近下载
- 2024年工商银行人工智能大模型白皮书.pdf
- 提质增效施工组织设计.docx
- 2024年下半年北京夏都妫川人力资源有限公司招聘食品药品安全监察员12人笔试备考试题及答案解析.docx
- 2023年中国石油大学(北京)克拉玛依校区数据科学与大数据技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 2024新人教版一年级数学上册综合与实践单元数学游戏单元整体教学设计.pdf VIP
- 教师资格考试结构化面试100题(含答案).pdf
- JG-D02 环境监测仪技术规范书.doc
- 班组安全活动记录表.pdf
- 大数据技术在继电保护领域的研究与应用-电力信息与通信技术.pdf VIP
- 重庆市某办公楼土建工程施工图预算编制.docx
文档评论(0)