2011-03-01 64 views
25

如果一个人负责编写测试,另一个负责完成测试,或者编码人员和测试作者应该是同一个人,理想情况下会更好吗?谁应该写测试?

回答

19

单元测试是您在编写代码时所做的工作。这个测试是测试你的视图应该如何工作(在类/方法/算法级别),它在开发时支持你,你可以在修改之前和之后运行测试,看看事情仍然依照测试你有没有到位。看到这是将帮助他/她工作的程序员。此外,测试还将提供一种方法来查看应该如何处理任何查看代码的人。 TDD并没有改变这个概念,而是强调一个编码需要首先考虑它应该如何工作以及期望什么。

如果没有看到自己的问题有问题,可以尝试配对编程,代码评论或其他方式来更多的眼睛和大脑来看待事物。我仍然坚信单元测试是程序员的工具,而不是其他任何人完成的工作。

来到其他类型的测试,像集成测试功能测试甚至(系统)性能测试,这可能是好事,有其他这样做。特别是如果你想自动执行这个测试,它需要知道如何做事情,也可能是更高水平的业务知识测试什么和如何。

回答你的问题,也取决于文化和您的组织如何运作,但是,我相信你在所有的情况下,想要做单元测试代码开发的一部分。如果这会导致问题,那么组织中可能会有其他问题,或者需要研究的问题。

更新

下面是我在组织看到了一些事情影响到单元测试的做法:

  • 有些人可能不想写单元测试;
  • 有些人可能不知道如何编写良好的单元测试,这可能会破坏这样做的好处,并可能被用作“证据”单元测试是不好的;
  • ,该机构可能不会带给人们一起工作,而有不同的责任,如编码器的代码,测试人员测试等,这可能会迫使某人单元测试;
  • 有些人可能会聘请编写单元测试,因此,如果这个角色没有改变它违背编写单元测试你的代码;
  • 可能会有一个非常小的组织,这可能暗指每个人都会做一些事情;
  • 整个组织不承认单元测试的好处,而是尽快实现代码尽可能快的解决问题 - 后来,谁正在努力完成单元测试测试?它是一个人吗?开发商?管理?
  • 是组织自由决定谁进行单元测试?

如果有一个单元测试的协议,上述事情可能是需要处理的问题,以便使组织进入自然状态。如果您有拥有良好单元测试经验和经验的人,让他们带领事情带领其他团队看到魔法的单元测试

我个人认为,如果人们看到单元测试的好处,能写出好的单元测试,自动化他们建立的,如果球队可以自己决定如何组织如何获取单元测试的书面会都落在原地因此开发人员在开发代码的同时编写单元测试,任何人都可以随时为他们正在查看的任何代码添加更多的单元测试。如果有测试,他们会专注于其他类型,如功能测试或探索性测试的测试。

+0

单元测试是单元测试代码,功能原子是孤立的。 “测试你的观点应该如何工作”可能适用于任何类型的测试。 – StuperUser 2011-03-01 13:16:27

+0

好吧,当然这有点贵,我假设我们知道单元测试在这里。你想读什么? :) – murrekatt 2011-03-01 13:32:22

+0

你能否举例说明可能出现的问题,可能被破坏或需要查看的问题? – Henno 2011-03-03 08:15:29

7

随着TDD的发展单位(读一个程序员或一双)应该写测试。 TDD(测试驱动开发) - 单元测试通常处于技术层面。开发单位应该在他们来实施课程时写下它们。如果其他人写测试,你可能遇到的问题是外力会影响设计。当开发人员进行设计时,TDD运行良好。

BDD/ATDD应该参与QA/PO。 (BDD)(行为驱动开发)和ATDD(验收测试驱动开发)测试通常以较小粒度级写入。更好的测试是与利益相关者一起编写的。因此,写这些的更好的人是QA(质量保证),PO(产品所有者)或BA(业务分析员)。这并不是说开发人员无法撰写他们,只需要进入该角色即可。

成对工作的美妙之处在于,如果您的双人写测试,测试写入时会自动完成测试。

