美文网首页软件测试
【软件测试】一种有效的测试策略

【软件测试】一种有效的测试策略

作者: 软件测试墨白 | 来源:发表于2018-08-10 10:12 被阅读137次

在最近的一个大型项目中,我们在早期就定下了一个目标:不会在软件中使用大量QA人员专注于手工测试。通过手工测试发现bug极其耗时且成本高昂,这促使团队尝试尽可能的将质量内嵌到产品内部。但这并不意味着手工测试毫无价值,因为人们总能在怎样使用软件上给你一些特别的惊喜。

这是一个为期18个月左右,周期很长的项目,并且后续也会持续更新。 在项目初期,团队就意识到项目成功的重中之重在于一个优秀的测试策略,尤其是让我们的团队能够做到:

1)随着项目时间的推移能够持续的提高团队的工作效率。

2)不管面对的变更是大是小都能够具有足够的信心。

我们花费了很长时间才确定了一种有效的策略。这在很大程度上是因为我们不得不学习怎样让我们的程序在所有层上都具有可测性。虽然所有的项目团队成员都具有TDD(测试驱动开发)的经验,但仅仅这样并不足以建立有效的测试策略。

测试分层

给不同的测试分类是一件令人烦恼的事。有功能测试,集成测试,单元测试,验收测试,slow tests,fast tests,UI测试...等等等等。然后我们发现属于我们的测试主要有三种类型:

系统测试

皮下测试

单元测试

它们之间的区别主要在于被测试内容的范围。系统测试指的是通过应用的外部接口进行运作,无论对象是一个浏览器,文件下拉菜单,队列,window窗体应用或者其他的什么东西。

皮下测试运行在外部用户接口之下。如果测试的是Web应用,皮下测试在我们理解就是指在真实的类

以及环境部署到位的情况下,通过命令处理器进行发送的表单对象。绕过UI层逻辑,直接到达domain层。发送表单对象,抛出”成功/失败”的执行结果。

对于最底层而言,我们有单元测试。单元测试用于测试一个类,并且可以是fast test 或者 slow test中的一种。Fast Test 即是常规的TDD测试,用于增量的类设计。Test doubles曾被认为是必要的,但是除非系统交互非常值得关注,否则严格的 基于交互的测试 并不是那么有价值。我们同样也有slow 单元测试,其同样可被分类为 交互测试。当然它们同样可归类为 repository tests, persistence tests等。

单元:皮下:系统 测试在我们的测试工作中各自占的比重差不多是 10:2:1。 为了完成项目我们做了大约 5000 个单元测试,1000个皮下测试,500个使用 WaitN 以及 Gallio驱动浏览器的系统测试。6000个单元/皮下测试的执行时间大概是10分钟,而剩下的500个UI测试大概需要50分钟完成。

单元测试策略

单元测试是在严密的TDD模式下开发的。我们在功能实现之前编写单元测试,并用这些测试驱动代码设计。这些测试可以帮助发现设计问题、封装问题、代码异味等。

我们努力避免编写纯粹用于提供测试的代码。它们常常意味着我们有设计问题、责任错位或封装已被破坏。

随着我们越来越深入项目管道,我们对交互测试的重视越来越少。 如果你真的对交互感兴趣,那么通过mock进行的交互测试也仅仅是有趣而已。但更多的时候,我们更感兴趣的是附加作用,而交互只是一个实现细节。反之,我们经常做的是模拟(mock)出过慢或不可测的代码,比如存储库、基于外部服务的外观、配置类等等。否则,我们有限的模拟只是模拟了我们感兴趣的那些观察点。

在大型项目中的某些时间点,为了提取出能加快功能交付的理念,设计往往需要做大型的重构。在我们上一个项目中,我们发掘出了如下理念:

AutoMapper

将表单作为单独的命令消息处理

Input builders

有了以上这些,单元测试是重构时的保障。但只有我们依赖这些测试来捕获应用程序中所有有趣的行为时,才能有保障的作用。为了允许有效的大中型重构,我们需要增加额外的测试层级。

