BUG分析
软件缺陷(bug)",即为计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。一般来说,软件缺陷的属性包括缺陷标识、缺陷类型、缺陷严重程度、缺陷优先级、缺陷来源、缺陷原因等。
种类型:
(1)设计不合理;
(2)功能、特性没有实现或部分实现;
(3)运行出错,包括运行中断、系统崩溃、界面混乱等;
(4)与需求不一致,在执行TestCase时则为实际结果和预期结果不一致;
(5)用户不能接受的其他问题,如存取时间过长、界面不美观;
(6)软件实现了需求未提到的功能。
软件缺陷有四种级别,分别为:致命的(Fatal),严重的(Critical),一般的(Major),微小的(Minor)。
常用的软件缺陷的优先级表示方法可分为:立即解决P1、高优先级P2、正常排队P3、低优先级P4。立即解决是指缺陷导致系统几乎不能使用或者测试不能继续,需立即修复;高优先级是指缺陷严重影响测试,需要优先考虑;正常排队是指缺陷需要正常排队等待修复;而低优先级是指缺陷可以在开发人员有时间的时候再被纠正。
三种常用的技术工具供大家参考。
(1)20/80原则
80%的有效工作往往是在20%的时间内完成的,而20%的工作是在80%的时间内完成的:哪些软件缺陷是最重要的,哪些软件缺陷是最关键的。
(2)ABC法则
手边的软件缺陷并不一定就具有第一优先处理的重要性。只有正确的判断,才可将测试活动效率增加数倍。
(3)四象限原则,把软件缺陷进行分类
四个象限,然后只需记住四个字就行,那就是"轻重缓急"。"轻",指的是相对重要但不紧急的软件缺陷;"重",是指最重要也是最紧急的软件缺陷;"缓",指的是不重要也不紧急的软件缺陷;"急",则是指不是最重要但却最为紧急的软件缺陷。理清这种关系之后,就算同时测试许多不同类型的软件缺陷,也会很快清楚哪些软件缺陷是必须马上完成;
软件缺陷的三种基本状态:
(1)激活状态(Active或Open)。
(2)已修正状态(Fixed或Resolved)。
(3)关闭或非激活状态(Close或Inactive)。
三、软件缺陷分析产生原因及分类
软件缺陷分析产生原因主要有三方面:技术问题,团队合作,软件本身。
从测试观点我们将软件缺陷分为五类,分别为:功能缺陷,系统缺陷,加工缺陷,数据缺陷,代码缺陷。
四、软件测试心理学问题
(1)程序测试的过程具有破坏性。
(2)程序员应避免测试自己的程序。
(3)程序设计组织不应测试自己的程序。
bug预防策略
发现bug,找出bug的根源,然后寻找一个方法来预防类似的bug在将来出现
1) Bug发现和初步分析
QC工程师的一个重要职责就是试图发现bug的根本原因。QC小组在检验产品质量时,不应该将产品看作一个黑盒,而应该像开发人员那样了解产品的内在,包括深入源代码,理解产品的设计和实现。这些能力都是QC小组开始bug分析的基本要求。
(2) Bug修订和进一步分析
一如既往,发现一个bug之后,开发人员应该负责处理它。但是,如果bug的发现过程包含了bug根本原因的初步分析,那么关于如何解决这个bug,开发人员可能拥有了更多的信息。虽然这不是QC工程师bug初步分析的目的,但是它可能为开发人员提供了更多的观点。除了修正缺陷以及记录实现的具体步骤,开发人员还应该对bug进行进一步的分析。这次分析应该着眼于导致bug产生的开发情景。
(3) bug预防分析
分析的最后一步就是寻找一个预防类似错误的方法。这一方法不仅涉及到开发、QC工程师,还涉及到不直接负责代码编写的资深开发人员。
这一阶段的成果是一些有用的实践经验,开发人员可以通过这些实践预防bug而不是修正bug。
Bug预防分析是整个bug分析过程的核心。这一阶段总结出的实践可以在更广泛的范围内预防潜在的缺陷。
类似bug产生的几率却非常高。所以,尽管这一类bug是随机的,但仍然可以被预见并防止发生。
(4) 发布经验
分析得出的实践经验应该被记录并发布,这样其他的开发人员就可以通过学习这些经验避免类似的错误。一个发布经验最好的办法就是知识库。
测试缺陷分析务实篇
陷泄露率,就是有多少本阶段引入的缺陷没有在本阶段发现而是被泄露到后阶段环节才被发现。其计算公式为:缺陷泄漏率=(下游发现的本阶段的缺陷数/本阶段注入的缺陷总数)*100%。显然,它等于[1-缺陷移除率]。它反映的是本阶段质量控制措施落实的成效。
下面是一个分析例子:
以找出我们产品/项目的高危模块来。这些模块导致了我们产品的主要缺陷。主要用到的分析手段是数据透视表和柏拉图。让我们看看下面的例子:
简单的OA系统,它只有5个子系统。我们把这些子系统各有多少缺陷列出来,找到了改善质量的关键模块是后台交易模块。
这是一个较为复杂的MIS系统,有近20个功能块。这个时候,可以利用柏拉图识别出占80%问题的那少数模块,针对其采取强于其它产品组成部分的质量控制措施。
需要指出的是:采用缺陷分布只是分析的第一步。它只不过提供了你分析影响产品质量的那些重点模块,其信息不足以给出更深层次的原因。需要针对这些高危模块进行进一步的分析,识别缺陷的产生根源。
下面是一个如何运用测试分布模型进行质量预测的例子:--需要开发和测试高度一致
如果需求阶段发现了10个缺陷,就可以预计到设计阶段我大概要清除70个缺陷,依次可以估计到后阶段各个环节的缺陷数,作为我们该阶段工作的交付准则。并且,可以预测到产品发布后的使用表现会出现大约2个故障泄露到用户手中。
个项目的系统测试阶段发现的故障为例进行过程有效性回溯分析:
导致在集成测试过程中未能充分发现这些缺陷的原因主要有:
1、测试环境不具备,导致部分测试项必须到系统测试阶段才具备测试条件;
2、测试设计中某些测试项的缺失,需要加强测试设计的评审工作;
3、回归测试过程中,开发部只是对测试故障进行验证,而对bug fix波及的范围缺乏分析和验证;
对这些分析结论,我们就可以制定针对性的整改措施。如:
从系统测试故障来看,有较多故障是由接口原因造成的,细分有以下几种原因:
1、跨项目间的接口,接口设计文档的更改没有建立互相通知的机制,导致接口问题到系统测试时候才暴露出来;
2、部门内部跨子系统的接口,由于本项目设计文档按功能规划编写的,而不是按照产品组件,一般由主要承接功能工作的组编写该文档,接口内容可能不为其他开发组理解并熟悉,导致因接口问题而出错;
3、系统设计基线化后,更改系统接口,没有走严格的变更流程,进行波及分析,导致该接口变更只在某个子系统中被修改,而使错误遗漏下来;
那么我们可以针对性的制定改进建议:
1、对接口文档的评审一定要识别受影响的相关干系人,使他们了解并参与接口设计的把关;
2、对基线化的接口设计文档的变更一定要提交变更单给CCB决策,并做好充分的波及影响分析,以便同步修改所有关联的下游代码;
3、概要设计文档按子系统规划,详细设计文档按模块规划,通过相关组参加评审协调接口设计;
缺陷趋势就是将每月新生成的缺陷数、每月被解决的缺陷数和每月遗留的缺陷数标成一个趋势图表。一般在项目的开始阶段发现缺陷数曲线会呈上升趋势,到项目中后期被修复缺陷数曲线会趋于上升;而发现缺陷数曲线应总体趋于下降;同时处于OPEN状态的缺陷也应该总体呈下降趋势,到项目最后,三条曲线都趋向于零。如:
项目经理会持续观察这张图表,确保项目健康发展,同时通过分析预测项目测试缺陷趋于零的时间。在一定的历史经验的基础上分析使用这一图表会得到很多有价值的信息,比如说,可分析开发和测试在人力资源的配比上是否恰当,可以分析出某个严重的缺陷所造成的项目质量的波动。对于异常的波动,如本来应该越测试越收敛的,却到了某个点,发现的故障数反而呈上升趋势,那么,这些点往往有一些特殊事件的发生。如:
图1:缺陷分析发展趋势图
3.2 缺陷分布状况分析
3.2.1 缺陷严重程度分布
缺陷严重程度度量有助于识别不同严重程度缺陷在所有缺陷中的比重,有助于开发测试人员资源的计划和分配。
这里给出一个常用的缺陷严重程度分析图,x轴代表时间,y轴代表各严重级别的缺陷数量。
图2:缺陷严重程度分布图
通过缺陷严重程度图表,分析各严重程度缺陷发现趋势,判断产品质量是否趋于稳定。如果高严重程度的缺陷大量增加通常意味着产品质量出现问题。
3.2.2 缺陷模块分布
按照缺陷对应的产品组成部分来汇总缺陷数据,利用这样的分布,可以找出我们产品高危模块,针对高危模块,调整测试策略。
3.2.3 ODC(正交缺陷分析)
正交缺陷分类法(Orthogonal Defect Classification,ODC)介绍了一种不同于大家常用的非常有效的软件缺陷分类及分析方法,它定义了八个正交的缺陷属性用于对缺陷的分类。所谓正交性是指缺陷属性之间不存在关联性,各自独立,没有重叠的冗余信息。
图3:缺陷注入-发现矩阵
如上图例子,需求阶段一共注入了34个缺陷,需求评审时只发现了4个,设计过程中发现了15个,编码和单元测试阶段发现了12个,系统测试阶段发现3个。这样,需求阶段的缺陷移除率 4/34*100%=11.76%。这个结果说明,我们需要重新审视需求评审,加大需求评审力度。另外,编码阶段的缺陷大部分依赖于系统测试发现,很显然,项目开发过程中的单元测试和集成测试活动开展不够深入。我们可以进一步分析这些系统测试出来的测试缺陷,是不是可以被更前端的评审/测试/设计讨论活动所替代。
四、微观缺陷分析技术
微观缺陷分析是指从单个有价值的缺陷入手,追踪和分析缺陷产生的本质原因。
并不是所有的缺陷都有必要去做微观缺陷分析,因此首先需要挑选"合适的缺陷"。这里给出几点建议
二、缺陷的严重性和优先等级
1、缺陷的严重性
0级(致命):最严重等级,缺陷导致系统任何一个主要功能完全丧失、用户数据受到破坏、系统崩溃、悬挂、死机等;
1级(严重):系统的主要功能部分丧失、数据不能完全保存,系统的次要功能完全丧失,系统所提供的功能或服务收到明显影响;
2级(一般):系统的次要功能没有完全实现,但不影响用户的正常使用。例如,提示信息不太准确;或用户界面差、操做时间稍长等问题;
3级(微小):操作者不方便或遇到麻烦,但不影响功能的操做和执行,如字体不美观、按钮大小不很合适、字体排列不对齐等一些小问题。
2、缺陷的优先级
立即解决(p1级):缺陷导致系统几乎不能完全运行、使用,或严重妨碍测试的执行,需立即修正、尽快修正;
高优先级(p2级):缺陷严重,影响测试,需要优先考虑修正,如不超过24小时修正;
正常排队(p3级):缺陷需要修正,但可以正常排队等待修正;
低优先级(p4级):缺陷可以在开发人员有时间的时候被修正,如果没时间可以不修正。
三、软件缺陷的生命周期
缺陷的生命周期可以简单地表现为:打开(open)—修正(fixed或solved)—关闭(close)
软件缺陷状态的描述:
打开/激活:缺陷的起始状态,或重新打开的状态。问题存在或依旧没有解决,等待修正,如新报告的缺陷、补充完整信息后在打开;
已修正:已经被开发人员检查、修复过的缺陷,通过单元测试,认为及解决但还待测试人员验证;
关闭/非激活:测试人员验证后,确认缺陷不存在的状态;
无法解决:由于技术原因或者第三方软件的缺陷,开发人员目前不能解决的缺陷;
延迟:这个缺陷不严重,被推迟修正,可以在下一个版本解决;
功能增强:该问题符合 当前的设计规格说明书,但有一个待改进问题;
不是缺陷:开发人员认为不是问题,十年测试人员的误报缺陷;
不能再现:开发人员不能复现这个软件缺陷,需要测试人员检查缺陷复现步骤;
需要更多信息:开发不能复现这个软件缺陷,但开发人员需要一些信息,例如:缺陷的日志文件、图片等。
- 加强开发部的故障波及分析及波及分析验证工作;
- 项目计划中加强对测试需求的关注,提前采购和协调必要的测试环境;
- 每次回归对泄露的缺陷开发部都作相应的复盘,并根据复盘结果,完善单元测试和集成测试的测试设计;
- 利用缺陷分类来进行缺陷的根源分析
- 在该时间段送测的回归版本增加了新的功能,导致缺陷引入;
- 该回归版本开发部没有进行集成测试就直接送测?等等。
- 缺陷描述
- 被测产品信息:比如App名称、版本号
- 测试环境:wifi、数据网络、测试环境、生产环境
- 测试机型:机型、系统版本号
- 测试步骤
- 预期及实际结果
- 复现概率
- 测试辅助信息:截图、视频、日志
- 缺陷状态
- 缺陷优先级:标识处理和修正软件缺陷的先后顺序指标
- 缺陷严重程度
- 缺陷发生的组件
- 缺陷创建时间
- 缺陷发现人
- 缺陷责任修改人
- 缺陷修复时间
- 缺陷产生原因
- 准确性:缺陷每个组成部分描述准确,不会产生误解
- 完整性:复现该缺陷完整的步骤、截图、日志
- 一致性:按照一致的格式书写全部缺陷信息
- 简洁性:只包含必不可少的信息,不包括任何多余的内容
- 清晰性:每个组成部分的描述清晰,易于理解
- 发现数:累计的所有被发现bug的数量
- 关闭数:累计的所有被关闭bug的数量
- 日(期)发现数:当日(期)发现的缺陷数量
- 日(期)关闭数:当日(期)关闭的缺陷数量
- 对于缺陷提交者,他需要给这个缺陷分配“活动(Activity)”、“触发(Trigger)”、“影响(Impact)”这三个属性。
- Activity:项目生命周期的一个阶段,该缺陷发生在该阶段,例如需求、设计、代码阶段,即缺陷发现阶段
- Trigger:可以理解成测试的手段
- Impact:对用户的影响,例如安全性、易用性
- 当一个开发人员关闭一个缺陷时,他可以分配“阶段(Age)”、“来源(Source)”、“限定符(Qualifier)”、“类型(Type)”以及“目标(Target)”这五个属性。
- Age:描述缺陷对应的代码属于新代码,旧代码,还是修复bug引入
- Source:定义缺陷来源,是自身代码问题,还是第三方代码导致
- Qualifier:指明了所进行的修复应归于缺失,错误或者还是外来的代码或者信息
- Type:缺陷真正的原因,例如初始化、算法等
- Target:描述缺陷是由于设计还是编码引入,即缺陷注入阶段
- 缺陷移除率:(本阶段发现的缺陷数/本阶段注入的缺陷数)*100%,它反映的是该活动阶段的缺陷清除能力
- 缺陷泄漏率:(下游发现的本阶段的缺陷数/本阶段注入的缺陷总数)*100%,它反映的是本阶段质量控制措施落实的成效
- 选择典型有代表性的:同类型的一系列问题
- 选择有发现难度:积累缺陷库,对测试用例做补充
- 选择有推广意义的:该缺陷很普遍,可以推广到其他业务线
- 再挑选合适的缺陷后,我们紧接着需要收集该缺陷相关的有效信息进行下一步缺陷原因分析。这些缺陷信息包括提交缺陷时信息,同时也包括和开发讨论获取的信息。