第3章 Crash分类体系与标签编码
适用场景
- Crash 上报后需要自动化或人工打标签的场景,如每日 Crash 日报、归因分析、灰度对比。
- 建立统一 Crash 知识库,使不同团队(客户端、服务端、QA)使用相同分类语言。
- 灰度验证前对 Crash 进行分组,确保同一标签下的 Crash 可以使用同样的灰度策略。
前置条件
- 已完成第2章《Crash 上报与堆栈采集》的接入与数据清洗。
- 已定义一级和二级分类的枚举清单(见下文表格)。
- 责任人员已确认分类决策树逻辑,并准备标签字典。
操作步骤
- 确定一级分类:根据堆栈类型、异常特征、发生环境,从五类中选取唯一一级标签:
Java、Native、ANR、系统、第三方SDK。 - 确定二级分类:在一级分类基础上,根据 Crash 根因再细分:
内存、线程、IO、网络、权限。若无法归入则使用 “其他/未知”。 - 编码拼接:按规则
CRASH_{一级缩写}_{二级缩写}_{序号}生成唯一标签编码。序号为四位数字,从 0001 开始。 - 应用决策树:按照本章下方 SVG 决策树流程图逐级判断;若分支未覆盖,则进入通用分支“其他”。
- 写入标签库:将生成的编码与描述写入 Crash 元数据表,供后续查询与灰度分组使用。
贴士:二级分类不是必填项。若堆栈信息不足以判断二级类型,可仅记录一级分类,二级留空或标记为
UNKNOWN。
输入输出物
| 输入物 | 来源 | 输出物 | 去向 |
|---|---|---|---|
| 原始 Crash 堆栈及元数据 | 上报系统 | 标签编码(字符串) | Crash 元数据表 |
| 一级/二级分类枚举表 | 本课程附录 A | 决策树决策结果 | 自动化分类脚本或人工审核界面 |
| 编码规则说明 | 本课程第3章正文 | 标签目录(JSON 格式) | 灰度分组模块 |
责任边界
- 客户端/端上团队:负责在堆栈中提取平台信息(Android/iOS),辅助一级分类的确定;不参与编码。
- Crash 归因分析师:按照决策树执行分类,并生成编码;对模糊场景有裁决权。
- 平台工程团队:维护分类脚本与标签数据库,确保编码唯一。
记录材料
每个 Crash 必须至少记录以下字段到 Crash 元数据表:
{
"crash_id": "CRASH_20250501_A001",
"level1": "Native",
"level2": "Memory",
"tag_code": "CRASH_NAT_MEM_0001",
"classifier": "zhang.li",
"classified_at": "2025-05-01T14:30:00+08:00"
}
若分类失败或人工介入,需额外记录异常说明。
异常处理
异常场景1:同一 Crash 可同时归入不同二级分类(如内存相关 AND 线程相关)。
规则:按决策树优先级选择最具体的分类;若并列,则取首次出现的二级分类。若无法决定,标记为 “MULTI” 并触发人工复核。
异常场景2:堆栈信息严重残缺,无法判断一级分类。
规则:使用一级分类 “Unknown”,二级分类留空,编码为
规则:按决策树优先级选择最具体的分类;若并列,则取首次出现的二级分类。若无法决定,标记为 “MULTI” 并触发人工复核。
异常场景2:堆栈信息严重残缺,无法判断一级分类。
规则:使用一级分类 “Unknown”,二级分类留空,编码为
CRASH_UNK_UNK_9999。事后需通过重跑脚本或人工补标签。
验收标准
- 每个已上报的 Crash 均有且仅有一个 tag_code(包括 “Unknown” 情况)。
- tag_code 格式严格符合
CRASH_[A-Z]{3}_[A-Z]{3}_[0-9]{4}。 - 决策树覆盖率 ≥95%(即人工介入/Unknown 占比不超过5%)。
- 自动分类脚本在 500 条测试样本上准确率 ≥90%,召回率 ≥85%。