皮下测试策略

皮下测试,顾名思义,所有的测试都是在用户界面之下进行的。在MVC应用程序中,皮下测试是测试控制器下面的所有内容。对于Web service,一切测试都在终端下进行。皮下测试的思想是,应用程序的最上层不执行任何实际的业务逻辑,而只是外部接口与底层服务之间的连接。

皮下测试的重要性体现在我们希望在抛开如用户接口和外部服务这类外部连接点的情况下,能够在整个系统运行的同时测试业务逻辑。相对于单元测试关注小模块的设计,皮下测试关注的不涉及设计,而是测试整个系统的基本输入和输出。

要建立有效的皮下测试,我们可以尝试通过常见的逻辑流程建立uniform pinch points。例如,我们可以建立一个命令消息处理系统,或一个普通的查询界面。在最近的一个处理批处理文件项目上,批处理文件中的每一行都被转换为一条消息。然后,我们创造一条消息,发送给这个系统,然后验证处理该消息的所有异常情况。

由于皮下测试不是基于设计而是基于高级(业务)行为,它们是理想的基于场景的测试策略,如BDD或Testcase Class per Fixture模式。如果我们要进行大的重构,我们需要这些高层次的测试,为商业行为建立全面的安全保障。由于皮下测试更关注于端对端的逻辑,所以它也是标志功能点完成的一个重要的目标点。

虽然皮下测试使我们能够安全地执行较大的重构,但它仍无法保证我们可以放心地将系统升级到生产环境。

全系统测试策略

起初,我们把全系统测试称为“UI 测试”,直到我们的项目越来越多地牵涉到集成策略。这时输入到我们系统中的不再是浏览器,取而代之的是消息,来自 REST 端点、FTP 或批处理文件。UI 测试只是全系统测试的一个子集。全系统测试背后的思想是,我们想按照软件在生产环境中的使用方式来测试它们。对于一个 MVC 应用程序来说,就是基于浏览器的测试。对于批处理文件来说,我们会使用实际的文件。对于 REST 使用实际的 HTTP 请求。对于消息则使用实际的队列和消息。

如果我们想知道,应用程序在部署到生产环境之前是否能按照预期工作,一个有效而且高效的方法是,创建一个自动化测试来测试整个系统。如果我可以让 UI 测试登录到应用程序中、创建一个订单,然后我可以验证是否产生了一个订单请求,那么我会感觉很良好。

关于全系统测试的一个常见误区是认为它就是黑盒测试。然而,全系统测试的特点在于,你必须对系统内部发生的事情了如指掌。实际上,全系统测试甚至还可以利用域模型来生成数据,而不是一个纯粹为测试目的而构建的系统后门。很多团队容易掉进去的一个大坑是,不按照与生产环境一样的代码路径来测试,这将导致系统处于古怪的、无效的、很难处理的状态。

在我们的项目中,全系统测试代码是我们在声称一个功能/故事做完之前的所写的最后代码。对于描述一个功能的“已完成”特性来说,手工测试的成本太高、而且不可靠。但是,如果我能像在生产环境一样去测试,通过完全一样的外部界面来完成,那这样的手工测试也算是成功的。

全盘考虑

在一个未经测试过的应用程序中,作为提高覆盖率的手段,我们发现实际上最有价值的测试策略是从全系统测试开始,然后往下移,直至单元测试。我们先做最宽松、最简单的断言,然后慢慢往下移,直至单元级别的逻辑。在全新开发的应用程序中,我们倾向于不只是特别关注某一个区域,因为对于一个需要长期维护的系统来说,所有的测试都很重要。

这种测试策略确实需要一定的投资。我们发现,当我们知道这个应用程序对客户的业务有决定性作用的时候,这样的全盘考虑在特别有效。如果一个应用程序对业务有决定性作用,那它将不得不面临变更。当变更来临的时候,我们最好能安全地实施变更而不影响客户的业务。

end

