APP下载

软件测试工具分析及其应用探讨

2014-04-29张洁

计算机时代 2014年6期
关键词:软件测试风险

张洁

摘 要: 结合实践探讨了在现有生产软件的中小型企业中,如何将软件测试与软件开发相结合,使软件测试管理的质量得以提升。介绍了一些目前常用的软件测试工具及测试管理工具,对软件测试管理中应注意到的80:20问题进行阐述分析,提出对测试管理中可能存在的风险可采取一些方法来应对。实践证明,使用全程软件测试管理对解决测试管理工作中存在的问题有很大帮助。

关键词: 软件测试; 测试管理; 风险; 全程软件测试

中图分类号:TP311.5 文献标志码:A 文章编号:1006-8228(2014)06-50-03

0 引言

随着计算机硬件成本的不断下降,软件在整个计算机系统的成本中占有越来越高的比例,如何提高软件质量是整个计算机软件行业的重大课题。软件测试作为软件开发的一个重要环节,日益受到人们的重视。软件测试是为了尽可能多地找出程序中的错误,保证软件产品的高质量和可靠性,在分析、设计等各个开发阶段结束前,对客户的软件产品进行严谨的技术评审,因此,加强测试工作的组织和管理尤为重要。

大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,对于一些特殊的软件研发费的成本可能是该软件其他开发阶段成本的三倍甚至更多。仅就软件测试而言,它的目标是发现软件中的错误,但是,发现错误不是软件工程的最终目标,而是要开发出符合用户需要的软件。因此在软件测试中,从开发者的角度出发,就希望该软件产品不存在什么错误,通过测试已经表明可以满足用户的需求,但是从用户的角度的出发,则希望软件测试中发现更多隐藏的缺陷和错误。所以对于软件测试的工作人员来说,就应把着眼点放在如何尽可能地发现软件错误这个基础上,不让这些问题遗留到用户的使用阶段中去。因此对于测试,笔者认为更为合适的定义应该是:测试是为发现错误而执行程序的过程。它揭示了软件测试是一个破坏性的过程,甚至是一个“疯狂找茬”的过程,这就说明为什么大多数人都觉得它很难。

至今软件测试还是一项让人捉摸不透的事情。为确保测试工作的顺利进行,就要对其进行有效管理。在一个软件工程项目中,不同的管理者对软件测试管理有不同的理解,但无论怎样,软件测试管理[1]都要求管理者掌握软件测试的多种技术和方法,它是提高软件质量的一种重要手段。一些企业开发的软件,质量总是在较低水平徘徊,这些企业也试图提高软件质量,但总是不得要领,不知如何建立测试管理体系,设置了人员岗位,但不知如何明确职责,明确了职责但不知如何建立测试流程,建立了流程但不知如何与研发团队合作进行测试等等,问题层出不穷。

1 常用的软件测试工具及软件测试管理工具

1.1 功能测试工具

⑴ QTP是HP QuickTest Professional的简称[2],是一种自动化功能测试工具。侧重于功能的回归自动化测试,针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。

⑵ WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。

⑶ Rational Robot集成在测试人员的桌面IBM Rational Test Manager上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。

⑷ AdventNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。

⑸ SilkTest是业界领先的、用于对企业应用进行功能测试的产品,可用于测试Web、Java或是传统的C/S结构。

⑹ QA Run的测试实现方式是通过鼠标移动、键盘点击操作被测应用,即而得到相应的测试脚本,对该脚本可以进行编辑和调试。

⑺ Test Partner是一个自动化的功能测试工具,它专为测试基于微软、Java和Web技术的复杂应用而设计。

1.2 性能自动化测试工具

1.2.1 主流负载性能测试工具

⑴ QA Load:Compuware公司的QALoad是客户/服务器系统、企业资源配置(ERP)和电子商务应用的自动化负载测试工具。

⑵ SilkPerformer:一种在工业领域最高级的企业级负载测试工具。它可以模仿成千上万的用户在多协议和多计算的环境下工作。

