想象你是一名疫苗研发工程师。疫苗的作用,是往健康人体内注入微量、处理过的病原体,提前触发免疫系统演练,从而在真实病毒来袭时从容应对。AI 系统的“故障注入”干的就是这件事:我们故意向训练好的模型中注入异常的、边缘的、极端的数据,像打疫苗一样刺激它“免疫系统”提前暴露漏洞和薄弱环节。经过这一轮的“接种”,AI 的安全边界得到加固,真正遇到恶意攻击时不再手足无措。 边缘用例是 AI 的“盲区”——明明是合法输入,却让模型给出荒谬结果。故障注入的核心价值,就是用一套系统化方法批量制造这些边界场景,量化它们的威胁程度,并推动自动化修复与回归验证。本文用“疫苗研发与接种”的视角,带你走完故障注入的完整链路:如何设计“疫苗配方”(测试用例)、如何给“毒株”分类(异常分类)、如何评估“疫情”等级(严重程度)、如何搭建“自动化疫苗工厂”(检测流水线),以及如何沉淀“标准毒株库”(评测基准)。

岗位关联

对 AI 从业者而言,掌握故障注入等于拥有主动发现模型短板的“透视眼”——在评测、安全、稳定性工程中,它能帮你把“事后救火”变成“事前排雷”,是 AI 安全测试领域最实用的基本功之一。

目录
  1. 可视化演示
  2. 故障注入概述
  3. 测试用例策略
  4. 异常分类体系
  5. 严重程度评估
  6. 检测自动化流程
  7. 改进与评测基准
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

故障注入向模型输入异常或边界数据,发现潜在安全漏洞与行为异常。拖动滑块调整注入强度,观察异常信号检测与严重程度评估过程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

故障注入核心 异常数据注入 漏洞发现 边界→异常→评估

故障注入概述

疫苗的发明,源于一个朴素的想法:与其等病毒大规模入侵后再抢救,不如提前用“假病毒”演练。故障注入同此理——它不是等 AI 出错后去补救,而是主动把边缘用例、异常数据当作“减毒疫苗”注射进系统,观察模型的“免疫应答”。在 AI 评测领域,边缘用例是模型难以正确处理的输入样本,比如模糊图片、极端天气下的路况、罕见语法的句子。故障注入就是“量产”这些边缘用例的工厂,让模型的缺陷在可控条件下集中显形。

从流程上看,故障注入是一次“注入→观测→分析”三步闭环:先构造异常用例,再送入模型运行,最后观测输出偏差并定位根因。与传统的随机测试不同,故障注入是有目标、有类别、有评估的攻击演练。它不仅在输入层注入,还能在模型权重、推理环境等层面施加扰动,全维度检验系统的鲁棒性。正如疫苗要覆盖多种病毒亚型,故障注入也要覆盖多类故障源,才能形成完整的“抗体谱”。

理解触发率之后,下一步就要问:这些边缘用例从哪来?一个好的“疫苗配方库”必须覆盖足够多的边界场景,这正是测试用例生成策略要解决的问题。

P触发=N异常输出N注入总数\displaystyle P_{\text{触发}} = \frac{N_{\text{异常输出}}}{N_{\text{注入总数}}}
这个公式衡量一次故障注入的“命中率”:注入 100 个边缘用例,有 30 个引发了异常行为,触发率就是 30%。触发率越高,说明模型的漏洞越密集。
  1. 分子——异常输出数统计模型在注入后产生偏离正常预期的结果数量。它代表“疫苗”成功激起的“免疫反应”。
    N异常输出N_{\text{异常输出}}
  2. 分母——注入总数本轮注入的故障用例总量。对应疫苗试验中的接种人数,是计算命中率的基础。
    N注入总数N_{\text{注入总数}}
  3. 整体——触发比例两者相除得到触发率,归一化到 0~1 区间。数值越接近 1,说明系统越“脆弱”。
    P触发=N异常输出N注入总数\displaystyle P_{\text{触发}} = \frac{N_{\text{异常输出}}}{N_{\text{注入总数}}}

