《track1-BMC故障注入测试在字节跳动的应用实践-字节跳动-郏春辉.pdf》由会员分享,可在线阅读,更多相关《track1-BMC故障注入测试在字节跳动的应用实践-字节跳动-郏春辉.pdf(38页珍藏版)》请在三个皮匠报告上搜索。
1、BMC故障注入测试在字节跳动的应用实践郏春辉字节跳动STE固件架构师议程背景介绍02痛点分析03核心理念04技术原理05场景分析06总结展望01背景介绍背景故障检测与隔离01BMC稳定性影响02BMC需及时检测并隔离故障,以保障系统稳定运行。其他类别问题可能经过BMC放大。系统稳定性影响问题陈述异常处理能力重要性异常处理能力是BMC稳定性的关键,常规测试用例难以覆盖复杂故障场景。01缺乏有效工具现有工具侵入性强、依赖特定环境、覆盖范围有限。03复现条件复杂Bug往往需要特定的状态转换序列才能触发。02痛点分析测试用例局限性实验室测试用例虽尽可能覆盖各类场景,但存在局限性。增加的异常测试存在可信
2、度的质疑。异常测试的置信度80%BMC BUG根本原因均是在处理异常情况时出现问题。如何丰富异常测试用例是难点。异常处理覆盖不足异常处理的难点测试成本高异常测试通常需要复杂的环境配置。有些异常需要修改代码或者修改配置。核心理念故障注入测试方法提升场景多样性01利用故障注入测试方法,提升场景多样性,提高测试覆盖度。反向检验异常处理能力主动对程序执行流进行压力测试,主动变化注入时间点,检查不同阶段程序对同类故障的应对措施和处理能力。02主动压力测试通过先验故障,反向检验BMC异常处理能力。03故障注入测试方法提升场景多样性01利用故障注入测试方法,提升场景多样性,提高测试覆盖度。反向检验异常处理能
3、力主动对程序执行流进行压力测试,主动变化注入时间点,检查不同阶段程序对同类故障的应对措施和处理能力。02主动压力测试通过先验故障,反向检验BMC异常处理能力。03思路特征提取与变异从现有bug系统的log/trace中提取特征作为语料,再进一步变异,论证现实基础,解决模拟可靠程度的质疑。解决环境构造问题解决环境难以构造问题,以及复盘阶段无法验证其他项目是否解决同类问题的问题。思路特征提取与变异从现有bug系统的log/trace中提取特征作为语料,再进一步变异,论证现实基础,解决模拟可靠程度的质疑。解决环境构造问题解决环境难以构造问题,以及复盘阶段无法验证其他项目是否解决同类问题的问题。思路B
4、UG数据库Log等特征故障模型多组测试语料发现非预期行为修复代码累积问题语料循环执行,确定必现条件提取故障特征行为建模变异故障点执行用例技术原理创新点基于真实故障案例从BUG数据库中的真实故障案例出发,确保测试场景的真实性和相关性02故障注入技术基于操作序列的故障注入,基于模型进行故障点变异。03低依赖动态注入运行时动态注入,无需修改源代码或重启服务。01创新点基于真实故障案例从BUG数据库中的真实故障案例出发,确保测试场景的真实性和相关性02故障注入技术基于操作序列的故障注入,基于模型进行故障点变异。03低依赖动态注入运行时动态注入,无需修改源代码或重启服务。01为什么不是简单的注入?BMC
5、现在的模块也不是什么异常防护都没有,持续性的注入往往在程序流开头就被跳过。而IO级别的故障是不挑时间的。可以在任意执行流的时间点出现。以前注入测试对这个特点的忽视往往才是不能拿到更大收益的原因为什么要有行为模型行为模型构建故障特征提取从BUG数据库中提取故障特征。行为序列分析将具体故障案例抽象为可复用模型,并进行变异,拓展故障点和类型。模型抽象与变异03分析故障发生的上下文和操作序列。0102行为模型构建020304注入时机什么时候注入故障以及注入什么故障。起始时间特征匹配决定什么时候触发对应的模型。应用对象针对哪些模块。01终止时间什么时候结束注入过程。行为模型构建时序起始点时序终止点注入故
6、障注入故障低依赖的注入方法函数hook功能01Frida与ebpf插桩02对特定函数进行hook,可修改内部函数返回值、修改syscall的函数返回值、修改buffer中的数值模拟特定故障、检查当前程序的状态用于驱动行为模型的状态变化。使用frida以及ebpf等插桩方法,实现动态代码注入,无需重新编译代码。遇到的问题调试符号利用BMC编译image中间过程有带调试符号的二进制,最后打包到image前strip掉,内存布局一致。通过工具提取带符号二进制的信息,可直接确定内存布局。Release版本注入问题遇到的问题内存布局确定Linux发行版默认使能AS