摘要:软件测试是目前用来验证软件是否能够完成所期望的功能的唯一有效的方法。以往的软件测试一直采用手工测试,但随着软件日益复杂和庞大,手工软件测试设计的大量的重复性的工作,将耗费更大量的时间和人力,软件测试的开销将不断增大,如何更有效的进行测试就成为一个新的讨论热点,因而诞生了软件自动化测。软件自动化测试的设计要符合一定的标准,其使用也有着特定的适用范围。
关键词:软件危机;软件测试;系统测试
软件危机是软件界的热门话题。由于软件中的错误会导致软件开发在成本、进度和质量上的严重失控,所以保证软件质量的测试在软件生命周期中占据了及其重要的地位。
软件测试是目前用来验证软件是否能够完成所期望的功能的唯一有效的方法。软件测试是一种以受控的方式执行被测试的软件,以验证或者证明被测试的软件的行为或者功能符合设计该软件的目的或者说明规范。所谓受控的方式应该包括正常条件和非正常条件,即故意的去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。
以往的软件测试一直采用手工测试,但随着软件日益复杂和庞大,手工软件测试设计的大量的重复性的工作,将耗费更大量的时间和人力,软件测试的开销将不断增大,如何更有效的进行测试就成为一个新的讨论热点,因而诞生了软件自动化测。现在,软件测试自动化已成为人们日益关注的一个焦点。
所谓软件自动化测试就是执行用某种程序设计语言编制的自动测试程序,控制被测软件的执行,模拟手动测试步骤完成全自动或半自动测试。全自动测试过程中,不需要人工干预,由程序自动完成测试的全过程;而半自动测试就是指在自动测试过程中,需要由人工手动输入测试用例或选择测试路径,再由自动测试程序按照人工指定的要求完成自动测试。
软件测试自动化不能解决测试中的所有问题,也不意味着任何软件测试都可以自动化。要成功地实现软件测试自动化,需要周密的计划和大量艰苦的工作,软件测试自动化的开发人员必须清楚地认识到该自动化什么。
一、软件自动化测试的设计标准
软件自动化测试的设计标准主要应考虑以下几个方面:
1、自动化回归测试
从软件测试自动化的目的知道,软件测试自动化所获得的好处来自于自动测试工具的重复使用,所以应该把回归测试作为自动化的首要目标。软件自动测试的设计和开发人员应该自动化那些每个软件都需要重复的测试,一次性的测试是不值得自动化的。
2、自动化对稳定的应用进行的测试
在自动化对某一个应用的测试之前,首先应该确定该应用是否稳定。对一个在将来可能发生变化的应用的测试进行自动化是没有必要的,因为应用一旦改变,相应的自动测试代码就要随之改动,所以应该只自动化稳定应用的测试。
3、自动化没有时间依赖性的测试
不要自动化与复杂的时间问题相关联的测试。自动化一个与复杂的时间问题相关联的测试的工作量是不具备时间依赖性的测试的工作量的许多倍,并且最后的结果也很难满足测试的要求。作为软件测试自动化的开发人员必须清醒地认识到,如果一个测试很难自动化,那就应该把它留给手工测试。100%的自动化并不是追求的目标,把一些过于复杂的测试仍然用手工方式进行是合理的。
4、自动化重复性测试
如果一个测试经常重复使用,并且使用这个测试不方便,那么就应该考虑自动化这个测试。
5、自动化已经实现的手工测试用例
在对软件测试自动化前,通常已经有了很多实现的详细的手工测试用例,从中选择可以自动化的手工测试用例自动化。
6、合理限制自动化的范围
百分之百的自动化并不是追求的目标,过大追求自动化的范围只会取得其反的后果。软件测试自动化的开发人员应该在一个合理的可以进行自动化的范围内投入精力,在能力许可的情况下,再逐步扩大测试自动化的范围。
二、典型系统级测试的种类
从软件测试自动化的定义、目的和自动化测试的标准,很容易推出软件自动化测试主要适用于系统级的测试,而不适用于单元测试。典型的系统级的测试主要包括:集成测试、回归测试、系统测试和性能测试。
1、集成测试
集成测试是指在系统的各个功能模块集成为一个完整的软件系统初期所进行的测试。这一阶段,主要集中于测试顶层模块和重要模块,自动测试程序相对较小,只需完成简单的功能测试,不需要进行深入测试。由于在软件开发周期中,同一软件的功能结构不可能有大的变化,所以自动测试程序需要完成以下测试目标:
一是系统顶层模块测试;
二是系统重要模块测试;
三是与系统重要模块相关的底层模块测试。
2、回归测试
回归测试是指在软件测试过程中,由于需要软件开发部门及时修改软件错误,所以就会产生新的测试版本。在每个测试版本提交测试部门以后,测试部门的人员首先对其要进行回归测试,以检测软件是否达到基本测试目标。一般来讲,回归测试的方法和测试用例是相对固定的,所以可以用自动测试程序完成这一测试。
在回归测试过程中,自动测试程序主要完成以下测试目标:
一是集中测试用户相关功能;
二是只对测试用例子集进行选择功能测试;
三是决定接受或拒收这一测试版本。
3、系统测试
系统测试是指在系统已成为一个相对稳定的可测试版本以后,对系统进行的大规模的、多周期的、全面的功能测试。自动测试程序在这一阶段中,可以完成对全部功能或部分功能的测试。
在系统测试过程中,自动测试程序可以完成以下测试目标:
一是覆盖系统所有功能;
二是覆盖系统关键功能;
三是利用特殊的测试用例进行极限测试和边界测试;
四是完成所有与文本相关的用户界面和联机帮助文档的测试。
4、性能测试
性能测试是通过对被测系统进行长时间、多用户、大数据量等压力负载的测试,以验证软件系统是否能够达到用户提出的性指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。性能测试类型包括负载测试,强度测试,容量测试等。
在性能测试过程中,自动化测试可以完成以下测试目标:
一是评估系统的能力:测试中得到的负荷和响应时间等数据可以被用于验证所计划的模型的能力,并帮助做出决策。
二是识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
三是系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能并检测软件中问题,因为长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
四是验证稳定性和可靠性:在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
使用自动化测试的过程中会遇到许多问题,意外出现的问题尤其难以处理。
三、自动化测试中应当注意的问题
1、不现实的期望
测试界内一般对于任何新技术的解决方案都深信不疑,认为可以解决面临所有问题。测试工具也不例外,对新工具持乐观态度已成趋势。人们都期望这种解决方案可以解决目前遇到的所有问题。厂商自然会强调好的和成功的一面,可能会忽略取得持久效益所做的努力。如果管理者期望不实现,那么无论工具从技术角度实现的多么好,都满足不了期望。
2、缺乏测试实践经验
如果缺乏测试实践经验,测试组织差,文档较少或不一致,测试发现缺陷的能力较差,在这种情况下采用自动测试并不是好办法。改进测试的有效性比改进差劲测试效率要好得多。
3、期望自动化测试发现大量新缺陷
测试在首次运行时最有可能发现缺陷。如果测试已经运行并通过,再运行相同的测试发现新缺陷的可能性小得多。除非测试正执行一段已修改过的代码或由于软件其他部分的修改影响到该代码,或者在不同的环境中运行。
测试执行工具是“回放”工具,即回归测试工具,用于重复已经运行过的测试。这是一件很有意义的工作,但并不是用来发现大量新的缺陷,特别是运行在与以前相同的硬件和软件环境。
4、安全性错觉
因为测试软件没有发现任何缺陷并不意为软件没有缺陷。测试可能不全面或测试本身就有缺陷。如果期望的输出不正确,自动测试只是简单地保留这些有缺陷的结果。
5、自动测试的维护性
当软件修改后,经常需要修改部分或全部测试,以便可以重新正确地运行。对于自动测试更是如此。测试维护的开销打击了测试自动化的积极性。当修改测试比手工重新测试更费劲时,测试自动化将被丢弃。
6、技术问题
测试工具与以前的软件的互操作性是一个非常严重的问题。技术环境变化的如此之快,使得厂商很难跟上。许多工具在理论上听起来似乎比较理想,但在具体环境中执行确是失败的。
商用测试执行工具是较庞大且复杂的产品,并要求有较好的技术知识,才能把工具利用得较好。除了工具本身的技术问题,用户还要了解被测软件的技术问题。如果软件在设计和实现时没有考虑可测试性,则测试时无论自动测试还是手工测试难度将非常大。如果使用工具测试这样的软件,无疑更增加测试的难度。
7、组织问题
自动测试实施起来并不简单,必须有管理支持及组织艺术。必须进行工具选型、培训、实践并了解哪种工作方式最好,并在组织内普遍使用工具。
上述几点为自动化测试中普遍存在的问题,须要使用者在实际运用中加以注意和克服,以便使测试软件能够发挥出正常的作用。 |