当前位置: 首页 > news >正文

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

广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们
今天讨论的软件测试中的算法,对应的英文单词为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: …...

算法通关村第一关|青铜|链表笔记

1.理解 Java 如何构造出链表 在 Java 中,我们创建一个链表类,类中应当有两个属性,一个是结点的值 val ,一个是该结点指向的下一个结点 next 。 next 通俗讲是一个链表中的指针,但是在链表类中是一个链表类型的引用变量…...

【记录】使用Python读取Tiff图像的几种方法

文章目录 PIL.Imagecv2gdal 本文总结了使用 PIL Image, cv2, gdal.Open三种python package 读取多通道Tiff格式遥感影像的方法。 PIL.Image PIL对Tiff只支持两种格式的图像: 多通道8bit图像单通道int16, int32, float32图像 多通道多bit的tiff图像PIL不支持读取…...

JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电&#xf…...

Linux部署kubeedge 1.4

文章目录 一、机器信息二、环境准备(所有节点操作)2.1. 修改主机名2.2. 开启路由转发2.3.安装Docker(所有节点)2.4.部署K8S集群(单机版,云端节点) 2.5.安装Mosquitto(只在边缘节点安装)三、安装kubeedge 1.…...

第一章习题

文章目录 x ( t ) j e j w 0 t x(t)je^{jw_0t} x(t)jejw0​t x [ n ] j e j w 0 n x[n]je^{jw_0n} x[n]jejw0​n 求基本周期: T 2 Π w 0 T\frac{2Π}{w_0} Tw0​2Π​ 对x[n],T为有理数才算 1、求信号x(t)2cos(10t1)-sin(4t-1)的基波周期 2 Π 10 Π 5 \frac{2…...

nvm、node、npm解决问题过程记录

在Windows10如何降级Node.js版本:可以尝试将Node.js版本降级到一个较旧的版本,以查看问题是否得以解决。可以使用Node Version Manager (nvm) 来轻松切换Node.js版本,具体完整步骤: 首先,需要安装Node Version Manager…...

Linux- DWARF调试文件格式

基本概念 DWARF是一个用于在可执行程序和其源代码之间进行关联的调试文件格式。当开发者使用调试编译选项(例如,使用gcc时的-g标志)编译程序时,编译器会生成这种格式的调试信息。这些信息在后续的调试过程中非常有用,…...

软件工程第六周

软件体系结构概述 体系结构:一种思想,而框架就是思想的实现,设计模式就是根据某一特殊问题实现的框架。 体系结构:体系结构是软件系统的高级结构。它定义了系统的主要组成部分,以及这些部分之间的关系和交互方式。 框…...

node+pm2安装部署

1、安装node 下载node安装包: wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz 解压: tar -xvJf node-v14.17.0-linux-x64.tar.xz 配置环境变量,在/etc/profile文件最后添加以下脚本: export PATH$P…...

大数据学习(11)-hive on mapreduce详解

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博>主哦&#x…...

网站的友情链接怎么做/手机如何建立网站

JavaFxJFoenix 【HBox布局】 1.HBox布局简介 HBox布局控件是一个水平布局控件,他创建一个水平的容器,让组件在这个水平的一条线上进行布局,但是一行满了之后不会换行。在第二行布局组件需要在创建一个HBox水平容器。 2.HBox 示例Demo packa…...

wordpress获取文章发布日期/网络推广网站大全

binlog介绍 我们的SQL执行时,会将sql语句的执行逻辑记录在我们的bin-log当中,什么是bin-log呢? binlog是Server层实现的二进制日志,他会记录我们的cud操作。Binlog有以下几个特点: 1、Binlog在MySQL的Server层实现(引擎…...

低代码建站平台/百度知道客服电话人工服务

by Jos Mara Mndez 原文链接: http://www.gamedev.net/reference/programming/features/simpleSSAO/ 绪论 全局照明(global illumination, GI)是一个计算机图形学术语, 它指的是所有表面之间相互作用的光照现象(光线来回跳动, 折射, 或者被遮挡), 例如: 渗色(color bleeding),…...

网站公司怎么做业务/如何建立自己的网站平台

1.什么是方法的重写? 在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。2.方法重写的要求? ①. 子类重写的方法必须和父类被重写的方法具有相同的方法名称…...

网站建设文字教程视频/网上售卖平台有哪些

换成自己的keystore以后打包失败,显示这样的错误:安装包制作开始cd 安装包制作目录[BASE] && antBuildfile: 安装包制作目录build.xmlCopy_Ressource:[echo] Copy app resource.[echo][echo] assets[echo]init:[echo] Init output directory....…...

jsp动态网站开发课程/seo优化网站教程

写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文&#xf…...