测试中的数学问题

简介: 测试中的数学问题

640.jpg

测试和数学有什么关系?想要当好一名测试,难道还要学数学?现在测试都这么卷么?或许在你的测试工作中,并没有用到数学,但如果你知道一些数学小知识,一定能帮你提升测试效率的。不信?那就接着往下看。


1测试用例中的数学问题


现在有这么一个测试场景:用户想要使用银行卡去ATM机上取钱。这里面就会涉及到很多的条件组合,例如:

用户的属性:VIP客户、普通客户

银行卡的属性:I类卡,II类卡,信用卡,贵宾卡、白金卡

钱的属性:余额充足、不足

银行卡的状态属性:可用、冻结等

......

这么多属性,如果用排列组合的形式,那得有多少种呢?这类多条件组合的问题,其实我们是经常遇到的。你是否需要全量验证呢?如果条件或者属性再多点呢?

 

你看,如果不知道正交表,不知道PICT,是不是就会有点束手无策呢?pairwise算法的原理又是什么呢?有兴趣的同学可以去它的官网上看看(http://www.pairwise.org/tools.asp)。这里就不展开说了(主要是原理太长了,我又懒),大家自己动手去实践吧。


2性能测试中数学问题

不知道大家注意到没有,我们在初中学习各类公式的时候,都会有些前提条件,比如动量守恒定律,它的前提条件是在研究的方向上,系统不能受到外界的力的作用;或者外界的力的矢量和为零时,动量守恒定律才生效。在性能测试的理论学习中,也会有涉及到一些计算公式,但很多测试人员在使用这些公式时,往往会忽略掉某些条件。


很多人在估算并发用户数时,会想到一个很简单的公式:C = nL/T,C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是考察时间的长度,然后就开始各种算。这个公式对不对?当然是对的,但是它有一个大前提,它是针对官网、论坛等静态业务系统的计算方式(泊松分布了解下?)。但是我们现在的业务系统大多数是事务型的,所以这类的公式并不适用。

性能中还有一个常见的公式:TPS=VU * R / T,其中 VU是用户数量、R是每个用户发出的请求数,T是性能测试的运行时间。这个公式从理论上讲也没有问题。但是它也有一个大前提,那就是T是不包含响应时间的,如果包含响应时间,那TPS也会出现较大的波动。所以,在反推用户数(也就是你想用多少用户来压测)时,要特别注意考虑到响应时间这个因素,否则你给老板汇报时,你给出的最大并发数可能会有很大的水分(虽然说最大并发数本身就是很外行的话术)。

3专项测试中的数学问题

这里提我自己实践到的两个场景:

第一:当我们在做接口测试的时候,想要自动生成一些很通用的用例,来测试入参参数的边界值、等价类、类型是否匹配等。如果让测试人员每个接口都写一遍,那估计会疯。这类问题是不是本文提到的第一个场景很像呢?还是多条件组合的问题,所以我会先获取接口入参的参数类型,根据不同类型的规则结合pairwise算法生成对应的测试数据,以便于驱动测试用例。这样会比全量的排列组合效率高很多。 第二:在做UI测试的时候,有个功能是自动检测系统中所有静态URL是否可访问,如果有不能访问的,需要提前暴露出来。你当然可以通过For循环一点点地去遍历,然后访问。但这样效率太低。这个场景的本质可以简化为遍历算法的问题,可以使用深度优先或者广度优先的遍历算法,来快速实现,提高性能。


4小结

我们一直都说测试是无法穷尽的,那么我们的那些测试策略、设计测试用例的方式又如何去解释呢?实际上,我们都是在用启发式算法来解决问题。我们通过自己的经验,结合行业的沉淀的共性经验,设计出高效的测试用例,虽然无法穷举所有用例,但是最终结果相差并不会太大,在可接受的范围(系统正常上线)。如果我们穷举所有的随机组合,来达到最优解,那么时间和空间复杂度会随着入参因子的增多将呈指数级上涨,不切实际。这不就是启发式算法么(一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计)?

5附:一个鸡汤中的数学问题

640.png

                     


今天在和阿常聊天的时候,她发了这么一张图给我,具体的场景就不说了。这张图想表达鸡汤信息我是可以理解的。但是数学公式有点问题。因为它忽略了一个问题,就是0.01的基数问题(是不是和本文的第二点很类似),假设我现在会100个英文单词,明天多学1个,那就是会101个了,以此类推,当到了300天左右时,我每天要学20个左右单词,才能满足所谓的比昨天进步0.01,因为你的基数不再是100,而是200左右喽(学到第299天的积累)。同理,到600天的时候,你每天要学400个单词,才能比昨天进步0.01。发现问题了没有?所以,以后发这个鸡汤的时候,只要发“积跬步以至千里,积怠情以至深渊”就好,不要发公式了。这个也是本篇文章的引子。


本次话题就聊到这里,下次我们聊什么呢,敬请期待。

相关文章
|
Python
Python 技术篇-mac下安装、卸载pip方法
Python 技术篇-mac下安装、卸载pip方法
1363 0
Python 技术篇-mac下安装、卸载pip方法
|
SQL 关系型数据库 MySQL
手把手教你实现MySQL读写分离+故障转移,不信你学不会!(中)
手把手教你实现MySQL读写分离+故障转移,不信你学不会!(中)
手把手教你实现MySQL读写分离+故障转移,不信你学不会!(中)
|
存储 Web App开发 前端开发
|
14天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
缓存 并行计算 PyTorch
144_推理时延优化:Profiling与瓶颈分析 - 使用PyTorch Profiler诊断推理延迟,优化矩阵运算的独特瓶颈
在2025年的大模型时代,推理时延优化已经成为部署LLM服务的关键挑战之一。随着模型规模的不断扩大(从数亿参数到数千亿甚至万亿参数),即使在最先进的硬件上,推理延迟也常常成为用户体验和系统吞吐量的主要瓶颈。
341 147
|
9天前
|
机器学习/深度学习 存储 缓存
92_自我反思提示:输出迭代优化
在大型语言模型(LLM)应用日益普及的今天,如何持续提升模型输出质量成为了业界关注的核心问题。传统的提示工程方法往往依赖一次性输入输出,难以应对复杂任务中的多轮优化需求。2025年,自我反思提示技术(Self-Reflection Prompting)作为提示工程的前沿方向,正在改变我们与LLM交互的方式。这项技术通过模拟人类的自我反思认知过程,让模型能够对自身输出进行评估、反馈和优化,从而实现输出质量的持续提升。
392 136
|
3天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
223 1
|
13天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
399 135