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