软件测试中的严重性与优先级:差异、矩阵和实例

  1. 首页
  2. 博客
  3. 软件测试

软件测试

软件测试中的严重性与优先级:差异、矩阵和真实示例

严重性表示错误造成的损害程度。优先级表示多久修复它。了解为什么它们并不总是匹配,通过示例查看所有四种组合,并召开分类会议以做出明确的决定。

阅读约 8 分钟
软件测试中的严重性与优先级:差异、矩阵和实例

要点速览

  • 严重性衡量错误对系统的影响。 优先级衡量修复问题的紧急程度。
  • 测试人员通常会提出严重性,而产品负责人通常会决定优先级。
  • 它们是独立的,因此拼写错误可能很紧急,而崩溃可能会等待。
  • 优先级随业务环境而变化,而严重性往往保持稳定。

主页上的公司名称拼写错误以及很少使用的导出功能崩溃:您首先修复哪个?类似这样的争论就是测试团队区分严重性与优先级的原因。一是描述技术损坏,二是描述业务紧急程度。

如果没有这种区别,每个错误都会被标记为“严重”,这些标签就失去了意义,开发人员也不再信任它们。本指南为您提供了清晰的定义和示例,以及做出这些决策的简单流程。这些示例是说明性的,并且具体的规模因团队和工具而异。

简短的回答

严重性答案:此错误对产品的影响有多严重?崩溃或数据丢失很严重,而外观故障则不然。

优先答案:我们应该多久修复它?这取决于受影响的客户、截止日期、收入、法律风险和品牌声誉。

想想医院。严重程度是指患者病情的严重程度。优先级是患者接受治疗的顺序,这还取决于其他因素,例如谁可以安全等待以及哪些资源是免费的。

严重性与优先级并列

方面 严重性 优先级
问题 影响有多严重? 多久必须修好?
焦点 对系统的技术影响 业务需求和调度
通常设置为 测试员或QA工程师 产品负责人或项目经理
基础 观察到的行为 客户、收入、期限、风险
随着时间的推移而变化? 很少 经常
决定 缺陷有多严重 修复队列的顺序

严重程度

大多数团队使用大约四到五个级别。这是一个常见的尺度:

级别 含义 示例
严重(S1) 系统停机、数据丢失或安全漏洞,且没有解决方法 保存发票会删除客户记录
专业(S2) 关键功能被破坏,或者只有一个困难的解决方法存在 搜索不会返回任何查询的结果
中等(S3) 某个功能部分失败,并且存在合理的解决方法 日期过滤器失败,但按日期排序有效
未成年人(S4) 稍有不便,功能完好 工具提示出现在错误的位置
琐碎(S5) 仅限化妆品 图标稍微错位

优先级

级别 含义 典型动作
P1,紧急 现在必须修复 放弃其他工作,并考虑修补程序
P2,高 必须在下一个版本之前修复 当前冲刺中的计划
P3,中 应该很快就会修复 安排在即将到来的冲刺中
P4,低 有容量时修复 保留在待办事项列表中,并时不时地进行审查

写下每个级别对您的团队意味着什么,最好为每个级别设定一个目标响应时间。 “P1 意味着有人在一小时内开始”比“P1 意味着非常重要”有用得多。

四种组合,并举例

理解这一点的最清晰方法是查看每个组合:

高优先级 低优先级
高严重性 促销期间所有客户结帐失败 导出为几乎没有人使用的文件格式时发生崩溃
严重程度低 主页上的公司名称拼写错误 一篇读者很少的旧帮助文章中的拼写错误

高严重性、高优先级

每个人的结帐都失败了,企业每时每刻都在亏损,而且没有解决办法。这是显而易见的情况:放弃一切并修复它。

高严重性,低优先级

导出为旧格式时应用程序崩溃。从技术上来说,这是一个严重的失败。但如果只有一小部分用户接触过此功能,并且现代格式运行良好,则可以等待预定的发布。

低严重性,高优先级

主页上的公司名称拼写错误。没有任何损坏,也没有数据面临风险。然而,每个访问者都会看到它,这会损害信任,如果明天要进行重大发布,那么今天就需要修复。

低严重性、低优先级

