导读

近年来,向云原生迁移和采取分布式架构/设计方法来创建云原生应用是当今大势所趋,而且这种趋势还在进一步加快。这其中最重要的驱动因素,莫过于可以大幅度的减少应用的停机时间、高弹性、资源高利用率等,从而增加更多的业务价值。

然而,这种架构无疑给软件测试带来了新的挑战,当涉及到测试云原生/分布式应用系统时,与人们用来测试其他应用系统(如单片机)的传统方法相比,事情就会变得复杂起来。应用程序往往以微服务的方式更加动态、分布式式的、更快的速度发布,并且存在难以预测和跟踪的故障模式。而传统的测试技术,在覆盖此类的问题时,便会捉襟见肘,于是关于一种看似新的测试物种-混沌测试,应运而生。随之,和混沌测试相关的测试概念、理论以及技术工具也越来越多的被提及、探讨以及实现。

那么,到底什么是混沌测试,混沌测试又能解决哪些问题,又该如何开展呢?当前并无权威的答案,而且可能永远也不会有一个放之四海而皆准的标准。众所周知,MatrixOne数据库先天具备云原生和分布式的所有优势,自然对混沌测试也有着强需求,今天的文章,是从理论/方法论的层面,分享MatrixOne测试团队开展混沌测试的全局画布,主要围绕以下几点展开:

如何理解混沌测试?

如何开展混沌测试?

如何评估混沌测试?

本文字数:3300字+

阅读时间:8分钟+


Part 1

如何理解混沌测试?

业界对于混沌测试,归纳起来,一般又称为故障演练,是一种可试验的、基于故障模拟和注入的方法来处理大规模分布式系统中的混乱问题。但是,混沌测试与其他的测试类型又有着本质的区别,不局限于测试,而更像是工程实践。

一般来说,不同的行业,不同的产品特点,对于软件测试的分类标准和开展需求都有所差别,但是总结起来,却又大同小异。在此,先分享一下MO测试团队为了更好的开展和管理产品测试而对测试进行的划分标准。

你会发现,混沌测试似乎无法被定位到任何测试类型,或者说和任何测试类型都有关联,却又都不尽如此。此处,借用朱少民教授给“软件测试”的定义的公式来阐述MO测试团队对于混沌测试的定义:

测试 = 检测已知的 + 试验未知的

  • 已知” 指测试目标、测试需求和测试的验证准则等都明确,具有良好的可测性。

  • 未知” 指测试目标、测试需求和测试的验证准则等不明确,很难直接进行验证,需要通过不断地试验,才能知道所实现的功能特性是否正确。

通俗点讲,“已知”就是在人力之内,而“未知”则是在人力之外,而且很严然,上图中的所有测试,均是针对“已知”项开展的,而混沌测试针对的就是这些“未知”项,并且,我们认为,对于这些“未知”的考虑,需要遵循如下一些原则:

  1. “未知”可能存在于任何测试维度,发生在任何测试阶段,隐藏在任何测试对象和测试手段中;

  2. “未知”的范围也是有界的,它包含的只是团队关注的、但是通过人力又无法有效解决的质量要素;

  3. “未知”也应该而且必须要能够被评估、度量,否则任何针对其开展的测试都将毫无意义,只是这种衡量的标准可以是模糊的,范围的,或者渐进明细的;

  4. “未知”试验的开展,必须要借助工具,或者由一系列工具支撑的工程化实践来完成;

  5. 随着针对“未知”试验的开展,会有越来越多的“未知”项变成“已知”项。

我们可以通过下图来进一步理解混沌测试:

因此,在MO的测试体系中,让当前产品关注的质量要素可被更多的感知、管理和评估的所有测试努力,都属于混沌测试。混沌测试并不是什么新的测试技术、或者颠覆性的测试理念,它依旧需要遵循软件测试的本质,那就是为产品的商业活动提供质量信息和信心,所以,混沌测试的终级目标就是让“混沌”变得“不混沌”


Part 2

如何开展混沌测试?

通过之前阐述,混沌测试需要解决的是“未知”问题,那么对于混沌测试的开展的首要前提,就是如何能够更好的去发现这些“未知”项,对于此点,业界也基本是共识的,总结起来,就是4个字:故障注入。

