如果一个人负责编写测试而另一个人负责完成测试,或者编码员和测试作者是否应该是同一个人,那么它是否更好?
答案 0 :(得分:25)
单元测试是您在编写代码时所做的事情。此测试测试您的视图应该如何工作(在类/方法/算法的级别上)并且它在开发时支持您,因为您可以在进行更改之前和之后运行测试以查看事物仍然根据您的测试。将此视为将帮助程序员的工作。此外,测试还将提供一种方法来查看某些内容应该如何适用于任何查看代码的人。 TDD(测试驱动开发)并没有改变这个概念,而是强调一个编码需要首先考虑它应该如何工作以及期望什么。
如果没有看到自己的问题,可以尝试配对编程,代码审查或其他方式来查看具有更多眼睛和大脑的事物。我仍然坚信单元测试是程序员的工具而不是其他人做过的事情。
进行其他类型的测试,例如集成测试,功能测试甚至(系统)性能测试,它可能会很好有其他人这样做。特别是如果您想要自动执行此测试,则需要您了解如何执行操作,并且可能需要更高级别的业务知识来测试测试内容和方式。
您的问题的答案还取决于文化以及您的组织如何运作,但是,我相信您在所有情况下都希望将单元测试作为开发代码的一部分。如果这会导致问题,那么组织中可能会出现其他问题,或者需要查看的内容。
<强>更新强>
以下是我在组织中看到的一些影响单元测试实践的事情:
如果有单位测试的协议,上述事情可能是需要处理的问题,以便使组织进入一个自然而然地解决问题的状态。如果你有拥有良好单元测试实践和经验的人,那就让他们带领让团队的其他成员看到单元测试的魔力
我个人认为如果人们看到单元测试的好处,可以编写好的单元测试,使用构建自动化,如果团队可以自己决定如何组织如何获取单元编写的测试将全部落到实处,以便开发人员在开发代码时编写单元测试,任何人都可以在任何时候为他们正在查看的任何代码添加更多单元测试 。如果有测试人员,他们将专注于其他类型的测试,如功能测试或探索性测试。
答案 1 :(得分:14)
这个问题将邀请许多不同的答案,一些基于组织的工作方式,一些基于规划和测试的资格。有许多不同的方法来组织测试,特别是因为组织规模不同,可能有也可能没有资源来雇用不同的团队。
有不同类型的测试:
根据我的经验:
单元测试(孤立的功能原子,例如单个控制器操作)和集成测试(这些原子一起工作,例如使用域层对象的控制器,域层对象工作使用数据层对象,)应由开发人员完成。
功能测试(系统功能作为规范状态)应由单独的 QA团队完成。
非功能性测试可以由 QA团队或架构师/技术主管完成。
UAT (系统适合用途)应由客户端完成。
这背后的原因是,由于自动单元和集成测试是白盒(您可以在应用程序内部看到,例如代码),它们需要由开发人员完成(不一定是开发人员负责测试中的代码。)
功能测试和UAT是黑匣子(你无法在应用程序内部看到)因此更有可能由非技术人员完成,但是熟练的测试分析。
非功能性测试可以是黑色或白色盒子,具体取决于测试内容和整体策略。
重要的是要注意通过测试另一个人的工作而不是测试你自己的工作会发现更多的缺陷。 测试人员会以不同的方式思考,因此寻找/尝试在开发过程中不会考虑的事情,人们自然会保护他们的代码(无论多么努力都是客观的)。
如果没有单独的测试团队,那么让开发人员测试彼此的代码是件好事。
为了更多地回答你的问题,当我是测试人员时,我负责测试分析(决定测试规范需要哪些功能测试),编写测试脚本并手动执行测试。一旦编写了这些脚本,任何测试人员都可以执行它们,但重要的是测试分析是与开发人员在应用程序上的工作分开进行的。
答案 2 :(得分:7)
使用TDD,开发单元(读取程序员或对)应该编写测试。
TDD(测试驱动开发) - 单元测试通常处于技术水平。开发单位应该在实施课程时编写。如果其他人编写测试,您可能遇到的问题是外力会影响设计。 TDD在开发人员进行设计时效果很好。使用BDD / ATDD时,应该参与质量保证/采购订单。
BDD(行为驱动开发)和ATDD(验收测试驱动开发)测试通常以较低的粒度级别编写。更好的测试是在考虑利益相关者的情况下编写的。因此,更好的人写这些是QA(质量保证),PO(产品所有者)或BA(业务分析师)。这并不是说开发人员不能写出你只需要进入这个角色。
成对工作的美妙之处在于,如果你的对编写了测试,那么在编写测试时会自动进行健全性检查。
答案 3 :(得分:1)
我的开发团队的非正式政策是
每个人都做了一切。
也就是说,没有测试人员,程序员或架构师。每个人都应该做一些所有的活动。
这是为了避免瀑布过程。如果一项活动是一个人的唯一保留,那么开发可以变得顺序化,人们处理工作并且不知道他们所做决定的全部后果。
这并不意味着每个人都同时处理每项任务。这意味着每个人在某个时间点处理各种任务