正交缺陷分类法,Orthogonal Defect Classification(以下简称 ODC)是一种缺陷分析方法,由 IBM 在 1992 年提出。它通过给每个缺陷添加一些额外的属性,利用对这些属性的归纳和分析,来反映出产品的设计、代码质量、测试水平等各方面的问题。从而得到一些解决办法来进行改进。例如对于测试团队,通过 ODC 可以知道测试工作是否变得更加复杂;每一个测试阶段,是否利用了足够多的触发条件来发现缺陷;退出当前测试阶段有什么风险;哪个测试阶段做得好,哪个测试阶段需要改进等。对于开发团队,利用 ODC 可以知道产品设计和代码编写的质量情况。而给产品用户带来的好处就是提高客户满意度,减小产品投入市场后的维护花费。
ODC 的工作流程分为四部分:“缺陷分类”,“校验已被分类的缺陷”,“评估数据”以及“采取行动来改进工作”。下面我们将逐一进行讲解。
分类,是 ODC 工作流程中的第一步,即需要测试和开发人员分别对每一个缺陷填写 ODC 属性。对于团队成员来说,正确的了解每个属性的值尤为重要,这样才能保证他们在分类时尽量选择正确的选项。
有些缺陷管理工具在默认情况下是不支持 ODC 的,这就需要在填写之前,对缺陷管理工具进行改进,配置额外的属性。常用的缺陷管理工具包括 Clear Quest(CQ) 和 Configuration Management Version Control(CMVC) 等。需要增加的 9 个 ODC 相关属性分别是。
对于 CMVC,自从 1.7 版本后就自带了 ODC 属性,可直接使用。而对于 CQ,需要安装一个 ODC 包即可。关于该 ODC 包可从附件中下载,解压后里面有详细的文档教读者如何在 CQ 中安装该包。
在配置好 ODC 后,CQ 的应用程序窗口中会出现新的选项签:ODC Submitter 和 ODC Responder,如图 1 和图 2 所示。
在缺陷管理工具支持 ODC 后,就需要测试人员和开发人员分别填写 ODC 属性,后面的流程都会用到这些数据。
从图 1 中我们可以看到,ODC Submitter 选项签中有三个选项,分别是 Activity、Trigger 和 Impact。这三个选项是由测试人员,也就是该缺陷的发现者来填写的。由这几个属性可以得知,该缺陷是在进行何种类型测试的时候,由怎样的触发方法来发现的。同时,对用户造成的影响是什么。仅靠这三个 ODC 属性,就可以一目了然。
从图 2 中我们可以看到,ODC Responder 选项签中有六个选项,分别是 Target,Defect Type,Qualifier Source,Age 和 ContentType。这六个选项是由开发人员,也就是该缺陷的解决者来填写的。由这几个属性可以得知,开发人员做了哪方面的修改用以解决问题?改动大不大?是原来的代码有遗漏?不正确?还是需要被删除一部分?原来的版本中是否存在这个问题?等等。有了这些属性的值,就可以很快的知道产生这个缺陷的根源了。
缺陷管理工具对 ODC 的支持不完善
有些 ODC 属性间是有关联关系的。例如:在 ODC Submitter 选项签中,如果在 Activity 属性中选择了“Function Test”,那么 Trigger 属性就只能在“Coverage”,“Sequence”,“Variation”和“Interaction”中进行选择。如果在 Activity 属性中选择了“System Test”,那么可选的 Trigger 属性的值又是截然不同的另外几种选项,分别为:“Workload”,“Recovery”,“Startup/Restart”,“Hardware config”和“Software config”。在缺陷管理工具中,若对这些属性间的关联关系不做限制,选择每个选项时都会把所有的值列出来供用户选择,这样很容易造成选项间的不匹配。从而导致最后统计 ODC 数据时,结果不合理。
另外,没有对 ODC 属性项进行必填操作的校验,也是缺陷管理工具对 ODC 支持不完善的表现之一。例如:仅填写了 Activity 属性,即表明了该缺陷是在何种类型的测试中发现的,但是不填写 Trigger 属性,也就是说不指明是在哪种触发条件下发现的该缺陷,就会造成信息缺失,从而分析出的结果也不会准确。
因此,我们强烈建议在配置缺陷管理工具用以支持 ODC 时,加上对有关联关系属性的限制,并对必填的 ODC 属性进行强制填写的校验,强制每个人必须填写,否则无法提交成功。从而在工具的层面上,保证 ODC 数据输入的完整性和正确性。
测试或开发人员对各自需要填写的 ODC 属性不熟悉
ODC 这种缺陷分析方法并没有普及到每一个项目中,因此在第一次应用 ODC 的项目中必须在分类阶段前,就要在项目内部做好 ODC 知识的系统培训。不仅仅是简单的了解,而是需要知道每个属性所有可选项的含义。这样就不会在分类阶段开始后,一片茫然。另外,由于 ODC 属性选项众多,不可能靠之前的几次培训就全部记住。建议打印一份类似于 ODC 属性快速参考手册的资料。这样在填写 ODC 数据时,可一边参考手边的文档一边填写。
在第一步中,测试人员和开发人员已经填写了 ODC 数据。那么接下来就需要 ODC 专家对这些数据进行校验。因为填写不正确的 ODC 数据会导致后面的评估和行动两个流程步骤没有意义。因此校验数据的正确性尤为重要。
校验结果如何在缺陷管理工具中体现?
校验员在校验完某个缺陷并确认相关人员已经完成修改后,校验工作还并没有结束。为了在下一阶段,即评估阶段中,仅仅对已被校验过的缺陷进行分析,就需要在缺陷管理工具中有地方进行标识,用以过滤掉未校验过的缺陷。
可以在 ODC Responder 选项签中增加一个属性项,叫做“ODC Validated”。如图 3 所示。
有四个选项可供选择。
校验小组成员间如何更有效的沟通?
校验小组成员通常会从测试和开发人员中分别挑选。在很多大项目中,测试和开发团队可能并不在一个地区,甚至存在时差。如何增强跨地区小组成员的交流,使得资源共享、沟通及时无误呢?这就需要有一个信息共享平台。从我们的实际经验中来看,wiki 是一个不错的选择。wiki 是一种多人协作的写作工具,每个人都可以在上面发表意见。下面是作者正在参与的一个项目组所采用的 ODC 校验小组 wiki 上的内容,包括如下方面。
表中的第三列“是否已被校验”与缺陷管理工具中的“ODC 是否已被校验”属性项相对应,同样有四个选项可供选择:不填表示校验人员还没有开始对该缺陷进行校验;“是”表示该缺陷已经被校验完成,可以作为评估阶段的统计数据;“否”表示该缺陷还处在校验过程中,等待相关人员根据检验员指出的修改意见在缺陷管理工具中进行修改。在校验员发出第一封邮件后的三天之内,若没有得到相关人员的响应,校验员需要发送第二封邮件,同时抄送相关人员的直接经理。以此督促相关人员尽快更改 ODC 属性,以便该缺陷被标识为“已校验”;“N/A”表示该缺陷为无效缺陷。
对于校验小组长来说,如何更有效、更直接的分配校验任务?
仅仅在 wiki 中列出工作分配表,虽然也可以进行任务分配和进度跟踪,但由于并没有跟缺陷管理工具相关联,所以需要校验人员根据表 1 中的缺陷编号,逐一在缺陷管理工具中进行查找。显然这样很浪费时间,也难免会在查找过程中发生错误。因此在缺陷管理工具中直接分配任务是更合适的办法,同时利用表 1 中所示的 ODC 校验工作分配 / 跟踪表进行进度跟踪。
在作者从事的项目中,我们采用在缺陷管理工具中增加一个名为 ODC Validator 的属性,如图 4 中所示。来供校验小组长在分配任务时进行选择。这样校验人员在登录缺陷管理工具后,直接查询 ODC Validator 属性为自己名字的缺陷列表即可。
在确保输入的 ODC 数据正确性的前提下,就可以对这些缺陷进行分析了。根据 ODC 的不同属性进行分类统计,可得出不同方面的结论。以此来反映测试、开发或产品设计方面的问题,指出潜在的改进的机会。比如:缺陷被发现的如何、产品是否稳定等。下面挑几个典型的评估方法进行说明。
利用不同的 ODC 属性的组合,可以从多方面来评估测试工作的完成情况。例如利用测试阶段和 activity 属性来评估是否应在某一测试阶段中发现的缺陷却被在下一测试阶段中才发现;利用 activity 和 trigger 属性来评估是否每个 activity 都使用了足够多的与之对应的 trigger 来发现缺陷;利用时间和 trigger 属性来评估是否随着时间的推移测试变得更加复杂等。下面就利用第一种评估方法来进行举例。
不同的测试阶段有不同的测试重点。例如在功能测试阶段,所对应的 activity 就是 Function Test( 功能测试 )。而在系统测试阶段,所对应的 activity 就是 System Test(系统测试)。我们可以通过统计在每种测试阶段中发现缺陷的 activity 来判断是否本应在该测试阶段中发现的缺陷被遗留到了下一测试阶段。以此来评估测试工作的完成情况。如图 5 所示。
由上图我们可以看出,该项目在系统测试阶段,有近一半缺陷的 activity 是功能测试。这说明本应该在功能测试阶段发现的缺陷,却被遗留到了系统测试阶段才得以发现。可见功能测试阶段的测试工作做得不够全面。
经验和建议
利用 ODC 属性不仅可以评估测试工作的完成情况,同时还可以评估产品的稳定度。例如:随着项目的进展,定期统计 qualifier 属性的变化趋势,以此来评估产品是否变得更加完善;或者定期统计 impact 属性的变化趋势,以此来评估影响产品功能性和可靠性的缺陷是否在减少。下面就以一个实例中的 qualifier 属性为研究对象,来评估一下该实例是否随着项目进展的过程而变得更加完善。如图 6 所示。
图 6 显示了 missing 和 incorrect 的百分比随项目进展而发生的变化趋势。对于一个逐渐趋向于稳定的产品来说,Qualifier 为 missing 的缺陷应该逐渐减少。因为任何未经测试过的新代码的加入,都会增加潜在的风险。
但是从图 6 中我们可以看到这个实例的稳定度并不乐观。Qualifier 为 missing 的缺陷并没有随着项目的发展而有减少的趋势。
经验和建议
供开发人员填写的 ODC 属性中有一个属性叫做 target。它表示开发人员为了修复这个缺陷,需要在哪方面做修改。比如可以修改的方面包括:design/code、build、information、language 等。为了评估产品在设计和代码方面的完成情况,我们可以分析 target 是 design/code 的缺陷,利用其对应的 defect type 和 qualifier 属性来发现产品在需求、设计和代码阶段的不足,以及在哪个薄弱环节更容易引入缺陷。下面以一个案例来说明如何利用 defect type 和 qualifier 属性来评估。如图 7 所示。
从图 7 中我们可以看到 defect type 为 algorithm/method 的缺陷,qualifier 是 missing 和 incorrect 的比例及缺陷数量都很高。这说明产品的低层次的细节设计描述不完整,同时没有被开发人员很好的理解;其次是 defect type 为 assignment-initialization 和 checking 的缺陷,它们的 incorrect 比例相对来说比较高,这反映了代码编写上还存在欠缺;最后我们看到 defect type 为 interface/O-O messages、relationship 和 timing/serialization 等的缺陷,其 qualifier 为 incorrect 和 missing 的数量都比较少,这说明产品在高层次的设计上和需求分析、理解上都还做得不错。
经验和建议
仅仅发现了问题,是不够的,还需要解决问题。根据评估过程中反映出的不同问题,有针对性的提出解决方案并让相关人员采取行动。这一阶段也是最能给产品带来价值的。
经验和建议
正交缺陷分类(ODC)是一种缺陷分析方法,合理的把它运用在项目中,可以帮助测试、开发团队改进工作,从而提高产品质量。明确 ODC 的流程及各阶段的工作重点,并借鉴本文中提到的经验建议,会让读者在运用 ODC 时更加得心应手。
原文转自:https://www.ibm.com/developerworks/cn/rational/r-cn-odcprocessintroduction/