标签:覆盖 成本 str 测试用例 学习python oracle 随机 领域 code
这些年,自动驾驶的概念很火。
美国汽车工程师协会提出了六级(L0-L5)分层模型,用来衡量自动驾驶的能力和水平。许多人对这个分类模型耳熟能详。
自动化测试和自动化驾驶一样,也是人类的梦想。如何衡量自动化测试的水平呢?
有人就参考自动驾驶的分层方法,对自动化测试也进行了类似的分级(参见《人工智能测试的六个层次》、《测试工程师不懂AI,还有未来吗?》等文章)。
仔细看完具体的分类内容后,我发现这些分级方法存在模仿过度的问题。
由于忽视了软件测试的本质,由于脱离了自动化测试的实际,而划分出在我看来有些错乱的类型。 例如,将难度最高的测试检查点自动化划分为L1层次。
给自动化测试分等级,不能偏离测试的基本原理。软件测试是构造测试输入,作用于被测软件,然后观察其实际输出并与期望输出进行比较的过程。
软件测试依赖于(1) 测试输入和(2) 期望输出。其中测试输入与测试数据、测试步骤、测试操作序列等概念等价。
在已知测试输入和期望输出的情况下,自动化测试成为一个编程问题。无数通用或专用编程语言,例如Python、Java、Robot Framework等,能够帮助我们解决这个问题。
编程需要人工。编程之后,测试就可以实现自动化执行。相比完全手动的L0,这个层次的自动化测试是L1。这也是自动化测试领域当今的主流水平。
在L1基础上,要想更进一步,需要突破测试输入和期望输出的自动生成。这是两个问题。
1,自动生成测试输入
在进行软件测试时,测试人员需要精心构造测试数据和测试步骤,以期实现更高的覆盖,发现更多的bug。
业界尝试了许多方法,来自动生成测试数据和步骤。例如随机方法、Fuzzing方法、基于搜索的方法、基于模型的方法、基于机器学习的方法等。
这些方法或多或少存在以下问题:(1) 生成的用例数量过多,(2) 生成的用例长度过长,(2) 产生的误报率过高,(4) 测试的覆盖率过低等。除了有成本低的优势之外,它们与人工设计相比,质量还相差甚远。
测试输入的生成处于研究阶段,可落地成果还较少。倘若突破了测试输入的自动生成,那么我们可以达到L2级的自动化测试。
2,期望输出自动生成
写过测试用例的人都知道,用例的相当篇幅是关于检查点的。为了一个个检查点,我们需要对说明文档抠字眼,需要与用户、与产品经理、与开发人员反复核对。即使这样,有时候用例失败报bug,结果由于我们的检查点不合理而被打回。
这些现象从侧面反映了测试结果判定的难度。结果判定难,关键在于软件的期望输出获取难。这个难题又叫做oracle难题。这里oracle的意思是预言、神谕。可以说,做预言有多难,生成期望输出就有多难。人工都难,自动化就更难了。
oracle自动化之难,难于上青天。
过去几十年的研究表明,大家对测试oracle自动化基本还没多少办法。倘若突破了oracle生成的自动化,那么我们就可以实现L3级别的自动化测试。
只有用例生成、用例执行和结果判定都自动化了,软件测试才能够实现端到端、一站式的自动化。这是自动化测试的终极目标,是测试之巅,是真正的“解放”。
这张图就是我认为的自动化测试等级模型。这个模型很简单,也比较符合实际。说它符合实际,是因为自动化测试的现状就是:用例执行自动化80分,用例生成自动化20分,oracle自动化5分。
基于这个实际,任何的新技术、新工具,例如机器学习、人工智能,只有解决了测试真正的瓶颈问题(用例生成和oracle生成),才能算明显地推动了测试的进步。
如果你处于想学Python自动化或者正在学习Python自动化,Python自动化的教程不少了吧,但是是最新的吗?说不定你学了可能是一年前人家就学过的内容。
干货分享一波:2020最新的Python教程。获取方式:加入爱码小哥(主页获取加入方式)干货群,私信管理员语嫣获取。
标签:覆盖 成本 str 测试用例 学习python oracle 随机 领域 code
原文地址:https://www.cnblogs.com/cemaxueyuan/p/12864703.html