一篇很少访问的帮助文章中的一个小错字。方便的时候修一下。如果您的待办事项中充满了这些内容,请考虑将它们分批放入一项清理任务中。

一个错误,两个不同的优先级

根据上下文,相同的缺陷可能需要不同的优先级。假设发出的订单确认电子邮件带有错误的徽标。

背景 严重性 优先级
小型内部工具 未成年人 P4
公共品牌刚刚更名,本周发布公告 未成年人 P1或P2

严重性没有改变,因为对系统的影响是相同的。但商业形势确实如此。时间也能改变一切。今天是 P3 的错误可能会在主要客户上线前一周变成 P1。

提示: 上下文中的一些变化确实会影响严重性。错误的税收计算可能看起来很温和,直到您了解到它们适用于所有发票,因此在确定级别之前请检查错误的影响范围。

谁决定严重性和优先级?

  • 测试人员通常会提出严重性,因为他们已经看到了行为并了解对系统的影响。
  • 产品所有者或经理通常会在权衡客户、收入和路线图时决定优先级。
  • 开发人员添加有关原因、修复风险以及修复所需时间的信息。
  • 支持团队提供证据表明有多少客户受到影响以及影响有多严重。

这些职责的来源和团队各不相同,在小型初创公司中,一个人可能会承担所有这些职责。重要的是每个人都知道谁做出最终决定,因此分歧最终会以决定结束。

如何评估错误

当您不确定时,请解决这些问题。

对于严重程度:

  1. 它是否会丢失或损坏数据,或暴露私人信息?
  2. 它会阻止主要功能的工作吗?
  3. 有没有解决方法,普通用户可以找到吗?
  4. 有多少功能受到影响?

对于优先级:

  1. 有多少用户受到影响,哪些用户受到影响?
  2. 它会花钱吗?或者会产生法律或合规风险吗?
  3. 即将发布、演示或销售吗?
  4. 它有多明显?它会损害您的声誉吗?
  5. 它是否会妨碍其他工作,例如测试?

运行错误分类

分类是定期会议,团队在会上审查新错误并决定接下来要做什么。简单的格式效果很好:

  1. 准备。 测试人员确保每个新错误都有明确的步骤、证据和建议的严重性。
  2. 确认。检查是否可以复制且不是重复的。
  3. 决定。 就严重性达成一致,设置优先级并分配所有者。
  4. 关闭循环。拒绝、推迟或安排每个错误,并记录原因。

保持简短且频繁。在发布前的最后几天,每天进行 15 分钟的分类是很常见的。严重性和优先级也会影响您的发布决策,因此请预先商定规则,例如“发布时没有开放的 S1 或 S2 错误”,作为您的 退出标准 的一部分。

错误报告中的严重性和优先级

简短、清晰的条目可以帮助每个人做出正确的决定:

Title:    Checkout returns error 500 when a coupon is applied
Severity: S1 - blocks purchase, no workaround
Priority: P1 proposed - sale starts Friday
Build:    2.14.0, production
Reach:    All customers using a coupon (around 30% of orders)
Steps:    1. Add an item  2. Apply SAVE10  3. Click Pay
Result:   Error 500 and no order is created
Expected: Order is created with the discount applied

这些数字只是例子。在真实的报告中,使用日志中的测量数据,并解释你的推理。请参阅我们关于如何编写错误报告的指南,了解更多信息。它还有助于了解错误代码的含义,因此请将我们的 HTTP 状态代码备忘单 放在手边。

常见错误

  • 将它们视为同一字段。 如果两者始终匹配,您就会丢失有用的信息。
  • 夸大严重性以引起注意。一旦一切都变得至关重要,就没有什么是重要的了。
  • 让测试人员单独设定优先级。他们很少了解完整的业务情况。
  • 从不审查待办事项。优先级会过时,因此请定期重新检查旧错误。
  • 没有书面定义。 没有它们,人们会以不同的方式应用标签,并且最终会争论单词。
  • 忽略低严重性的堆积问题。 五十个小问题可能会让产品感觉很糟糕,即使没有一个问题单独严重。

最后的话

