【准则化的思想】如何创立一个新的测试充分准则

2024-08-22 12:36

本文主要是介绍【准则化的思想】如何创立一个新的测试充分准则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果现成的测试充分准则里面找不到可用的,我们可能就需要自己来创立一个新的准则。我们不知道历史上第一个面对深度神经网络系统的测试工程师是谁,但我们知道他在做测试设计的时候,肯定遇到过这个问题:现成的控制流覆盖准则或数据流覆盖准则都不能用,因为深度神经网络系统不同于传统的软件,它的结构要素不再是代码行或者变量的定义使用。这位工程师只能依靠准则化的思想,自己创立一个新的准则,比如我们现在所熟知的“神经元覆盖准则”。

要创立一个准则,我们需要做两件事:

① 建立价值观,也就是识别测试焦点,明确测试目标;

② 将价值观准则化,也就是设计一种具体的形式来约束和评价测试集,以实现测试目标。

准则的具体形式,包括判定型和度量型两种。判定型准则回答的问题是 ,一个测试集充分还是不充分:

度量型准则回答的问题是,一个测试集的充分度是多少:

显然,判定型准则可以看做是度量型准则的一种特殊情况:

比如,“语句覆盖率”是度量型准则,而“要求语句覆盖率达到100%”,就是判定型准则;再比如,“变异得分”是度量型准则,而“要求变异得分达到1”就是判定型准则。

自己创立一个测试充分准则——这件事听起来貌似很高大上,其实离我们并不遥远。在我们的日常测试工作中,我们经常在做这件事——我们经常会想:“好,测了这些用例应该就差不多了”。这种想法,其实就来自我们内心已经建立起的一些模糊的准则。

当然这种准则可能并不严谨,也不能通用。如果我们想提出一些高水平的准则,能够对测试充分性进行比较科学的度量,能在高级别的期刊会议上发表,得到业界的认可和推广,我们就需要在设计准则的时候,尽可能让它具备这样一些优良的性质:

我们用“变异得分”这个准则来解释一下这些性质:

  ① 归一性。意思是,准则给出的测试充分度结果,取值应在[0, 1]之间。同时,空集的测试充分度应为0,穷尽测试集的测试充分度应为1——变异得分是刨除等价变异体之后,被杀死的变异体占变异体总数的比例,所以取值一定在[0, 1]之间。如果测试集为空,肯定不能杀死任何变异体,变异得分是0;如果是穷尽测试集,肯定就能杀死等价变异体之外的所有变异体,变异得分就是1。

  ② 有限适用性。意思是,一定存在一个有限的测试集,能够满足给定的充分度指标——假设给定的变异得分指标是1,那是不是一定存在一个有限的测试集,能杀死所有非等价变异体呢?是的,因为如果一个变异体不是等价变异体,那就一定能找到一个用例杀死这个变异体。变异体的数量是有限的,所以需要的用例数量就是有限的。

  ③ 单调性。意思是,如果在测试集中补充了新的用例,测试集的充分度会提高,至少不会降低——补充用例,就有可能杀死更多的变异体,变异得分只会提高不会降低。

  ④ 次可加性。意思是,多个测试集的并集的充分度,不应该高于其各自充分度的加和——假设一共有5个非等价变异体A/B/C/D/E,测试集T1能杀死A和B,测试集T2能杀死B和C:

那么,T1的变异得分就是0.4,T2的变异得分也是0.4。而T1∪T2的变异得分是0.6,比T1和T2各自变异得分的加和要小。

  ⑤ 贡献递减性。意思是,已经完成的测试越多,接下来补充的测试对充分性的贡献就越小——假设还有一个测试集T3,能杀死C和D:

考虑两种情况。第一种情况是,先执行T1,执行完之后变异得分是0.4,然后执行T3,这时候变异得分会增加0.4;另一种情况是,先执行T1和T2,执行完之后变异得分是0.6,然后执行T3,这时候变异得分只会增加0.2。这就是贡献递减性。

这篇关于【准则化的思想】如何创立一个新的测试充分准则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096290

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

day45-测试平台搭建之前端vue学习-基础4

目录 一、生命周期         1.1.概念         1.2.常用的生命周期钩子         1.3.关于销毁Vue实例         1.4.原理​编辑         1.5.代码 二、非单文件组件         2.1.组件         2.2.使用组件的三大步骤         2.3.注意点         2.4.关于VueComponen