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

广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们
今天讨论的软件测试中的算法,对应的英文单词为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。我就希望推荐路线要快,为什么不采用?
算法的测试,要经过多个环节综合来评估效果,所以即使某个环节表现好最终也不一定入选。
最终会结合效果、成本、稳定性等多方面的因素,最终往往会选择妥协折中后的方
软件中的算法如何测试?你了解了吗?
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:
加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取
相关文章:
软件测试中如何测试算法?
广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们 今天讨论的软件测试中的算法,对应的英文单词为Algorithm ,专指计算机处理复杂问题的程序或 指令。 随着最近几年人工智能等领域的快速发展,算法受到前所未有的重视,算法测试也随之兴起。…...
CMOS图像传感器——Sony Ta-Kuchi图像传感器
2023 年国际图像传感器研讨会于 5 月在苏格兰克里夫举行,第四场会议重点关注汽车传感器,汽车应用中 CMOS 图像传感器 (CIS) 的技术要求与消费(移动)设备中的要求不同。毕竟,很少有人关心车载摄像头的像素数或图像美观度。主要驱动因素是安全性、可靠性和成本。 而汽车领域…...
一文理解登录鉴权(Cookie、Session、Jwt、CAS、SSO)
1 前言 登录鉴权是任何一个网站都无法绕开的部分,当系统要正式上线前都会要求接入统一登陆系统,一方面能够让网站只允许合法的用户访问,另一方面,当用户在网站上进行操作时也需要识别操作的用户,用作后期的操作审计。…...
LangChain结合milvus向量数据库以及GPT3.5结合做知识库问答之一 --->milvus的docker compose安装
https://github.com/milvus-io/milvus/releaseshttps://github.com/milvus-io/milvus/releases 以下步骤均在Linux环境中进行: 将milvus-standalone-docker-compose.yml下载到本地。 1、新建一个目录milvus 2、将milvus-standalone-docker-compose.yml放到milvu…...
安装nginx,配置https,并解决403问题
nginx安装 下载nginx:下载地址 上传到/opt目录 解压nginx,并进入解压后到目录 cd /opt tar -zxvf nginx-1.25.2.tar.gz cd nginx-1.25.2编译(with-http_ssl_module为https模块) ./configure --with-http_ssl_module安装 make install默认的安装目录为…...
RustDay04------Exercise[11-20]
11.函数原型有参数时需要填写对应参数进行调用 这里原先call_me函数没有填写参数导致报错 添加一个usize即可 // functions3.rs // Execute rustlings hint functions3 or use the hint watch subcommand for a hint.fn main() {call_me(10); }fn call_me(num: u32) {for i i…...
【Python第三方包】快速获取硬件信息和使用情况(psutil、platform)
文章目录 前言一、psutil包1.1 安装psutil包1.2 psutil 使用方式获取CPU使用率获取内存使用情况将内存的获取的使用情况变成GB和MB获取磁盘使用情况磁盘内存进行转换获取网络信息网络info 二、platform2.1 platform的介绍2.2 platform 使用方式获取操作系统的名称获取架构的名称…...
数据结构与算法课后题-第五章(哈夫曼树和哈夫曼编码)
文章目录 选择题1选择题2选择题3选择题4选择题5选择题6选择题7应用题7 选择题1 选择题2 选择题3 需要深究 选择题4 选择题5 选择题6 选择题7 应用题7...
07测试Maven中依赖的范围,依赖的传递原则,依赖排除的配置
依赖的特性 scope标签在dependencies/dependency标签内,可选值有compile(默认值),test,provided,system,runtime,import compile:在项目实际运行时真正要用到的jar包都是以compile的范围进行依赖 ,比如第三方框架SSM所需的jar包test:测试过程中使用的j…...
科技为饮食带来创新,看AI如何打造智能营养时代
在当今社会,快节奏的生活方式、便捷的食品选择以及现代科技的快速发展正深刻地重塑着我们对健康的认知和实践,它已经不再仅仅是一个话题,而是一个备受关注的社会焦点。在这个纷繁复杂的交汇点上,AI技术的介入为我们开辟了前所未有…...
软件测试知识库+1,5款顶级自动化测试工具推荐和使用分析
“工欲善其事必先利其器”,在自动化测试领域,自动化测试工具的核心地位不容置疑的。目前市面上有很多可以支持接口测试的工具,在网上随便一搜就可以出来很多,利用自动化测试工具进行接口测试,可以很好的提高测试效率&a…...
代码随想录算法训练营第23期day22|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
目录 一、(leetcode 669)修剪二叉搜索树 二、(leetcode 108)将有序数组转换为二叉搜索树 三、(leetcode 538)把二叉搜索树转换为累加树 一、(leetcode 669)修剪二叉搜索树 力扣题…...
IDEA中创建Web工程流程
第一步:File--》New--》Project 第二步:填写信息,点击Create 第三步:点击File,点击Project Structure 出现该界面 选择相应的版本,这里我用jdk17,点击apply ,点击ok 第三步:右键文件…...
【论文阅读】基于卷积神经的端到端无监督变形图像配准
📘End-to-End Unsupervised Deformable ImageRegistration with a Convolutional NeuralNetwork 📕《基于卷积神经的端到端无监督变形图像配准》 文章目录 摘要 Abstract. 1.导言 Introduction 附录 References未完待续 to be continued ... 摘要 Abstr…...
【Rust】包和模块,文档注释,Rust格式化输出
文章目录 包和模块包 CrateRust 的标准目录结构 模块 Module用路径引用模块使用super引用模块使用self引用模块结构体和枚举的可见性 使用 use 引入模块及受限可见性基本引入方式绝对路径引入模块相对路径引入模块中的函数 避免同名引用 注释和文档文档注释包和模块级别的注释注…...
leetcode221.最大正方形
最大正方形 可以使用动态规划降低时间复杂度。用 dp(i,j) 表示以 (i,j)为右下角,且只包含 111 的正方形的边长最大值。能计算出所有 dp(i,j)的值,那么其中的最大值即为矩阵中只包含 111 的正方形的边长最大值,其平方即为最大正方形的面积。 …...
低代码技术这么香,如何把它的开发特点发挥到极致?
前言 什么是低代码技术? 低代码是一种可视化软件开发方法,通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化,消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选?用友Yonbu…...
drawio简介以及下载安装
drawio简介以及下载安装 drawio是一款非常强大的开源在线的流程图编辑器,支持绘制各种形式的图表,提供了 Web端与客户端支持,同时也支持多种资源类型的导出。 访问网址:draw.io或者直接使用app.diagrams.net直接打开可以使用在线版…...
Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)
查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…...
elasticsearch (六)filebeat 安装学习
filebeat 安装:文件节拍快速入门:安装和配置 |文件节拍参考 [7.17] |弹性的 (elastic.co) 解压缩后,以配置nginx日志为例。 Nginx module | Filebeat Reference [7.17] | Elastic filebeat 配置中, - module: nginx access: …...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
