算法■深度|大数据算法应用的测试发展之路( 三 )


2) 在线工程系统的测试
这一部分是整个系统的功能测试的重点 。 搜索推荐广告系统 , 本质上是数据管理的系统 , 数据包括商品维度、用户维度、商家和广告主维度的数据 。 把大量的数据按照一定的数据结构存储在机器内存之中 , 提供召回、预估、融合等服务 , 这些都是在线工程要去解决的问题 。 这部分的功能测试 , 基本原理是通过发送 Request/Query 请求串、验证 Response 结果的模式 , 在此基础上使用了比较多提升测试用例生成效率和执行效率的技术 。 基于可视化、智能化等技术(智能用例生成、智能回归、失败智能归因、精准测试覆盖、功能 A/B 测试) , 把测试方法论融入其中 , 解决了大规模异构的在线工程功能测试 case 编写成本高、debug 难、回归效率低的问题 。 搜索推荐广告的在线服务工程基本上由 20 - 30 个不同的在线模块组成 , 测试这些在线服务模块极其消耗时间 , 用例的编写效率和回归运行效率是优化的主要目标 , 在这个方向上 , 我们在用例生成方面通过用例膨胀和推荐技术、基于遗传算法动态生成有效测试用例、在用例执行阶段使用动态编排的回归技术 , 通过这些技术极大地提升了在线模块的功能测试的覆盖率 。
此外 , 我们比较多地使用线上的 Query 做对比测试的方法 , 用以验证功能变更的差异 , 分析即将发布的系统与实际线上系统之间的结果一致率和数据分布可以很好地找到系统的功能性问题 。 在线上测试领域 , 除了对比测试 , 我们把近期 Top-N 的 Query 在线上定时做巡检监察 , 一方面起到功能监控的作用 , 另一方面 Query 量级到一定程度(例如最近一周 80% 的长尾 Query) , 可以很轻松地验证引擎数据的完整性和多样性 。 最后 , 这一部分的测试策略也需要强调一下 , 由于算法的逻辑(例如召回和排序的业务逻辑)非常复杂 , 涉及不同的业务和分层模型 , 这些逻辑是算法工程师直接设计实现的 , 所以算法逻辑的测试用例的设计和执行也是由算法工程师来做 , 只有他们最清楚模型的功能逻辑和如何变化 。 结合着线上 debug 系统的使用 , 算法工程师可以很清楚目前线上运行的算法和线下即将上线的算法之间的逻辑差异 , 测试用例也就比较容易编写 。 测试工程师在其中主要负责整个测试框架和工具环境的搭建 , 以及基本测试用例的编写与运行 。 这个测试策略的调整 , 在本文最后关于测试未来的预判部分也有介绍 。
3) 离线系统的测试 , 或者算法工程测试
从数据流程的角度看 , 算法工程包括算法模型的建模流程和模型训练上线两部分 , 从特征提取、样本生成、模型训练、在线预测 , 整个pipeline离线流程到在线的过程中如何验证特征样本的质量和模型的质量 。 所以算法测试的关键在于三个地方:
a.样本特征质量的评估
b.模型质量的评估
c.模型在线预估服务的质量保障
a 和 b 涉及数据质量与特征功效放在一起在第四部分介绍 , 主要使用数据质量的各种指标来评估质量 。
这里重点说一下 c , 算法在线预估服务上线前的测试 , 因为其涉及到模型最终服务的质量 , 比较重要 。 我们这里使用了一种小样本离线在线打分对比的方法 , 可以最终比较全面地验证模型上线质量的问题 。 详细过程是:在模型上线正式服务之前 , 需要对模型做测试验证 , 除了准备常规的 test 数据集 , 我们单独分离出一部分样本集 , 称之为小样本数据集 , 通过小样本数据集在线系统的得分与离线分数的对比的差异 , 验证模型的在线服务质量 , 这种小样本打分实际上也提供了类似于灰度验证的能力 。 流程见下图 2 。
算法■深度|大数据算法应用的测试发展之路
本文插图

图2 小样本测试
关于离线系统的测试 , 我们同时在深度学习训练平台的质量保障上也做了一些探索 , 目前深度学习平台质量主要面临三大难点:


推荐阅读