软件测试中如何测试算法?

news2024/11/18 5:27:08

广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们
今天讨论的软件测试中的算法,对应的英文单词为Algorithm ,专指计算机处理复杂问题的程序或
指令。

随着最近几年人工智能等领域的快速发展,算法受到前所未有的重视,算法测试也随之兴起。|

为了让同学们能对算法测试有一定了解,老规矩,我将这篇文章大纲先公布如下:

1、算法测试测什么?
2、算法测试如何做?
3、补充算法测试一个案例
4、答疑解惑

一、算法测试测什么?

先来看几个大家耳熟能详的算法应用成功的例子:

1.阿尔法围棋机器人,打败了人类棋手,其实就是运用了复杂的人工智能算法

2.今日头条、抖音等APP , 使用了兴趣算法推荐,推送的都是你感兴趣的

3.购物软件,你搜过什么商品,就会不胜其烦-直推荐,也是使用了算法推荐机制
在这里插入图片描述

区别于一般的功能测试,算法测试的侧重点不同。

一般的功能测试是关注前端操作之后服务端返回数据的正确性(增删改查),而算法测试则要关注的是算法(模型)启用之后,数据的增量(有正负)是否符合预期。

举两个例子

例子1: 某软件中的广告推荐更新了一套算法,预期要把推荐转化率提升几个百分点。

【测试要关注的是】新算法有没有提升转化率百分比,提升量的有没有达到预期。

例子2: 某人脸识别软件更新了识别算法,预期是减少识别耗时。

【测试要关注的是】耗时减少的同时准确率有没有下降。

二、如何测试算法?

1、普通功能测试会使用到的方法

1)算法稳定性测试

a ) 长时间运行,算法是否奔溃

b )数据量提升后,算法模型的结果是否符合预期

2 ) 算法性能测试

a )算法模型的响应时间

b )算法模型对处理器cpu和磁盘的消耗

3 ) 算法兼容性测试

a ) 设置不同阈值内的数据,算法结果是否稳定(比如用户年龄、区域、性别等)

上面说到测试方法,是不是似曾相识?没错,这几个与普通功能测试中用到的测试方法基本一样

2、普通功能测试中不会用到的测试方法

1 ) 算法pk(赛马)

对于一个需求,不同的人或团队可以设计出不同的算法模型,到底哪个更靠谱,是骡子是马拉出来溜溜,pk一下就知道了。

这个环节是算法测试的关键部分,用例设计主要采用场景法,通过列举不同场景,对多个算法分别进行测试验证,最终综合所有场景中的算法模型的表现,选出前几名。

你可能会有疑问:为什么要前几名,选第一名不就可以了吗?

下文中通过实例列举了这个环节中的测试用例,可以更好地理解这样设计用例的原因 ( 在此暂时不表 )。
在这里插入图片描述

2)A/B测试

由于算法的准确性会受到测试数据的影响,而在测试环境中,数据的来源一般是手动插入数据库或从线上导入数据。

尽管测试数据会接近于真实数据,但仍会有数据类型覆盖不够全面、数据量不够大等方面的问题。因此,即使算法模型在测试环境通过验收,仍然不能在生产环境全部放量。

通常采用的方法是:拿出线上流量的5%-10%,其中一部分数据作为对照组,其它部分作为一个或多个实验组(实验组采用的算法为pk中胜出的前几名算法)。对照组合实验组数据分别打不同的标,一段时间后分别统计计算的各项指对照组合实验组的各项指标标,根据关键指标来验证算法是否有效。
在这里插入图片描述

实际测试中,对算法的选择往往不是通过一项指标来定的,通常是多项指标综合比较。

看到这里,你是不是还有点迷糊,别担心,我们也通过下面的例子来说明。

三、算法测试实例

某导航APP,要升级导航路线推荐算法,预期是找到耗时更少的路线并推荐给用户。

首先来理解一下需求中的关键词 「耗时更少」:耗时不等同于距离,有可能距离短但是堵车,实际比绕路耗时还长。

经过n天的研发,算法同学最终给出了3个优化后的算法模型,现在到了测试验证环节。

为方便描述,我把旧导航路线推荐算法称为算法0,新算法分别称算法1、算法2、算法3

1、算法pk(下面是场景化测试用例的列举)