测试用例策略

疫苗研发的第一步是培育毒株。对应到故障注入,就是设计“疫苗配方”——测试用例生成策略。如果配方单调,只覆盖常见场景,那 AI 的“免疫盲区”就依然巨大。好的策略需要多管齐下。

第一种策略是基于规范:从需求文档、接口定义和数学约束中提取边界值。比如输入范围是 0~255,就注入 -1、0、256、浮点极值;若输入应为英文短句,则注入超长文本、纯符号、缺失字段。这些用例像针对已知病毒亚型设计的疫苗,目标明确。第二种策略是基于变异:拿正常样本做“基因突变”,如对图片加噪声、旋转、遮挡,对文本做同义词替换、语序颠倒,对数值做微小扰动或极端放大。变异后的样本往往落在模型决策边界附近,最容易揭露“亚健康”状态。第三种策略是随机模糊测试:完全不了解内部逻辑,用随机生成器狂轰滥炸,像盲打式疫苗筛选,靠大数据量覆盖未知盲区。

C覆盖=∣T设计∩T边界∣∣T边界∣\displaystyle C_{\text{覆盖}} = \frac{|T_{\text{设计}} \cap T_{\text{边界}}|}{|T_{\text{边界}}|}

1. 交集——已覆盖的边界用例:设计中与理论边界空间相交的用例数量,代表有效命中边界的那部分样本。

T设计∩T边界T_{\text{设计}} \cap T_{\text{边界}}

2. 分母——理论边界全集:该输入域下所有可能的边界用例总数。实际中一般用专家经验圈定一个近似全集。

T边界T_{\text{边界}}

3. 比例——边界覆盖度:两者相除得到覆盖率。覆盖率低时,应优先补充“规范边界”和“变异样本”两类配方。

C覆盖=∣T设计∩T边界∣∣T边界∣\displaystyle C_{\text{覆盖}} = \frac{|T_{\text{设计}} \cap T_{\text{边界}}|}{|T_{\text{边界}}|}

有了丰富的测试用例,下一步是把它们分门别类,建立“毒株库”——异常分类体系。就像疫苗库需要区分细菌、病毒、真菌一样,故障注入也要先厘清异常的层级与类型。

异常分类体系

疫苗库中,不同的病原体要用不同的标签区分,否则无法确定研发优先级。异常分类体系承担同样的职能:给每个故障样本打上“毒株标签”,让后续评估有的放矢。我们可将异常分为三大类。

数据级异常指输入本身出了问题:极端数值、缺失字段、噪声污染、对抗扰动、类别不均衡等。这类异常最容易被故障注入生成,也最能考验模型对输入分布偏移的抵抗力。模型级异常指向模型内部状态:置信度异常高或异常低、中间层特征爆炸、决策边界在局部剧烈扭曲。这类异常往往由数据级故障触发,但根因在模型结构或训练过程。系统级异常则涉及运行环境:内存溢出、推理超时、并发冲突、GPU 显存不足、依赖库版本不兼容等。此外,真实场景中往往是多类故障交织——既输入异常又发生超时,因此还需要组合标签来描述复合故障,就像疫苗研发要考虑混合感染。

L=arg⁡max⁡l∈{D,M,S}P(l∣xfault)\displaystyle L = \arg\max_{l \in \{D, M, S\}} P(l \mid x_{\text{fault}})

1. 候选集合——三类标签:{D, M, S} 是要选择的三个类别,分别对应急性、慢性、环境性“感染”。

{D,M,S}\{D, M, S\}

2. 条件概率——故障样本的类别可能性:在已知故障样本 x 的前提下,计算它属于每一类的概率。

P(l∣xfault)P(l \mid x_{\text{fault}})

3. 最值选取——取最大概率类别:argmax 返回概率最大的标签,作为该故障样本的分类结果。