将两个问题分开:问题有多严重,以及必须多快修复?就每个级别的书面定义达成一致,并明确由谁决定。下一步,找出跟踪器中最古老的十个错误,并使用上述问题重新评估它们。您可能会发现一些应该移动,还有一些应该关闭。

常见问题

严重性和优先级有什么区别?

严重性是指缺陷对系统造成的损害程度。优先级是修复问题的紧急程度。一是关于技术影响,二是关于业务紧迫性。

错误可以具有低严重性和高优先级吗?

是的。主页上拼写错误的公司名称不会造成任何影响,但它非常明显,因此团队可能希望立即修复它。

bug 可以具有高严重性和低优先级吗?

是的。很少使用的遗留功能的崩溃在技术上是严重的,但由于受影响的用户很少并且有很好的替代方案,因此可以等待。

谁设定严重性和优先级?

测试人员通常会提出严重性,而产品所有者或经理通常会决定优先级。许多团队在错误分类会议上共同完成这两项工作。

哪个应该首先修复,高严重性还是高优先级?

按优先级顺序修复,因为优先级决定队列。不过,严重性是一个重要的输入,因此严重的错误通常会得到高优先级。

继续学习

与Stack Quora合作

需要测试、WordPress 或 SEO 方面的帮助?

我们帮助团队交付更好的软件并发展他们的网站。告诉我们您正在做什么,我们将建议明确的下一步。

继续阅读

更多指南 测试、人工智能和现代开发

喜欢这篇文章吗?选择一个主题并直接跳至我们最新的教程。

人工智能

人工智能幻觉解释:语言模型为何会产生幻觉以及如何减少它

人工智能幻觉解释:它们是什么,为什么语言模型产生它们,常见类型,如何通过基础和提示来减少它们,以及我们进行的简单检查。

阅读文章 →
DevOps

环境变量解释:.env 文件、秘密和配置正确完成

使用我们运行的 Python 示例解释环境变量:读取和设置它们、为什么每个值都是字符串、.env 文件、进程继承、秘密和验证。

阅读文章 →
软件开发

API 速率限制解释:算法、标头和处理 429 错误

API 速率限制通过我们运行的模拟进行了解释:令牌桶、固定窗口、滑动窗口、429 响应、速率限制标头、带回退的重试和测试限制。

阅读文章 →
测试自动化

Python 中的模拟:unittest.mock、补丁以及导致测试谎言的错误

使用unittest.mock 在Python 中进行模拟,经过测试:模拟和return_value、side_effect、修补使用名称的位置、spec 和autospec、模拟日期以及常见错误。

阅读文章 →
软件测试

代码覆盖率解释:行覆盖率与分支覆盖率以及 100% 的真正含义

用真实的coverage.py运行来解释代码覆盖率:行、分支和条件覆盖率,阅读报告,为什么100%覆盖率仍然会错过错误,以及合理的目标。

阅读文章 →
数据库与 SQL

SQL 中的 DELETE、TRUNCATE 和 DROP:差异、回滚以及何时使用它们

DELETE、TRUNCATE 和 DROP 通过经过测试的 SQL 进行了解释:各自删除什么、回滚、触发器、身份重置、速度,以及 PostgreSQL、MySQL、SQL Server 和 SQLite 有何不同。

阅读文章 →
数据库与 SQL

SQL 视图解释:创建、使用和避免陷阱(附示例)

SQL 视图通过我们运行的查询进行解释:创建视图、实时结果、隐藏列、性能、可更新和物化视图、破坏的依赖关系和最佳实践。

阅读文章 →
软件开发

TypeScript 接口与类型:真正的差异,使用编译器进行测试

TypeScript 接口与类型,使用真实编译器进行检查:两者都可以做什么,只有一个可以做什么,声明合并,扩展与交集以及要遵循的简单规则。

阅读文章 →
软件开发

Python *args 和 **kwargs 解释:灵活的函数和清晰的示例

Python *args 和 **kwargs 用我们运行的代码进行了解释:打包和解包、参数顺序、仅关键字和仅位置参数、装饰器和常见错误。

阅读文章 →
软件开发

Python Lambda 函数:语法、实际用途以及何时不使用它们