⑶ LoadRunner:一种较高规模适应性的,自动负载测试工具,它能预测系统行为,优化性能。

⑷ WebRunner:是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试。

1.2.2 资源监控工具[3]

资源监控作为系统压力测试过程中的一个重要环节,在相关的测试工具中基本上都有很多的集成,比如Loadrunner具体包括用户执行情况、场景状态、事务响应时间、TPS、Load、CPU分析图表等。另一种性能测试监控工具Nmon是一种在AIX与各种Linux操作系统上被广泛使用的监控与分析工具,相对于其他一些系统资源监控工具来说,Nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过Nmon_Analyzer工具产生数据文件与图形化结果。

1.3 白盒测试工具

白盒测试工具[4]一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级,根据测试工具原理的不同,可分为静态测试工具和动态测试工具。白盒测试工具的选择在于对开发语言的支持、代码覆盖的深度、嵌入式软件的测试、测试的可视化等。目前测试工具主要支持的开发语言包括:标准C、C++、Visual C++、Java、Visual J+等。常用白盒测试工具有以下。

⑴ Jtest:是一个代码分析和动态类、组件测试工具,是一个集成的、易于使用和自动化的Java单元测试工具。它增强代码的稳定性,防止软件错误。

⑵ Jcontract:在系统级验证类/部件是否正确工作并被正确使用。Jcontract 是个独立工具,在功能上是Jtest 的补充。

⑶ C++ Test:自动测试C和C++类、函数或组件,而无需编写单个测试实例、测试驱动程序或桩调用。

⑷ CodeWizard:代码静态分析工具,先进的C/C++源代码分析工具,使用超过500 个编码规范自动化地标明危险的,但是编译器不能检查到的代码结构。

⑸ Jcheck:通过监视和分析当前内存中所有线程的运行状况,找到出错的根源,并且可以定位到具体是程序中的哪个方法出错,错误位于程序的哪一行。

⑹ .TEST是专为.NET开发而推出的使用方便的自动化单元级测试与静态分析工具。

⑺ BoundsChecker:Visual C++ Edition 是针对Visual C++开发人员的首选的运行时的错误检测和调试工具。

⑻ CodeReview:是最好的自动源代码分析工具。

⑼ FailSafe:是Visual Basic语言环境下的自动错误处理和恢复工具。

1.4 软件测试管理工具

测试管理包含的内容有:测试框架、测试计划与组织、测试过程管理、测试分析与缺陷管理。测试管理工具是指用工具对软件的整个测试输入、执行过程和测试结果进行管理的过程。可以提高回归测试的效率、大幅提升测试时间、测试质量、用例复用、需求覆盖等。

1.4.1 当前流行的测试管理工具[8]

⑴ TD TestDirector是全球最大的软件测试工具提供商Mercury Interactive公司生产的企业级测试管理工具,也是业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球范围内测试的管理。

⑵ QC HP-Mercury Quality Center是一个基于Web的测试管理工具,可以组织和管理应用程序测试流程的所有阶段,包括指定测试需求、计划测试、执行测试和跟踪缺陷。此外,通过Quality Center还可以创建报告和图来监控测试流程。

⑶ TestCenter是一款功能强大的测试管理工具,实现测试用例的过程管理,对测试需求过程、测试用例设计过程、业务组件设计实现过程等整个测试过程进行管理。

⑷ IBM Rational TestManager 是原Rational 产品中专业对软件测试资源进行管理的强大工具。包括测试用例管理、测试执行管理、测试脚本和报告管理等。另外,可与Robot结合做性能测试,更可以和RFT、RFP、CC、CQ等集成使用。

⑸ TestLink是sourceforge的开放源代码项目之一。作为基于Web的测试管理系统,TestLink的主要功能包括:测试需求管理、测试用例管理、测试用例对测试需求的覆盖管理、测试计划的制定、测试用例的执行、大量测试数据的度量和统计功能。

1.4.2 禅道测试管理软件