L=arg⁡max⁡l∈{D,M,S}P(l∣xfault)\displaystyle L = \arg\max_{l \in \{D, M, S\}} P(l \mid x_{\text{fault}})

分类只是第一步。面对成百上千的故障样本,我们必须回答:哪些“疫情”最致命,需要优先处置?这就进入了严重程度评估环节。

严重程度评估

疫苗面世前要经过严格的安全分级:有些副作用轻微,有些则可能引发严重反应。故障注入同样需要给每个异常定级,否则团队会被“鸡毛蒜皮”的缺陷淹没。严重程度评估从来不只是看“崩没崩”,而是从三个维度综合打分。

影响范围衡量故障波及面:单条样本出错,还是大量输入同时失效?一个输出错误影响少数用户,和一个模型全面瘫痪导致全站不可用,显然不是一个量级。可利用性衡量攻击者“利用”该漏洞的难易:无需特殊条件即可触发,还是需要精确构造极罕见的输入?可利用性越高,“疫情”越危险。恢复难度则看系统能否自愈:重启即好,还是需要重新训练模型?三者叠加,就能给异常排出优先处置的“红黄绿”等级。

评估完严重程度,下一个现实问题浮出水面:如果每次都要人工构造用例、人工监控输出、人工写报告,故障注入的成本将高到难以落地。必须把它变成一条自动化流水线。

S=0.4×I+0.35×E+0.25×R\displaystyle S = 0.4 \times I + 0.35 \times E + 0.25 \times R
严重程度评分 S 是三个子维度的加权求和,权重可根据业务场景调整。比如金融场景更看重影响范围,安全攻防场景更看重可利用性。评分越高,处置优先级越高。
  1. 权重——影响范围权重 0.4,代表影响范围在评分中的相对重要性,是首要考量的因素。
    0.4×I0.4 \times I
  2. 权重——可利用性权重 0.35,代表漏洞被利用的难易程度,反映攻击者的“便利指数”。
    0.35×E0.35 \times E
  3. 权重——恢复难度权重 0.25,代表系统从故障中恢复的成本,权重最低但不可忽略。
    0.25×R0.25 \times R
  4. 求和——综合评分将三个加权项相加,得到 0~1 或 0~10 的严重程度分值,用于排序和告警分级。
    S=0.4×I+0.35×E+0.25×R\displaystyle S = 0.4 \times I + 0.35 \times E + 0.25 \times R

检测自动化流程

疫苗工厂早已实现全自动化灌装、检验、包装。故障注入的成熟形态同样是一条“流水线”:把用例生成、注入、监控、回归对比、报告输出串成闭环。自动化之后,模型每次更新或上线前,系统都会自动完成一轮“疫苗接种演习”。

流水线的第一站是用例生成:自动从规范文档、历史错误、随机池中抽取或变异出边界用例。第二站是按序注入:将用例按严重程度从低到高或按类别分批送入模型,避免高破坏性用例在低等级用例之前引发崩溃。第三站是自动监控:实时采集模型输出、延迟、资源占用、置信度等指标,一旦偏离基线即触发告警。第四站是回归对比:将同一组故障用例分别喂给新旧两个版本模型,对比输出差异,判断新版本是修复了漏洞还是引入了新漏洞。最后,日志报告自动汇总本轮注入的触发率、漏洞列表、严重程度分布,推送给相关团队。

自动化流程跑通之后,团队又会产生新的追求:如何让测试用例越来越全、误报越来越少?如何让这套流程沉淀为可复用的方法论?这就是改进与评测基准的课题。

