单位 8 / 11

测试覆盖率分析和基于风险的测试:利用 AI 瞄准目标

收益:

  • 能够将线路、分支和条件覆盖率等指标作为地图而不是信任来读取,并了解高覆盖率可能会产生伪信任
  • 能够将需求范围置于代码范围旁边,并通过人工智能使可追溯性差距变得可见
  • 能够使用公式风险 = 概率 × 影响对功能进行评分,将有限的测试工作直接导向最高风险,并记录故意超出范围的情况

您不可能永远测试每个软件;时间和资源都是有限的。所以真正的问题是:有限的测试工作应该放在哪里?有两个概念可以回答这个问题。测试覆盖率(衡量测试涉及多少代码或需求的指标)代表正在测试的内容。基于风险的测试——根据某个区域恶化的概率以及恶化时将造成的损害来确定测试优先级的方法——将工作重点放在风险最大的地方。人工智能 (AI) 在这两方面都是强大的分析合作伙伴:它使覆盖范围的差距变得可见,表明风险领域。但核心警告仍然存在:人工智能看到的范围数量可能会产生误导;通过不验证任何内容的测试,甚至可以实现 100% 的行覆盖率。您的工作是将范围视为地图,而不是信托。

正确读取覆盖率指标

范围有多种类型,但并非所有类型都具有同等意义:

  • 行覆盖率:有多少行代码至少被执行一次。最常见但最弱的标准;仅仅因为一条线路可以工作并不能证明它的行为正确。
  • 分支覆盖率:是否每个 if 分支(true 和 false)都经过测试。比一行更有意义。
  • 条件覆盖:分别测试复杂条件下的每个子条件。
  • 路径覆盖:代码内逻辑路径的组合。它是最全面的,但在实践中很难完全达到。
注意:覆盖率不是“质量分数”。 100% 行覆盖率告诉您这些行正在工作;并不是说它产生了正确的结果(单元 1 中的伪通过)。使用范围作为“我从来没有看过的地方”这个问题的答案,而不是作为“一切都经过测试”的保证。

范围盲点

覆盖率指标仅衡量有多少代码已被执行;看不到:(1) 未经测试的需求(代码存在,但业务规则错误),(2) 缺失代码(没有从未编写过的控件的范围),(3) 数据/状态组合,(4) 可用性、性能、安全性。因此,需求覆盖率(每个验收标准必须通过至少一项测试来满足)应该放在代码覆盖率旁边。人工智能对于生成需求测试映射(可追溯性矩阵)非常有帮助。

基于风险的测试:我们把精力放在哪里?

风险=概率(破损的可能性)×影响(破损造成的伤害)。借助 AI,您可以在这两个轴上对功能列表进行评分并创建热图。高概率×高领域(支付、认证、数据完整性)值得最严格的测试;低×低区域(很少使用的偏好屏幕)光测试就足够了。

面积

概率

影响

风险

测试密度

支付流程

中等

非常高

深度+自动化

认证

中等

非常高

深度+安全

产品搜索

中等

中高

自动化+发现

个人资料照片

光控

帮助页面

太低

太低

评论

追逐范围的陷阱

将覆盖率作为目标(例如“团队必须通过 90% 的覆盖率”规则)会产生危险的副作用:开发人员和测试人员专注于提高百分比而不是解决实际风险。结果通常是一个臃肿的范围,没有断言或琐碎的测试——数字看起来不错,但没有保护。这就是标准本身成为目标时被破坏的现象:“当一项措施成为目标时,它就不再是一个好的措施”。使用示波器作为诊断工具,而不是性能报告卡。

更健康的做法是定向阅读范围:“为什么关键支付模块的分行覆盖率停留在40%?”问题是“总体覆盖率是90%吗?”它比问题更有价值。让人工智能按模块和风险级别分解范围报告;突出显示覆盖率低的高风险区域。因此,范围成为指导劳动力的指南针,而不是盲目的百分比。

注意:“100% 覆盖”的口号是一个陷阱。测试某些代码(简单的访问器、自动生成的部分)的价值很低;在那里花费的精力是从高风险的业务规则中窃取的。目标是测试每一个重要的行为和风险,而不是每一条线。

弱提示/强提示

