摘 要:在众多软件质量指标中,软件缺陷是最为直观和最为重要的指标。因此,通过对软件缺陷的评估来进行软件质量控制是一种很好的方法。对缺陷分布情况进行仔细分析,建立一套缺陷管理系统是十分必要的,文中主要阐述了缺陷管理流程以及如何使用测试工具建立缺陷管理系统。
关键词:软件测试;缺陷管理
1 引言
软件企业对软件质量的重视程度越来越高,软件测试在软件研发中的地位越来越重要。软件测试可以发现软件中存在的缺陷,通过改正这些缺陷以提高软件的可靠性。
软件缺陷会存在于软件产品的整个生命周期中,测试是发现缺陷的主要手段,也是它的主要目的。测试活动和开发活动一样,是项目质量保证不可或缺的重要部分。因此,对于测试活动的主要产物:缺陷,我们需要建立一个完善的缺陷管理流程,来对缺陷进行报告、查询、分类、跟踪、处理和验证等。软件测试的主要目的在于发现软件存在的缺陷,为了不影响测试效果,需要及时正确的处理测试中发现的错误,保证软件符合需求设计的目标。在实际的软件测试过程中,建立一套完备的软件缺陷跟踪管理系统是十分必要的,建立这样一个系统,我们首先需要清楚每个不同bug的严重性以及它们的优先级分类,其次是每个bug需要经过的测试管理流程。
2 软件中缺陷出现的原因
2.1 设计修改
在软件开发过程中用户需求的改变导致设计方案的更改,每次改动都为缺陷的出现提供了一次机会。在软件的后期修改维护中由于客户要求、时间限制等原因未审核修改的设计方案或未对缺陷做准确的分析,程序员在修改过程中可能出现只修改问题所在的地方,而没有对问题进行发散思维,而导致新问题的出现。
2.2 测试遗漏
在软件测试过程中测试用例设计的好坏、测试人员水平的高低,测试工具使用的熟练程度,以及对所测试软件的理解深度都影响着测试设计的完善程度。而测试用例设计的不全面,或测试方案的不周密,以及测试人员执行时产生的偏差都可能导致缺陷不能及时发现。
2.3 缺陷的概率特性
部分缺陷的出现具有概率性和偶然性,需要在反常的数量,频率,或者资源的方式下执行才能表现出来。
2.4 缺陷的潜伏性及阶段性
部分缺陷的触发条件不容易满足而呈潜伏状态。在嵌入式系统中多进程多任务中的问题、系统容错性的问题、内存的问题所表现出的潜伏性更加复杂多变,而导致发现缺陷需要很长的周期或特定的测试环境。
2.5 缺陷的周期性和隐蔽性
由于一些缺陷的存在导致软件中部分代码未被执行,而存在于未被执行的代码中的缺陷呈现隐蔽状态。通过周期性的缺陷的修复及再测试才会发现这些隐蔽的缺陷。
3 缺陷管理流程
一般的缺陷管理流程如图1所示。测试人员提交新的Bug入库,错误状态为New。高级测试人员验证错误,如果确认是错误,分配给相应的开发人员,设置状态为Open。如果不是错误,则拒绝,设置为Declined状态。开发人员查询状态为Open的Bug,如果不是错误,则置状态为Declined;如果是Bug则修复并置状态为Fixed。不能解决的Bug,要留下文字说明及保持Bug为Open状态。对于不能解决和延期解决的Bug,不能由开发人员自己决定,一般要通过某种会议(评审会)通过才能认可。测试人员查询状态为Fixed的Bug,然后验证Bug是否已解决,如解决置Bug的状态为Closed,如没有解决置状态为Reopen。
软件缺陷流程管理的要点是为了保证错误的准确性,需要有丰富测试经验的测试人员验证发现的错误是否是真正的错误,书写的测试步骤是否准确,可以重复。每次对错误的处理都要保留处理信息,包括处理姓名,时间,处理方法,处理意见,Bug状态。拒绝或延期错误不能由程序员单方面决定,应该由项目经理,测试经理和设计经理共同决定。错误修复后必须由报告错误的测试人员验证后,确认已经修复,才能关闭错误。加强测试人员与程序员的交流,对于某些不能重复的错误,可以请测试人员补充详细的测试步骤和方法,以及必要的测试用例。
图1 软件缺陷管理流程
4 使用测试工具建立缺陷管理系统
一个缺陷跟踪系统,需要实现几部分的功能:
1)缺陷的上报,当问题被发现后,可以通过系统进行提交、保留,方便跟踪。
2)缺陷录入系统后,项目经理应该可以通过缺陷跟踪系统进行浏览,定期获得最新的缺陷问题报告。
3)项目经理将缺陷问题报告通过缺陷跟踪系统转交给程序员,程序员可以通过缺陷跟踪系统知道自己负责的修正的缺陷问题报告。
4)缺陷问题的修正处理,当程序员修复问题后,可以通过跟踪系统,通知项目经理问题已修复。
5)对于无法根据缺陷报告重现的问题,也可以通过跟踪系统,向项目经理及测试人员要求更多更详细的信息,并将缺陷问题返回至项目经理重新处理。
6)问题暂缓及申诉过程处理,对于缺陷报告提到的问题,如在当前版本无法实现或者缺陷与需求有冲突的时候,可以将问题置为“暂缓处理”或“提出申诉”。
7)对于优先等级较低的缺陷问题,可能不能被及时处理掉,但必须可以被查询。
8)缺陷跟踪系统可以提供跟踪项目的状态报告。
下面以使用软件测试工具TestDirector为例,分四个步骤来说明如何建立一个缺陷管理系统。
4.1 设计缺陷管理流程
通过使用测试工具,在SDLC中未被发现的所有和项目有关的差异及问题都将汇报到管理工具中。TestDirector针对不同的差异,清晰的定义了NEW、OPEN、CLOSED等级别。当工具中开放了一个新的缺陷问题,我们就要陆续开始登录缺陷报告、定义缺陷安全等级、描述缺陷、指派相关人员展开最初的调查、将差异转交给相关的测试主管等工作。
召开缺陷解决会议能确保所有缺陷都能涉及并得到有效解决。这种定期会议由来自开发、项目管理、产品管理、和项目相关的业务团队代表及测试主管共同参加,就缺陷问题展开讨论。测试主管在会议期间对测试工具进行信息更新,会议的中心议题是对缺陷报告进行审核。有了测试工具提升的完备的报告,我们就可以依据其严重程度和状态情况,选择处理的优先权。
缺陷解决会议后,缺陷将被分配给合适的小组主管,以便着手解决。这些小组包括:开发小组、环境支持小组,或是业务团队。通过管理工具对任务进行合理分配,能更为高效地解决缺陷问题。
被修复缺陷如果在环境缺陷中没有代码变更,将马上展开重复测试,并立即关闭。需要代码变更的缺陷修复会涵盖在一个版本打包中,从而展开重复测试,接着将根据测试结果或者关闭缺陷,或者将缺陷重新开放。
4.2 定义缺陷状态
每个缺陷都有一个状态显示,会在整个测试周期中得到随时地更新。每次当缺陷状态有了更新,评论信息就会加入到缺陷的R&D评论栏中。测试工具中的缺陷状态一般会有以下几种:New、Open、Fixed、Ready for Retest、On Hold、Closed、Reopen等。
4.3 用户操作的状态修改
通过对测试工具所允许的状态变更操作,可以为实现便捷的学习曲线和巩固一种优化的工作流程提供帮助。状态变更包括:根据适合的变更控制流程所进行的任何系统变更。在进行修复操作之后,未通过测试或某个测试部分根据需要展开重复测试。在流程中的任何时段,项目经理、系统分析人员、开发人员和测试工作人员可以使用测试工具来恢复保存在存储器中的所有缺陷状态等。
4.3 用户操作的状态修改
通过对测试工具所允许的状态变更操作,可以为实现便捷的学习曲线和巩固一种优化的工作流程提供帮助。状态变更包括:根据适合的变更控制流程所进行的任何系统变更。在进行修复操作之后,未通过测试或某个测试部分根据需要展开重复测试。在流程中的任何时段,项目经理、系统分析人员、开发人员和测试工作人员可以使用测试工具来恢复保存在存储器中的所有缺陷状态等。
5 结束语
对于如何建立和使用缺陷跟踪系统,应该进一步反思,毕竟缺陷跟踪系统只与缺陷有关,与行政无关,但实际情况往往不是如此,缺陷跟踪系统成为了衡量项目参与者工作量的指标,为参与的项目人员造成压力。因此如何建立缺陷跟踪系统还需要在实际中进行进一步完善与讨论。
参考文献:
[1] 郑翠芳,吴志杰,基于软件开发过程的软件缺陷管理研究. 微计算机信息[J],2007.03
[2] 胡冠林,汪厚祥,软件缺陷分类及其度量技术研究. 舰船电子工程[J],2005.03