软件测试自动化应用分析
2011-02-19冯伟,李波,何倩
冯 伟,李 波,何 倩
FENG Wei,LI Bo,HE Qian
(唐山学院,唐山 063020)
0 引言
软件测试是软件生命周期的一个重要阶段,测试质量的好坏,直接决定着软件产品能否稳定运行。软件测试中的自动化测试技术是目前有待进一步发展的技术,因为软件测试的工作量非常大(大约占总体开发时间的40%到50%),而其中又有大部分工作适合自动化,因此,测试的改进会对整个软件项目开发工作的成本、质量和周期带来非常明显的效果。
1 传统软件测试存在的问题
在软件开发过程中,首先要求我们通过测试验证所开发的软件在功能上满足需求分析中的描述,性能上满足客户要求的承载负荷和相应的响应时间、运算量要求;另一方面,工作人员还要在预算范围内尽早发布软件以便减少开支。
传统的软件测试流程一般是先在软件开发过程中进行少量的单元测试,然后在整个软件开发结束阶段,集中进行大量的测试,包括功能和性能的集成测试和系统测试[1]。由于软件项目越来越复杂,这种软件测试的流程给项目开发者带来以下问题:
1)项目进程较难把握
项目管理难度加大,许多的软件错误往往到了软件测试后期才被发现,此时解决问题耗费的代价很难估算,从而使项目进程无法控制,另外在软件设计过程中,相关人员无法准确了解软件的质量状况,无形中增大了项目管理和开发的难度。
2)项目风险较难控制
项目风险在开发的后期才能得以降低。通常在测试人员进行了系统测试以后,方能确定整个开发过程能否满足用户在系统功能、性能和可靠性方面的需求。
3)项目开发经费超出预期
在整个项目开发周期中,错误发现的越晚,修复成本越高,此时对问题解决地不及时将导致整个项目成本的快速增加。
2 软件自动化测试的分析
2.1 软件自动化测试的定义
目前,对于软件自动化测试的常规定义为“使用一种自动化测试工具来验证各种软件测试的需求,它包括测试活动的管理与实施。”
通常,我们所进行的自动化测试指的是自动化测试一个已经使用了正式的测验流程的手工过程[2]。
2.2 引入软件测试自动化的原因
通常,软件测试中有许多是重复性的、非智力性的和非创造性的操作,通过计算机就可以代替人工去完成这样的任务,使程序员从纷繁复杂的同一化工作中解脱出来,转而进行更深层次的项目测试工作。
软件自动化测试是基于手工测试而存在的,主要通过相应的软件测试工具、脚本等来实现,具有较好的可操作性、可重复性和高效率等特点。
自动化测试的测试效率高,成本低廉,可将重复性强的测试由手工转为计算机自动实现;非常适合快速的回归测试,改变人工测试很难对新的迭代版本作出快速评估的局面;避免人工测试容易犯的错误,并且对非常耗费时间的边界值测试,可以快速准确的进行对多用户的并发操作等人工测试很难实现的操作,自动测试很容易就可以完成。
因此,测试自动化的实施是软件测试行业一个发展方向,如果掌握了这个领域的先进技术,对于一个软件企业的核心竞争力和未来的发展,都有巨大的推动作用。
2.3 常见的软件自动化测试工具
单元测试 Java测试工具:JUnit功能级测试Mercury Interactive公司的WinRunner,QuickTest Pro,IBM Rational公司的Rational Robot,Rational Xde Tester,Compuware公司的QARun,RadView公司的WebFT,Empirix公司的e-Tester等压力测试 Mercury Interactive公司的Winload,Compuware公司的QALoad负载测试 Mercury Interactive公司的LoadRunner Web测试工具 Empirix公司的e-Test Suite Web系统测试工具 MicroSoft公司的Web Application Stress Tool回归测试 Rational公司的 Team Test性能测试Mercury Interactive公司的Loadrunner,Compuware公司的QALoad,MicroSoft公司的Web Application Stress Tool等测试流程管理工具IBM Rational公司的Rational Testmanager,Mercury Interactive公司的TestDirector缺陷跟踪工具 Compuware公司的高级变更和缺陷管理工具:TrackRecord白盒测试IBM Rational公司的Rational Purifyplus,Compuware公司的DevPartner Studio Professional Edition黑盒测试 QACenter,SQATeamtest,Rational Visual Test
2.4 测试脚本的设计
脚本是一组由测试工具执行的代码集合,可以通过录制测试的操作产生,然后再做修改,这样可以减少脚本编程的工作量。当然,也可以直接用脚本语言编写脚本。脚本技术可以分为线性脚本、结构化脚本、共享脚本、数据驱动脚本和关键字驱动脚本几类。编辑脚本的原则就是尽量覆盖更多的测试项,兼容性更强一些,使得测试新项目时能很容易继承和修改原有的脚本,减轻后续的工作量。
3 软件自动化测试流程的改进
3.1 确定要测试的产品进行自动化测试的可行性
自动化测试能提高测试效率,但对于周期短、时间紧迫的项目不宜采用自动化测试。推行自动化测试的前期工作相当庞大,将企业级自动化测试框架应用到一个项目中也要评估其合适性,因此决不能盲目地应用到一个测试项目中,尤其不适合周期短的项目,因为非常可能需要大量的测试框架的准备和实施而会被拖跨。
比如进行一个单元测试自动化,如果开发了上百行的测试代码去测试一个代码行仅为10行的函数,我们先不考虑自动化测试开发之后的维护成本,但是至少可以有一个直观的认识:从手工测试向自动化测试的转变是要付出的成本的,而且这个投入要远比做一次手工测试的代价要高,所以必须首先要确定对一个软件项目进行自动化测试是否合适。
3.2 对测试的软件项目进行风险评估
资金风险,虽然有些项目具备实施自动化测试的条件,但还是要引入自动化测试后组织结构调整等方面的成本估算是很必要的。
切入方式的风险,一定要将自动化测试与手工测试结合起来使用,设计合理的配比使测试能够顺利进行。开始可以设置80%的测试采用手工测试,当这些目标都实现了,再将自动化测试率提高。
时间估算,在评估完前面几项指标后,需要估算实施测试自动化的时间周期,以防止浪费不必要的时间,减少在人员、资金、资源投入上的无端消耗。虽然到测试自动化步入正轨以后,会起到事半功倍的效果,但前期的投入巨大,要全面考虑各种因素,明确实施计划并按计划严格执行,才能最大限度降低风险。
工作流程变更风险,测试团队乃至整个开发组织实施测试自动化,或多或少会因为适应测试工具的工作流程,带来团队的测试流程、开发流程的相应变更,而且,如果变更不合理,会引起团队成员的诸多抱怨情绪,所以应该尽量减少这种变更,并克服变更中可能存在的困难。
3.3 制定周密的测试计划
测试计划包括测试环境的建立、确定测试策略、测试设计流程控制和容错处理等。
根据开发的软件项目特点,制定完善的计划,设计好测试的各个步骤,由于自动化测试对软件的设计质量要求比较高,另外对突发事件和不能由软件解决的问题就无能为力,所以事先应确定出现测试异常情况时解决问题的方案,能较快地将问题解决,减少不必要的开销。
3.4 结合手工测试和自动化测试两种方案
测试自动化可以带来非常明显的收益,但是不能完全依赖于自动测试,它只是测试工作的一部分,是对人工测试的一种补充。自动化测试绝不能代替手工测试,它们各有各自的特点,其测试对象和测试范围都不一样。根据报道,自动化测试只能发现15%的缺陷,而手工测试可以发现85%的缺陷。在进行自动化测试前,首先要建立一个对软件测试自动化的认识观。单元测试、集成测试、系统负载测试、性能测试、稳定性测试、可靠性测试等比较适合采用自动化测试。对于那种不稳定软件的测试、开发周期很短的软件、一次性的软件等不适合自动化测试。我们可以根据实际情况进行选择。多数情况下,手工测试和自动化测试应该相结合,以最有效的方法来完成测试任务。
自动化测试工具在进行功能测试时,其准确的含义是回归测试工具,这时工具不能发现更多的新问题,但可以保证对已经测试过部分的准确性和客观性。
3.5 总结软件自动化测试的过程
将整个测试过程进行记录,总结过程中的经验和教训,生成测试报告,找出解决同类问题的思路和方法,以便以后测试类似的软件项目时能重复利用前面取得的成果,如果有条件的话,在测试的基础上设计相关的测试模板,如果以后有类似架构的软件项目的话,可以沿用前面的这种模式进行测试,从而大大地提高测试的效率。
4 结束语
总之,软件项目的自动化测试在国内的发展还不是很成熟,没有真正地形成一整套合理有效的规范。在实际应用中,我们要结合传统的手工测试和自动化测试两种方法的特点,发挥它们的优势,让自动化测试策略及工具的实现成为测试人员手中的一件利器,把他们从枯燥的重复性工作中解脱出来,将更多精力和时间专注于需要智能判断的复杂工作和其他新的测试用例。另外,我们要避免将自动化测试和测试人员等同起来,不要对自动化测试要求过高。我们要对自动化测试树立一个正确的观感,清醒地认识到自动化测试是人工测试的有力补充,而无法取代测试人员的地位。任何单一的技术或操作方式上的进步,都不能独立地保证在短时间内大规模地提高软件的开发效率、稳定性和可维护性。自动化测试也是一个积累经验、循序渐进的过程,不能指望软件测试人员在短时间内能将所有测试实现自动化。成功的自动化测试需要制定相应的自动化测试计划,合理的自动化测试策略是自动化测试实施是否成功的第一步。只有充分考虑到自身实施自动化测试的风险、资源和目标后,才能制定出适合自己的自动化测试策略,并最终提高测试效率,降低测试成本。对每个有测试部门或从事测试业务的企业,都应该多借鉴国内外先进的测试经验,参考业界流行的行业标准,找到适合自己团队的测试方法和模式,创造更大的社会价值。
[1]Elfriede Dustin Jeff Rashka John Paul.于秀山,胡兢玉,译.软件自动化测试:引入、管理与实施[M].电子工业出版社.
[2]干晓鸣.软件自动化测试的合理应用.计算机应用与软件.
[3]软件测试自动化技术.IBM Rational 技术白皮书.
[4]柳胜.软件自动化测试框架设计与实践[M].人民邮电出版社.