Python lambda 函数用我们运行的代码进行了解释:语法、使用键排序、映射和过滤器、闭包、后期绑定陷阱,以及何时普通 def 是更好的选择。

阅读文章 →
人工智能

什么是人工智能代理?它们是如何工作的,只需运行一个简单的代理循环

什么是人工智能代理?关于代理循环、工具、内存和护栏的简单指南,以及我们运行的一个小型 Python 循环、真正的风险以及何时简单的聊天机器人是更好的选择。

阅读文章 →
DevOps

监控与可观察性:真正的区别,包括日志、指标和跟踪

监控与可观察性解释:已知和未知的故障、日志、指标和跟踪、检查事件演练、黄金信号、OpenTelemetry 和有用的警报。

阅读文章 →
DevOps

Docker Volumes 与 Bind Mounts:以正确的方式保留容器数据

Docker 卷与绑定挂载解释:为什么容器数据消失、命名卷、绑定挂载、tmpfs、Compose 示例、备份、权限以及何时使用它们。

阅读文章 →
测试自动化

TDD 与 BDD:主要区别、以两种方式构建的一个功能以及何时使用每种方式

TDD 与 BDD 的解释是通过一种双向构建的折扣功能:使用我们运行的代码进行红绿重构、Given-When-Then 场景、工具、权衡以及何时使用每种方案。

阅读文章 →
软件测试

用户验收测试 (UAT):流程、清单和真实示例

用户验收测试解释:谁运行它、它与 QA 有何不同、七步流程、UAT 测试用例模板、清单、签核标准和常见错误。

阅读文章 →
数据库与 SQL

SQL NULL 值解释:IS NULL、COALESCE、NULLIF 和要避免的陷阱

通过我们运行的查询解释了 SQL NULL 值:三值逻辑、IS NULL、COALESCE、NULLIF,聚合、连接和排序如何处理 NULL,以及它悄悄引起的错误。

阅读文章 →
数据库与 SQL

SQL CASE WHEN 语句:语法、实例和常见错误

SQL CASE WHEN 解释了我们运行的查询:简单和搜索表单、条件顺序、SUM 透视、COUNT 技巧、自定义排序、更新和要避免的 NULL 陷阱。

阅读文章 →
软件开发

什么是智威汤逊?通过工作示例解释 JSON Web 令牌

什么是智威汤逊? JSON Web Tokens 解释:这三个部分,在我们运行的代码中构建和篡改的令牌,JWT 与会话,存储,刷新令牌和安全错误。

阅读文章 →
软件开发

JavaScript 事件循环解释:调用堆栈、微任务和计时器以及示例

JavaScript 事件循环用我们运行的代码进行了解释:调用堆栈、任务和微任务队列、为什么 setTimeout 0 不是立即执行、阻塞、饥饿和面试测验。

阅读文章 →
软件开发

Python 生成器和 Yield 解释:通过真实示例节省内存

Python 生成器和yield 用我们运行的代码进行了解释:它们如何暂停和恢复、测量内存节省、管道、无限序列、yield from、发送和常见陷阱。

阅读文章 →
人工智能

什么是嵌入?向量和余弦相似度简单解释

什么是嵌入?关于向量、余弦相似度和语义搜索的简单语言指南,其中包含我们运行的一个小示例、常见用途、选择模型和已知限制。

阅读文章 →
DevOps

蓝绿部署与金丝雀部署:差异、权衡以及如何选择

蓝绿部署与金丝雀部署解释:每种部署的工作原理、成本、风险和回滚、我们测试的稳定用户分桶、数据库迁移、滚动更新以及如何选择。

阅读文章 →
测试自动化

不稳定的测试:造成这些问题的原因以及如何彻底解决它们

我们运行的演示解释了不稳定的测试:主要原因、如何确认和诊断、正确的时间修复、共享状态和日期以及隔离过程。

阅读文章 →
软件测试

负载测试与压力测试:差异、指标和 k6 示例

负载测试与压力测试的解释:各自证明什么、峰值和浸泡测试、重要的指标、为什么平均值会误导、k6 个示例以及如何计划测试。

阅读文章 →
软件测试

测试用例与测试场景:主要区别、示例以及何时使用它们

