前各个软件公司都很重视自动化软件测试。甚至会把软件测试自动化率(自动化测试用例占整个测试用例的比例)作为软件测试人员(也叫质量保证工程师)绩效考核的内容之一。追求自动化测试比例的初衷是很好的,但是不顾软件产品的实际情况和软件测试人员的情况,而过分追求高的测试自动化比例,会得到适得其反的效果。我们常常会听到某软件的自动化测试率高达70~80%,可是还是不得不聘请大量的测试人员来进行手动测试。这在无形之中把软件测试引入了误区。

ZStack的测试架构师认为,软件自动化测试的好坏可以用软件缺陷的发现的比率来衡量。换句话说如果整个系统的自动化测试比例达到80%,那么通过自动化测试发现软件缺陷的数量应该达到甚至超过全部软件缺陷数量的80%。举个例子,iSCSI主存储是即将发布的ZStack 0.7版本的重要功能。ZStack现有的自动化测试用例在没有修改一行代码的情况下,就可以用于测试iSCSI主存储的功能。之前开发人员手动测试没有发现的软件缺陷,但是用自动化测试用例发现了5个缺陷。这个就是非常有效的自动化测试用例。

ZStack对软件质量非常看重,因为我们深知人是最聪明也是最不可靠的(以后我们也许可以探讨一下人性与软件测试的相关话题),所以从整个软件设计的开始,ZStack就决定尽可能地依靠全自动的测试手段来探测各种可能出现的软件缺陷。

传统的自动化测试有一个优势就是每轮测试都会严格执行之前定义好的全部测试用例,无一遗漏。通过对前后测试结果的比较,就可以得出质量的变化情况。不过这个优势也是它的弱点。设计软件测试的人员都知道,由于无法穷举所有的测试可能,所以预先设计的测试用例也只能覆盖一部分最常见(或者说是测试人员最希望测试到)的领域。那么对于没有测试到的领域就无法确定其是否存在软件缺陷。这个问题该怎么破呢?为此,ZStack的自动化测试特别引入了一种特别的测试--基于模型的测试(Model-based Testing)。

基于模型的测试是一种人工智能的测试方法,可以用于自动的构造测试场景和测试用例。它要求测试人员首先基于软件功能构造出各种模型(或者叫做行为),然后制定行为和行为之间的关系以及行为和系统的关系(有限状态机),之后自动测试系统就可以智能的根据当前的被测系统的状态(场景)以及预设的规则,选择下一步要执行的行为。理论上这种测试方法可以尽可能的遍历被测试系统中各种可能经历的行为链,从而极大的提高了测试覆盖率。由于它每次执行的路径和以往不同,所以可以构造出完全不同的测试用例,我们也可以称之为智能的软件测试。

下面,我们来大致看看ZStack是怎么构造基于模型的测试的。不过首先我们要说明的是,整个基于模型测试的难点在于提取测试模型,以及编写测试模型验证代码,而非基于模型的测试框架本身和模型算法。所以以后遇到推销基于模型测试“框架”的人,千万不要觉得他们牛的一塌糊涂,真正牛的是实现具体测试的人,而非框架本身。实现测试系统的工程师才是真正的英雄。换句话说,虽然现实中有一些现成的基于模型的测试的框架,但是如果其他IaaS想要重现ZStack的智能测试也绝非易事。

ZStack基于模型的测试首先就是要把各种IaaS操作定义成模型。这里我们拿虚拟机实例的各种操作举例。虚拟机实例通常只有4个状态,状态和状态之间可以定义标准的操作。把状态和操作画出来后,我们就得到了虚拟机实例的状态迁移图(有限状态机)。可以看到上图中Running和Stopped的状态之间可以通过stop和start操作做成状态环。那么智能测试就可以根据预先设定的规则,可能会让虚拟机在这个环里做有限的测试。这一个看起来好像很简单,但是要知道IaaS里面还有很多其他资源的状态迁移图。而且很多资源之间是有相互依赖关系的,例如在某些系统中只有虚拟机处于Stopped的状态才可以做磁盘快照。而且用户在操作IaaS的时候,也不会只做虚拟机状态的改变,通常会和其他资源的actions混合操作。所有当把所有资源的迁移图画完,就会发现整个IaaS的场景和可选的行为之间的关系还是非常非常复杂的。ZStack的测试工程师可是花费了不少的时间来完成这项艰巨的工作。

当创造完场景和行为关系图后,智能测试就可以开始最初的测试工作。一开始的时候,它的智力水平并不高,只能从当前可执行的所有操作中随机的选择一个操作。极端情况,这可能会导致它一直在虚拟机实例的操作中绕圈子,而有些操作从来就没有执行过。慢慢的ZStack工程师就开始给他添加了两个更高的智慧:公平调度算法和基于历史测试路径的调度算法。

公平调度算法会让智能测试系统尽量选择最少执行的行为作为下一个操作。

而基于历史测试路径的算法可以让智能系统选择曾经没有测试过的路径。有了这两种更加智能的调度算法,智能测试系统也就可以更好的发挥它的能力,未来ZStack的测试工程师们还会设计出一些更高级的复合测试算法,来增加智能测试系统的智商。除了发现一些常规的问题外,通过基于模型的测试还发现了不少我们称之为Corner Case的缺陷,它们可能是90%的ZStack用户永远也不会触发的问题。虽说是corner case,但是一旦在开发的阶段没有发现,等到用户遇到的时候,就会花费很大的力气来修复,有一些可能还是致命的。所以这种基于模型的智能测试给ZStack带来了很大的好处。