R回归=新增异常数已修复异常数+1\displaystyle R_{\text{回归}} = \frac{\text{新增异常数}}{\text{已修复异常数} + 1}
回归率 R 衡量一轮迭代后“旧病复发”与“新生问题”的情况:比值大于 1 说明改动引入了更多问题,需要回退。这个指标就像疫苗加强针的效果追踪——打了新疫苗后,感染率是降了还是升了?
  1. 分子——新增异常数本轮注入中新出现的异常数量,反映这次改动带来的“副作用”。
    新增异常数\text{新增异常数}
  2. 分母——已修复异常数历史版本中已修复的异常数量,加 1 防止除零,作为参照基线。
    已修复异常数+1\text{已修复异常数} + 1
  3. 比值——回归风险两者相除,衡量“退步”程度。比值持续下降,说明自动流水线正带动系统走向健壮。
    R回归=新增异常数已修复异常数+1\displaystyle R_{\text{回归}} = \frac{\text{新增异常数}}{\text{已修复异常数} + 1}

改进与评测基准

最后一环,是让“疫苗工厂”自身不断进化。故障注入方案不是做一次就结束,而是一个持续迭代的闭环。覆盖率提升是首要目标:不断从线上真实错误、红队报告、用户投诉中提取新的边界用例,扩充“毒株库”。误报率压降同样关键,否则团队会被大量假警报淹没,最终放弃治疗。

为了支撑长期迭代,需要构建评测数据集与评分自动化。所谓评测数据集,就是把历史上发现过的故障样本系统化整理成标准测试集,固定版本、固定标签、固定预期值,让任何一次模型更新都能在这一基准上跑分。评分自动化则把严重程度评估、覆盖率计算、回归率报告全部脚本化,每次改动后自动输出质量分。这两项工作看似“额外成本”,实则把故障注入从一次性的临时演练,升级为可复现、可量化、可跨团队复用的评测基准方法论——如同疫苗库沉淀为标准毒株库,每位研发者都能在此基础上继续迭代,而不必从零开始。

回顾这段“疫苗工程”之旅:从设计配方、分类毒株、评估疫情到自动化接种、迭代升华,故障注入的核心思想始终是——主动制造麻烦,才能在真实危机到来前,牢牢守住 AI 的防线。

Q=α×C覆盖−β×F误报+γ×(1−R回归)\displaystyle Q = \alpha \times C_{\text{覆盖}} - \beta \times F_{\text{误报}} + \gamma \times (1 - R_{\text{回归}})
质量评分 Q 综合了覆盖率、误报率、回归率三个方向:覆盖率越高越好,误报率越低越好,回归率越低越好。Q 随版本迭代不断上升,是“疫苗工厂”健康度的终极指标。
  1. 加权项——覆盖率贡献α 乘以覆盖率,覆盖率越高,质量得分越高。
    α×C覆盖\alpha \times C_{\text{覆盖}}
  2. 扣分项——误报率惩罚β 乘以误报率,误报越多,质量得分越低,避免“狼来了”效应。
    β×F误报\beta \times F_{\text{误报}}
  3. 加成项——回归率反向贡献γ 乘以 (1 - 回归率),表示低回归率能带来正向奖励。
    γ×(1−R回归)\gamma \times (1 - R_{\text{回归}})
  4. 求和——综合质量分三个加权项相加,得到整体质量评分。该分可作为团队季度 OKR 的量化指标,也可作为模型上线前的门禁阈值。
    Q=α×C覆盖−β×F误报+γ×(1−R回归)\displaystyle Q = \alpha \times C_{\text{覆盖}} - \beta \times F_{\text{误报}} + \gamma \times (1 - R_{\text{回归}})

AI 应用场景

自动驾驶感知模型的安全体检

阶段:模型评测与上线前安全验证

解决的问题:传统测试只评估晴天、正常路况下的准确率,对突发场景——浓雾遮挡、路人穿黑衣、道路标识被涂改——往往失语。故障注入通过构造这些边缘用例,让感知模型在仿真环境中提前暴露漏检、误检问题,把风险消灭在上路之前。

具体案例:某自动驾驶团队构建了一个“场景疫苗库”,将雨天反光、夜间远光、行人部分遮挡等 2000 个边缘场景打包,对视觉感知模型逐一注入。结果发现模型在“黑色车辆+雨天”组合下的检测置信度骤降 35%,从而在事故前完成了模型微调和数据补充。