而且,当前对于混沌测试的研究,大部分也都聚焦在如何更好的实现故障注入的工具能力层面,比如:

  1. Chaos Monkey,NetFlix公司开发的一套用来测试服务器稳定性的测试工具,核心思路是故意把服务器搞下线,然后可以测试云环境的恢复能力;

  2. Chaos Mesh, PingCAP公司的一个开源云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力;

  3. ChaosBlade,阿里巴巴开源的一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入。

这些都是目前可用的非常优秀的故障注入工具,而且在业界混沌测试中也有着较高的普及度,然而,只解决故障注入是远远不够的,工具只是支撑,要想更好的开展混沌测试,更需要工程化的思维来设计和布局混沌测试。经过反复多次的试验,MO测试团队混沌测试的架构图,如下图所示:

核心模块:

01

故障注入行为

通过故障注入工具完成,目的就是为了尽可能的识别和发现被测试系统中潜在的“未知”问题触发因素。对于故障注入,可以是纯粹随机的,也可以基于一定的故障注入策略。通过我们的实践证明,根据预定义的策略来注入故障,更有利于开展测试,因为在混沌测试执行中,需要通过策略来控制最小爆炸半径。

当然,故障注入策略的定义,往往跟当前混沌测试的重点有关,此处再次说明,混沌测试也是有界的,有目的性的,不是纯盲目性的行为,比如,如果想验证网络丢包对于事务成功率的影响,就需要适当的调整故障注入策略,提升网络延迟故障的比例以及选择重点的故障注入点。

02

稳态模型定义

所谓的稳态模型,实际就是被测系统的有效状态。这个有效状态可以用被测对象必须被遵守的质量要素规则集合来描述。如:功能可用性必须满足r1、性能指标比如满足r2等等,那么稳态模型即可表示为:

M{r1,r2,......rn}

也就是说,无论在混沌测试中注入了哪些故障,执行了哪些测试,被测试系统都不能违背任何一条质量要素规则,即:

M{r1,r2,......rn} M{r1,r2,......rn}

对于稳态模型的定义,需要遵循如下一些原则:

  1. 质量要素的选取,依赖于产品测试本身需要覆盖的质量维度;

  2. 质量要素规则的描述,可以不是精确的,是基于范围的;

  3. 质量要素规则一定是可以根据测试结果计算得出;

  4. 质量要素规则尽可能是量化的表述,并可以通过工具进行比较;

  5. 质量要素规则依赖于产品能力和测试能力的成熟度,迭代式的进行优化。

03

真实事件模拟执行

测试事件的选择,依赖于稳态模型的定义,即,可以通过最终执行的测试事件结果,计算出稳态模型中各个质量要素的实际状态。

当然,测试事件的执行能够自动化,是混沌测试开展的必要前提,因此混沌测试的有效开展,是一定对测试能力成熟度有一定要求的,而且也会推动测试能力进一步的成熟。

04

行为日志记录

行为日志记录是很容易被忽略的核心要素。如之前所说,混沌测试即使发现了问题,也不能很明确的得知问题触发的因素是什么,而对于无法定位和解决的问题,等同于未知问题。

因此这就要求在混沌测试中,明确记录各种行为和信息,如故障注入点、故障恢复点、执行的测试项、资源使用情况等等,以便给最终定位和分析问题,提供足够多的素材。

05

逆向优化

通过混沌测试的结果,逆向优化测试用例集,以及进一步完善故障模式库,也是混沌测试的重要目的之一。

至于MatrixOne在混沌实践中,每个环节都是如何设计的,本次不做过多介绍,后续会有其他文章进一步分享。


Part 3

如何评估混沌测试

关于混合评估混沌测试成熟度,目前业界已经有一些探索,比如阿里的CMM模型,但是此模型有些过于复杂和理论化,MO测试团队基于此,定制了属于自己的一套评估模型,而整个混沌测试的开展和演进,也是在此模型的基础上进行的。

