自动化测试成功的关键

来源:互联网 发布:库里季后赛每场数据 编辑:程序博客网 时间:2024/04/27 18:33

自动化测试成功的关键

来自:IBM
        在本文中,我们要讨论为什么进行测试,尤其是自动化测试,是必需的。然后,我们将介绍制定计划的概念:为什么制定计划是如此的重要?在随后的文章中,我们将分解测试计划中的不同因素,并且研究如何进行制定计划的过程才能最大程度地增加成功的机会。
        现代客户端/服务器应用程序是非常复杂的,因此测试也就成为开发过程中关键的并且至关重要的一部分。现在,没有人会考虑(或者承认)不对自己开发的软件进行测试工作。但是,研究和调查表明,在软件开发过程中,制定测试计划却常常是优先级较低的工作项目。而且,更加糟糕的是,计划往往没有被执行,或者即使执行了,也进行的不很完整、不很准确,或者没有持续进行。
       假设我们都赞成测试是必要的,那么我们接下来必须回答这些问题:我们如何进行测试?实际上都包括哪些内容?我们如何保证已经进行了有效的工作,并且真正地改善了应用程序的质量?
       答案很简单:制定计划。
       本文将评审在软件生命周期中制定测试计划的作用,以及有效制定测试计划的有关概念。在本文中,我们要讨论为什么进行测试,尤其是自动化测试,是必需的。然后,我们将介绍制定计划的概念:为什么制定计划是如此的重要?在随后的文章中,我们将分解测试计划中的不同因素,并且研究如何进行制定计划的过程才能最大程度地增加成功的机会。

1. 为什么花费精力制定计划?

       现在看来,没有怎么制定测试计划而造成的后果比以前更加明显了。失败的案例有很多--看看报纸或者杂志就知道了。还有一些明显的低质量软件的案例,它们包括:
       AT&T-一个软件交换系统,系统崩溃造成了美国几乎24小时的长距离通信中断。仅仅修改了一行源代码就解决了问题。
       Denvor机场--软件的缺陷延误了机场的开放几乎长达9个月之久,据估算,每天花费纳税人大概$500,000。
Ashton-Tate--在80年代,Ashton-Tate的DBASE软件是基于PC的数据库应用程序的实际标准。版本中的缺陷导致了利润的减少,最终造成了Ashton-Tate(和DBASE)的转让。Ashton-Tate最后被Borland(拥有极具竞争力的数据库管理应用程序,Paradox)收购。
       当然,这些都是知名度很高的公司和项目。这些问题不会出现在您的公司中,对吗?
       错误!我们都要面对软件的缺陷,在我们的组织中与外界都是一样,这些问题都是关键的,也是很明显的。这里有一些低质量软件的更加共同的症状:
l      生产力损失
系统性能;
缺少功能/特性;
没有满足用户需求--无法销售;
l      用户挫折感
强迫用户以不直观的方式执行任务;
循环工作;
延迟;
没有满足预期目标;
存在用户操作错误与理解错误;
l    系统崩溃,数据丢失/破坏

2.客户端/服务器应用程序到底有什么差别?

       客户端/服务器应用程序为质量保证专家带来了不同的挑战,下面是一些比较重要的内容:

2.1 快速应用程序开发

      大多数的客户端/服务器应用程序都使用快速程序开发(RAD)方法学进行开发。测试人员必须"努力跟上"这些较短的开发周期。早些时候,非客户端/服务器应用程序常常使用18-24个月就完成了整个的开发过程和初始部署。现在,使用RAD,应用程序的发布需要经过多次部署或者"块"。每个块都基于以前的版本,并且包括改善、修改和修理。每个块都需要多次创建或者迭代的原型。每个块都需要进行测试,并且在3-6个月的更短时间内完成。

2.2 客户端/服务器架构

        当前的客户端/服务器应用程序都需要很多的软件组件结合起来以实现功能,包括客户端应用程序、工作站操作系统、网络和数据库管理系统。常常也包括其他的组件,例如为实现正确执行而包含的附加源代码的DLL(动态连接库)、事务处理器或者应用程序与数据库管理服务。软件的每个附加"层"都在客户端/服务器架构中增加了额外的复杂度(并且需要进行测试)。

2.3 多种类型的测试

      另外,测试客户端/服务器应用程序也需要使用许多不同类型的测试方法,例如,功能测试、用户界面、性能测试以及配置测试。这些测试都针对一个或几个测试目标。为了防止测试迂回不前或者尝试同时测试所有内容,每种测试必须制定仔细的计划。当您进行自动化测试时,这一点尤其正确。

2.4 数据

      对于我们执行的每种类型的测试,都必须使用数据。数据对于测试的执行和成功完成来说是至关重要的,因为要使用数据识别最初的应用程序数据状态(条件),并且调用或者引出特定的事件或者操作。而且也要使用数据来验证测试事件或者操作是否运行正常!