弱:“增加我的测试覆盖范围。”
Strong:“给出这份验收标准列表和这些现有的测试用例。(1) 以表格形式列出任何测试尚未满足的验收标准(需求覆盖率差距)。(2) 在概率和影响轴上对每个功能进行 1-5 分评分;按风险排名 = 概率 × 影响。(3) 在有限的时间内,建议我应该首先弥补哪 5 个差距,从最高风险开始。不要将代码行覆盖率作为唯一标准;优先考虑业务风险。标准:[...] 测试: [...]”

强大的提示功能;将范围与业务风险相结合,并优先考虑有限的劳动力。

四个可复制模板

1)需求范围差距:

给出以下验收标准和这些测试用例。生成可追溯性表:每个标准 -> 满足它的测试。没有任何测试的标准称为“覆盖差距”,不与任何标准相关的测试称为“必要吗?”马克:标准:[...]/测试:[...]

2)风险评分:

根据概率(损坏的可能性)和影响(损坏后的损坏)轴对功能/模块列表 1-5 进行评分。风险=概率×影响。对表格进行排序,并为每个高风险区域指定推荐的测试类型(单元/API/UI/侦察/安全)。列表:[...]

3)范围解释:

给出了以下覆盖率报告(行%,分支%)。告诉我:- 这些数字不能证明什么?- 尽管行覆盖率很高,但哪些领域可能面临风险?- 对于覆盖率看不到的差距,您会建议进行哪些额外测试(要求、数据组合、安全性)?报告:[粘贴]

4)限时计划:

距播出还剩 [X 小时]。给出了以下风险排名和覆盖范围差距。在此期间,按照优先顺序准备能够降低最大风险的测试计划。清楚地说明不要有意识地测试什么以及这样做的可接受的风险。数据:[...]

三个迷你箱子

案例 1 — 100% 覆盖,零信任。其中一支队伍的线路覆盖率高达 94%。 “范围解释”分析表明,大多数测试都是无断言的,这意味着它们运行了线路但没有验证任何内容。实际的保护范围要低得多。该团队关注的不是数字而是突变测试(第 10 单元);实际错误捕获率增加了一倍。

案例 2 — 风险地图修正优先级。一个团队将 40% 的测试工作花费在一个很少使用的报告屏幕上,跳过了付款流程,因为它“正常工作”。人工智能风险评分显示了这种不平衡。劳动力被重新分配;两周后,在支付流程中发现了一个影响较大的错误,并在上线前关闭。

案例 3——意识超出范围。发布 4 小时后,团队决定使用“有限时间表”模板来测试哪些内容以及有意识地跳过哪些内容。两条高风险流经过深度测试;低风险偏好筛选被记录为“可接受的风险”并被跳过。该决定是透明且合理的;该版本已安全发布。

常见错误

  • 将覆盖率误认为质量。读取高行覆盖率作为“经过测试”的保证。
  • 只是看代码覆盖率。跳过需求覆盖范围(每个验收标准的测试)。
  • 平等地进行测试而不考虑风险。将劳动力分配到低风险领域并忽略关键流动。
  • 躲在范围之外。当时间不够时,不记录未测试的内容;发布后有惊喜。
  • 毫无疑问地接受人工智能的风险评分。 AI并不完全了解产品上下文;用专家的眼光调整分数。

总之

测试覆盖率和基于风险的测试是将有限的工作引导到正确的地方的两种工具。覆盖率指标(线路、分支、条件、路径)显示所触及的内容,但不能证明其行为正确;范围是一张地图,但信任不是。将需求覆盖率放在代码覆盖率旁边。使用公式风险 = 概率 × 影响和对最大风险的直接努力对功能进行评分。人工智能使差距变得可见,对风险进行评分,计划有限的时间;但最终的优先事项和“有意识的退出”决定取决于了解业务背景的专家。

应用任务

从您自己的项目中选择一个模块。使用 AI 运行“需求范围差距”模板,找出哪些验收标准未经过测试。然后用“风险评分”在概率×影响轴上对模块的子特征进行排序。将(假设的)3 小时的测试时间分配给“有限的时间表”;写下您将有意识地不测试的内容以及可接受的风险。添加具体测试,以缩小您发现的最高风险覆盖范围差距。

清单

  • [ ] 我将覆盖率视为地图,而不是质量。
  • [ ] 除了代码覆盖率之外,我还删除了需求覆盖率。
  • [ ] 我通过概率×影响对功能进行评分,并按风险对它们进行排名。
  • [ ] 我将测试工作重定向到最高风险。
  • [ ] 我记录了未有意识测试和承认风险的领域。
  • [ ] 我根据我的产品背景审查了人工智能的风险评分。