软件测试(二):追踪每一个软件缺陷 [转贴 2005-06-27 16:36:47 ] 发表者: yonnie   

  本文讨论了在一个软件企业内部如何描述软件缺陷信息,如何实施缺陷跟踪管理,以及缺陷跟踪管理工具的实现原理及设计要领。

  考察一个典型的软件开发流程:需求分析→概要设计→详细设计→程序编码→系统集成→交付与维护,你会发现此流程中各阶段之间的依赖与继承关系是相当密切的。前一阶段形成的方案或产品中正确的部分固然会被后一阶段继承和细化,然而,如果前一阶段的方案中出现了错误,而测试人员没有及时介入此阶段的质量控制,那么该错误也会被后一阶段继承和放大,并顺序传递下去。如果等到交付与维护阶段,错误才被发现,那么相关的纠错工作将成为一件成本高昂而又收效甚微的事情,在某些情况下,甚至会导致整个开发工作的失败。这并不是危言耸听。据美国国家标准技术研究院的一份报告显示,占据世界软件销售额85%的大型专用软件,其开发的失败率高达70%。

  因此,在软件开发流程的每个阶段都必须引入软件测试技术,及早测试,杜绝错误的蔓延。然而,测试工作的天性决定了测试人员可能是开发人员总想回避的角色。在测试实践的早期,当测试人员查出某个缺陷,报告给开发人员时,多数情况下开发人员会象征性表示一下感谢,然后把测试报告撂在一边,继续忙手头的工作。事后到底有没有修改,谁也不知道。如果测试人员频繁给同一开发人员报错或不停地追问缺陷的修改情况,开发人员或许会逐渐丧失好脾气,出于维护技术权威或其他目的,他会狡辩:这不是错误,这是软件的一个特殊功能。或者说:这不是什么大问题,现在开发进度紧,而且纠正起来也挺麻烦的,等有时间再说吧。于是,不了了之,问题依旧存在。

  为了规避这种情况的发生,软件企业必须引入软件缺陷跟踪管理机制。测试人员不再需要直接与开发人员接触,甚至不需要知道开发者是谁,查出错误以后,直接报到缺陷跟踪管理系统就可以了(有些测试团队是有写入权限控制的),开发人员做不做修改以及什么时间之前必须完成修改是项目管理部门的事情(当然测试团队也可以提相关建议)。引入缺陷跟踪管理机制一方面划清了各个角色的职责,避免了不必要争执,另一方面也有助于项目管理部门及时了解软件产品在生产过程中所处的质量状况,从而更好地控制产品的质量。

  软件缺陷的描述

  这里首先对“缺陷”和“错误”两个概念做一下区分:缺陷指软件文档或程序代码中存在的数据错误、逻辑错误、内容遗漏以及内容上的不一致等。缺陷包括错误,与bug是同义词(注:鉴于这是一篇实用性文章,笔者不打算对缺陷、错误、bug进行更细致的理论讨论)。既然在软件开发流程的每个阶段开发人员都有可能引入缺陷,那么如何来描述一个缺陷呢?下面笔者谈谈自己的看法。

  首先,对缺陷的描述应该包含可追踪信息,如给每个缺陷分配一个缺陷号,每个编号必须是惟一的,可以根据该编号搜索、查看该缺陷的处理情况。

  其次,对缺陷的描述应该包含缺陷的基本信息。通常缺陷的基本信息包括缺陷状态、缺陷标题、缺陷严重程度、缺陷紧急程度、缺陷提交人、缺陷提交日期、缺陷所属、缺陷解决人、缺陷解决时间、缺陷解决结果、缺陷处理人、缺陷处理最终时间、缺陷处理结果、缺陷确认人、缺陷确认时间、缺陷确认结果等等。

  下面笔者简单解释一下:缺陷状态标注了缺陷的待修正、待评审、待验证、关闭等状态信息;缺陷标题则简要地说明缺陷的类型及内容;缺陷严重程度是测试人员给出的缺陷严重程度估计,可以是致命的、严重的、一般的、建议的等; 缺陷紧急程度是测试人员给出的测试处理优先级;缺陷提交人是指发现此缺陷的测试人员,最好附有联系方式,以方便缺陷处理人员进行确认;缺陷所属指缺陷所在的模块或者是缺陷所属的开发文档的名称;缺陷解决人则是指由谁来进行缺陷的解决,明确是需求分析人员、设计人员还是程序编码人员;缺陷解决时间是项目组负责人返回的缺陷预计处理的时间;缺陷解决结果标明预计缺陷修改后能达到的结果;缺陷确认人是指由谁来确认缺陷已经得到了修正;缺陷确认时间是指缺陷修复的确认工作完成的时间;缺陷确认结果指确认软件缺陷的修正工作是否有效。

  以上列出的条目不是必须的,读者可以根据项目的实际情况进行实施软件跟踪管理技术对于企业而言,它的意义在于确保每个被发现的缺陷都能被解决。这里,解决可能是指缺陷被修正,也可能是指项目组成员达成一致的处理意见(如不做处理)。软件缺陷跟踪管理过程中所收集到的缺陷数据对评估软件系统的质量、测试人员的业绩、开发人员的业绩等提供了量化的参考指标,也为软件企业进行软件过程改进提供了必要的案例积累。另外,有些软件企业还根据缺陷跟踪管理过程中所获得的缺陷数目分布趋势来决定软件产品的最佳发布时机。

  剪裁。另外,要引起注意的是上述部分条目不是由测试人员来填写的,如缺陷解决时间、缺陷解决结果、缺陷处理人等,应该由项目管理人员统筹成本、进度等因素后决定。

  另外,对缺陷的描述还应该包含缺陷的详细描述,也就是要对缺陷的特征做出详细的描述,例如程序代码中的错误,应详细描述错误发生的软硬件环境,相关输入输出数据,出错时程序的状态等,以方便编码人员进行错误复现和错误定位。又如设计规格说明中的错误,则应指明它与高层软件开发文档(如需求规格说明)中哪些条款相违背,为什么判为违背,都需要描述清楚,以方便设计人员进一步核实。

  除此之外,对某些缺陷的描述应该包含必要的附件。有时,某些缺陷可能无法用语言文字表达清楚,如用户界面出现的一些缺陷。这时,就需要借助于屏幕拷贝等方式来进一步描述缺陷。

  缺陷跟踪管理的一般流程

  缺陷跟踪管理系统( Defect Tracking System)是用于集中管理软件测试过程中所发现缺陷的数据库程序。利用它便于查找和跟踪缺陷,因为对于大中型软件的测试过程而言,报告的缺陷总数可能会有成千上万个,如果没有缺陷跟踪管理系统的支持,要求查找某个错误,其难度和效率可想而知。另外,利用该系统还有利于项目组成员间协同工作,缺陷跟踪管理系统可以作为测试人员、开发人员、项目负责人、缺陷评审人员协同工作的平台,同时也能保证测试工作的有效性,避免测试人员重复报错,也便于及时掌握各缺陷的当前状态,进而完成对应状态的测试工作。最后它还有利于跟踪和监控错误的处理过程和方法,可以方便地检查处理方法是否正确,跟踪处理者的姓名和处理时间,作为工作量的统计和业绩考核的参考。

  其简单流程如图所示,该流程涉及测试人员、项目负责人、开发人员、评审员等角色,这些角色的描述以及职责如表所示。图中提到软件缺陷的几个状态有:初始状态、待分配状态、待修正状态、待验证状态、待评审状态以及最后的关闭状态。读者可以根据企业的实际情况,适当调整该流程以取得更高的效率。

  缺陷跟踪管理的实现原理

  软件缺陷跟踪管理系统可以通过添加、修改、排序、查寻、存储操作来管理软件缺陷。目前市场上已经出现了一些通用缺陷跟踪管理软件,这些软件在功能上各有特点,可以根据实际情况直接购买使用; 也可以根据测试项目的实际需要,开发专用的缺陷跟踪系统,例如基于Lotus Notes 开发。

  缺陷跟踪管理系统在实现技术层面上来看是一个数据库应用程序。它包括前台用户界面、后台缺陷数据库以及中间数据处理层。目前,不少缺陷跟踪管理系统是采用B/S结构来实现的,相应地,采用的编程语言是ASP或JSP。读者可以根据需要选择购买商品化的缺陷跟踪管理工具,或者选择自行研发软件缺陷跟踪管理工具。这类系统的用户界面所显示的信息一般应根据用户的角色不同而略有差异,因为各个角色使用该系统完成的任务各不相同。如测试人员用于报告缺陷或确认缺陷是否可以关闭;开发人员用于了解哪些缺陷需要他去处理以及缺陷经过处理后是否被关闭;而项目负责人需要及时了解当前有哪些新的缺陷,哪些必须及时修正等。另外,不同角色所拥有的数据操作权限也不尽相同。例如开发人员无权通过其用户界面往数据库中填写新的缺陷信息,也无权关闭某个已知缺陷; 而测试人员无权决定分配谁去修正某已知缺陷也无权决定是否要修正某个缺陷。

  缺陷跟踪管理系统后台数据库的设计建议尽量考虑到不同角色的应用需要,如测试人员可能需要对相关数据表做频繁的记录的插入、查询等操作,软件开发人员可能对与他相关的记录非常重视,而对其他记录不感兴趣,而项目负责人员可能对新发现的缺陷数据需要做到及时掌握,这些需求对于数据库的建表、建立索引都有很大的指导性意义。