课程简介
Software Defines Everything!Software Runs The World!人们正在构建超出自身管理能力的复杂智能化系统。通信、航空航天、金融、医疗等行业软件对可靠性本身要求就很高,伴随着智能化产品的难解释性、不确定性给可靠性测试设计带来更大挑战。智能软件正代替人类进行各种重大决策,系统的可靠性要求越来越高。如何验证复杂软件的可靠性设计?如何通过可靠性测试来驱动开发完善可靠性设计?本课程通过总结以OS(Linux/Android/AI车载系统/编译器等)为代表的复杂软件可靠性测试技术及优秀实践,形成体系化的课程。从传统的基于故障模型的可靠性测试技术开始,再深入到软件ABC化(AI/Big Data/Cloud Computing)后可靠性测试面临的挑战和智能化应对技术,涉及可靠性测试技术如启发式FUZZING、混沌工程、基于搜索的测试、形式化验证符号执行、AI辅助的测试用例自动生成、AI-based系统的自动化测试生成等相关论文10余篇,通过大量产学研合作的成功实践案例来引导学员理解和掌握先进的、系统化的可靠性测试方法。
目标收益
通过大量产学研合作的成功实践案例来引导学员理解和掌握先进的、系统化的可靠性测试方法。
培训对象
测试工程师、测试架构师、可靠性专项测试工程师等。
课程大纲
系统可靠性(DFR)基础 |
1.软件产品的质量标准 2.产品质量模型中的可靠性定义 3.广义可靠性和狭义可靠性 4.软件缺陷的相关定义和类型 5.复杂系统的可靠性需要体系化的测试来保障 6.系统可靠性的度量指标 7.狭义可靠性和可用性的关系(可靠性不高但可用性高?) 8.系统可靠性的度量方法和阶段 9.软件可靠性的避错设计(分解抽象和重用) 10.软件可靠性的避错设计(模块化) 11.软件可靠性的避错设计(模块耦合及复杂度控制) 12.软件可靠性的检错设计(主动和被动式) 13.软件可靠性的容错设计(局部容错和完全容错) 14.软件可靠性的纠错设计(纠错时机和方法) 15.IPD流程中可靠性测试软件工程(可靠性增长和确认的端到端测试) 16.案例:复杂系统的可靠性架构 17.案例:某类型软件可靠性测试方法和评估 18.案例:产品开发过程中的可靠性快速度量 |
复杂系统可靠性测试挑战 |
1.Software Defines Everything!Software Runs The World! 2.人们正在构建超出自身管理能力的系统 3.智能化产品大量使用复杂/庞大的开源软件 4.集成第三方/开源项目的测试设计过程被压缩 5.云/ABC的不确定性(难解释性)影响测试分析 6.ABC智能化系统/产品/解决方案的测试设计越来越难 7.人工测试设计存在严重的杀虫剂悖论 8.可靠性测试的三层防护网 9.智能化测试需同时解决输入域探索和输出预期判断(test oracle)的问题 10.输入域测试数据自动生成常用技术 11.输出结果的自动比较技术分类和选择 12.快速智能化的可靠性测试用例扩展技术和方法 |
可靠性测试防护网第一层:精准的人工设计 |
1.可靠性测试的正向和逆向设计 2.架构的正向测试:复杂系统可靠性架构设计评审关注点(韧性/弹性/业务连续/可持续运维) 3.可靠性软件缺陷的模式和影响及根因 4.故障模型和影响分析FMEA 5.软件的故障模式分析(SWFMEA) 6.故障模式分析之故障模式库和ECA要素 7.案例演练:业务链路得可靠性FMEA分析 8.故障注入测试的输入输出因子提取(故障触发) 9.故障注入测试的输入因子选择及去重合并 10.故障注入测试的结果检测——基于业务特征做oracle判断 11.故障注入测试的结果检测——基于系统特征做oracle判断 12.基于硬件和基于软件故障注入测试技术对比 13.硬件及驱动故障注入测试 14.软件系统故障注入测试 |
可靠性测试防护网第二层:随机和混沌工程测试 |
1.人工设计可靠性测试的不足(杀虫剂悖论,人的脑力相比复杂被测系统的局限性) 2.随机自动化测试——FUZZING 3.随机的混沌工程实验/探索测试 4.混沌工程原则 5.混沌工程和传统测试对比 6.Netflix创始的混沌工程实践 7.混沌工程关键技术 8.混沌工程技术发展趋势 9.案例:实践1——最大化注入事件的真实性 10.案例:实践2——安全混沌工程CloudStrike 11.案例:实践3——区块链共识算法上应用混沌工程 12.混沌工程常用工具框架 13.混沌工程通用架构抽象 |
可靠性测试防护网第三层:智能化的“全”覆盖探索测试 |
1.普通随机测试的盲目性会导致探索深度不够 2.“智能”的启发式随机可靠性测试 3.测试设计自动化——测试自动生成技术的分类 4.程序行为分析“全路径”的测试自动生成技术 5.“全”路径覆盖的智能化测试生成——符号执行测试 6.测试设计自动化——AI辅助的测试全自动生成 7.测试设计自动化——等效蜕变测试全自动生成 |
智能的基于搜索的可靠性测试(SBST技术) |
1.软件工程问题的共性和本质 2.解决软工问题的搜索优化技术 3.SBST测试自动生成——爬山算法 4.SBST测试自动生成——GA算法 5.SBST技术演进趋势 6.案例:业界实践——Android应用自动探索测试 Sapienz 7.案例:业界实践——崩溃复现用例自动搜索框架 BOTSING |
AI-based系统的可靠性测试 |
1.AI系统测试需解决的问题和挑战——难解释性、不确定性(test oracle未知) 2.AI系统的测试过程 3.AI系统用例扩展的主要方法 4.AI系统的可靠性测试——充分性度量 5.案例:AI汽车可靠性智能化测试生成技术 |
系统可靠性(DFR)基础 1.软件产品的质量标准 2.产品质量模型中的可靠性定义 3.广义可靠性和狭义可靠性 4.软件缺陷的相关定义和类型 5.复杂系统的可靠性需要体系化的测试来保障 6.系统可靠性的度量指标 7.狭义可靠性和可用性的关系(可靠性不高但可用性高?) 8.系统可靠性的度量方法和阶段 9.软件可靠性的避错设计(分解抽象和重用) 10.软件可靠性的避错设计(模块化) 11.软件可靠性的避错设计(模块耦合及复杂度控制) 12.软件可靠性的检错设计(主动和被动式) 13.软件可靠性的容错设计(局部容错和完全容错) 14.软件可靠性的纠错设计(纠错时机和方法) 15.IPD流程中可靠性测试软件工程(可靠性增长和确认的端到端测试) 16.案例:复杂系统的可靠性架构 17.案例:某类型软件可靠性测试方法和评估 18.案例:产品开发过程中的可靠性快速度量 |
复杂系统可靠性测试挑战 1.Software Defines Everything!Software Runs The World! 2.人们正在构建超出自身管理能力的系统 3.智能化产品大量使用复杂/庞大的开源软件 4.集成第三方/开源项目的测试设计过程被压缩 5.云/ABC的不确定性(难解释性)影响测试分析 6.ABC智能化系统/产品/解决方案的测试设计越来越难 7.人工测试设计存在严重的杀虫剂悖论 8.可靠性测试的三层防护网 9.智能化测试需同时解决输入域探索和输出预期判断(test oracle)的问题 10.输入域测试数据自动生成常用技术 11.输出结果的自动比较技术分类和选择 12.快速智能化的可靠性测试用例扩展技术和方法 |
可靠性测试防护网第一层:精准的人工设计 1.可靠性测试的正向和逆向设计 2.架构的正向测试:复杂系统可靠性架构设计评审关注点(韧性/弹性/业务连续/可持续运维) 3.可靠性软件缺陷的模式和影响及根因 4.故障模型和影响分析FMEA 5.软件的故障模式分析(SWFMEA) 6.故障模式分析之故障模式库和ECA要素 7.案例演练:业务链路得可靠性FMEA分析 8.故障注入测试的输入输出因子提取(故障触发) 9.故障注入测试的输入因子选择及去重合并 10.故障注入测试的结果检测——基于业务特征做oracle判断 11.故障注入测试的结果检测——基于系统特征做oracle判断 12.基于硬件和基于软件故障注入测试技术对比 13.硬件及驱动故障注入测试 14.软件系统故障注入测试 |
可靠性测试防护网第二层:随机和混沌工程测试 1.人工设计可靠性测试的不足(杀虫剂悖论,人的脑力相比复杂被测系统的局限性) 2.随机自动化测试——FUZZING 3.随机的混沌工程实验/探索测试 4.混沌工程原则 5.混沌工程和传统测试对比 6.Netflix创始的混沌工程实践 7.混沌工程关键技术 8.混沌工程技术发展趋势 9.案例:实践1——最大化注入事件的真实性 10.案例:实践2——安全混沌工程CloudStrike 11.案例:实践3——区块链共识算法上应用混沌工程 12.混沌工程常用工具框架 13.混沌工程通用架构抽象 |
可靠性测试防护网第三层:智能化的“全”覆盖探索测试 1.普通随机测试的盲目性会导致探索深度不够 2.“智能”的启发式随机可靠性测试 3.测试设计自动化——测试自动生成技术的分类 4.程序行为分析“全路径”的测试自动生成技术 5.“全”路径覆盖的智能化测试生成——符号执行测试 6.测试设计自动化——AI辅助的测试全自动生成 7.测试设计自动化——等效蜕变测试全自动生成 |
智能的基于搜索的可靠性测试(SBST技术) 1.软件工程问题的共性和本质 2.解决软工问题的搜索优化技术 3.SBST测试自动生成——爬山算法 4.SBST测试自动生成——GA算法 5.SBST技术演进趋势 6.案例:业界实践——Android应用自动探索测试 Sapienz 7.案例:业界实践——崩溃复现用例自动搜索框架 BOTSING |
AI-based系统的可靠性测试 1.AI系统测试需解决的问题和挑战——难解释性、不确定性(test oracle未知) 2.AI系统的测试过程 3.AI系统用例扩展的主要方法 4.AI系统的可靠性测试——充分性度量 5.案例:AI汽车可靠性智能化测试生成技术 |