- 严重性衡量错误对系统的影响。 优先级衡量修复问题的紧急程度。
- 测试人员通常会提出严重性,而产品负责人通常会决定优先级。
- 它们是独立的,因此拼写错误可能很紧急,而崩溃可能会等待。
- 优先级随业务环境而变化,而严重性往往保持稳定。
主页上的公司名称拼写错误以及很少使用的导出功能崩溃:您首先修复哪个?类似这样的争论就是测试团队区分严重性与优先级的原因。一是描述技术损坏,二是描述业务紧急程度。
如果没有这种区别,每个错误都会被标记为“严重”,这些标签就失去了意义,开发人员也不再信任它们。本指南为您提供了清晰的定义和示例,以及做出这些决策的简单流程。这些示例是说明性的,并且具体的规模因团队和工具而异。
简短的回答
严重性答案:此错误对产品的影响有多严重?崩溃或数据丢失很严重,而外观故障则不然。
优先答案:我们应该多久修复它?这取决于受影响的客户、截止日期、收入、法律风险和品牌声誉。
想想医院。严重程度是指患者病情的严重程度。优先级是患者接受治疗的顺序,这还取决于其他因素,例如谁可以安全等待以及哪些资源是免费的。
严重性与优先级并列
| 方面 | 严重性 | 优先级 |
|---|---|---|
| 问题 | 影响有多严重? | 多久必须修好? |
| 焦点 | 对系统的技术影响 | 业务需求和调度 |
| 通常设置为 | 测试员或QA工程师 | 产品负责人或项目经理 |
| 基础 | 观察到的行为 | 客户、收入、期限、风险 |
| 随着时间的推移而变化? | 很少 | 经常 |
| 决定 | 缺陷有多严重 | 修复队列的顺序 |
严重程度
大多数团队使用大约四到五个级别。这是一个常见的尺度:
| 级别 | 含义 | 示例 |
|---|---|---|
| 严重(S1) | 系统停机、数据丢失或安全漏洞,且没有解决方法 | 保存发票会删除客户记录 |
| 专业(S2) | 关键功能被破坏,或者只有一个困难的解决方法存在 | 搜索不会返回任何查询的结果 |
| 中等(S3) | 某个功能部分失败,并且存在合理的解决方法 | 日期过滤器失败,但按日期排序有效 |
| 未成年人(S4) | 稍有不便,功能完好 | 工具提示出现在错误的位置 |
| 琐碎(S5) | 仅限化妆品 | 图标稍微错位 |
优先级
| 级别 | 含义 | 典型动作 |
|---|---|---|
| P1,紧急 | 现在必须修复 | 放弃其他工作,并考虑修补程序 |
| P2,高 | 必须在下一个版本之前修复 | 当前冲刺中的计划 |
| P3,中 | 应该很快就会修复 | 安排在即将到来的冲刺中 |
| P4,低 | 有容量时修复 | 保留在待办事项列表中,并时不时地进行审查 |
写下每个级别对您的团队意味着什么,最好为每个级别设定一个目标响应时间。 “P1 意味着有人在一小时内开始”比“P1 意味着非常重要”有用得多。
四种组合,并举例
理解这一点的最清晰方法是查看每个组合:
| 高优先级 | 低优先级 | |
|---|---|---|
| 高严重性 | 促销期间所有客户结帐失败 | 导出为几乎没有人使用的文件格式时发生崩溃 |
| 严重程度低 | 主页上的公司名称拼写错误 | 一篇读者很少的旧帮助文章中的拼写错误 |
高严重性、高优先级
每个人的结帐都失败了,企业每时每刻都在亏损,而且没有解决办法。这是显而易见的情况:放弃一切并修复它。
高严重性,低优先级
导出为旧格式时应用程序崩溃。从技术上来说,这是一个严重的失败。但如果只有一小部分用户接触过此功能,并且现代格式运行良好,则可以等待预定的发布。
低严重性,高优先级
主页上的公司名称拼写错误。没有任何损坏,也没有数据面临风险。然而,每个访问者都会看到它,这会损害信任,如果明天要进行重大发布,那么今天就需要修复。
低严重性、低优先级
一篇很少访问的帮助文章中的一个小错字。方便的时候修一下。如果您的待办事项中充满了这些内容,请考虑将它们分批放入一项清理任务中。
一个错误,两个不同的优先级
根据上下文,相同的缺陷可能需要不同的优先级。假设发出的订单确认电子邮件带有错误的徽标。
| 背景 | 严重性 | 优先级 |
|---|---|---|
| 小型内部工具 | 未成年人 | P4 |
| 公共品牌刚刚更名,本周发布公告 | 未成年人 | P1或P2 |
严重性没有改变,因为对系统的影响是相同的。但商业形势确实如此。时间也能改变一切。今天是 P3 的错误可能会在主要客户上线前一周变成 P1。
提示: 上下文中的一些变化确实会影响严重性。错误的税收计算可能看起来很温和,直到您了解到它们适用于所有发票,因此在确定级别之前请检查错误的影响范围。
谁决定严重性和优先级?
- 测试人员通常会提出严重性,因为他们已经看到了行为并了解对系统的影响。
- 产品所有者或经理通常会在权衡客户、收入和路线图时决定优先级。
- 开发人员添加有关原因、修复风险以及修复所需时间的信息。
- 支持团队提供证据表明有多少客户受到影响以及影响有多严重。
这些职责的来源和团队各不相同,在小型初创公司中,一个人可能会承担所有这些职责。重要的是每个人都知道谁做出最终决定,因此分歧最终会以决定结束。
如何评估错误
当您不确定时,请解决这些问题。
对于严重程度:
- 它是否会丢失或损坏数据,或暴露私人信息?
- 它会阻止主要功能的工作吗?
- 有没有解决方法,普通用户可以找到吗?
- 有多少功能受到影响?
对于优先级:
- 有多少用户受到影响,哪些用户受到影响?
- 它会花钱吗?或者会产生法律或合规风险吗?
- 即将发布、演示或销售吗?
- 它有多明显?它会损害您的声誉吗?
- 它是否会妨碍其他工作,例如测试?
运行错误分类
分类是定期会议,团队在会上审查新错误并决定接下来要做什么。简单的格式效果很好:
- 准备。 测试人员确保每个新错误都有明确的步骤、证据和建议的严重性。
- 确认。检查是否可以复制且不是重复的。
- 决定。 就严重性达成一致,设置优先级并分配所有者。
- 关闭循环。拒绝、推迟或安排每个错误,并记录原因。
保持简短且频繁。在发布前的最后几天,每天进行 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 可以具有高严重性和低优先级吗?
是的。很少使用的遗留功能的崩溃在技术上是严重的,但由于受影响的用户很少并且有很好的替代方案,因此可以等待。
谁设定严重性和优先级?
测试人员通常会提出严重性,而产品所有者或经理通常会决定优先级。许多团队在错误分类会议上共同完成这两项工作。
哪个应该首先修复,高严重性还是高优先级?
按优先级顺序修复,因为优先级决定队列。不过,严重性是一个重要的输入,因此严重的错误通常会得到高优先级。
继续学习
需要测试、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%覆盖率仍然会错过错误,以及合理的目标。
阅读文章 →数据库与 SQLSQL 中的 DELETE、TRUNCATE 和 DROP:差异、回滚以及何时使用它们
DELETE、TRUNCATE 和 DROP 通过经过测试的 SQL 进行了解释:各自删除什么、回滚、触发器、身份重置、速度,以及 PostgreSQL、MySQL、SQL Server 和 SQLite 有何不同。
阅读文章 →数据库与 SQLSQL 视图解释:创建、使用和避免陷阱(附示例)
SQL 视图通过我们运行的查询进行解释:创建视图、实时结果、隐藏列、性能、可更新和物化视图、破坏的依赖关系和最佳实践。
阅读文章 →软件开发TypeScript 接口与类型:真正的差异,使用编译器进行测试
TypeScript 接口与类型,使用真实编译器进行检查:两者都可以做什么,只有一个可以做什么,声明合并,扩展与交集以及要遵循的简单规则。
阅读文章 →软件开发Python *args 和 **kwargs 解释:灵活的函数和清晰的示例
Python *args 和 **kwargs 用我们运行的代码进行了解释:打包和解包、参数顺序、仅关键字和仅位置参数、装饰器和常见错误。
阅读文章 →软件开发Python Lambda 函数:语法、实际用途以及何时不使用它们
Python lambda 函数用我们运行的代码进行了解释:语法、使用键排序、映射和过滤器、闭包、后期绑定陷阱,以及何时普通 def 是更好的选择。
阅读文章 →人工智能什么是人工智能代理?它们是如何工作的,只需运行一个简单的代理循环
什么是人工智能代理?关于代理循环、工具、内存和护栏的简单指南,以及我们运行的一个小型 Python 循环、真正的风险以及何时简单的聊天机器人是更好的选择。
阅读文章 →DevOps监控与可观察性:真正的区别,包括日志、指标和跟踪
监控与可观察性解释:已知和未知的故障、日志、指标和跟踪、检查事件演练、黄金信号、OpenTelemetry 和有用的警报。
阅读文章 →DevOpsDocker Volumes 与 Bind Mounts:以正确的方式保留容器数据
Docker 卷与绑定挂载解释:为什么容器数据消失、命名卷、绑定挂载、tmpfs、Compose 示例、备份、权限以及何时使用它们。
阅读文章 →测试自动化TDD 与 BDD:主要区别、以两种方式构建的一个功能以及何时使用每种方式
TDD 与 BDD 的解释是通过一种双向构建的折扣功能:使用我们运行的代码进行红绿重构、Given-When-Then 场景、工具、权衡以及何时使用每种方案。
阅读文章 →软件测试用户验收测试 (UAT):流程、清单和真实示例
用户验收测试解释:谁运行它、它与 QA 有何不同、七步流程、UAT 测试用例模板、清单、签核标准和常见错误。
阅读文章 →数据库与 SQLSQL NULL 值解释:IS NULL、COALESCE、NULLIF 和要避免的陷阱
通过我们运行的查询解释了 SQL NULL 值:三值逻辑、IS NULL、COALESCE、NULLIF,聚合、连接和排序如何处理 NULL,以及它悄悄引起的错误。
阅读文章 →数据库与 SQLSQL 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 个示例以及如何计划测试。
阅读文章 →软件测试测试用例与测试场景:主要区别、示例以及何时使用它们
测试用例与测试场景的解释:清晰的定义、并排的表格、从场景到案例的密码重置功能、模板以及何时使用每个功能。
阅读文章 →数据库与 SQLSQL 查询优化:读取执行计划并修复慢速查询(带计时)
对一百万行进行 SQL 查询优化测试:读取执行计划、添加正确的索引、修复不可控制的过滤器、使用复合索引和键集分页。
阅读文章 →数据库与 SQLSQL 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 比较:架构、等待、浏览器和语言支持、调试、两种工具中的相同测试、迁移建议以及如何选择。
阅读文章 →软件测试等价划分:通过实例解释测试设计技术
等效分区解释:如何找到有效和无效分区,年龄、密码和优惠券的工作示例,我们运行的测试,以及为什么将其与边界配对。
阅读文章 →软件测试软件测试中的严重性与优先级:差异、矩阵和实例
软件测试中的严重性与优先级解释:清晰的定义、带有示例的四向矩阵、级别尺度、谁设置每个级别以及如何运行错误分类。
阅读文章 →数据库与 SQLSQL 子查询教程:类型、相关子查询和 EXISTS 以及示例
SQL 子查询教程,其中包含我们运行的查询:标量、IN、FROM 和 SELECT 子查询、相关子查询、EXISTS、NOT IN NULL 陷阱以及子查询与 JOIN 与 CTE。
阅读文章 →数据库与 SQLSQL 事务和 ACID 解释:COMMIT、ROLLBACK 和隔离级别
SQL 事务和 ACID 通过我们运行的银行转账进行了解释:COMMIT、ROLLBACK、保存点、锁、隔离级别、脏读、死锁和最佳实践。
阅读文章 →软件开发Git merge 与 rebase 的区别:示例及如何选择
用真实的 log 输出、对比表、rebase 黄金法则和安全的团队工作流,讲清 Git merge 与 rebase 的区别。
阅读文章 →软件开发Python 列表推导式:语法、示例与何时避免使用
Python 列表推导式详解:语法、过滤、if-else、嵌套循环、实测耗时,以及何时普通 for 循环更合适。
阅读文章 →数据库与 SQLSQL JOIN 详解:附示例(INNER、LEFT、RIGHT、FULL)
通过示例表和查询,一步步讲解 SQL JOIN:INNER、LEFT、RIGHT、FULL、CROSS 和 SELF,并介绍常见错误与性能技巧。
阅读文章 →