ODC(Orthogonal Defect Classification)简介——正交缺陷分类法
Defect分析是软件开发和测试中一个重要的环节,ODC介绍了一种不同于大家常用的非常有效的defect分类及分析方法。这篇文章简单的向大家介绍了什么是ODC,以及如何在项目和产品开发中使用ODC来改进开发测试流程从而增强产品质量。希望读者具有基本的软件开发和测试经验,并且了解defect分析的基本方法。
Defect 分类帮助改进产品质量
软件开发中都包含有控制软件开发的流程。我们设计模块、开发代码、对产品进行测试、然后发布产品。但是,我们怎样从以前的错误中学习,怎样做得更好呢?一般情况下,我们会拿一些输出的数据来进行分析,从而知道我们应该怎么样和进行什么样的改进(如图1)。但是如何确定我们做的努力是真正有用的呢?这就是defect classification (defect分类) 能够帮助我们的地方,如果我们可以正确的使用defect classification,它会对我们有很多的帮助。
图1
几种常见的defect 分类方法
在软件开发过程中我们会在不同的阶段发现数量不等的defect,如图2所示,对于所发现的defect我们可以逐一的对它们进行分析,例如使用root causal analysis方法,可是这种分析方法占用了大量的时间和资源,显然我们非常需要有一种方法可以明确地告诉我们应该在哪里改进。
图2
下面我们来看看几种我们常见的defect 分析方法:
按照defect 严重程度分类
我们在测试过程中会根据defect的严重程度对defect 进行分类,在这里我们将严重度称为severity, 我们有如下图所示的一个项目不同测试阶段的defect的分布图:
图3
在这个图中defects跟据它们的severity属性进行了分类, severity为1的defect是最严重的defect, 它使系统根本不能运转,需要立即进行改正。那severity为 2的defect 是一般功能性的错误,这些错误是需求中所要求的,必须改正才能实现系统完整的功能。Severity 为3的defect是一些细小的错误,它们不影响功能的实现,但可能引起用户的误解或者使用不当。Severity为4 的 的defect是测试人员建议改进的地方,如果时间允许开发人员可以选择性的改正,或者等到下个版本中再改进。从图3中我们可以看到第一个图是在一个项目测试前期的时候,这时候1级的defect很多,整个系统还不能够运转,正需要大量的时间和人力进行测试和改正代码错误。第二个图则显示项目测试已经到了中期,这时候最严重的defect已经很少了,系统已经基本可以运转,然后测试人员发现了大量的功能性的错误和细节上的错误需要改正。第三个图显示了项目测试已经到了末期,这时的产品需求的功能已经实现,只有部分细节和建议需要改进,产品已经可以发布了。在用severity分类的图表中,我们可以了解到以下有关项目的几个方面:
1) 工作的优先级
2) 项目的进展状态
3) 产品的质量
按照component/module分类
对于不同的component或者module,我们也可以有类似的defect分布图来说明另外一些问题:
图4
图4中,对于第一个图,我们能看出C模块中发现的defect明显的比其他模块的少,那么原因可能是C模块的开发人员技术非常的好。第二个图中我们可以看出A和C中发现的defect明显比其他两个模块的多,那么可能这两个模块的难度、大小或者是改动的变化比较大,因此而造成了它们中发现的defect比较多。对于第三个图,C模块的defect明显比其他的多,那么可能是C模块的开发人员太差了,需要管理者的特别关注了。
Orthogonal Defect Classification简介
下面我们来介绍ODC,什么是ODC(Orthogonal Defect Classification)呢?简单的说,它是另外一种defect分类的方法,它使你能够快速得到每一个问题的信息来帮助你后面做出正确的决定来解决问题。
开发中应用ODC
作为一个开发人员我发现的问题如果按类型(type)分类可能是由如下几种可能:(括号中的英文为缩写图例)
1) 没有正确的初始化 (Init)
2) 代码没有正确的check-in (Chk)
3) 算法问题 (Alg)
4) 功能性的错误,可能是模块内的功能没有被正确实现,也可能是模块与模块之间相联系的部分没有被正确实现。(Fnct Cls)
5) 有可能是有关时间的错误 (Time)
6) 界面相关的错误 (Intf)
7) 代码之间相关联的错误,例如错误的继承关系 (Rel'n)
按照type的分类我们有如下的分布图:
图5
图6
从图5、图6中,我们可以了解到开发过程中哪个环节的错误比较多,例如图6中算法错误和功能性错误是最多的那么应该在单元测试或者code review中着重注意这两个部分的代码质量。另外从上图中我们也可以知道在哪以及如何来改正错误代码。
功能测试中应用ODC
下面我们来看看测试,在FVT(功能测试)中,一个主要的帮助FVT做得更好的指标是trigger, 在ODC中trigger可以简单的理解为是什么样的测试发现了这个defect。在FVT中我们定义了一下4个trigger:Coverage (这里的coverage不是我一般意义上理解的测试覆盖面的意思,它是指normal function, 是任何用户都会用到的功能,基本的、简单的功能),Variation (对于有些对产品比较熟悉的用户,有可能会愿意用不常用的有创造性方法或者输入来完成同一种动作或者功能,或者单单就是为了挑错,在这些尝试中往往会发现很多漏掉的defect,例如'边界限制'),Sequencing (用和以前不同的操作流程来完成一种任务功能),Interaction (当两个或者多个功能模块互相交互时可能会发生一些错误,例如同时启动一些功能时可能会造成系统死机)。
下面我们举例来看看FVT中按trigger分类的defect分布图:
图7
在图7中我们可以看到,这个产品中在一般的功能Coverage和改变操作顺序Sequencing的测试中发现了比较多的defect, 这说明了代码还需要作更多的单元测试来减少错误,从而我们可以了解到产品的基本质量水平。
图8
在图8中我们可以看到Coverage的错误很少,产品的基本质量是可以保证的;Variation的错误很多(看来测试组做了大量的这方面的测试),Sequencing 和 Interaction的错误也不少,那么后面的测试中应该加大这两块儿的测试。这里我们可以清楚地知道我们测了什么还有哪块需要加大测试力度。
图9
在图9中我们可以看到Variation的错误很多,那么加大单元测试的力度可以很好的解决这个问题,例如增加更多的边界检查。
系统测试中应用ODC
下面再让我们来看看SVT(系统测试), 在系统测试中,ODC定义了另外一组trigger, 它们是:Blocked (有哪些defect阻止了SVT的执行, 最常见的是FVT的defect),Stress (压力测试的结果很可能是客户最关心的数据),Recovery (对于数据恢复和出错处理),Restart (x系统的启动和重启),Hardware configuration (硬件配置),Software configuration (软件配置)。 下面我们举例来看看SVT中按trigger分类的defect分布图:
图10
在图10中我们看到了Blocked的defect太多了,显然这个时候进行大量的SVT测试是不明智的,那么应该让产品继续的进行功能测试,直到Blocked的问题减少到可以接受为止。
图11
在图11中,我们同样可以了解到SVT中进行了哪些测试,在这里软件配置测试和压力测试是需要加强的。
图12
在图12中,我们可以了解到硬件配置的defect比较多,那么我们应该要求开发人员更关注这部分的代码。
从上面的分析中我们看到了ODC中trigger告诉了我们哪里发现了问题,应该去做些什么。
ODC对于客户影响的应用
那么下面我们再来看看ODC怎么样的来影响客户。软件产品对于客户的影响有哪些方面呢?在ODC中定义了如下方面:
1. Installability
2. Security
3. Performance
4. Maintenance
5. Serviceability
6. Migration
7. Documentation
8. Usability
9. Standards
10. Reliability
11. Requirements
12. Capability
图13
这里图13是一个产品的defect 影响分布图, 我们可以看到这个产品有非常多的问题出在 "capability性能"、"reliability可靠性"、和"usability可用性"上,那么这样的产品如果卖给客户将是可怕的,那么我们就应该采取相应的动作来完善这几个方面的问题。
在ODC中,还定义了其他的元素来组合使用以帮助我们更好的了解问题出在哪里,同时帮助我们做出正确的决定。
在测试人员发现一个问题并且开一个defect时,需要给defect定义下面的属性:
1) Activity, 它是指在哪种测试中发现的defect, 例如:UT、FVT、SVT 等等。
2) Trigger, 问题出现的情况
3) Impact,影响客户的方面
当开发人员接到一个defect并且开始修改代码时,他需要定义下面的属性:
1) Target, 将要在哪里改正错误,例如:design、code 等等
2) Defect Type, defect的类型,例如:算法、初始化 等等
3) Qualifier: 只有三个,他们是missing、incorrect 和extraneous
4) Source: defect 的来源,例如:内部代码、outsource的代码等等
5) Age: defect是新代码还是重写的代码
具体可以参考下图:
图14
结束语
在项目和产品开发中,我们经常会想到这样的问题:我们的测试有多有效?单元测试、功能测试、系统测试都做得正确吗?我们怎样在需求、设计、开发阶段来减少潜在的defect呢?我们的代码已经完成并且准备好了进入到下一个阶段了吗?我们发现的defect有哪些是属于上一个版本的?客户将会感觉我们的产品质量怎么样呢?这些都是很关键的问题,需要我们改进开发和测试流程,使它们更加有效,从而进一步增强我们产品的质量。那么怎么样改进呢?通过ODC我们可以知道我们采用的哪种测试方法正在帮助我们找出更多的defect(是基本功能测试,还是边界条件测试或者压力测试),还有defect是由哪种错误造成的(是初始化的问题或者界面的问题,还是其他的原因),错误是由于代码缺失还是代码错误造成的,defect是在老代码还是新代码中发现的, defect对于客户的影响有哪些有多大。找出了这些问题的答案,我们就可以改进我们开发和测试的有效性,增强产品模块的稳定性,更早的发现那些高风险的模块,最后使产品的每个版本都比上一个版本质量更好。
转载:http://www.ibm.com/developerworks/cn/java/j-odc/
ODC(Orthogonal Defect Classification)简介——正交缺陷分类法的更多相关文章
- 软件缺陷分析方法:ODC
资料 Orthogonal Defect Classification:简要描述. ODC-5-2.pdf :详细说明了ODC对于缺陷属性分类的描述,以及具体应该怎么划分. ODC-5-2-Exten ...
- 通过ODC方法改善软件测试:3个案例研究
正交缺陷分类法(ODC)是一种用于分析软件缺陷的归类方法.它可以结合软件开发过程的一系列数据分析技术,为测试组织提供了一个强大的针对开发过程和软件产品的评估方法.在本篇文章中,会列举三个案例研究来说明 ...
- CET4词汇
abandon vt.丢弃:放弃,抛弃 ability n.能力:能耐,本领 abnormal a.不正常的:变态的 aboard ad.在船(车)上:上船 abroad ad.(在)国外:到处 ab ...
- 学霸网站---Alpha+版本测试报告
说明:由于老师前几天要求交测试报告,本测试报告只针对当时完成的功能进行测试,并不是几天之后要发布的BETA版本,不会有很多差别,但是BETA版本会包含对其中BUG的修复. 学霸网站测试报告 一.引言 ...
- 【小白的CFD之旅】10 敲门实例
按黄师姐的说法,做好第一个案例很重要.第一个案例既可以帮助理解CFD的工作流程,还可以帮助熟悉软件的操作界面. 黄师姐推荐的入门案例来自于ANSYS官方提供的培训教程,是一个关于交叉管内流动混合的案例 ...
- React 新 Context API 在前端状态管理的实践
本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...
- opengl矩阵向量
如何创建一个物体.着色.加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣.我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的处理 ...
- 阅读The Java® Language Specification需要知道的英文单词
In any case/on any account 在任何情况下 “Varargs”是“variable number of arguments”的意思.有时候也被简单的称为“variable ...
- 不平衡数据下的机器学习方法简介 imbalanced time series classification
imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...
随机推荐
- Heritage of skywalkert
Heritage of skywalkert skywalkert, the new legend of Beihang University ACM-ICPC Team, retired this ...
- uva 10561 sg定理
Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...
- Biorhythms(poj 1006)
Description 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰 ...
- angular中关于ng-repeat的性能问题
首先,ng-repeat的渲染是改变则渲染的.而且是无法自动检测内容是否改变的. $scope作为一个对象,对象的特性就是两个对象是不相同的,因为我们比较的是两个对象的地址,即便两个对象的内容甚至排版 ...
- 说说icon图标
咳咳,其实我是想copy过来的,然而,他竟然是用代码写的图标... (正经脸)话说icon图标是一种网页中常用图标的一种,网络上有各式各样的应用案例,在此就不多啰嗦了.其实我也不过是用着现成的而已,所 ...
- 在Fedora 22下安装配置RealVNC Server 5.2.3的经验总结
RealVNC是目前功能最全.性能最好的VNC商业软件套件,很多时候为了确保性能和功能的统一,还是大量地在使用RealVNC.最近在Fedora 22工作站上安装RealVNC Server 5.2. ...
- 【Java】NIO中Selector的select方法源码分析
该篇博客的有些内容和在之前介绍过了,在这里再次涉及到的就不详细说了,如果有不理解请看[Java]NIO中Channel的注册源码分析, [Java]NIO中Selector的创建源码分析 Select ...
- [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
Serial垃圾回收器Minor GC 1. DefNewGeneration垃圾回收 新生代使用复制算法做垃圾回收,比老年代的标记-压缩简单很多,所有回收代码都位于DefNewGeneration: ...
- 洛谷P1061 Jam的计数法
题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字 ...
- LayUI后台管理与综合示例
一.LayUI介绍 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体 ...