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

news2024/11/16 19:46:52

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

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

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.coloradmin.cn/o/1377649.html

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

相关文章

C++20:从0到1学懂concept

目录 1.concept语法 1.1 替换typename1.2 requires关键字1.4 concept与auto2.编译器支持3.总结 C20引入了concept(概念),是对模板参数(编译时评估)的一组约束。你可以将它们用于类模板和函数模板来控制函数重载和特化。一些优点包括: 对模版参数强制类型…

Mac 下载 nvm 后执行nvm -v 命令报错 nvm: command not found

1、问题:Mac 使用命令下载nvm 成功后执行 nvm -v 查看,报错:nvm command not found 2、原因:可能是系统更新后,默认的 shell 是 zsh,所以找不到配置文件 3、解决:可添加编辑.bash_profile 和 …

(1)(1.13) SiK无线电高级配置(六)

文章目录 前言 15 使用FTDI转USB调试线配置SiK无线电设备 16 强制启动加载程序模式 17 名词解释 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 15 使用FTDI转USB调试线配置SiK无线…

如何在 SwiftUI 中实现音频图表

文章目录 前言DataPoint 结构体BarChartView 结构体ContentView 结构体实现协议实现线图总结 前言 在可访问性方面,图表是复杂的事物之一。iOS 15 引入了一项名为“音频图表”的新功能。 下面我们将学习如何通过使用 accessibilityChartDescriptor 视图修饰符为任…

代码随想录第第五十七天—回文子串,最长回文子序列

leetcode 647. 回文子串 题目链接:回文子串 版本一:动态规划 dp数组及下标的含义 dp[i][j]:区间范围[i, j] (左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。确定递推公式…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

什么是数通技术?以太网交换机在数通技术中的精要

什么是数通技术&#xff1f; 数通技术是指数字通信技术&#xff0c;它涵盖了数字信号处理、数据传输、网络通信等领域。通信工程师在数通技术中负责设计、建设和维护数字通信系统&#xff0c;以实现可靠、高效的信息传输。这涉及到数字信号的编解码、调制解调、数据压缩、网络…

【架构专题】我为什么要写Spring Cloud Alibaba微服务架构实战派上下册这本书?

在写这本书之前&#xff0c;我先后在两家杭州的“独角兽”公司担任技术负责人&#xff0c;并推进公司核心业务的“中台化”改造。在落地业务中台和技术中台的过程中&#xff0c;督促并指导开发人员统一使用Spring Cloud Alibaba作为中台服务最底层的基础框架。为了快速推进业务…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…

JavaEE学习笔记 2024-1-12 --Tomcat服务器、Servlet

JavaEE JavaEE是企业级开发 是综合性非常强的阶段  包含的知识点:JavaSE,MySQL,JDBC,WEB(HTML,CSS,JS,前端框架),Servlet,JSP,XML,AJAX等技术 1.服务器 JavaEE项目需要运行在服务器之上 WEB服务器就是WEB项目的容器,WEB项目的运行环境,将项目部署到服务器下,可以通过服务器…

[JVM] Java类的加载过程

Java类的加载过程 在Java中&#xff0c;类的加载是指在程序运行时将类的二进制数据加载到内存中&#xff0c;并转化为可以被JVM执行的形式的过程。类的加载过程主要包括以下几个步骤&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;通过类的全限定名&#xff0c;…

redis — redis cluster集群模式下如何实现批量可重入锁?

一、redis cluster 集群版 在Redis 3.0版本以后,Redis发布了Redis Cluster。该集群主要支持搞并发和海量数据处理等优势,当 Redis 在集群模式下运行时,它处理数据存储的方式与作为单个实例运行时不同。这是因为它应该准备好跨多个节点分发数据,从而实现水平可扩展性。具体能…

vue前端开发自学,子组件传递数据给父组件,使用$emit

vue前端开发自学,子组件传递数据给父组件,使用$emit 父子组件之间互相传递数据的情况非常常见&#xff0c;下面为大家介绍的是&#xff0c;来自子组件&#xff0c;给父组件传递数据的情况。 <template><h3>组件事件demo</h3><Child someEvent"getI…

Vue-13、Vue绑定css样式

1、绑定css样式字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"tex…

基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计

标题&#xff1a; 摘要&#xff1a; 本文提出了一种利用STM32F103C8T6微控制器&#xff0c;结合DHT11数字温湿度传感器和OLED显示屏实现环境温湿度实时、直观显示的方法。该系统通过低功耗且精确的DHT11传感器获取环境温湿度信息&#xff0c;并借助于STM32F103C8T6强大的处理能…

从“唯分论”到“过程评价” 助力教育高质量发展

近日,为推动教育评价改革工作高质量发展,山东省委办公厅、省政府办公厅印发《关于进一步推进教育评价改革工作的若干措施》,从学校评价改革、学生评价改革等6方面共提出25条举措,对教育评价改革进行了全面部署。 教育评价改革是教育改革的“牛鼻子”,为教育发展提供了明确的方…

Spring事务失效场景之类内部方法调用及解决方案

一、背景 在日常开发中&#xff0c;经常有需要使用事务来保证数据一致性的情况。简单点的话直接在方法上面加Transactional注解就可以了。 但这样存在一个问题&#xff0c;在整个业务方法层面加注解会把很多并不需要归入事务的操作也归入到了事务里面&#xff0c;这样会可能会…

Linux反向、分离解析与主从复制

前言 上篇介绍了DNS正向解析&#xff0c;本文将继续介绍反向解析与主从复制等内容。域名反向解析即从IP地址到域名的映射。为了完成逆向域名解析&#xff0c;系统提供一个特别域&#xff0c;该特别域称为逆向解析域。 目录 前言 一、反向解析 1. 配置bind服务 2. 修改区…

【linux】tcpdump 使用

tcpdump 是一个强大的网络分析工具&#xff0c;可以在 UNIX 和类 UNIX 系统上使用&#xff0c;用于捕获和分析网络流量。它允许用户截取和显示发送或接收过网络的 TCP/IP 和其他数据包。 一、安装 tcpdump 通常是默认安装在大多数 Linux 发行版中的。如果未安装&#xff0c;可…

【MATLAB源码-第108期】基于matlab的OFDM-OQAM系统仿真,包含PHYDYAS滤波器模块和PNN结构,输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM/OQAM&#xff08;正交频分复用/正交四分之一幅度调制&#xff09;是一种高效的无线通信系统&#xff0c;采用PHYDYAS&#xff08;物理层动态接入&#xff09;滤波器来优化性能。这种系统的设计主要目的是提高频谱效率、…