

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 5. 持续集成
<a name="continuous-integration"></a>

机器学习系统运行测试以验证系统是否从头到尾运行，检查可能的故障点。提交时会自动运行测试，较长的测试按固定计划运行。测试检查传统的软件工程领域，例如单元和系统级别。此外，测试还通过检查数据、特征和模型来捕获机器学习的细节。


|  |  | 
| --- |--- |
| **5.1 本地代码检查** | 在将代码提交到集中式代码存储库之前，开发者需要在本地运行诸如基本单元测试和静态分析之类的检查。在提交之前运行这些检查可提高整体代码质量，并在问题进入版本控制之前发现问题。 | 
| **5.2 静态代码分析** | 中央代码存储库具有静态代码分析工具，可在提交时快速运行。此工具应该改进代码样式和格式。它还应检查源代码和基础设施代码内的常见安全漏洞、常见错误以及代码中的其他弱点。 | 
| **5.3 数据质量测试** | 数据质量测试应至少检查数据是否未违反固定架构。一种更全面的方法是在摄取时计算数据统计信息，对数据设置约束，然后对这些数据进行测试。可以独立设置数据质量测试，也可以将其作为管线的一部分进行设置。统计数据和约束条件可重复用于监控。 | 
| **5.4 特征测试** | 作为完整管线的一部分，将生成特征重要性。特征测试断言，特征的重要性或模型对特征值的归因方式不会改变。特征测试可以纳入监控，因为它们可以提醒和跟踪模型输入中的违规行为。 | 
| **5.5 单元测试** | 所有代码（模型、应用程序和基础设施）的单元测试在提交之前和提交时运行。每个单元测试都会对重要代码片段进行检查，以确认其功能是否符合预期。对于机器学习代码，可以运行测试以确定算法的正确性。 | 
| **5.6 集成测试** | 集成测试可验证管线是否成功端对端运行，包括为管线建立关联的基础设施。此测试验证系统是否按预期运行并记录日志。如果部署是分开的，则还应该对此进行 end-to-end测试，以确保部署可以正常运行。 | 
| **5.7 烟雾测试** | 该系统具有烟雾测试功能，可对每个功能进行小型快速回归测试。烟雾测试是持续集成的一部分，可以在容器化环境中运行以模仿云功能。 | 
| **5.8 负载测试** | 按需负载测试已经到位。除了捕获机器学习系统在高负载和低负载下的行为外，负载测试还提供有关系统范围的吞吐量或延迟的统计数据。通过负载测试收集的数据提供了有关资源大小和扩展策略的信息。 | 
| **5.9 模型功能测试** | 模型输出和输入通过自动功能测试运行。为了检查功能内的行为，需要使用基本示例在真实或虚假数据上测试模型的输出和输入。 | 
| **5.10 极端情况下的模型推理测试** | 作为最低功能测试的一部分，模型测试应在模型提升之前检查给定某些输入的极端行为。这为防止意外行为提供了额外的护栏。 | 