禅道是第一款国产的优秀开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。禅道在基于SCRUM管理方式基础上,又融入了国内研发现状的很多需求,比如Bug管理,测试用例管理,发布管理,文档管理等。因此禅道不仅仅是一款项目管理工具,更是一款完备的项目管理软件。

2 软件测试管理应注意的几个问题

2.1 80:20原则

首先谈一下软件开发中众所周知的80:20原则[5],就是80%的用户只使用了20%的特性。这来自于Standish Group在2002年的一项研究成果,那么这与测试管理有什么联系呢?实际经验表明,80:20原则与软件测试有着许多联系。

2.1.1 80:20与代码质量、Bug&软件测试

80%的Bug是由20%的代码造成的;90%的停机是由10%的缺陷造成的。Bug总是集中爆发在某几部分代码中,特别是严重的Bug;而大多数严重的问题都是由少数几个Bug导致的。Windows与Office中80%的错误与崩溃是由检测出的20%的Bug造成的。

2.1.2 80:20与修改频率

哪些代码被修改了,修改的频率是多少。Michael Feathers发现80:20原则也适用于代码随时间变化的频率:80%的修改发生在20%的代码上,很多代码一旦写完之后就再也不会被修改了。还有些代码一直都在发生着变化:20%的特性花了80%的时间,他们经常会根据需求的变化而发生变化。

2.1.3 80:20与编程时间

前80%的代码只花了20%的时间,而剩下的20%的代码则花了其余的80%的时间。完成某个功能通常并不会花太多时间,不过在背后通常还会有大量工作要做,比如处理边界情况、处理错误,确保系统的性能与可伸缩性,寻找并修复各种Bug,部署前的各种调整等等。

2.1.4 80:20与软件测试管理

时刻谨记80:20原则可以节省大量的金钱与时间,将精力集中于重要的事情上可以增加成功性。比如重要的特性及大多数严重的Bug出现的代码区域,经常会发生变化的代码。这在整个软件测试阶段都是管理者和测试人员要充分注意并考虑到的问题。

2.2 软件测试管理中的风险管理

2.2.1 风险

风险[6]是一种不确定的事件或条件,一旦发生,会对至少一个项目目标造成影响。引起风险的原因有很多,要根据不同的类型来确定最佳的方法以解决风险造成的不良影响。

2.2.2 风险管理

风险管理包括风险管理规划、风险识别、风险分析、风险应对规划和风险监控等各个过程。项目风险管理的目标在于提高项目积极事件的概率和影响,降低项目消极事件的概率和影响。对于已识别出的风险,需要分析其发生概率和影响程度,并进行优先级排序,优先处理高概率和高影响风险。

2.2.3 风险识别

风险识别是系统化地识别已知的和可预测的风险,才能提前采取措施,尽可能避免这些风险的发生,最重要的是降低风险可能造成损失的程度。

2.2.4 风险评估

风险评估是对已识别风险的影响和可能性大小的分析过程。从经验来看,许多最终导致项目失败、延期、客户投诉的风险,都是从不起眼的小风险开始,由于这些小风险长时间得不到重视和解决,最终导致了项目的交付。

2.3 软件测试管理中的全程软件测试[7]

按传统的软件测试,开发人员完成开发工作之后,交付给测试人员,这种模式下,测试人员不能及早发现需求阶段的缺陷,同时测试工作的开展也滞后了,产品质量得不到有效的过程控制和分析,最终造成项目拖延。如采用全程软件测试,测试人员贯穿需求阶段、开发阶段、发布阶段和运营阶段这四个阶段,开展测试活动。

2.3.1 需求阶段测试

在需求阶段,开发人员对用户的需求进行分析、整理、估时,测试人员应参与其中,检查功能性需求和非功能性需求是否描述清晰,其中可以将非功能性需求作为验收要点,测试人员要发挥作用,减少含混性需求留到开发阶段,同时协助开发人员做好时间估算。

2.3.2 开发阶段测试