同一条路线,默认为当前时间和天气状况,多轮测试之后,选出最优的算法,假定是算法2

同一条路线,分别设定不同时间段(早晚高峰、工作日、节假日等),找出最优算法,假定是算法1

同一条路线,分别设定不同的天气状况(雨、雪、雷、沙尘、冰雹等),找出最优算法,假定是算法3

还有其它很多场景的测试,这里就不一一列举了……

2、稳定性测试

长时间(24小时以上)运行算法模型,是否有稳定的表现,假定这里的最优算法是算法1

超长距离(1000km以上)测试算法模型,对比推荐效果是否稳定,假定这里的最优算法是算法2

……

3、兼容性测试

选取不同城市的道路测试(比如重庆、贵州等地),测试山路、爬坡、转弯等不同路况下导航推荐算法的表现,假定这里的最优算法是算法1

选取不同通行能力的道路(城市和乡间小路等),测试小路、窄路等不同路况下,推荐算法是否有

稳定表现,假定这里的最优算法是算法3

……

4、性能测试

同一条路线下,不同算法模型的耗时,假定耗时最少的算法是算法3

同一条路线下,不同算法模型对服务器的压力,假定最终结果是算法2最服务器压力最小

……

5、AB测试

经过上面几个环节的测试,综合所有结果,假定最终选出的算法1和算法3

线上灰度放量,选取目标用户,被选中的用户会收到「是否参加内测/灰度」之类的消息

经过一段时间的A/B测试之后,拿到真实的数据,最终经过架构师、研发经理、产品经理等研讨之后选出符合预期的算法

四、答疑解惑

上述例子中,假定最终要采用的是算法2,但是你可能会有很多疑问:

1、算法1在早晚高峰期时段表现最好,我就是上下班使用导航软件,为什么不采用?
2、耗时最少的是算法3。我就希望推荐路线要快,为什么不采用?

算法的测试,要经过多个环节综合来评估效果,所以即使某个环节表现好最终也不一定入选。

最终会结合效果、成本、稳定性等多方面的因素,最终往往会选择妥协折中后的方

软件中的算法如何测试?你了解了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/899099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

异步电机IM-改进的电压模型磁链观测器学习

导读:本期文章主要介绍异步电机的改进型电压模型磁链观测器。传统纯积分形式的积分器在低速区域存在初始值问题和直流偏置问题,所以在实际应用中必须对电压模型进行改进。本期文章中的对电压模型改进是借鉴一篇IEEE中的方法。 如果需要文章中对应的仿真…

gcc make cmake ninja的区别

理清C编译过程用到的工具概念 ref: 知乎 早先学C的时候,因为只需要点击IDE的运行按钮,程序就可以跑起来,写过最复杂的只不过是几个文件的学生管理系统。 现在要重新拾起C,看的项目和之前的不可同日而语,构建系统也复…

最优化方法Python计算:牛顿算法

