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

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

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

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.mfbz.cn/a/314114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 图解教程 第5版 —— 第22章 命名空间和程序集

文章目录 22.1 引用其他程序集22.2 命名空间22.2.1 命名空间名称22.2.2 命名空间的补充22.2.3 命名空间跨文件伸展22.2.4 嵌套命名空间 22.3 using 指令22.3.1 using 命名空间指令22.3.2 using 别名指令22.3.3 using static 指令 22.4 程序集的结构22.5 程序集标识符22.6 强命名…

Python3.5如何打包编译

python3.5怎么打包编译 问题:用Python开发的小工具有时需要编译打包为Windows(*.exe)、Mac等操作系统下的可执行性文件以供非程序员使用。 解决方案: 一、py2exe 目前只支持到Python3.4,暂不支持Python3.5 二、PyInstaller 安装&#x…

【MATLAB】小波_LSTM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 小波-LSTM神经网络时序预测算法是一种结合了小波变换和长短期记忆神经网络(LSTM)的时间序列预测方法。 小波变换是一种信号处理方法,能够将信号分解为…

2024年1月6日~2024年1月12日周报

目录 一、前言 二、SeisInvNet-2020 三、RTM研究 四、遇到的问题及解决 4.1 KeyError: data 4.2 将mat文件转换为npy文件 五、小结 5.1 存在的问题及疑惑 5.2 下周安排 一、前言 本周的主要安排是阅读论文查看一些好的点子。 但是想法总是美好的,之前答应的…

叠加文件夹内所有png文件 python

→ import os import cv2 import matplotlib.pyplot as pltPATH "./1" #文件路径 i 0 #子文件夹路径 img10 for parent, dirs, files in os.walk(PATH):for file in files:if not file.endswith(.png):continueimg cv2.imread(os.path.join(parent, file))if i0:i…

【Linux驱动】platform 设备驱动分离(一)—— 驱动分层及相关API

以目前为止的逻辑,无论是获取设备属性信息,还是实现驱动逻辑,都是放在一个驱动模块中。在没有设备树的情况下,如果我们只需要修改设备信息(如寄存器地址),那么我们就需要重新编译整个驱动模块。…

80V 72V 60V 48V 降12V 5V 3.3V 功耗低降压恒压芯片H6603

输入电压80V、72V、60V、48V:这些是电源系统中的不同电压水平,通常用于驱动各种设备。例如,电动汽车、电动自行车或工业设备中的电池系统可能以这些电压级别工作。 降12V:这可能是指一种电源模块,其功能是将输入电压&…

x-cmd pkg | dua - 磁盘使用分析器

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 dua 是 Disk Usage Analyzer 的简写,该工具可以快速查看给定目录的磁盘空间使用情况。 对于想要深入了解磁盘空间使用情况并有效管理存储的用户来说,Dua 是一个很有价值的工具。通过使用 Dua …

自己动手造一个状态机

自己动手造一个状态机 引言有限自动状态机 (FSM)五要素应用场景优势 开源产品造个轮子改造点Looplab fsm示例演示实现解析 改造过程 引言 有限自动状态机 (Finite-state machine , FSM) 通常用来描述某个具有有限个状态的对象,并且在对象的生命周期中组成了一个状态…

Android 13 辅助屏导航栏不显示问题

问题 在Android 13 上开启辅助屏幕。但是发现辅助屏systemui 导航按 icon没有显示,但是点击对应的区域有作用 分析 可以用 anroid device monitor 工具分析视图 解决 public NavigationBarView(Context context, AttributeSet attrs) {super(context, attrs);//add star…

x-cmd pkg | smartctl - 用于监测和分析硬盘的工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 smartctl 是一个用于监测和分析硬盘中 S.M.A.R.T.(自我检测,分析和报告技术)信息的命令行工具,是 Smartmontools 的一部分。通过 smartctl 工具,可以分析各种…

安泰电子前置微小信号放大器怎么用的

前置微小信号放大器是一种重要的电子设备,用于放大微弱的输入信号,提高系统的灵敏度。它在各种领域中都有广泛的应用,包括音频、通信、测量等。在这篇文章中,我们将详细介绍前置微小信号放大器的使用方法,以便更好地理…

Cdd诊断数据控中的zz rc yy

如上图所示的Cdd Candela Diagnostic Descriptions 诊断数据库会话定义中有许多的标识符缩写,如zz rc LL xx 等 其实这些字母没有意义,它们只是唯一地标识对话框中的组合组件。

HDFS概述

文章目录 HDFS背景定义HDFS 优缺点HDFS 组成HDFS文件块大小 HDFS背景定义 背景 先给大家介绍一下什么叫HDFS,我们生活在信息爆炸的时代,随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁…

国内镜像源配置方法(包括临时和永久方法)

国内镜像源: 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣 http://pypi.douban.com/simplePython官方 https://pypi.python.org/simple/v2ex http://pypi.v2ex.com/simple/中国科学院 http://pypi.mi…

【IDEA--dubug相关】-- 1. 取消debug的所有断点 2. debug侧边栏消失问题

下面是一些经常在日常debug时用到的场景,方便查看、与君共勉! 文章目录 1. 如何取消所有断点2. debug底部左边侧边栏消失 1. 如何取消所有断点 如图我们可能在项目中给很多代码行添加了断点,一个一个点取消麻烦 在debug运行中点击选中底部…

React Native 桥接组件封装原生组件属性

自定义属性可以让组件具备更多的灵活性,所以有必要在JS 层通过自定义属性动态传值。 一、添加原生组件属性 因为 ViewManager 管理了整个组件的行为,所以要新增组件属性也需要在这里面(如 InfoViewManager)进行定义。 1、在Inf…

[JVM] Java类的加载过程

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

【Docker】数据管理之数据卷的挂载

一、什么是数据卷 为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合 文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。数据卷提供了一些有用的特性: 数据卷可以在…

Casper Network (CSPR)2024 年愿景:通过投资促进增长

Casper Network (CSPR)是行业领先的 Layer-1 区块链网络之一,通过推出了一系列值得关注的技术改进和倡议,已经为 2024 年做好了准备。 在过去的一年里,Casper Network (CSPR)不断取得里程碑式的进展,例如推…
最新文章