相关文章

  • 【软件测试】一种有效的测试策略

    在最近的一个大型项目中,我们在早期就定下了一个目标:不会在软件中使用大量QA人员专注于手工测试。通过手工测试发现b...

  • 软件测试策略与方法

    测试策略的概念 什么是测试策略?为软件测试提供全局分析 测试策略的种类 黑盒测试、灰盒测试、白盒测试手工测试与自动...

  • 测试人员必看书籍

    - [ ] 《软件测试经验与教训》 - [ ] 《有效软件测试:提高测试水平的 50 条建议》 - [ ] 《软件...

  • 03软件测试方法[下]

    软件测试基础知识03—软件测试方法[下] 单元测试、集成测试、确认测试、系统测试、验收测试(测试策略和测试过程的角...

  • 测试策略与测试计划的区别

    测试策略 测试策略文档是高级文档,通常由项目经理开发。本文档定义了“软件测试方法”以实现测试目标。测试策略通常来自...

  • 软件测试:软件测试策略

    一、静态方法与动态方法 (一)静态测试 不运行被测试的软件系统,而是采用其他手段和技术对被测软件进行检测的一种测试...

  • 当没有足够的时间去测试的时候,我们应该做些什么

    -摘自于(软件测试基础,测试策略,测试技能提升,测试技能和资源) 环顾你的测试周期,你是否经常...

  • 软件测试策略

    根据软件测试工作的测试策略,一般将软件测试过程分为:单元测试、集成测试、系统测试、验收测试四个大的阶段。 什么是单...

  • 测试计划的编写

    “软件测试计划是指导测试过程的纲领性文件,包含了产品概述,测试策略,测试方法,测试区域,测试配置,测试周期,测试资...

  • 书籍:ASTQB-BCS移动测试基础指南 Mobile Tes

    简介 移动测试是测试移动软件的功能,可用性和一致性的过程。 与标准软件测试类似,高效且有效的移动测试需要在软件测试...

网友评论

  • 林初寻:涨知识了。
    软件测试墨白:@林初寻 能帮助到你就好
  • 阿里云技术:学习了 收藏
    软件测试墨白:@阿里云科技快讯 感谢长久以来的关注,可以添加群:387348767
  • 软件测试墨白:很多朋友咨询我找我要测试相关的文档,我就不一一的去发了,我都上传在我的群文件里,自行下载就可以了。387348767,记得备注一下“简书”,我给通过一下。
  • 软件测试墨白:需要测试书籍电子版的直接私信我或者给我留言,或者自行到群文件去下载,387348767,留的有,自行下载即可。相关的测试用例,测试计划,测试文档,简历模板,成套的入门视频,都可以免费送给你们,希望你们刚入行,少走一些弯路。测试相关的技术问题,百度不到的,直接在群里问大神好了。
  • 软件测试墨白:另外还有一些朋友经常会问到我测试的简历应该怎么写,面试官会问到什么样的问题,我可以抽时间给你们一些指点和帮助,到群里直接找我就行,387348767,我肯定会回复你。
  • 软件测试墨白:自学中最难的是什么,是难以对抗自己,一个是自己有自己的惰性,一个是自己有自己的思维误区,也就是牛角尖。也不是说自学不可以,但是耗费的时间和精力会很大。
  • 软件测试墨白:不轻易推荐自学,这个还是要看人,自学非常容易钻进牛角尖,见过太多的“从自学到放弃”
  • 软件测试墨白:认为软件测试就是写写测试用例,执行一下,汇总一下bug的,趁早清醒,否则只能一辈子点点点。你不主宰你自己,那就让别人主宰你
  • 软件测试墨白:所有接触到的认为测试容易的,结果过了几年还是老样子,身边做了五六年的还是功能测试的一大堆,在一线城市五六年的测试工程师起码也得成长到性能接口水平了。
  • 软件测试墨白:关于软件测试的认识,很多人的认识还是不够到位,仍然认为测试比较简单,当然软件测试入门比较简单,但不代表高级部分的内容
  • 软件测试墨白:经验分享

本文标题:【软件测试】一种有效的测试策略

本文链接:https://www.haomeiwen.com/subject/ppqkbftx.html