大语言模型内容安全网关

阶段:模型上线后的持续监控与红队演练

解决的问题:自然语言输入空间近乎无限,依赖人工抽查无法覆盖隐蔽的提示注入、越狱攻击。故障注入把攻击者可能使用的边缘句式、编码变体、多轮诱导组合成自动化测试集,持续对模型施加“疫苗刺激”,实时发现防线缺口。

具体案例:某客服大模型团队部署了一套自动化故障注入流水线,每天深夜生成 5000 条含字符翻转、多层编码、角色扮演诱导的用例注入模型。某次回归对比发现,新版本参数虽在标准测试集上提升,但在“间接指令注入”类样本上的误拒率升高了 12%,团队迅速定位到微调数据的偏差并修正。

Python 演示

python75 行
# -*- coding: utf-8 -*-"""简易故障注入评估器"""import numpy as np class FaultInjector:    def __init__(self, dim=4, seed=42):        rng = np.random.default_rng(seed)        self.n_dim = dim        self.normal_mean = rng.uniform(-0.5, 0.5, dim)        self.normal_std = rng.uniform(0.5, 1.5, dim)        self.weight = rng.uniform(-1.0, 1.0, dim)        self.bias = 0.2        self.free_lists = {"extreme": [], "noise": [], "flip": [], "missing": []}     def normal_sample(self, n=200):        return np.random.default_rng(0).normal(self.normal_mean, self.normal_std, (n, self.n_dim))     def gen_extreme(self, n=30):        arr = np.random.default_rng(1).uniform(-10.0, 10.0, (n, self.n_dim))        self.free_lists["extreme"] = arr        return arr     def gen_noise(self, n=30, amp=3.0):        arr = self.normal_sample(n) + amp * np.random.default_rng(2).normal(0, 1, (n, self.n_dim))        self.free_lists["noise"] = arr        return arr     def gen_flip(self, n=30):        base = self.normal_sample(n)        col = np.random.default_rng(3).integers(0, self.n_dim, n)        base[np.arange(n), col] *= -4.0        self.free_lists["flip"] = base        return base     def gen_missing(self, n=30):        arr = self.normal_sample(n)        mask = np.random.default_rng(4).random((n, self.n_dim)) < 0.4        arr[mask] = 0.0        self.free_lists["missing"] = arr        return arr     def model_score(self, x):        return x @ self.weight + self.bias     def severity_score(self, out):        lo, hi = -0.3, 0.3        impact = np.mean((out > hi) | (out < lo))        exploitable = np.mean(np.abs(out) > 1.0)        recovery = np.mean(np.abs(out) > 2.0)        return 0.4 * impact + 0.35 * exploitable + 0.25 * recovery     def evaluate(self, suite_name, arr):        out = self.model_score(arr)        base = self.model_score(self.normal_sample(50))        mu, std = np.mean(base), np.std(base)        trigger = np.mean(np.abs(out - mu) > 3 * std)        sev = self.severity_score(out)        return {"suite": suite_name, "trigger_rate": round(float(trigger), 3), "severity": round(float(sev), 3)}     def run_all(self):        repo = {            "extreme": self.gen_extreme(),            "noise": self.gen_noise(),            "flip": self.gen_flip(),            "missing": self.gen_missing(),        }        report = [self.evaluate(name, arr) for name, arr in repo.items()]        for line in report:            print(f"[{line['suite']:>8}] trigger_rate={line['trigger_rate']:.3f} severity={line['severity']:.3f}")        print(f"total_faults_injected={sum(len(v) for v in repo.values())}")        return report if __name__ == "__main__":    f = FaultInjector()    f.run_all()
目的:演示故障注入全流程——构造极端值、噪声、特征翻转、缺失值四类边缘用例,送入简易模型计算触发率和严重程度评分,并输出测试报告。
  1. self.free_lists = {...}用一个字典缓存各类故障样本,方便后续回看或汇总统计。
  2. def normal_sample(self, n=200)生成服从正态分布的基线正常样本,作为模型的“健康参照组”。
  3. def model_score(self, x)简化为线性加权打分模型,真实场景可替换为任意深度学习模型。
  4. if __name__ == "__main__":程序入口,构造注入器并运行全部测试套件。