基于模型的测试和ZStack的另外两大自动化测试系统:集成测试和系统测试构成了ZStack质量控制的三驾马车。在当今DevOps当道的今天,我们希望ZStack的测试和研发投入比力求做到1:1(以后我们也许可以和大家交流为什么纯粹的靠开发人员来做测试是有问题的) ,我们希望把软件质量永远放在ZStack的第一位。

希望今天浅析的ZStack智能测试方法能给广大软件质量保证师从实践角度带来一些好的想法。最后我们想要感谢全世界的软件测试工程师,感谢你们在每一件软件产品后面付出的辛苦努力!

如果软件测试是门艺术,软件测试工程师就是艺术家 -- 浅析ZStack是如何做智能软件测试相关推荐

  1. 如何 修炼 软件测试这门 手艺

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 最近收到一封邮件这 ...

  2. 软件测试的原则与测试工程师的要求

    一. 软件测试的原则 1. 所有的测试都应追溯到用户需求 1.1 缺陷的源头 根据相关调查,软件缺陷出现最多的地方是软件需求规格说明书(即软件需求定义), 而不是程序代码. 1.2 如何应用此原则 测 ...

  3. 软件测试入门之软件测试的原则与测试工程师的要求(了解即可)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/1 ...

  4. 同窗多年,一个无经验的应届生,一起转行做了软件测试并月薪8K

    我是个应届生,自身就是一个转行成功的例子- 零基础转行软件测试,你必须要做好3个准备 第一个准备:认知准备 首先要明确的是零基础入门,面对的是全新的行业,首先要树立自己对这个行业正确的认知,才能找到正 ...

  5. 编程是门艺术_是编程艺术吗?

    编程是门艺术 是编程艺术吗? --我们真的可以教每个孩子编程吗? 如果您需要3或4个截然不同的意见,请问1或2个程序员. 在这个特定主题上,我的一些同事感到非常强烈,以至于他们甚至有能力自我辩护. 还 ...

  6. 在腾讯做了4年软件测试,来面试要求35k,让我见识到了真正的软件测试天花板...

    人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰. 同样 ...

  7. 狼来了?全球首款基于AI的智能软件测试工具问世了,它叫mabl。

    立志做国内自动化/AI测试领域最好的原创公众号.欢迎微信关注公号"测试不将就"(ID: awesometest),更多原创文章在路上.我们的口号是:"插上自动化/AI的翅 ...

  8. 转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?

    编者按: 以下这篇文章,其实是笔者2018年初发表在<业界良新>上的三篇转型文章的合集.这次重新汇总呈现给大家,一方面是给传统汽车产业需要转型的朋友做个转型参考,另一方面,也是给接下来的两 ...

  9. 软件测试工程师简历项目经验怎么写?--1000套软件测试工程师简历

    一.前言:浅谈面试 面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的.那如何才能顺利的通过面试,得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来 ...

  10. 2023年软件测试的前景?测试工程师技能提升,进阶自动化测试...

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

最新文章

  1. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
  2. [记录]CentOS搭建SVN服务器(主从同步)
  3. asp.net mvc 页面传值的方法总结
  4. Hyperopt中文文档:FMin
  5. Short-Session的推荐如何做?
  6. 从此明白了卷积神经网络(CNN)
  7. 杨辉再发声明:承认听取付向东报告后受其“鼓舞”,为没及时沟通向其致歉...
  8. 按字母位置关系给数字排序(洛谷P4414题题解,Java语言描述)
  9. JavaScript深入之从原型到原型链 1
  10. 【Unit 1】Python以及Pycharm的安装与设置
  11. 安卓的基本的动画介绍
  12. unc0ver 越狱工具来袭,支持iOS11.0~iOS14.8稳定越狱 更新至V8.0.2 支持 A7-A14
  13. SQL Server 2008 R2每天自动备份数据库
  14. android访问服务器405,android
  15. 计算机u盘病毒清除方式,终极:如何消除计算机上U盘的“文件夹.EXE病毒”?
  16. ubuntu虚拟机全屏显示问题
  17. 机器学习1-线性模型及多分类
  18. Vue 文档编写指南
  19. 计算机安装调试维修员中级习题,计算机安装调试维修员培训计划(三级)
  20. 最大似然概率和后验概率的区别

热门文章

  1. 如何用python写一个答题程序_python练习题库
  2. 基于随机森林模型的心脏病患者预测及可视化(pdpbox、eli5、shap、graphviz库)附相关库安装教程
  3. PMP备考资料和备考经验分享(基于PMP第六版)
  4. 图解深度学习-三种梯度下降法可视化(BGD,SGD,MBGD)
  5. Axure教程:淘宝商品图片放大效果
  6. 模拟电子技术基础:基本放大电路
  7. cmos和ttl_TTL与CMOS电路怎么区分
  8. 视频教程-Oracle 11G 入门到项目实战-Oracle
  9. 手把手教你学单片机,学完马上能自己编写开发程序
  10. PADS2007教程(一)——原理图封装