blog/docs/quality/bug-flow.md

8.1 KiB
Raw Permalink Blame History

title date tags categories author sticky
缺陷的生命周期 2020-06-29 22:06:23
缺陷的生命周期
质量体系
Anges黎梦 1

什么是软件缺陷?

软件缺陷Defect常常又被叫做Bug。

所谓软件缺陷,即为计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。

缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。

IEEE729-1983对缺陷有一个标准的定义

  • 从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;

  • 从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。

缺陷属性

  1. 缺陷标识(Identifier) 缺陷标识是标记某个缺陷的一组符号。每个缺陷必须有一个唯一的标识。

  2. 缺陷类型 (Type) 缺陷类型是根据缺陷的自然属性划分的缺陷种类。

  3. 缺陷严重程度 (Severity) :缺陷严重程度是指因缺陷引起的故障对软件产品的影响程度。

  4. 缺陷优先级(Priority) 缺陷的优先级指缺陷必须被修复的紧急程度。

  5. 缺陷状态(Status) :缺陷状态指缺陷通过一个跟踪修复过程的进展情况。

  6. 缺陷起源(Origin) :缺陷来源指缺陷引起的故障或事件第一次被检测到的阶段。

  7. 缺陷来源(Source) 缺陷来源指引起缺陷的起因。

  8. 缺陷根源(Root Cause) 缺陷根源指发生错误的根本因素。

缺陷类型Type

F- Function :影响了重要的特性、用户界面、产品接口、硬件结构接口和全局数据结构。并且设计文档需要正式的变更。如逻辑,指针,循环,递归,功能等缺陷。

A- Assignment 需要修改少量代码,如初始化或控制块。如声明、重复命名,范围、限定等缺陷。

I- Interface 与其他组件、模块或设备驱动程序、调用参数、控制块或参数列表相互影响的缺陷。

C- Checking 提示的错误信息,不适当的数据验证等缺陷。

B Build/package/merge :由于配置库、变更管理或版本控制引起的错误。

D- Documentation 影响发布和维护,包括注释。

G- Algorithm :算法错误。

U-User Interface人机交互特性屏幕格式确认用户输入功能有效性页面排版等方面的缺陷。

P-Performance不满足系统可测量的属性值执行时间事务处理速率等。

N-Norms不符合各种标准的要求如编码标准、设计符号等。

缺陷严重程度Severity

软件测试错误严重程度

  1. Critical不能执行正常工作功能或重要功能。或者危及人身安全。

  2. Major严重地影响系统要求或基本功能的实现且没有办法更正。重新安装或重新启动该软件不属于更正办法

  3. Minor严重地影响系统要求或基本功能的实现但存在合理的更正办法。重新安装或重新启动该软件不属于更正办法

  4. Cosmetic使操作者不方便或遇到麻烦但它不影响执行工作功能或重要功能。

  5. Other其它错误。

同行评审错误严重程度

  1. Major主要的较大的缺陷

  2. Minor次要的小的缺陷

缺陷优先级Priority

  1. Resolve Immediately缺陷必须被立即解决。

  2. Normal Queue缺陷需要正常排队等待修复或列入软件发布清单。

  3. Not Urgent缺陷可以在方便时被纠正。

缺陷状态Status

  1. Submitted: 已提交的缺陷

  2. Open :确认“提交的缺陷”,等待处理

  3. Rejected: 拒绝“提交的缺陷”,不需要修复或不是缺陷

  4. Resolved :缺陷被修复

  5. Closed :确认被修复的缺陷,将其关闭

这里根据不同公司需求的不同,其实还有几个细节状态:

  1. Verified :已验证修复的缺陷,等待上线。

  2. Hang : 挂起,暂时不予处理的缺陷

缺陷起源Origin

  1. Requirement在需求阶段发现的缺陷

  2. Architecture在构架阶段发现的缺陷

  3. Design在设计阶段发现的缺陷

  4. Code在编码阶段发现的缺陷

  5. Test在测试阶段发现的缺陷

缺陷来源Source

  1. Requirement 由于需求的问题引起的缺陷

  2. Architecture 由于构架的问题引起的缺陷

  3. Design 由于设计的问题引起的缺陷

  4. Code 由于编码的问题引起的缺陷

  5. Test 由于测试的问题引起的缺陷

  6. Integration 由于集成的问题引起的缺陷

生命周期

在很多公司的流程里,其实是这样的一个流程。

缺陷提交 -> 确认缺陷 -> 已拒绝 -> 关闭或重新打开

缺陷提交 -> 确认缺陷 -> 缺陷修复 -> 缺陷已验证 -> 关闭(缺陷已上线)

而这个流程,通常被称为缺陷的生命周期。

提交(打开)缺陷

  在提交一个缺陷的缺陷首先尽量描述这个缺陷的属性。Bug重现环境bug类型bug等级bug的优先级以及详细的重现步骤结果与期望等。   当然,我们在提交一个问题之前首先应该保证,这个缺陷是没有被提过的,以免造成重复缺陷单。   如果是回归不通过的缺陷,其状态又会变为打开状态。

分配(转交)缺陷

  这一步不是必须的,跟项目模式有关,有些公司测试部门与开发部门独立,那么测试人员就不确定自己测试的模块是由哪位开发人员负责的,在这种情况下,测试人员统一把问题指派给项目组长或经理,由项目组长(或经理)对问题进行确认后再次分配给相应的开发人员。   有些测试人员是穿插到不同研发团队中的,所以对不同的开人发员负责的开发模块非常清楚,这个时候就可以将问题直接指派给相应的开发人员。   也有一种情况本来此问题应该由A开发人员负责但由于A开发人员的调离或辞职些问题为转交给其它人员处理。“分配”强调是上级对下级“转交”强调的是平级之间。

确认缺陷

  当开发人员接到一个缺陷时,首先是对其进行分析与重现,如果对其进行分析发现不是缺陷(可能由于测试人员不了解需求)或无法对此问题进行重现,那么就需要将此问题反回给测试人员,并注明原因。如果确认为缺陷则需要对其进行处理。

挂起

  在处理问题之后,还需要进行一次判断,是否需要推迟处理,有些需求已经确认了是问题,由于其可能在极端情况下才会出现,或需要对系统架构进行改动,或其优先级非常低,所以暂时不需要对此问题进行处理(或到下个版本进再进行修复)。

修复缺陷

  开发人员在确认完一个问题需要处理时那么就对其进行处理工作。例如redmine 是支持处理人时时更新问题处理进度的,如 已处理30% 已处理80% 等,当然,对于短时间内可以修复的问题就没必要时时的去更新处理进度。)

回归缺陷

  回归缺陷对于测试人员来说是非常重要的工作,其有三个入口两个出口。

  确认非缺陷问题:对于提交的一个缺陷,开人员处理为非问题或无法重现,然后直接转交给测试人员回归。测试人员再次确认,如果真如开发人员所说,则将问题关闭。如果非开发人员所说,是由于问题描述模糊或其它原因喂重现问题,则再次注明原因转给开发人员。

  确认修复问题:对开发人员修复的问题再次进行确认,确认能过,则关闭问题。确认不通过,将问题再次打开并转给开发人员。

  确认固定问题:有计划的对固定问题进行确认,有些固定问题随着时间的推移,版本的更新或已经不存在了,对这类问题应该及时关闭。有些固定问题依然存在且变得紧急,对于这类问题应该及时打开交给开发人员处理。

关闭缺陷

  对于已经修复的缺陷进行关闭,这也是一个缺陷的最后一个状态。