AITLibra-智能算法效果测试提效降本的实践

作者:智能化产品测试团队
日期:2021年09月22日
# 1. 意义与价值
# 1.1 意义背景
智能化算法测试团队的核心工作内容之一是算法效果测试,区别于业务功能测试“对与错”的验证,算法效果测试更偏向于“好与坏”的验证,为使得“好与坏”的评判结果更具备可信度,通常需要分析大量的被测样本数据的测试结果,因此,核心工作投入是对算法模型的输入、输出数据的统计、比对、分析、评判的测试代码开发。
在算法测试前期探索过程中,各类算法并行立项,首先需要解决的是各类算法模型测试结果可信度、可靠行的问题。截至2020年中,对目前我司4大类12小类的智能算法模型测试,我们从测试数据设计、评估指标选择、测试方法应用等角度,逐一明确并落地了算法效果测试执行方案,有效保障测试结果的可靠性、可信度。
但事物发展到一定阶段,逐步成熟,其自由开放的多样性必然带来高昂的重复成本,没有统一标准必然带来管理的混乱与低效,若想更进一步的发展,必然走向统一与标准化,以史为鉴,从春秋战国各自为政到大秦帝国的统一,书同文,车同轨的出现是历史的选择,也是一个强大帝国的必然选择,唯有统一标准才能降低成本,提高效率,带来生产力的发展。
智能化算法测试的当前主要工作是算法效果测试(未来更重要的应该是算法效果在业务价值的评估),其核心工作量是算法效果代码的开发。
因此我们在2020年下半年,分析查看了各类算法服务的效果测试代码,看到了百花齐放,看到了八仙过海各显神通,但其中有大量的重复,为了完成同一个目的得不同实现方式,各种不同的实现方式和处理方式,有些代码应当更模块化,逻辑应当更条理……种种问题给我们的算法效果测试的继续发展带来了一定的困难:
- 不能形成团队规模的智慧积累,仅有个人层面的少量代码积累;
- 开发效率低,代码评审成本高,代码交接困难,维护成本更高;
- 团队的算法效果测试代码开发仅仅少数人能够胜任。
基于逐渐发现上述问题,我们同步明确需要解决的重点问题,制定了算法测试下一阶段的发展目标-——实现智能算法效果测试代码设计开发的统一和标准化,解决重复投入、等待浪费的问题,我们需要一个能解决80%算法效果测试场景的通用智能算法效果测试框架,因此进行了一系列的布局和铺垫:
- 组织和人员能力的建设---日拱一卒:
- 【2020年08月起】成立技术评审专家组,强调质量责任意识,将测试代码评审纳入流程,对所有算法效果测试代码开展代码评审,同时要求专家应带头发现问题,并给出问题改进建议,在审查与被审查的过程中提高人员代码开发、设计能力,逐步推进算法效果测试代码的设计与开发标准建设;
- 【2020年11月起】围绕算法测试开发中实际应用场景,面向团队成员进行 Python开发能力的摸底考试评估,一方面让团队各成员对现有测试开发能力有一个客观认识,另一方面为后续开展测开能力培养提供课程设计参考;
- 【2020年11月起】发布算法测试开发”Python基础开发能力培养计划及课件“,在团队内部开展Python基础的知识分享,鼓励团队成员利用工作之余或加班时间,进行自主学习,并辅以结合日常工作需求的Python编程练习;
- 【2020年11月起】杜绝“纸上谈兵”,为保证提出更切实有效,且尽可能解决表面问题背后的根源性问题的技术方案,测试架构师加入一线,与测试同学一同开展算法效果测试代码的设计、开发、应用,参与到项目中,将其想法理念结合实际生产需要落地到生产实践中检验;
- 【2021年03月起】提供算法效果测试代码项目模板,以“填空题”的形式试点让更多同学加入算法效果测试代码的设计和开发,验证代码项目模板的理论和操作可行性。
- 基础设施和工具的建设---厚积薄发:
- 【2021年03月起】AITUtils (opens new window) 智能算法测试工具库,封装算法效果测试常用的代码为Python包,并提供API文档便于检索查阅。
- 【2021年06月起】AITDBManager (opens new window) + AITDBClient (opens new window) 智能算法测试数据管家,对测试样本数据进行中心化、标准化管理;
在团队的共同努力下,一件件事在有序落地和推进,有了这些基础,我们的算法效果测试框架就具备诞生的土壤了。
通过AITLibra智能算法效果测试框架,我们约束了基本的开发、设计的规范、提供了便利的开发脚手架。
更重要的是,我们将测试开发技术在算法测试领域的应用、拓展、创新的实践机会交给了每一位同学,鼓励每一位同学在测试技术方向能够学以致用、用以促学、学用相长,不断促进我们产品质量保障综合能力的提升——-共创、共建、共荣。
# 1.2 价值评估
通过使用AITLibra进行智能算法效果测试,有如下主要收益:
- 测试代码的开发效率提高至少3倍;
- 消灭重复代码,测试代码规模降低了80%;
- 实现测试代码的标准化统一,降低了维护成本。
# 1.2.1 传统测试开发模式代码负担沉重
未使用AITLibra框架开发,我们将其称为**“传统测试开发模式”**
传统测试开发模式有三大弊病:
- 低效率(通常需要一到两周完成测试代码开发)
- 难维护(代码量庞大)
- 少约束(信马由缰,不利于团队协作)
将智能化产品测试团队使用传统测试开发模式产出的算法效果测试代码进行了统计分析,规模庞大,足足有56348行。
传统测试开发模式分为两个阶段:
2020年11月份之前的代码,属于“自由式”开发,缺少统一的代码设计约束规范;
2020年11月份之后的代码,开始逐步实现“模板化”开发,逐步落实统一的代码设计约束规范,对代码明确要求划分模块,统一输入输出的标准,统一配置文件等。
稍加计算可知,这31个测试代码项目,56348行代码,平均每个项目有1818行代码,代码行数的中位数为1524行。
这个代码量开发效率是很难提高的,完成一个智能化算法项目的效果测试代码的开发调试通常需要一到两周(复杂度低的项目一周,复杂度较高的项目需要二周以上)。
这个代码量维护起来是很困难的,即使制定了代码设计规范等约束条件,其维护也是不容易的,代码越多,bug越多,心智负担越重,文字化的规范落实需要不断的有人来审核监督订正。
因此,必须要降低代码量级,降低智能化算法效果测试开发和维护的成本,提升测试开发效率,这就是框架诞生的刚性需求

