软件测试工程师如何对算法做测试?

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

为了让大家能对算法测试有个初步的了解,这篇文章将对“如何做算法测试”进行梳理,大纲如下:

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

一、算法测试测什么?

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

1、阿尔法围棋机器人,打败了人类棋手,其实就是运用了复杂的人工智能算法;
2、今日头条、抖音等APP,使用了兴趣算法推荐,推送的都是你感兴趣的内容;
3、购物软件,你搜过什么商品,就会不胜其烦的一直推荐,也是使用了算法推荐机制。

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

举两个例子例子

例子1:某软件中的广告推荐更新了一套算法,预期要把推荐转化率提升几个百分点。
测试要关注的是:新算法有没有提升转化率百分比,提升量的有没有达到预期。

例子2:某人脸识别Q软件更新了识别算法,预期是减少识别耗时。
测试要关注的是:耗时减少的同时准确率有没有下降。

二、如何测试算法?

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

1)算法稳定性测试

长时间运行,算法是否奔溃;
数据量提升后,算法模型的结果是否符合预期;

2)算法性能测试

算法模型的响应时间;
算法模型对处理器cpu和磁盘的消耗;

3)算法兼容性测试

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

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

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和算法2;
线上灰度放量,选取目标用户,被选中的用户会收到「是否参加内测/灰度」之类的消息。

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

四、答疑解惑

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

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

算法的测试,要经过多个环节综合来评估效果,所以即使某个环节表现好最终也不一定入选。最终会结合效果、成本、稳定性等多方面的因素,最终往往会选择妥协折中后的方法。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的验证码

一、短信验证码 前端: 用户填写手机号,点击按钮发送请求用户短信得到验证码后,用户填写表单提交 form 表单,进行验证 后台: 随机生成几位验证码并将生成时间、手机号、验证码存储起来,可以存到session、…

植物分类数据集:水稻生熟分类/成熟度分类数据集

水稻生熟分类数据集,1000多张图像,包含未成熟/成熟2类 1.未成熟-771 2.成熟-283 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信

【趣味项目】2048 简单实现

【趣味项目】2048 简单实现 算法原理 假设用一个二维矩阵表示 2048 页面,操作是左滑 const matrix [[2, 2, 4, 0],[0, 2, 4, 0],[0, 2, 2, 0],[2, 4, 4, 8] ];将所有非空的数字向左移动 matrix [[2, 2, 4, 0],[2, 4, 0, 0],[2, 2, 0, 0],[2, 4, 4, 8] ]将相邻的…

Jmeter事务控制器实战

在性能测试工作中,我们往往只测试业务功能相关主要接口的数据请求和返回。然而实际上用户在使用web应用时,可能会加载诸多资源:htmldom、cssdom、javaScript、ajax请求、图片等。 从打开一个页面到界面渲染完成需要一定的加载时间&#xff0…

2024 AI 辅助研发的新纪年

随着人工智能技术的持续发展与突破,2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计,从软件开发到材料科学,AI正逐渐渗透到研发的各个环节,变革着传统的研发模式。在这一背景下,AI辅助研发不仅…

Humanoid-Gym 开源人形机器人端到端强化学习训练框架!星动纪元联合清华大学、上海期智研究院发布!

系列文章目录 前言 Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer GitHub Repository: GitHub - roboterax/humanoid-gym: Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer 一、介…

操作系统体系结构(不是很重点)

目录 一. 大内核与微内核二. 分层结构, 模块化和外核2.1 分层结构2.2 模块化2.3 宏内核与微内核 三. 外核 \quad 一. 大内核与微内核 \quad 由于对系统资源进行管理的功能不会直接涉及硬件, 所以有的就没有把这个功能放在内核里面 注意: 考试的时候不要写变态, 要写CPU状态的转…

【前端】-初始前端以及html的学习

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

听 GPT 讲 client-go 源代码 (24)

分享更多精彩内容,欢迎关注! File: client-go/applyconfigurations/batch/v1/jobstatus.go 在client-go的applyconfigurations/batch/v1/jobstatus.go文件中,定义了与Job的状态相关的配置和操作。 文件中定义了以下几个结构体: Jo…

关于 typeof 与 instanceof 区别引出的原型对象问题

一、关于 typeof 与 instanceof 区别: typeof 和 instanceof 是 JavaScript 中用于检查变量类型的两个不同操作符,它们在使用上有着明显的区别和不同的适用场景。 typeof typeof 是一个一元操作符,用于返回一个变量或表达式的数据类型的字符…

【C++】十大排序算法之 归并排序 快速排序

本次介绍内容参考自:十大经典排序算法(C实现) - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序…

MySQL面试题-锁(答案版)

锁 1、MySQL 有哪些锁? (1)全局锁 加了全局锁之后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞: 对数据的增删改操作,比如 insert、delete、update等语句&…