前言
测试工作中,发现Bug, 报告Bug是工作日常,也免不了和开发因为某个问题是否Bug产生争论。
虽然在Bug认定上,不同的人因视角不同,产生分歧也正常。
但在对一个产品的测试过程中,确实也不能把所有发现和遇到的问题都看作Bug,Bug
其实是一个比较笼统的叫法,有的公司还会把 Bug report
称为 故障单
或者 问题单
,其实严格说来也不准确。 因为从概念上,Bug 还有不少和它作用和含义相近但实际又有区别的近亲们,本文我们就来梳理澄清一下 Bug 和它的这些近亲们的不同概念,以及和我们工作的关系。
故障(Fault)
故障
在日常工作中,常常被等同于 Bug,但严格来说,故障指的是软件代码或设计中的静态缺陷,比如不正确的步骤、处理过程或是数据定义。
也就是说,它更多是软件的 “内在” 问题,通常是开发者的人为错误在软件中的体现。
因为它更多是静态的,所以故障的发现,通常是在代码审查或静态分析时暴露。
案例
比如下面这段 java 代码,边界值处理时,i>=0
写成了 i>0
, 会导致遍历时,第一个元素的遗漏。这就属于一个故障。
for (int i = arr.length - 1; i > 0; i--) {
if (arr[i] == target) return i;
}
又或者,对于用户年龄的计算,未考虑闰年2月29日的情况,会导致结果计算错误,这也属于故障。
错误(Error)
错误
是指在软件开发过程中,由开发者或其他参与者(如需求分析师、设计师)所犯的人为失误、判断失误或决策偏差。错误通常是后续其他问题的根源,它的发生,主要是人为因素导致的,如需求理解偏差、逻辑失误或是代码笔误造成的。
案例
虽然错误是“人为”的,但发生错误的类型,通常还是可以总结为有限的几种,对于测试人员早期参与来说,也能更好帮助产品识别风险。比如:
- 逻辑错误: 开发人员在编写代码时,算法或业务逻辑的实现与预期不符。比如算法公式的错误应用。
- 语法错误: 代码不符合编程语言的语法规则。虽然目前现代IDE都可以捕获大部分语法错误,但有时一些运行时才出现的语法或配置错误还是可能发生。
- 需求理解错误: 对需求的理解与真实需