# 1.2.2 使用AITLibra提效降本减轻负担
使用AITLibra开发有三大优势:
- 高效率(通常在1人时到2人天内完成测试代码开发)
- 易维护(高度模块化,代码量非常少)
- 强约束(设计规范内置于框架,提供强约束,无需人工干预)
从2021年5月18日发布1.0.0版本,到2021年9月底,AITLibra框架已发布14个版本。
团队使用AITLibra已经完成7个项目(涵盖2大类4小类智能算法模型)的智能算法效果测试,统计数据如下:
插件代码行数与配置文件行数都没有统计脚手架生成的默认代码行数,这些是通用的必要信息,非测试代码的业务逻辑,因此不统计在内。

根据团队成员的反馈,首次使用需要学习Jmespath的规则语法,了解框架的运行机制,开发代码调试学习,这个过程通常需要0.5人天,熟悉框架后再次使用框架进行开发,效率会有所提升。
根据统计数据可知:
- 对于复杂度较高的项目,其开发测试成本通常在1~2人天,这比以往动辄耗时7~14人天以上的开发测试成本大大降低,效率提升至少3倍。
- 对于复杂度较低的项目,熟练的使用框架的智能化算法测试工程师,最快仅需0.5人时即可完成算法效果测试代码的开发和测试工作。
根据AITLibra的设计愿景,期望解决80%的算法效果测试需求,使用AITLibra可以让代码量级降低80%,假设上文统计的31个项目56348行代码,使用AITLibra开发仅需9016(56348x80%x20%)行代码,平均每个项目仅需363(9016 / 24)行代码。
为什么使用了AITLibra能够大幅度提升效率降低成本?因为消灭了重复代码,让测试工程师专注于智能算法逻辑进行效果测试。
# 2 设计理念
# 2.1 抽象共性
通过观察分析与实践检验,我司80%的智能算法效果测试代码逻辑都能套入如下5个核心流程中:

根据上述核心流程,我们设计了AITLibra框架,整体设计思路如下:

目前,AITLibra智能算法测试框架与AITUtils的代码量如统计如下:
| 框架和工具库 | 代码总行数(含注释) | 代码总行数(不含注释) | 注释率 |
|---|---|---|---|
| AITUtils | 4558 | 2208 | 37% |
| AITLibra | 2740 | 1763 | 25% |
通过这种对核心环节的抽象,我们可以将通用“业务”逻辑进行封装,由AITLibra框架提供,对于常用的基础方法,由AITUtils (opens new window)提供支持,双剑合璧,消灭了大量的重复代码,让每个算法效果测试中不存在功能重复的代码, 以此实现有效降低绝大多数算法效果自动化的代码量为传统开发模式的80%以下。
# 2.2 案例分析
以人头检测算法效果自动化为例进行代码量化统计
传统开发模式下,测试工程师需要开发如下测试代码:

使用AITLibra框架测试工程师所面对的代码行数如下:

AITLibra将代码行数降低为之前的15%(204 / 1353),减少了1149行,这就是消灭重复代码带来的效率提升与成本降低。
# 3 使用方法
# 3.1 安装部署
# 3.1.1 安装Python
安装Python3.7.7,创建Python虚拟环境
若没有virtualenv命名,请先安装
pip install -U virtualenv

# 3.1.2 安装AITLibra
配置PypiManager (opens new window),然后安装AITLibra
pip install -U AITLibra
检查是否安装成功

# 3.2 使用
# 3.2.1 命令概览

# 3.2.2 教学示例
# 3.2.2.1 创建教学示例项目
使用libra tutorial生成教学示例项目,并进入项目目录

# 3.2.2.2 执行测试
查看配置文件libra.yaml工作流开关,确认工作流配置如下
pipeline:
backup: true
build_sample: true
fast_api_response: true
analyze: true
statistic: true
report: true
2
3
4
5
6
7
然后执行libra run命令,等待运行结束

# 3.2.2.3 查看测试结果报表
测试结果报表在report_data目录下

# 4 总结
改进优化从来不是一件容易的事请,需要脚踏实地的亲身实践,深入了解每一个细节,对各种痛点了然于心,对需求有精准的理解,然后跳出具体事项,通盘考虑,以抽象的思想,明确的目标来制定一套系统化的解决方案。
有了方案,也未必能把事做成,需要天时地利人和,团队全体成员认知对齐,共同努力,支持认可这件事,这件事才能成,这是关键中的关键,重点中的重点。
有了利器,更要有能发挥其价值的测试工程师来使用才能获得期望的收益,对人员能力的培养,是能把事做成、做好、持续做下去的根基。
关于AITLibra智能化算法测试框架的更多深入细节内容,我们将另起一篇文章进行分享。