前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件测试中如何测试算法

软件测试中如何测试算法

作者头像
小黑同学
发布2022-09-28 13:46:27
1.2K0
发布2022-09-28 13:46:27
举报
文章被收录于专栏:E=mc²

广义的算法是指解决问题的方案,小到求解数学题,大到制定商业策略,都可以叫做算法。而我们今天讨论的软件测试中的算法,对应的英文单词为 Algorithm,专指计算机处理复杂问题的程序或指令。

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

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

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

算法测试测什么?

区别于一般的功能测试,算法测试的侧重点不同。

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

举两个例子

  1. 某软件中的广告推荐更新了一套算法,预期要把推荐转化率提升几个百分点。
    • 测试要关注的是新算法有没有提升转化率百分比,提升量的有没有达到预期。
  1. 某人脸识别软件更新了识别算法,预期是减少识别耗时。
    • 测试要关注的是耗时减少的同时准确率有没有下降。

如何测试算法?

  1. 算法稳定性测试
    1. 长时间运行,算法是否奔溃
    2. 数据量提升后,算法模型的结果是否符合预期
  2. 算法性能测试
    1. 算法模型的响应时间
    2. 算法模型对处理器cpu和磁盘的消耗
  3. 算法兼容性测试
    1. 设置不同阈值内的数据,算法结果是否稳定(比如用户年龄、区域、性别等)

上面说到测试方法,是不是似曾相识?

没错,这几个与普通功能测试中用到的测试方法基本一样,而下面就是普通功能测试中不会用到的测试方法

算法pk(赛马)

对于一个需求,不同的人或团队可以设计出不同的算法模型,到底哪个更靠谱,是骡子是马拉出来溜溜,pk一下就知道了。

通过几轮的两两PK或多个同时pk,对比选出最符合预期的前几名。

这个环节是算法测试的关键部分,用例设计主要采用场景法,通过列举不同场景,对多个算法分别进行测试验证,最终综合所有场景中的算法模型的表现,选出前几名。

你可能会有疑问:为什么要前几名,选第一名不就可以了吗? 这个问题后面会解答 。下文中通过实例列举了这个环节中的测试用例,可以更好地理解这样设计用例的原因。

A/B测试

由于算法的准确性会受到测试数据的影响,而在测试环境中,数据的来源一般是手动插入数据库或从线上导入数据。

尽管测试数据会接近于真实数据,但仍然会有数据类型覆盖不够全面、数据量不够大等方面的问题。

因此,即使算法模型在测试环境通过验收之后,仍然不能在生产环境全部放量。

通常采用的方法是 拿出线上流量的5%-10%,其中一部分数据作为对照组,其它部分作为一个或多个实验组(实验组采用的算法为pk中胜出的前几名算法)。对照组合实验组数据分别打不同的标,一段时间后分别统计计算的各项指对照组合实验组的各项指标标,根据关键指标来验证算法是否有效。

实际测试中,对算法的选择往往不是通过一项指标来定的,通常是多项指标综合比较。

看到这里,你是不是还有点迷糊,别担心,下面我们通过一个例子来说明。

算法测试实例

某导航APP,要升级导航路线推荐算法,预期是找到耗时更少的路线并推荐给用户。

首先来理解一下需求中的关键词 「耗时更少」:耗时不等同于距离,有可能距离短但是堵车,实际比绕路耗时还长。

经过n天的研发,算法同学最终给出了3个优化后的算法模型,现在到了测试验证环节。

话不多说,进入测试(为了方便描述,我们把原先的导航路线推荐算法成为算法0,新的算法分别为算法1、算法2、算法3)

  1. 算法pk(下面是场景化测试用例的列举)
    1. 同一条路线,默认为当前时间和天气状况,多轮测试之后,选出最优的算法,假定是算法2
    2. 同一条路线,分别设定不同时间段(早晚高峰、工作日、节假日等),找出最优算法,假定是算法1
    3. 同一条路线,分别设定不同的天气状况(雨、雪、雷、沙尘、冰雹等),找出最优算法,假定是算法3
    4. 还有其它很多场景的测试,这里就不一一列举了……
  2. 稳定性测试
    1. 长时间(24小时以上)运行算法模型,是否有稳定的表现,假定这里的最优算法是算法1
    2. 超长距离(1000km以上)测试算法模型,对比推荐效果是否稳定,假定这里的最优算法是算法2
    3. ……
  3. 兼容性测试
    1. 选取不同城市的道路测试(比如重庆、贵州等地),测试山路、爬坡、转弯等不同路况下导航推荐算法的表现,假定这里的最优算法是算法1
    2. 选取不同通行能力的道路(城市和乡间小路等),测试小路、窄路等不同路况下,推荐算法是否有稳定表现,假定这里的最优算法是算法3
    3. ……
  4. 性能测试
    1. 同一条路线下,不同算法模型的耗时,假定耗时最少的算法是算法3
    2. 同一条路线下,不同算法模型对服务器的压力,假定最终结果是算法2最服务器压力最小
    3. ……
  5. AB测试
    1. 经过上面几个环节的测试,综合所有结果,假定最终选出的算法1和算法3
    2. 线上灰度放量,选取目标用户,被选中的用户会收到「是否参加内测/灰度」之类的消息
    3. 经过一段时间的A/B测试之后,拿到真实的数据,最终经过架构师、研发经理、产品经理等研讨之后选出符合预期的算法

答疑

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法测试测什么?
  • 如何测试算法?
  • 算法测试实例
  • 答疑
相关产品与服务
人工智能与机器学习
提供全球领先的人脸识别、文字识别、图像识别、语音技术、NLP、人工智能服务平台等多项人工智能技术,共享 AI 领域应用场景和解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档