我应该使用多少个测试?

我在开始撰写此博客时就对如何提高应用程序质量进行了解释。 在途中,我们遇到了许多不同类型的测试。 但是,我们应该对每种类型的应用程序投资多少? 一如既往,需要平衡。 这次是关于我们可以投资多少与将创造多少价值(不是总是这样)。 因此,让我们详细看一下。

单元测试

我们已经对单元测试进行了很多研究。 如何在Objective-C,Swift中做到这一点以及如何测试Apple的MVC(测试UIElements时不要忘记在UIViewController上调用controller.view)。 单元测试的优势是什么?

  • 快速
  • 可靠(如果操作正确;)
  • 涵盖很多部分

具有所有优势,还有什么要错过的?

  • 他们是孤立的
  • 不要测试零件是否装配在一起

最重要的是他们要快。 不论是10还是1000,都没关系。它们在不到几秒钟的时间内运行。 开发人员没有理由在提交更改之前不运行它们。

这很简单。 我们拥有的越多越好。 这也是我们在TDD中使用它们的原因。 确保独立编写它们。 不要使用数据库或网络。 而是存根吧!

UI测试

UI测试也是一个主题。 我们已经看到了多个框架来实现它们,以及如何使它们独立于任何后端。

优点:

  • 测试组件
  • 您可以将它们用于验收测试
  • 它们的行为类似于用户

与往常一样,您可以期望它们有缺点:

  • 脆弱(对应用程序的每次更改都会破坏它们)
  • 慢(我已经提到过吗?)

UI测试需要大量维护。 它们可能会随时中断,即使只是由于模拟器无法连接到Xcode也是如此。 因此,它们显示的每一次失败,可能都不是您应用程序中的错误。 您需要对其进行调查。 最重要的是,它们运行非常缓慢。 即使当告诉他们不要在测试开始时重新启动应用程序,使用模拟后端并删除动画(您仍然不应该这样做)时,它们也会永远占用。 目前,我们的50个测试需要15分钟以上的时间才能运行。 每次更改后,没有开发人员会这样做。 因此,您的CI需要。

拥有它们真是太好了。 但是请注意,它们需要大量工作。 由于测试很慢,因此不应有比单元测试多的测试。

验收测试

我们已经研究了无UI的验收测试。 使用这种类型可以实现令人难以置信的目标。 他们甚至可以帮助您与客户合作并以更精确的方式确定需求(如果您想了解与客户合作的方式,请查看BDD)。

那么为什么要使用它们:

  • 快速(与UI测试相比)
  • 测试整合
  • 每个人都可以编写测试(不仅是开发人员)
  • 每个人都可以访问结果(无需了解CI)

但是和往常一样,有些事情阻止了我们:

  • 它需要自己的UI代码(称为夹具)
  • 团队中的每个人都必须同意使用它们
  • 根据基础架构,它会变得有些复杂

与UI测试相比,它们速度飞快,但与单元测试相比,速度却不那么快。 设置不是那么容易,需要花费一些时间才能说服您的团队和客户使用它们。 但是它们完全值得,因为它们可以测试组件之间的交互。

黄金大师测试

Golden-Master-Tests是介于单元测试和UI测试之间的一种。 最后,它们可以帮助您确定应用程序行为的变化。 这并不意味着这些更改是意外的,但它们将被列出。

优点:

  • 检查您的用户界面,即使您看不到的最小更改
  • 易于集成到任何类型的项目中

缺点:

  • 你不知道什么东西坏了怎么办
  • 每次更改UI都会中断

我们的应用程序应该具有一些UI,但是如您所知,少即是多。 如果用户无需进行大量导航就可以完成工作,那就更好了。 因此,我们的用户界面受到限制,因此应该是这些测试中的一小部分。 它们非常快,如果您没有其他选择来验证代码,请广泛使用它们。 但是,如果您已经使用了单元测试和其他类型,则可以将数字缩减到最低限度。

混沌测试

Netflix确实通过Chaos-Testing在我们身上做得很快。 这种技术使我们能够检查很多可能性。 遗憾的是,我们在调试选项方面受到限制。

优点:

  • 测试几乎所有可能的交互
  • 测试几乎所有可能的值

缺点:

  • 如果我们通过用户界面进行测试,我们真的不知道发生了什么
  • 耗时

尽管测试属性相当快并且可以复制,但是如果运行测试猴子,我们将遇到问题。 它的确使我们能够找到用户否则会产生的崩溃,因此它比预期的要好。 同时,我们将不得不投入大量资金来重现该错误。 如果您使用它,请每晚运行它,这样您就可以进行广泛的测试,并且在发行期间不会显示。

手动测试

我们每个人都做到了,我们每个人都讨厌他们。 正如我们在“手动测试已死”中了解到的那样,它们仍然很有用。

仍然有一些优点:

  • 使用导览,您可以测试与开发人员或应用程序的特定行为无关的事物
  • 有些事情很难自动化(测试与Casheer系统的交互是否有效)

缺点:

  • 时间
  • 没有人喜欢他们,所以他们做起来不需要任何照顾
  • 如果我们已经自动化了测试用例,为什么还要重复它们呢?

与往常一样,最重要的因素是时间。 如果手工测试需要很长时间,则通常会跳过或不进行复制。 如果测试计划太长,则他们在制定测试计划时都会表现迟钝。 每次发行都花半小时是没有问题的。 花费4周是!

因此,降低您的手动测试工作量。

结论

到目前为止,不同类型的回顾。 每个人都可能听说过测试金字塔。 每个步骤的数量描述了应该进行的这种测试数量。 我们的看起来像这样:

如您所料,单元测试是所有测试的基础。 然后是基于属性的测试,验收测试,黄金大师测试,UI测试,混沌猴子测试和手动测试。 与往常一样,这是对绿色项目的一种看法。 每当您在其他项目上工作时,都必须对这些进行调整,但是在理想的世界中,请朝着这个金字塔努力。