常见误区

误区我一直以为故障注入就是把异常数据喂给模型,其他环节都不用管。只要输入够怪,就能发现所有问题。

正解输入扰动只是故障注入的起点。模型内部的状态异常(如中间层特征爆炸)、系统层面的资源故障(如内存溢出、超时)同样需要注入。真实业务中,很多高危漏洞恰恰出现在推理环境而非输入数据上。就像疫苗针对的是病毒入侵的多个环节,不能只怼着细胞表面一个靶点测试。

为何常见:因为多数教材和案例从“边缘输入”讲起,初学者最直观地接触到“特殊数据”这一层,系统级故障的辨识度较低。

误区跑出 500 个异常,工程师压力山大,觉得每个 bug 都是炸弹,必须全部修完才能上线。

正解异常需要按严重程度分级处置。轻微的可利用性低、影响范围小,可以记录到威胁库中持续观察;严重程度评分高的漏洞才需要优先排期。把资源投入到低危项上,反而会让高危漏洞被忽略。就像疫苗的副作用也有轻重之分,不是所有不良反应都要终止临床试验。

为何常见:工程师天然追求“零缺陷”的完美主义,再加上严重程度评估框架没有建立时,所有异常看起来都一样吓人。

误区既然覆盖率是重要指标,那就把测试用例堆到几百万条,覆盖率接近 100% 就万事大吉。

正解覆盖率只是质量的一维。盲目堆用例会引入大量低质量、高误报的样本,团队被假警报消耗精力,真实漏洞反而被淹没。合理的做法是在覆盖率提升的同时监控误报率与回归率,追求三者的加权优化。就像疫苗研发不是种类越多越好,还要看每种疫苗的保护效力和安全性。

为何常见:管理者和工程师容易把单一量化指标当成终极目标,忽略了指标之间的平衡关系。

误区上线前跑一轮故障注入,没发现问题,以后就不用再做了。

正解模型会随数据分布漂移和版本迭代不断变化,今天安全的边界明天可能就失守。故障注入应该像定期体检一样形成自动化流水线,在每次更新后自动回归。许多严重事故都发生在“上次测过没问题”的模型上,环境一变,旧漏洞就复活了。

为何常见:人们习惯把安全测试看成离散节点而非持续过程,尤其当资源紧张时,更倾向于压缩测试轮次。

误区只要故障让模型输出错了一次,就统一标为“严重”上报,报告里全是红色警报。

正解脱离维度评估的严重程度没有参考价值。同样的输出错误,发生在低频长尾场景与发生在核心主链路,处置优先级天差地别。需要结合影响范围、可利用性、恢复难度三个维度加权计算,评分结果才能在团队中高效排定优先级。

为何常见:写报告的人为求省事不做细分,决策者面对大量同质的“严重”告警,最终只能随机挑选或全部忽略。

面试题

Q1. 故障注入的核心目标是什么?

单选题 · easy

  • A.提高模型训练速度
  • B.主动发现边缘漏洞← 正确答案
  • C.自动修复全部缺陷
  • D.降低正常数据噪声

答案:B。故障注入的定义就是主动构造异常数据来暴露模型的潜在缺陷,B 正确。A 是性能问题,C 过于绝对——它负责“发现”,修复要交给后续团队,D 与故障注入方向相反。

Q2. 边缘用例指的是?

单选题 · easy

  • A.数据集中出现最多的样本
  • B.标签完全正确的样本
  • C.模型难以正确处理的边界输入← 正确答案
  • D.训练时使用的高质量样本