在此阶段,开发人员要进行架构评审、功能要点确认、编码开发、单元测试、开发自测、Bug Fix等工作,而作为测试人员通常要先进行功能确认,即在开发人员进行编码前,针对需求处理的用户需求,与开发人员进行确认,修正理解偏差,确保需求理解一致。接下来进行测试用例设计、用例评审、测试探索(包括功能测试、Bug Tracking、回归测试、系统测试、验收测试),另外,测试人员应每天发布时间进度表,让团队了解当前进度情况,总结问题,寻求耗时超过预期时间任务的解决办法。每个项目在开发/测试阶段中,最好能构建缺陷经验库,避免多走弯路,测试人员还可提供相关checklist帮助开发人员在编码过程中关注开发自测的要点,从而提升质量。

2.3.3 发布阶段测试

当一个项目处于发布阶段,开发人员进行上线申请、上线部署、服务监控时,作为测试人员应完成验收测试,提供测试报告,给出测试数据度量。另外,测试人员还有一项重要工作,就是对当前版本的缺陷进行统计分析。总之测试人员在此阶段应当持续反馈、改进、总结每个版本发生的问题,并对缺陷进行分析,总结出一些规律,帮助开发人员建立良好的习惯,改进代码的质量。

2.3.4 运营阶段测试

运营阶段并不是终止阶段,此时开发人员进行故障登记,而测试人员则要进行版本问题反馈和改进提议——对软件运营发生的问题,总结反馈,提出改进建议,并且跟踪实施;生产故障分析——协助开发排查生产故障,避免测试场景的遗漏。

全程软件测试实践,强调的是贯穿每个阶段的测试活动,不论是开发、还是测试,要理解双方的活动价值,什么时候该做什么事情,什么事情该做到什么程度才算好,保证每个环节的质量,才能够保证产品的全程质量。另外产品质量不是测试出来的,而是构建过程中沉淀下来的,开发人员的素养、测试人员的素养,以及团队对开发测试过程的重视程度,决定了产品质量。

3 结束语

软件测试囊括了软件开发领域,软件测试并不是保证产品质量的最后一道防线,测试人员应更全局地看待整个软件项目,全面地掌控整个产品。测试人员做的应该是从最终用户角度考虑的测试,使用合适的软件测试工具和不断提高管理水平,构建一套适合本企业研发人员的测试体系,帮助测试人员确保所有的测试和底层测试框架都被正确有效地使用并保证整个软件产品交付使用。

参考文献:

[1] 郑文强,马均飞.软件测试管理[M].电子工业出版社,2010.

[2] 杜丽洁.基于QTP自动化测试框架的开发与应用[D].武汉理工大学,

2012.

[3] 资源监测工具.http://www.oschina.net/p/glances,2014.

[4] 白盒测试工具大全.http://www.ltesting.net/html/05/n-155905.

html.2008

[5] 在软件开发中应用80:20原则.http://www.kuqin.com/shuoit/

20131120/336423.html.2013

[6] 赵震.软件测试风险分析[J].科技信息,2012.16.

[7] 朱少民.全程软件测试[M].电子工业出版社,2007.

[8] http://www.spasvo.com/

[9] 王立新.软件测试数据的高效生成及测试方法研究[D].东华大学,

2011.

[10] 刘冰川.软件缺陷分析与管理系统的设计与实现[D].哈尔滨工业大

学,2013.

[11] 邱彦卿.软件测试自动化技术及其应用研究[D].华中科技大学,

2007.

猜你喜欢

软件测试风险
基于OBE的软件测试课程教学改革探索
航天软件测试模型构建与应用
EXCEL和VBA实现软件测试记录管理
关于软件测试技术应用与发展趋势研究
我国P2P网络借贷的风险和监管问题研究
浅析应收账款的产生原因和对策
中国经济转型的结构性特征、风险与效率提升路径
互联网金融的风险分析与管理
企业纳税筹划风险及防范措施
智能电能表软件测试技术概述