3

我知道很多公司都有他们的测试部门,我问这个问题是因为我无法弄清楚一些概念。

1、单元测试是否应该由测试部门/第三方企业进行?

就我自己的感觉而言,我认为这应该由开发人员自己完成。但有句话说:

您将倾向于以您编写代码的方式测试您的代码。所以我们最好做单元测试。而且你不是专业的测试人员,所以你不能确保你的单元测试是最好的。

如果这是错误的,是否有官方说程序员应该自己进行单元测试?

2、除了单元测试,测试部门还做哪些其他测试?

这是一个简单的问题。也许有一些随机测试,一些压力测试,但是谁能给我一份测试部门通常做什么的清单?

4

3 回答 3

4

虽然开发人员应该测试他们自己的工作(他们都这样做,但有些人只是使用低效的“run-test-last-change-fix-run-again”方法),试图找出自己的错误存在心理问题:

  1. 如果你知道自己犯了错误,你可能会尽量避免它。事后看来,看到错误通常很明显/很简单,但是当它发生时,这不是真的。所以这会造成一种“失败者”的情况,当你真正尽力而为时,每个人都认为你很愚蠢。

  2. 每个开发人员都有自己的错误模式;那就是每个人都一遍又一遍地犯同样的错误。原因是多方面的,最重要的是对自己的缺陷视而不见或不愿承认。

  3. 当你赶时间时,你开始偷工减料。这不坏,这是人。问题是您的记忆已经充满了您工作所需的所有细节。现在你的记忆力会因压力而降低。这意味着您会在不注意的情况下忽略重要的细节- 您的大脑已经在其极限工作。而且你不会注意到你错过了它们。而且你不会记住你注意到的所有信息,因为你的记忆处于恐慌模式 -> 只有真正重要的(如危及生命的)信息才会被处理。

  4. 自我监视根本不适用于人类。你总是需要一个外部控制器,否则你会腐败。

因此,让其他人测试您的工作是有意义的:

  1. 他们不会使用相同的模式(单击哪里、单击按钮的顺序、键入的速度……),这些模式可以快速发现您自己找不到的简单错误,仅仅是因为它们超出了您的首选方式使用电脑。

  2. 他们的任务是让你的生活变得悲惨(简而言之)。如果老板物有所值,他将创造一个竞争环境,开发人员将尝试让尽可能少的错误进入测试,而测试将尝试找到尽可能多的错误“展示”(“他们”是另一支球队)。这非常有效(人类群体喜欢竞争),但你需要注意工作中的心理力量。如果管理得不好,就会造成很大的压力(-> 更多的虫子溜过)、倦怠和相互仇恨。如果老板不善于管理人,那么这适得其反。

  3. 他们有不同的假设。他们没有编写代码,所以他们不知道它应该如何工作。他们会像客户一样看待您的工作,并看到开发人员永远不会关心的事情(“看起来很丑”,“反应不够快”)。他们可以找到使产品更容易销售的问题。开发人员通常只关注“足够好”(= 当我以正确的顺序单击正确的按钮时不会崩溃)。

现在你的问题:

单元测试是否应该由测试部门/第三方企业完成?

不。单元测试是您可以在代码上运行的最小的测试,但它仍然具有一定的意义。测试部门永远不应该运行这些,这是自动化 CI 服务器的工作。这是适合计算机的愚蠢、无聊和重复的工作。

但是让测试部门定义新的单元测试是有意义的。或者,应该将来自测试的错误报告转换为新的单元测试。

除了单元测试,测试部门还做了哪些其他测试?

一些例子:

  • 他们像客户一样安装实际应用程序(= 测试安装程序)
  • 他们点击一切(尤其是那些他们不应该点击的部分)
  • 他们在包含复杂测试用例的特殊测试数据库上运行高级测试
  • 他们运行需要几个小时才能完成的测试(不像单元测试应该最多在几秒钟内执行)
  • 他们检查是否满足所有要求
  • 他们将产品安装在具有所有支持的数据库、网络布局和不同配置的各种硬件上。
于 2012-08-28T14:29:34.400 回答
1

我觉得程序员应该自己做很多测试,但大部分都归结为功能测试。它是否按预期工作?

测试/质量保证人员倾向于做更深入的测试工作。来自安全背景,他们将确保所有输入都经过验证,并且没有任何东西容易受到 SQL 注入和 CSS 的攻击。同样在较大的项目中,不同团队构建不同的成品,测试部门将测试成品,以确保在集成过程中不会出现错误,包括负载测试、安装测试以及在各种场景、不同操作系统中的测试等。测试部门需要知道在每种情况下会发生什么,以便其他团队可以确定它是否是值得修复的错误,并让客户群知道这是一个已知问题或设计。

让我们看一下视频游戏。在视频游戏中,您通常拥有在设计环境中四处移动的精灵。测试人员将确保精灵在撞到任何墙壁时停止并在所有可能的墙壁上进行测试,以确保没有任何剪切问题。开发人员通常会对引擎进行编程并制作地图和交互,但除非向他们报告,否则不会关心发现个别裁剪问题。

于 2012-08-28T14:04:05.687 回答
1

单元测试由负责编写代码的开发人员编写。它们基本上是供编码器使用的。我使用它们来确保我交付给 QA 的代码没有内部错误,比如会停止测试(以及让我们看起来很糟糕)的 NPE。任何项目都会有不同的组件需要协同工作,单元测试可以确保各个组件按预期工作,并且它们的交互都按预期运行。

其他小组的测试侧重于查看产品行为的不同方面:

  • 功能测试检查业务需求是否得到满足

  • 系统集成测试检查程序是否在类似于生产环境的上下文中工作

  • 负载测试检查程序在投入大量工作时是否按预期运行

  • 用户体验测试检查普通用户是否能够浏览 UI。

有一个乒乓 TDD 的概念,其中结对程序员交替编写测试和代码,因此您可以从第二个人的观点中受益。这可能是进行测试和获得即时代码审查的最佳方式,但如果想到两名员工在同一个任务上工作,就会让管理层感到害怕,因此这种机会非常罕见。即使没有这些,尝试通过测试来破坏代码也符合程序员的利益。我宁愿在编写代码时破坏我的代码,也不愿让其他人稍后再做。

于 2012-08-28T14:42:30.753 回答