设函数 f ( x ) f(\boldsymbol{x}) f(x), x ∈ R n \boldsymbol{x}\in\text{ℝ}^n x∈Rn二阶连续可微,记 g ( x ) ∇ f ( x ) \boldsymbol{g}(\boldsymbol{x})\nabla f(\boldsymbol{x}) g(x)∇f(x), H ( x ) ∇ 2 f ( x ) \boldsymbol{H}(\…

【数据结构OJ题】用栈实现队列

原题链接:https://leetcode.cn/problems/implement-queue-using-stacks/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 用两个栈实现,一个栈进行入队操作,另一个栈进行出队操作。 出队操作: 当出队的栈…

ARFoundation避坑记录

网上很多人说这个要改成可选的,否则如果没有安装arcore就会自动弹窗,但是如果关闭了,确实不会弹窗了,但是检测设备的代码也不能完美执行了,如果设备安装了arcore还好,如果没有安装测无法检测。 如果不想有…

常见的CRM系统报价

一个CRM系统大概多少钱?CRM系统的价格因为不同的厂商、功能、部署方式、用户数等因素而有很大的差异,没有一个固定的标准。但是,我们可以根据一些常见的CRM软件的报价,对CRM价格有一个大致的了解。 一、CRM的部署方式 CRM系统的…

填充柄功能

单元格右下角十字符号 顺序式填充 输入1,2,直接拉取即可实现顺序1到10. 复制式填充 CtrlD或者拉取,选择右下角复制单元格。 规律式填充 输入星期一,星期二,下拉一直可以到星期日 自定义填充 选择文件-》选项-》自定义序列 输…

AI工程师招募;60+开发者AI工具清单;如何用AI工具读懂插件源码;开发者出海解读;斯坦福LLM课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 一则AI工程师招募信息:新领域需要新技能 Vision Flow (目的涌现) 是一家基于 AGI 原生技术的创业公司,是全球探…

CSGO饰品价格会一直下跌吗?市场何时止跌回升?

最后一届巴黎major终于落下帷幕,Vitality小蜜蜂2-0战胜GL成功赢下本次Major冠军,也是首次夺得Major冠军!有人欢喜有人忧啊,csgo搬砖的饰品商人们一点也高兴不起来。 4月-5月,csgo皮肤饰品已持续走低快两个月了。手里满…

OPTEE3.17+ubuntu20.04+qemu_v8搭建OPTEE开发环境

参考文章: https://blog.csdn.net/capodexi/article/details/123548850 https://blog.csdn.net/qq_42557044/article/details/130973200 https://blog.csdn.net/zhuwade/article/details/125513873 https://zhuanlan.zhihu.com/p/521196386 https://blog.csdn.net/…

wsl2 安装cuda

1 设置为清华源 首先登录wsl 直接命令 wsl 就行 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /e…

AVL树的讲解

算法拾遗三十八AVL树 AVL树AVL树平衡性AVL树加入节点AVL删除节点AVL树代码 AVL树 AVL树具有最严苛的平衡性,(增、删、改、查)时间复杂度为O(logN),AVL树任何一个节点,左树的高度和右树的高度差…

为什么美元美债没有出现死亡螺旋?

号外:刘教链最新文章,欢迎点击阅读: 公众号「刘教链内参」8.18发表:《内参:SEC批准ETF将推高大饼至15-18w$ ?》。 公众号「刘教链Pro」8.18发表:《大饼插爆两万五》。 * * * * * * 如果我们把美…

Linux系统基础服务启动的方法

服务,其实就是运行在操作系统后台的一个或者多个应用程序,为计算机系统或用户提供某项特定的服务。Linux系统运行的绝大多数服务都是需要安装才有的,例如FTP服务、httpd服务、MySQL、redis、Zookeeper、rabbitmq、vsftpd等等,那么…

面试题 ①

1、请讲一下常见的SQL优化方法(至少10条) 1.尽量避免使用子查询 虽然在 mysql5.6 版本之后对 select 的子查询用 join关联方式 做了优化,但是update/delete子查询依然先查外表再查内表,当外表过大时查询速度会很慢;因此…

浙大数据结构第八周之08-图7 公路村村通

题目详情: 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M&#xff08…

Linux 应急响应命令总结【持续更新】

系统基本信息 CPU 信息 CPU 信息: lscpu操作系统信息 操作系统信息: uname -a操作系统信息: cat /proc/version模块信息 模块信息: lsmod账户信息 系统所有账户 系统所有账户: cat /etc/passwd超级权限账户…

【leetcode 力扣刷题】快乐数/可被k整除的最小整数(可能存在无限循环的技巧题)

可能存在无限循环的技巧题 202. 快乐数数学分析 1015. 可被k整除的最小整数数学分析 202. 快乐数 题目链接:202. 快乐数 题目内容: 理解题意,快乐数就是重复每位数的平方之和得到的新数的过程,最终这个数能变成1。变成1以后&…

STM32 串口复习

按数据通信方式分类: 串行通信:数据逐位按顺序依次传输。传输速率较低,抗干扰能力较强,通信距离较长,I/O资源占用较少,成本较低。并行通信:数据各位通过多条线同时传输。 按数据传输方向分类&…

04_Redis与mysql数据双写一致性案例

04——redis与mysql数据双写一致性 一、canal 是什么 canal[ka’nel,中文翻译为水道/管道/沟渠/运河,主要用途是用于MySQL数据库增量日志数据的订阅、消费和解析,是阿里巴巴开发并开源的,采用Java语言开发; 历史背景是早期阿里巴巴因为杭州和…