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