测试用例与测试场景的解释:清晰的定义、并排的表格、从场景到案例的密码重置功能、模板以及何时使用每个功能。

阅读文章 →
数据库与 SQL

SQL 查询优化:读取执行计划并修复慢速查询(带计时)

对一百万行进行 SQL 查询优化测试:读取执行计划、添加正确的索引、修复不可控制的过滤器、使用复合索引和键集分页。

阅读文章 →
数据库与 SQL

SQL UNION 与 UNION ALL:差异、示例和性能测试

SQL UNION 与 UNION ALL 通过我们运行的查询进行了解释:重复、都遵循的规则、真实的数据错误、测量的性能、INTERSECT 和 EXCEPT 以及何时使用它们。

阅读文章 →
软件开发

JavaScript Fetch API 教程:GET、POST、错误处理和超时

针对本地服务器测试的 JavaScript Fetch API 教程:GET 和 POST、为什么不抛出 404、可重用的帮助程序、查询字符串、超时、CORS 和常见错误。

阅读文章 →
软件开发

Python 文件处理:读取、写入、CSV、JSON 和 pathlib 以及示例

使用我们运行的代码解释了 Python 文件处理:打开模式、使用、读取大文件、CSV、JSON、pathlib、二进制文件、安全写入、错误处理和常见错误。

阅读文章 →
软件开发

Python 类和对象:带有实际示例的 OOP 教程

用我们运行的代码解释 Python 类和对象:__init__、方法、类与实例属性、继承、属性、dunder 方法、数据类和常见错误。

阅读文章 →
人工智能

什么是大语言模型?法学硕士如何运作,在没有炒作的情况下进行解释

什么是大语言模型?法学硕士用简单的语言解释:标记、嵌入、注意力、训练、温度和上下文窗口、一个微小的下一个单词演示和真正的限制。

阅读文章 →
DevOps

适合初学者的 Linux 命令:带有示例的基本终端指南

适合初学者的 Linux 命令,按任务分组:导航、文件、查看日志、grep、管道、权限、进程和档案,并附有实用的日志分析示例。

阅读文章 →
测试自动化

Selenium 与 Playwright:主要区别、代码比较以及选择

Selenium 与 Playwright 比较:架构、等待、浏览器和语言支持、调试、两种工具中的相同测试、迁移建议以及如何选择。

阅读文章 →
软件测试

等价划分:通过实例解释测试设计技术

等效分区解释:如何找到有效和无效分区,年龄、密码和优惠券的工作示例,我们运行的测试,以及为什么将其与边界配对。

阅读文章 →
软件测试

软件测试中的严重性与优先级:差异、矩阵和实例

软件测试中的严重性与优先级解释:清晰的定义、带有示例的四向矩阵、级别尺度、谁设置每个级别以及如何运行错误分类。

阅读文章 →
数据库与 SQL

SQL 子查询教程:类型、相关子查询和 EXISTS 以及示例

SQL 子查询教程,其中包含我们运行的查询:标量、IN、FROM 和 SELECT 子查询、相关子查询、EXISTS、NOT IN NULL 陷阱以及子查询与 JOIN 与 CTE。

阅读文章 →
数据库与 SQL

SQL 事务和 ACID 解释:COMMIT、ROLLBACK 和隔离级别

SQL 事务和 ACID 通过我们运行的银行转账进行了解释:COMMIT、ROLLBACK、保存点、锁、隔离级别、脏读、死锁和最佳实践。

阅读文章 →
软件开发

Git merge 与 rebase 的区别:示例及如何选择

用真实的 log 输出、对比表、rebase 黄金法则和安全的团队工作流,讲清 Git merge 与 rebase 的区别。

阅读文章 →
软件开发

Python 列表推导式:语法、示例与何时避免使用

Python 列表推导式详解:语法、过滤、if-else、嵌套循环、实测耗时,以及何时普通 for 循环更合适。

阅读文章 →
数据库与 SQL

SQL JOIN 详解:附示例(INNER、LEFT、RIGHT、FULL)

通过示例表和查询,一步步讲解 SQL JOIN:INNER、LEFT、RIGHT、FULL、CROSS 和 SELF,并介绍常见错误与性能技巧。

阅读文章 →