MatrixOne混沌测试之道相关推荐

  1. 《Google软件测试之道》- Google软件测试介绍

    <Google软件测试之道>- Google软件测试介绍 2015-05-21 目录 1 质量与测试   2 角色   3 组织结构   4 爬.走.跑   5 测试类型   相关链接 与 ...

  2. python测试之道第5章模拟网络请求

    python发送网络请求是通过模块中的方法来实现的,模块定义好了请求的语法格式,只需要按照相应的语法格式对号入座写代码即可. 一般来说我们测试的都是基于HTTP和HTTPS的网络请求,python有很 ...

  3. 富文本存储型XSS的模糊测试之道

    富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的&q ...

  4. 《微软的软件测试之道》读书笔记 之 结构测试技术

    <微软的软件测试之道>读书笔记 之 结构测试技术 2014-07-18 我们需要结构测试吗? 微软的一项试验说明了结构测试的在代码覆盖中起到的效果: 超过3000名测试员参与了这项实验,每 ...

  5. 补习系列(8)-springboot 单元测试之道

    目录 目标 一.About 单元测试 二.About Junit 三.SpringBoot-单元测试 项目依赖 测试样例 四.Mock测试 五.最后 目标 了解 单元测试的背景 了解如何 利用 spr ...

  6. 测试之道——阿里巴巴八年测试专家倾情奉献

    测试之道--阿里巴巴八年测试专家倾情奉献 发表于:2018-1-11 08:21  作者:雷藏   来源:云栖社区 字体:大 中 小 | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 软件测试管理  ...

  7. 细读《阿里测试之道》

    <阿里测试之道>也是国内第一本综合介绍测试"道"的书,昨天下单,今天早上看完了第一章节,里面对国内测试团队都遇到过的测试困局.难点给出了解决之道:以阿里的视角阐述了测试 ...

  8. 《Google 软件测试之道》摘录

    最近刚刚看完<Google 软件测试之道>,受益颇多,遂记录下: 只有在软件产品变得重要的时候质量才显得重要 第一章:谷歌软件测试介绍 角色介绍 SWE(Software Engineer ...

  9. 《Google软件测试之道》读书笔记

    Google软件测试之道 像google一样进行软件测试 软件测试介绍 少则清晰,测试人员的稀缺导致测试资源很昂贵.(不要招聘太多的测试人员) 质量不等于测试 开发对质量负责(预防行为,不是检测) 卫 ...

  10. 《微软的软件测试之道》读书笔记

    <微软的软件测试之道>读书笔记 第一部分  关于微软     第1章  微软的软件工程         偏重于产品独立发布的模式通常称为PUM(Product Unit Manager)即 ...

最新文章

  1. hadoop 提高hdfs删文件效率----hadoop删除文件流程解析
  2. 不确定函数参数个数时的处理,va_start和va_end使用详解
  3. binder IPC TRANSACTION过程分析(BC_TRANSACTION-Binder Driver)
  4. mysql数据库插入图片_向MySql数据库插入与读取图片文件
  5. Linux防止ARP攻击的一些方法
  6. IDEA下svn配置与share project
  7. 一步步学习SPD2010--词汇表
  8. java date 时分秒_java Date 获得时分秒代码
  9. 特斯拉召回部分进口Model S、Model X电动汽车
  10. python无法使用decode,Python处理文件名或路径名中无法decode代码问题
  11. Python中if __name__=='__main__': 理解与总结(看这篇就够了,一文扫清疑惑!)
  12. anaconda的python环境下无法使用通过pip安装的python库
  13. 解决ubuntu系统mysql open_files_limit配置不生效问题
  14. 远程连接Linux系统
  15. 干货!软考高级网络规划设计师备考经验分享
  16. ABB工业机器人程序编写与实战
  17. Bayes‘ theorem贝叶斯定理(基础理论+心理学小例子)
  18. matlab研究微分方程,基于MATLAB的微分方程求解电路仿真实验研究与实现
  19. win2012+r2+php+mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
  20. AI不思议|除了猜用户手绘图案,还能猜什么?

热门文章

  1. matlab读取nc数据的某一列数据库,科学网—.nc数据读取详细资料matlab2010a及后面的版本 - 张凌的博文...
  2. linux 在本地创建svn服务器_linux下搭建SVN
  3. Spring学习(二)IOC
  4. 解决Firefox3下Flashgot的”AddRef”问题
  5. Mysql通过ibd文件恢复数据的步骤详解
  6. android 电视 vob格式转换,佳佳VOB格式转换器将视频转换到手机格式的方法
  7. 案例:Java用面向对象的思想设计游戏中的角色
  8. 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
  9. cortex M3/4 内部总线
  10. python函数之enumerate()快速打印出列表中的元素以及对应的下标