软件测试是很多公司或者项目忽视的一个点,认为并不重要,其实软件测试对软件的体验,质量,乃至最后用户的满意度都有至关重要的作用,软件测试可以使用许多不同类型的测试来确保对代码的更改按预期工作。但是,并非所有测试都是相同的,我们将在此处看到主要测试实践之间的差异。
手动与自动测试
在高层次上,我们需要区分手动和自动测试。手动测试是通过单击应用程序或使用适当的工具与软件和API交互来亲自完成的。这是非常昂贵的,因为它需要有人设置环境并自己执行测试,并且它可能容易出现人为错误,因为测试人员可能会在测试脚本中进行拼写错误或省略步骤。
另一方面,自动化测试由执行预先编写的测试脚本的机器执行。这些测试的复杂程度可能有很大差异,从检查类中的单个方法到确保在UI中执行一系列复杂操作会导致相同的结果。它比自动化测试更加强大和可靠 - 但自动化测试的质量取决于您的测试脚本的编写程度。
自动化测试是持续集成和持续交付的关键组件,在您向应用程序添加新功能时,这是扩展QA流程的绝佳方式。但是,我们将在本指南中看到,使用所谓的探索性测试进行一些手动测试仍然是有价值的。
不同类型的测试
单元测试
单元测试非常低,靠近应用程序的源。它们包括测试软件使用的类,组件或模块的各个方法和功能。单元测试通常非常便宜自动化,并且可以通过持续集成服务器非常快速地运行。
集成测试
集成测试验证应用程序使用的不同模块或服务可以很好地协同工作。例如,它可以测试与数据库的交互,或确保微服务按预期一起工作。这些类型的测试运行起来更加昂贵,因为它们需要启动和运行应用程序的多个部分。
功能测试
功能测试侧重于应用程序的业务需求。它们仅验证操作的输出,并且在执行该操作时不检查系统的中间状态。
集成测试和功能测试之间有时会产生混淆,因为它们都需要多个组件相互交互。不同之处在于,集成测试可能只是验证您可以查询数据库,而功能测试期望从产品要求定义的数据库中获取特定值。
端到端测试
端到端测试在完整的应用程序环境中使用软件复制用户行为。它验证各种用户流程是否按预期工作,可以像加载网页或登录一样简单,也可以通过更复杂的方案验证电子邮件通知,在线支付等等。
端到端测试非常有用,但它们执行起来很昂贵,并且在自动化时很难维护。建议进行一些关键的端到端测试,并更多地依赖于较低级别的测试(单元和集成测试),以便能够快速识别出重大变化。
验收测试
验收测试是执行的正式测试,用于验证系统是否满足其业务要求。它们需要整个应用程序启动并运行,并专注于复制用户行为。但是,如果不满足某些目标,他们还可以进一步衡量系统的性能并拒绝变更。
性能测试
性能测试检查系统在负载很重的情况下的行为。这些测试是非功能性的,可以采用各种形式来理解平台的可靠性,稳定性和可用性。例如,它可以在执行大量请求时观察响应时间,或者查看系统如何使用大量数据执行操作。
性能测试本质上是非常昂贵的实现和运行,但它们可以帮助您了解新的更改是否会降低您的系统性能。
烟雾测试
烟雾测试是检查应用程序基本功能的基本测试。它们旨在快速执行,其目标是确保系统的主要功能按预期工作。
在进行新的构建以确定是否可以运行更昂贵的测试之后,或者在部署之后立即确保应用程序在新部署的环境中正常运行时,烟雾测试可能非常有用。
白盒测试
白盒测试是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
黑盒测试
黑盒测试是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收和正确的输出。
如何自动化测试
一个人可以执行上面提到的所有测试,但这样做会非常昂贵并且适得其反。作为人类,我们以可重复和可靠的方式执行大量操作的能力有限。但是一台机器可以很容易地做到这一点并且将测试该登录/密码组合第100次没有抱怨。
要自动化测试,首先需要使用适合您应用程序的测试框架以编程方式编写它们。 PHPUnit, Mocha, RSpec 是测试框架的示例,可以分别用于PHP,Javascript和Ruby。 每种语言都有 很多选项,因此您可能需要进行一些研究并要求开发人员社区找出适合您的最佳框架。
当您的测试可以通过终端上的脚本执行时,您可以让它们像Bamboo这样的持续集成服务器自动执行,或者使用像Bitbucket Pipelines这样的云服务。每当新的更改被推送到主存储库时,这些工具将监视您的存储库并执行测试套件。
探索性测试
代码中的功能和改进越多,您需要进行的测试越多,以确保所有系统正常运行。然后对于您修复的每个错误,检查它们是否在新版本中都没有回来是明智的。自动化是实现这一目标的关键,迟早编写测试将成为开发工作流程的一部分。
所以问题是它是否值得进行手动测试?简短的回答是肯定的,它应该集中在所谓的探索性测试,其目标是发现非明显的错误。
探索性测试会话不应超过两个小时,并且需要有明确的范围来帮助测试人员专注于软件的特定区域。一旦所有测试人员都得到了简要介绍,他们就可以尝试各种操作来检查系统的行为方式。这种类型的测试本质上是昂贵的,但对于发现UI问题或验证复杂的用户工作流程非常有帮助。每当向应用程序添加重要的新功能以帮助理解它在边缘情况下的行为时,这一点尤为值得。
关于测试的说明
要完成本指南,重要的是要谈谈测试的目标。虽然测试用户可以使用您的应用程序(我可以登录,我可以保存对象)很重要,但测试在执行错误数据或意外操作时系统不会中断也同样重要。您需要预测当用户输入拼写错误,尝试保存不完整的表单或使用错误的API时会发生什么。您需要检查是否有人可以轻松地破坏数据,访问他们不应该访问的资源。一个好的测试套件应该尝试打破你的应用并帮助理解它的限制。
最后,测试也是代码!因此,在代码审查期间不要忘记它们,因为它们可能是生产的最终门户。
因为国内软件测试资料不全部分资料参考自:国外网站
网友评论