答案:C。边缘用例就是落在模型能力边界之外、容易引发错误的特殊输入。C 符合;A 是高频样本,B 和 D 都属于正常、易处理的样本,与“边界”概念无关。

Q3. “注入→观测→分析”三步闭环中,“观测”环节主要做什么?

单选题 · mid

  • A.生成新的边缘用例
  • B.收集模型输出与运行指标← 正确答案
  • C.修复模型内部参数
  • D.删除异常的测试数据

答案:B。观测环节的任务是采集模型输出、置信度、延迟等指标,判断是否触发异常,B 正确。A 属于注入前的工作,C 是修复环节,D 与故障注入背道而驰。

Q4. 基于规范的测试用例生成策略,主要依赖什么?

单选题 · mid

  • A.随机数发生器
  • B.变异正常样本
  • C.需求文档与接口约束← 正确答案
  • D.用户历史反馈

答案:C。规范法从文档中的输入范围、取值约束和边界条件推导用例,C 正确。A 是随机模糊,B 是变异法,D 属于数据驱动策略,三者都不是规范法的核心来源。

Q5. 下列哪些属于故障注入中的异常分类层级?

多选题 · mid

  • A.数据级异常← 正确答案
  • B.模型级异常← 正确答案
  • C.系统级异常← 正确答案
  • D.营销级异常

答案:ABC。异常分类体系包含数据级、模型级、系统级三大类,分别对应输入、模型内部、运行环境三个层面。D 是干扰项,AI 评测领域不存在“营销级异常”这一分类。

Q6. 严重程度评估中,“可利用性”维度衡量的是什么?

单选题 · mid

  • A.漏洞影响多少用户
  • B.攻击者触发漏洞的难易程度← 正确答案
  • C.模型恢复到正常状态需要多久
  • D.网络带宽占用大小

答案:B。可利用性描述漏洞被攻击者利用的门槛,门槛越低越危险,B 正确。A 属于影响范围,C 属于恢复难度,D 与 AI 故障注入无关。

Q7. 自动化检测流水线通常包含哪些环节?

多选题 · mid

  • A.用例自动生成← 正确答案
  • B.按序注入故障← 正确答案
  • C.输出监控与告警← 正确答案
  • D.手工编写测试文档

答案:ABC。自动化流水线的核心是生成、注入、监控、回归对比、报告输出,A、B、C 都是其中环节。D 恰恰是自动化要替代掉的手工工作,不属于流水线环节。

Q8. 回归率大于 1 时,通常说明什么?

单选题 · hard

  • A.模型版本更新效果极好
  • B.新增异常数超过了已修复数← 正确答案
  • C.覆盖率达到了 100%
  • D.误报率降到了零

答案:B。回归率是新增异常数除以已修复异常数,比值大于 1 说明改动引入了更多新问题,说明模型更新有回归风险,B 正确。A、C、D 都是对回归率的错误解读。

Q9. 下列措施中,最能降低故障注入误报率的是?

单选题 · hard

  • A.无限增加测试用例数量
  • B.细化异常判断阈值与过滤规则← 正确答案
  • C.不考虑严重程度直接告警
  • D.只使用随机模糊测试

答案:B。误报率高的根源是判断标准粗糙,B 通过精细化的阈值和过滤规则能精准压低误报。A 堆数量反而可能放大误报,C 会使告警更混乱,D 单靠随机测试会引入大量无意义样本。

Q10. 评测数据集在故障注入体系中的作用是?

单选题 · easy

  • A.替代训练数据重新训练模型
  • B.固化历史故障样本用于回归对比← 正确答案
  • C.提高模型在正常数据上的精度
  • D.删除模型中的安全漏洞

答案:B。评测数据集把历史故障样本固定为标准化测试集,让模型每次更新后可以对照同一基准回归,B 正确。A、C、D 都偏离了评测数据集的定位——它不参与训练,也不保证正常数据精度,更不可能直接删除漏洞。