用途
prune-tests 用于在不削弱有意义保护的前提下,降低测试套件的运行成本。它针对的是那些不再唯一保护关键契约、已确认回归或重要不变量的测试,通过系统化判断将其删除或合并,从而减少冗余、缩短测试耗时。
保留标准
一个测试只有在其唯一地保护以下内容时才应保留:
- 调用者通过公共接口依赖的契约。公共接口可以是 API、CLI、模块接口、协议、工作流或制品边界。
- 仍然可能发生的已确认回归。
- 关键的安全、权限、兼容性、并发、迁移、协议或数据丢失不变量。
以下测试不符合保留条件:覆盖私有机制、重复更强的覆盖、罗列等价用例、保留已失效行为、测试框架或类型保证、把代码重述为断言,以及依赖结构而非行为。测试覆盖率百分比不是保留测试的理由。
使用范围
默认作用于整套测试。当调用方将运行范围限定到某个 diff 时,只考虑该 diff 新增或修改的测试,以及覆盖其改动或删除代码的测试。
使用方式
- 运行范围内测试并记录运行时间。如果任何测试失败,停止并报告失败。
- 按上述保留标准将每个范围内测试分组。不保护任何内容的分到一组。
- 对保护不明确的分组进行调查:搜索历史,找到添加该测试的修复;阅读其覆盖的代码及该代码的调用方;临时破坏所断言的行为,看是否还有其他测试也失败。只有当历史显示存在修复,或在回退该修复后测试失败时,才将回归视为已确认。
- 将每个分组分类为保留、合并(合并为一个具有相同保护的测试)或删除。当无法说明某个分组唯一保护什么时,删除该分组。当每个分组都有分类后结束。
- 一次一个分组地应用变更;不要改变生产行为。
- 重新运行范围内测试,以及所有使用了已移除夹具的测试。当它们通过后结束。
报告内容
报告被移除的测试、夹具和代码行,节省的运行时间,以及每次删除和合并的原因。
限制
该技能要求具备测试历史与代码阅读能力,且回归确认依赖历史证据或回退验证。资料未提供具体的命令、脚本、依赖环境或平台要求。