3. 制定测试计划的其他原因

      如前所述,现代的应用程序与以前开发的应用程序相比具有很大的不同。客户端/服务器技术加强了我们开发与部署以任务关键型的企业系统的能力,而且花费的周期更短,提供的功能更加强大。客户端/服务器应用程序也为开发人员与终端用户提供了大量的选择和控制。但是使用这些好处的同时,也需要加强测试。

3.1 测试自动化

       逐渐地,测试软件必须使用测试自动化工具和技术,以满足具有挑战性的日程安排。但是,单单使用工具还不足够,成功的测试自动化需要制定测试计划。在没有进行计划的条件下,实施测试自动化只会带来自动化的混乱。使用测试自动化工具,我们可以管理混乱并且识别过程中造成混乱的因素,同时管理项目费用(例如"未被文档化的特性/变更")。
      测试自动化是使软件测试人员跟上开发人员脚步的惟一方式,软件测试人员可以像测试早先构建版本那样,充满信心地、可靠地测试新构建的版本。
       但是测试常常为测试人员带来挑战,他们必须最有效地、生产力极高地使用时间,进行工作。测试自动化引入了一种新型的资源需求--测试开发。手工测试需要进行测试设计,以识别测试的内容和方式,但是由于没有使用工具,所以也没有必要开发任何的测试脚本或过程,仅仅来调试一下系统,然后使用键盘就可以了!如果对于每个要进行的测试,需要使用的资源仅仅是键盘,那么就可以看出,您并没有有效地利用时间。
      测试开发是一种新技术,在设计完成之后,需要使用工具并且创建测试过程。作为一种有效的方式,可以使用三名不同的技术员,并确保将最高级的资源用于设计与制定计划任务上,而将中级资源(或外界资源)用于开发与执行。这样可以增强职员所需的能力,并且共享资源,同时也不会对项目计划产生什么影响。

3.2 缺陷管理与分析

      缺陷是肯定会被发现的。这是进行测试的结果,或者说是目的,所以我们必须对缺陷的生命周期进行识别和沟通,同时分析结果以确保缺陷已被有效地并且高效地处理。制定测试计划能够确保缺陷管理与分析是一笔面向整个项目的宝贵资产,而不会带来阻碍。如果您还没有配备缺陷管理系统和过程,或者已具有但是工作得不是很理想,那么制定测试计划就会给您带来创建(或者修正)它的机会。
      制定测试计划也可以识别应该使用什么样的度量方法。制定测试计划可以处理您所度量软件质量程度的问题。它也可以处理如何度量与沟通缺陷密度或缺陷趋势的问题。
       另外,制定测试计划可以识别与沟通数据收集与分布的方式,也应该指明使用报告的格式,以及作出报告的时间。

3.3 风险分析

      制定测试计划提供了进行风险评估的机会。风险与不利因素对于组织来说是就一场噩梦,但是它们也是可以被控制的。不过首先必须对其进行分析。风险分析有助于制定测试工作的优先级,并且关注所进行的工作,确保测试内容的正确性,以正确的顺序解决正确的问题。(所谓正确,是以组织的风险与可接收度为基础的。)
对于每个项目来说,都要进行风险评估并将其用于识别潜在的风险或者未发现缺陷带来的影响。风险应该用来评估缺陷对于直接终端用户、数据或者其他终端用户和应用程序带来的影响。这些数据可以用来建立测试优先级,并且评估所有约束,例如面市时间、预算或者费用,或者质量问题。
       风险评估还应该包括对于现有标准、指南和需求的评审。其目的就是为了分析这三种文档,判断它们对于项目是否恰当,并且由此进行实施或者修正。
       评审任何可能影响或者对项目带来冲击的外界因素也是很重要的。这些影响可以包括特定用户请求、规范的需求、或者市场条件,这其中的任何一项都可以变更风险或者优先级的评估结果。

3.4 过程改善

       制定测试计划就是为测试过程制定文档。为测试制定计划不仅仅为文档化并且沟通测试工作提供机会,也可以评审测试工作的有效性。
l      您曾听到过以下对话吗:
"用户报告发现缺陷在…,难道你没有测试它吗?";
"这是如此的明显,你怎么能发布带有这种缺陷的产品呢?";
"我知道你已经说了需要三个月的时间进行测试,但是你只有两个…";
       改善产品质量(具有较少的软件缺陷)需要对产品开发过程进行持续的完善工作。开发测试计划可以使测试人员能够识别、执行、度量并且改善他们的测试工作。
       总而言之,可以从几个理由来说明制定良好计划的自动化测试的必要性。首先,不进行测试的组织会大大增加出现重大系统故障的可能,带来延迟,花费巨资进行修复,而且还可能潜在地带来对于客户信心无法修补的破坏。其次,现代客户端/服务器应用程序的本质允许快速地开发出复杂度很高的系统,该系统完全无法使用传统的手工方法进行正确的测试。最后,制定计划的目的就是为了管理不断增加的测试过程,分析并且跟踪已被发现的缺陷,执行关键性风险分析,并且持续改善测试与开发过程。