测试之巅—自动化测试

玩技站长
玩技站长
玩技站长
管理员, Keymaster
10834
文章
669
评论
测试资讯评论54字数 1185阅读3分57秒阅读模式
摘要这些年,自动驾驶的概念很火。美国汽车工程师协会提出了六级(L0-L5)分层模型,用来衡量自动驾驶的能力和水平。许多人对这个分类模型耳熟能

这些年,自动驾驶的概念很火。

测试之巅—自动化测试插图
文章源自玩技e族-https://www.playezu.com/194336.html

美国汽车工程师协会提出了六级(L0-L5)分层模型,用来衡量自动驾驶的能力和水平。许多人对这个分类模型耳熟能详。文章源自玩技e族-https://www.playezu.com/194336.html

自动化测试和自动化驾驶一样,也是人类的梦想。如何衡量自动化测试的水平呢?有人就参考自动驾驶的分层方法,对自动化测试也进行了类似的分级(参见《人工智能测试的六个层次》、《测试工程师不懂AI,还有未来吗?》等文章)。文章源自玩技e族-https://www.playezu.com/194336.html

仔细看完具体的分类内容后,我发现这些分级方法存在模仿过度的问题。由于忽视了软件测试的本质,由于脱离了自动化测试的实际,而划分出在我看来有些错乱的类型。 例如,将难度最高的测试检查点自动化划分为L1层次。文章源自玩技e族-https://www.playezu.com/194336.html

给自动化测试分等级,不能偏离测试的基本原理。软件测试是构造测试输入,作用于被测软件,然后观察其实际输出并与期望输出进行比较的过程。软件测试依赖于(1) 测试输入和(2) 期望输出。其中测试输入与测试数据、测试步骤、测试操作序列等概念等价。文章源自玩技e族-https://www.playezu.com/194336.html

在已知测试输入和期望输出的情况下,自动化测试成为一个编程问题。无数通用或专用编程语言,例如Python、Java、Robot Framework等,能够帮助我们解决这个问题。文章源自玩技e族-https://www.playezu.com/194336.html

编程需要人工。编程之后,测试就可以实现自动化执行。相比完全手动的L0,这个层次的自动化测试是L1。这也是自动化测试领域当今的主流水平。文章源自玩技e族-https://www.playezu.com/194336.html

在L1基础上,要想更进一步,需要突破测试输入和期望输出的自动生成。这是两个问题。文章源自玩技e族-https://www.playezu.com/194336.html

1,自动生成测试输入文章源自玩技e族-https://www.playezu.com/194336.html

在进行软件测试时,测试人员需要精心构造测试数据和测试步骤,以期实现更高的覆盖,发现更多的bug。文章源自玩技e族-https://www.playezu.com/194336.html

业界尝试了许多方法,来自动生成测试数据和步骤。例如随机方法、Fuzzing方法、基于搜索的方法、基于模型的方法、基于机器学习的方法等。

这些方法或多或少存在以下问题:(1) 生成的用例数量过多,(2) 生成的用例长度过长,(2) 产生的误报率过高,(4) 测试的覆盖率过低等。除了有成本低的优势之外,它们与人工设计相比,质量还相差甚远。

测试输入的生成处于研究阶段,可落地成果还较少。倘若突破了测试输入的自动生成,那么我们可以达到L2级的自动化测试。

2,期望输出自动生成

写过测试用例的人都知道,用例的相当篇幅是关于检查点的。为了一个个检查点,我们需要对说明文档抠字眼,需要与用户、与产品经理、与开发人员反复核对。即使这样,有时候用例失败报bug,结果由于我们的检查点不合理而被打回。

这些现象从侧面反映了测试结果判定的难度。结果判定难,关键在于软件的期望输出获取难。这个难题又叫做oracle难题。这里oracle的意思是预言、神谕。可以说,做预言有多难,生成期望输出就有多难。人工都难,自动化就更难了。

oracle自动化之难,难于上青天。

过去几十年的研究表明,大家对测试oracle自动化基本还没多少办法。倘若突破了oracle生成的自动化,那么我们就可以实现L3级别的自动化测试。

只有用例生成、用例执行和结果判定都自动化了,软件测试才能够实现端到端、一站式的自动化。这是自动化测试的终极目标,是测试之巅,是真正的“解放”。

测试之巅—自动化测试插图1

这张图就是我认为的自动化测试等级模型。这个模型很简单,也比较符合实际。说它符合实际,是因为自动化测试的现状就是:用例执行自动化80分,用例生成自动化20分,oracle自动化5分。

基于这个实际,任何的新技术、新工具,例如机器学习、人工智能,只有解决了测试真正的瓶颈问题(用例生成和oracle生成),才能算明显地推动了测试的进步。

 
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证