+0

我很好奇这个话题,但不知道的术语。您是否愿意扩展'TDD','BDD','ATDD','QA'和'PO'? – 2011-03-01 12:17:32

+0

@Delan - TDD和BDD之间的区别:http://stackoverflow.com/questions/2509/what-are-the-primary-differences-between-tdd-and-bdd – 2011-03-01 12:25:22

+0

@Liutauras和@John,谢谢你! – 2011-03-01 12:25:48

10

这个问题将邀请许多不同的答案,一些基于组织的工作方式,一些是基于规划和测试的资格。组织测试有很多不同的方式,尤其是因为组织规模不同,可能有或没有资源聘用不同的团队。

有不同类型的测试:

  • 单元测试
  • 集成测试
  • 功能测试
  • 非功能性测试 - 压力,渗透等多种类型
  • 用户验收测试

I ñ我的经验:
单元测试(孤立功能的原子例如一个控制器动作)和集成测试(这些原子一起工作,例如与域层对象一起工作的控制器,与数据层对象一起工作的域层对象)应由开发人员完成。

功能测试(系统功能规范状态),应该由一个独立的QA团队来完成。

非功能性测试可以由QA团队或架构师/技术主管完成。

UAT(系统是适合的目的)应该由客户来完成。

这背后的原因是,自动化单元测试和集成测试是白盒(你可以看到应用程序如里面的代码),他们将需要由开发人员(不neccessarily开发商负责的完成代码在测试中)。
功能测试和UAT是黑盒子(你不能看到应用程序内部),所以更有可能由非技术人员完成,但熟练的测试分析。
根据测试内容和整体策略,非功能测试可以是黑色或白色方框。

重要的是要指出,通过测试另一个人的工作来发现更多的缺陷,而不是测试自己的工作。 测试人员会以不同的方式进行思考,因此寻找/尝试在开发过程中没有考虑到的事情,而人们自然会保护自己的代码(无论客观化程度如何)。

如果没有独立的测试团队,让开发人员测试彼此的代码是很好的。

为了回答您的问题,当我是测试人员时,我负责测试分析(决定测试规范需要进行哪些功能测试)并编写测试脚本并手动执行测试。一旦编写了这些脚本,任何测试人员都可以执行它们,但重要的是,测试分析是独立于开发人员在应用程序上的工作完成的。

+0

+1,责任方与测试类型有关。软件测试不是一个单一的过程。 – mcyalcin 2011-03-01 12:34:07

+0

@mcyalcin,你能评论你的评论吗? :-) – Henno 2011-03-03 08:03:24

+0

@Henno,不太适合评论,但是:单元测试关注微模块,是开发人员的责任;集成测试可以是开发者(复数),架构师;功能测试分析师或测试人员(阅读具有领域知识但不是程序员的人员);非功能测试具有各种组件,与离散专家f.e.安全分析师的安全性和系统测试人员的负载测试(阅读可将功能测试移植到负载测试工具的人员)。 UAT基本上是客户进行的最后两项。其他类型/级别存在.. – mcyalcin 2011-03-03 08:37:51

1

在我的开发团队的非正式政策是

每个人做每件事。

也就是说,没有测试人员,程序员或架构师。每个人都应该做一些所有的活动。

这是为了避免瀑布过程。如果一项活动是一个人唯一的保护,那么发展就可以成为顺序化的过程,人们处理下来的工作并且不知道他们所做决定的全部后果。

这并不意味着每个人都在同时工作。这意味着每个人在某个时间点上执行各种任务

+0

这是一个很好的政策 – Morten 2011-03-04 09:34:42

+0

这是一个不可扩展的解决方案。当你有一个由10多个开发人员组成的团队和一个庞大的应用程序(并非所有东西都是Todo列表示例应用程序)时,不仅推荐分离工作,而且还需要。 – 2014-11-24 17:57:20

+0

@SSHThis绝对。请注意,通信路径的数量随着团队中的少数人快速失去控制:(n *(n-1))/ 2。 – BryanH 2015-11-16 19:58:48