随着软件开发技术和工具的提高,软件工程和软件过程实践的推广, 软件测试日益得到重视和专业化。自动化测试更成为热门话题。下面就对自动化测试技术以及其利弊作一个简要的介绍。
首先要说一下什么是测试。软件测试(Software testing)是软件生存期(Software life cycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试的目的在于发现老缺陷。而手工测试的目的在于发现新缺陷。测试自动化涉及到测试流程、测试体系、自动化化编译、持续集成、自动发布测试系统以及自动化测试等方面整合。也就是说要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。首先公司从资金、管理上支持您,其次要有专门的测试团队去建立适合自动化测试的测试流程、测试体系;其次就是把原代码从受控库中取出、编译、集成、发布可运行系统、进行自动化的单元测试和自动化的功能测试的过程。
自动测试有以下几个方面用途:
一、测试数据生成程序(Test case generator)
功能:自动生成大量输入数据
主要用于:测试系统在实际环境中的性能(例如测试数据库管理系统)自动校核系统输出(若输出数据的语法可以被形式地说明)
缺点:不能自动生成预期的输出,因此用途有限。
二、动态分析程序(Dynamic analyzer)
功能:分析程序中每个语句的执行次数。
组成:检测部分(插入检测语句,负责收集、整理语句执行次数)显示部分(以容易理解的形式印出收集的信息。)
用途:发现测试中没有执行的语句,以增加相应的测试用例;发现不按要求终结的循环;发现不应执行却执行了的代码,及应执行而未执行的代码。
三、静态分析程序(Static analyzer)
不执行程序,仅扫描程序的正文,从中寻找可能导致错误的异常情况。
四、文件比较程序(File inspector)
主要步骤:
⑴ 建立一个文件存放预期的正确结果;
⑵ 执行测试,将输出数据存进另一个文件;
⑶ 使用文件比较程序来比较上述两个文件,印出两者之差异。
自动化测试的好处 :
一、 对新版本执行回归测试
对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试, 从而可以让测试达到测试每个特征的目的。
二、 更多更频繁的测试
我们的产品向市场的发布周期是3个月,也就是我们的开发周期只有短短的3个月,而在测试期间是每天/每2天都要发布一个版本供测试人员测试,一个系统的功能点有几千个上万个,人工测试是非常的耗时和繁琐,这样必然会使测试效率低下。
三、替代手工测试的困难
几千几万个用户有些非功能性方面的测试:压力测试、并发测试、大数据量测试、崩溃性测试,用人来测试是不可能达到的。 在没有引入自动化测试工具之前,为了测试并发,研发中心的一、两百号人在研发经理的口令, 大家同时按下同一个按钮。回想起这中情景也蛮有意思的。
四、具有一致性和可重复性
由于每次自动化测试运行的脚本是相同的, 所以每次执行的测试具有一致性, 人是很难做到的. 由于自动化测试的一致性,很容易发现被测软件的任何改变。
五、更好的利用资源
理想的自动化测试能够按计划完全自动的运行, 在开发人员和测试人员不可能实行三班倒的情况下, 自动化测试可以胜任这个任务, 完全可以在周末和晚上执行测试. 这样充分的利用了公司的资源,也避免了开发和测试之间的等待.
六、解决测试与开发之间的矛盾
通常在开发的末期,进入集成测试阶段, 由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间.事实上在叠代周期很短的开发模式中,存在更多的矛盾, 但自动化测试可以解决其中的主要矛盾。
七、增加软件信任度
总之,自动化测试的好处和收益是很明显的,但也只有顺利事实了自动化测试才能从中获得它的益处。
自动化测试的误区
一、期望自动化测试能取代手工测试
不能期望自动化测试来取代手工测试, 测试主要还是要靠人工的。
二、期望自动测试发现大量新缺陷
同样不能期望自动化测试去发现更多新的缺陷, 事实证明新缺陷越多,自动化测试失败的几率就越大。发现更多的新缺陷应该是手工测试的主要目的。测试专家James Bach总结得 85%的缺陷靠手工发现,而自动化测试只能发现15%的缺陷。
三、工具本身不具有想象力
工具毕竟是工具,出现一些需要思考、体验、界面美观方面的测试,自动化测试工具无能为力。
四、技术问题、组织问题、脚本维护
自动化测试的推行,有很多阻力,比如组织是否重视, 是否成立这样的测试团队,是否有这样的技术水平,对于测试脚本的维护工作量也挺大的,是否值得维护等等问题都必须考虑。不适合自动化测试情况
自动化测试不是适合所有的项目。
一、定制型项目
为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化化测试。
二、项目周期很短的项目
项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
三、业务规则复杂的对象
业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
四、美观、声音、易用性测试
人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试
五、测试很少运行:一个月只运行一次
测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
六、软件不稳定
软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
七、涉及物理交互
工具很难完成与物理设备的交互,比如刷卡的测试等。
什么样的情况适合自动化测试
一、产品型项目
产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担, 同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
二、增量式开发、持续集成项目
由于这种开发模式是频繁的发布新版本进行测试,也就需要自动化测试来频繁的测试,以便把人从中解脱出来测试新的功能。
三、能够自动编译、自动发布的系统
要能够完全实现自动化测试,必须能够具有自动化编译,自动化发布系统进行测试的功能。 当然,不能达到这个要求也可以在手工干预下进行自动化测试。
四、回归测试
回归测试试自动化测试的强项,它能够很好的确保你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
五、多次重复、机械性动作
自动化测试最喜欢测试:多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
六、需要频繁运行测试
在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。
七、将烦琐的任务转化为自动化测试
总之,软件测试实现全部自动化,基本上是一个不可能的任务。在测试过程中,时间是一个比较重要的指标,在一个不成熟的产品阶段,大量使用auto测试,有时反而带来低效率。而且,在很复杂的系统中,全面采用auto测试很可能带来更大的系统开销。并且,很多UI的测试和某些特殊的功能测试,如一些拓扑结构的测试,和管理配置的测试是无法实现自动化测试的。所以,自动化测试依据于产品成熟度不断成长,但是很难全面自动化。所以,适当的使用自动化测试,能够为软件开发带来很大的帮助。
参考文献:《软件工程》 王长元 李普惠 等编著。
共0条 [查看全部] 网友评论