软件测试技术不断更新和完善,新工具、新流程、新测试设计方法都在不断涌现。测试是探测软件质量水平的方法,不是保证软件质量的手段,为了测试而测试并不能改善软件质量。将测试与改正缺陷相结合,或将早期资料保证活动与测试相结合。只有这样,才能够使测试真正起到它应有的作用,达到提高软件质量的目的。测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。随着软件工程学的发展和软件项目管理经验的提高,软件测试在整个软件工程中有着越来越重要的作用。此我对于目前在企业中使用较多的ERP软件,谈谈在测试中应注意的一些细节。
一、测试的根本
测试一定要首先依据需求。 软件测试的目的是为了检验软件系统是否满足需求,离开了需求,一切测试都是没有意义的。需求是整个软件工程项目的根本。ERP软件是为了满足企业资源信息管理的需求,因此在测试中要以这个需求为基本依据。
其次,是关注用户。软件需求即是要满足用户的需要,使用户完成预定的任务,所以要更多的考虑用户能否正确、完整的使用被测软件,用户使用这套软件能够给他们的工作带来帮助。不要过多考虑用户不在意的问题。开发人员在软件研发的过程中一般都是从正面思维,考虑软件的开发要实现那些需求和功能,而测试人员要从逆向思维,考虑有哪些是开发人员没有考虑到的或者不满足需求的部分。ERP软件的用户是企业的资源信息管理员,因此在测试中要多了解此类人的需要,进而测试软件的完整性和适用性。
二、测试用例该不该包含所有的细节
测试用例的设计和编制是软件测试活动中重要的环节。测试用例是测试工作的指导,是软件测试的必须遵守的准则。更是软件测试质量稳定的根本保障。
设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断,电源断电等。
测试用例该不该包含所有的细节?
在软件测试过程中,如果测试用例写的太粗糙,则可操作性不强,太随意。但是测试用例对操作步骤描述的过于具体,也会带来一些问题。例如对一个ERP软件的登录功能进行测试,写成下面这样:
1、在“user”项中输入“user”;
2、在“password”项中输入“password”;
3、点击“确定”。
这样的描述方式表面看起来可操作性似乎很强,不论是谁拿到这个测试用例描述都可以充当测试人员,检查这个ERP软件的登录功能是否存在缺陷。但是在ERP软件的整个开发过程中,整个软件系统的变更时必然的。一旦需求、设计或者应用程序中的某些细节发生了变化,比如”user”变成了“用户”,”password”变成了“口令”,“确定”变成了 “登录”,或者输入项所接受的数据类型发生了变化,那么同这部分内容相关的所有的测试用例都需要修改。对于业务复杂、功能完整的ERP软件系统,会产生大量的测试用例文档,如果按照上面的方法来写测试用例,一旦软件系统发生变化,文档维护的工作量是巨大的。
在这个问题上我们测试人员应当关注测试思想而不是关注操作步骤。测试用例的本质不是描述具体实现,而是描述处理问题的思路,即对于一项明确的测试内容进行测试的思路。作为测试用例的设计人员,我们在测试用例中应该用容易理解的自然语言清晰的来描述我们将要如何进行测试,而不是简单的把在应用程序上如何操作的烦琐的步骤记录下来。把测试用例设计当成填写具体操作步骤的表格是人们对测试用例大的误解。在我们的实际软件测试工作中,尤其是功能测试的时候,很多都是使用雷同的操作步骤和不同的测试数据来进行的。因此我们的测试用例文档,应该分为两个部分:一部分描述测试用例执行者所应遵循的操作步骤,一部分则是在操作中需要使用的测试数据。这样可以不用再对多个用例中重复出现的操作过程再次描述,把更多的精力放到测试数据的设计和准备上,大大提高了测试用例的可维护性。
在将主要精力从设计操作步骤转变为设计测试数据之后,我们还可以通过“逆向测试数据分析”来提高测试工作的整体效率。假设某个ERP软件中存在多个互相依赖的功能,这些功能构成了一个依赖链,依赖链的末端是不再被其他功能依赖的基本功能。在我们准备测试数据时,首先从这个依赖链末端的功能开始,对所有的输入数据进行分析,看看哪些输入是来源于前一个功能的输出。之后,对该功能的上一个功能进行同样的分析,整理其输入和输出。继续按照这样的思路循环向上,直到到达依赖链开始端的功能。
三、正确看待和处理软件测试中发现的缺陷
在说到软件测试时,多数人都会认为软件测试的目的是为了发现软件中的缺陷,编写测试用例的目的在于发现软件的缺陷。有相当数量的测试工程师把找到软件缺陷作为自己的己任,往往在找到了大量的软件缺陷后非常有成感,而在只发现为数不多的软件缺陷的时候感到异常失落。
这种观点不能说是错误的,但至少是不全面的。如果从软件工程整个过程的角度来看,可以看到一个被大多数人忽略的软件测试的目的:发现当前开发工作所采取的软件过程的缺陷,以便进行改进。
具体的说,软件测试并不仅仅是为了要找到软件中的缺陷,而是分析错误产生的原因和其产生的阶段。通过分析,从软件工程的过程方面去改进,从而避免今后有类似的错误出现,并能发现关联的潜在缺陷。这样,可以尽早的发现和修正缺陷,并可以预防某些缺陷的产生。我们在ERP软件测试中应该正确分析与利用测试的结果并有效地进行ERP软件过程改进,从根本上提高ERP软件质量,降低开发成本。
对缺陷数据作定量的统计分析是更进一步的需求,例如:缺陷数量随时间变化的趋势图;从缺陷级别、缺陷原因等不同角度统计缺陷数量等等。通过收集缺陷,对比测试用例和缺陷数据库,终达到逐步完善软件质量。
此外,还要注意测试中的缺陷集中发生现象,这和程序员编写代码的习惯有很大的关系。测试中存在群集现象,同类型的缺陷总是在相同的模块以及相关的开发人员编写的程序中被发现。
后,编写的缺陷一定要保证重现。
四、自动化测试
后一点,关于自动化测试。如今很多ERP软件测试都采用了自动化测试,然而自动化的终目标是什么?很多人以为如同工业革命消灭工人阶级和劳动者一样,在这个行业是手工测试人员。但是对于软件测试,无论在任何时候我们都不能准确地知道还有多少缺陷,因为永远有未知的缺陷,所以目前不存在能覆盖所有缺陷的手段,这意味着总需要人去参与。所以目前而言,自动化测试的终目标是解放尽量多的人手去进行更多的测试,除非能预知软件中的所有缺陷。现代化手段只是减少了而不是杜人员的需求。总有些地方是自动化测试鞭长莫及的,如果这些地方没有安排好人手和时间,那容易在工作中出问题。
还要补充一点,自动化测试是机器去识别和验证,大多数情况下验证的是产品的一些指标,却不能反映产品的真实质量。有时验证过的指标通过了,但是其他地方暴露了问题却没有检查到,不去做手工检查的话是发现不了这种缺陷的。反过来说,有时验证过的指标不通过,其实只是个小问题,大问题需要通过别的指标暴露出来。比如说输出结果和预期的不一致,实际上该有的输出项都有,只是没有排好顺序而已。