如果是单元测试,那么开发人员应该负责除单元测试之外的其他测试吗?


35

我目前正在从事一个相当大的项目,并且我已经使用JUnit和EasyMock相当广泛地进行了单元测试功能。我现在对我应该担心的其他类型的测试感兴趣。作为开发人员,我有责任担心诸如功能测试或回归测试之类的事情吗?是否有很好的方法将这些以可用的方式集成到Maven / Ant / Gradle等工具中?这些是否更适合测试人员或BA?我还缺少其他有用的测试类型吗?


2
尽管在实践中比较简单,但可以在环境中尽可能向外扩展,同时在实践中保持对话而不是孤立(通常存在这种情况)。认为端到端团队不仅仅是隔离,而是更多关于技能的组合,每个团队代表着不同的技能,应该利用这些技能来实现端到端的成功。该团队应该负责的成功其中,需要测试来实现。在实施方面如何解决这些问题只是基于技能集的实施细节。
亚伦·麦克弗

1
该问题的答案还取决于其他团队成员的技能水平。例如,在QA没有很强的编程技能的团队中,开发人员可能会发现自己比在QA可以编写自己的测试工具的团队中做得更多。
neontapir 2012年

一个好的标准是测试的自动化程度。程序员擅长使用代码自动化事物。
rwong

Answers:


44

努力交付无缺陷的代码是您的责任。您应该编写,帮助编写或确保编写或执行测试,以使您对所交付的代码充满信心。

注意:我并不是说您必须提供无缺陷的代码。相反,您应该尝试针对给定的要求编写最好的代码。能够做到这一点部分意味着应该对代码进行测试。

这是否意味着您个人负责功能和回归测试,很大程度上取决于公司的组织方式。我认识的所有最熟练的程序员都不问自己“编写X型测试是我的责任吗?”。相反,他们问自己“我该怎么做才能确保我的代码得到正确测试?”。答案可能是编写单元测试,或将测试添加到回归中,或者可能意味着与QA专业人员交谈并帮助他们了解需要编写哪些测试。但是,在所有情况下,这意味着他们对所编写的代码足够在意,以确保对其进行了正确的测试。

底线:您应该负责提供高质量的代码。如果那意味着您需要编写一些功能测试或回归测试,请执行此操作。


我完全同意提供高质量的代码部分。我指的是更多“超越”的好代码。例如,在您看来,被视为“无错误”的更改是否会对其他地方产生负面影响。我能想到的最好的例子是,没有对需求进行适当的审查。因此,即使它是“无错误的”,我的代码也会在服务器上引起负载问题(好的,因此可以说它不是在逗我)。附言:我认为您的信心至关重要。
Jackie

10
这是你的责任向用户提供无缺陷的代码,它是开发人员构建什么的职责要求。缺陷可能会并且确实会因需求收集/解释不当,给定部署中的环境问题,操作系统内的冲突等而浮出水面。除非对每个缺陷都进行根本原因分析,否则业务的无缺陷代码意味着他们期望它可以满足用户的期望,少做的就是缺陷。假设开发人员可以继续参与整个SDLC只是为了增加信心,这是不现实的。那不会扩展。
亚伦·麦克弗

2
“程序测试可能是显示错误存在的一种非常有效的方法,但是它不足以显示错误的存在。” -Edsger W. Dijkstra,“谦虚的程序员”(图灵奖演讲),1972
。– John R. Strohm 2012年

1
“交付无缺陷的代码是您的责任。” 是仙境。您可以提供范围所需的内容,但是极端的案例和业务逻辑解释使您的陈述无法实现。您为什么认为软件的每个主要发行版都有发行版和补丁程序?因为我们包括业务逻辑在内都不完美。
杰森·塞布林

4
如果布莱恩(Bryan)措辞“ 提供无缺陷代码是您的目标 ”,那么对这个答案的第一句有疑问的每个人都会更高兴吗?
Carson63000


3

我还缺少其他有用的测试类型吗?

我推荐使用Gherkin语言的 BDD样式框架进行验收测试:JBehave(Java),Cucumber(Ruby),Behat(PHP)等。这种类型的测试相对于单元测试具有一些优势:

  • 非开发人员易于阅读测试,因此您可以向客户展示测试
  • 测试清楚地描述了业务流程,而没有涉及实现细节(我并不意味着实现并不重要-可以肯定-但是将业务需求与代码本身分开会更好)
  • 测试执行用户将使用您的应用程序执行的操作
  • 它们更易于编写(恕我直言,可能取决于语言和框架):无需嘲笑,技术细节较少

3

功能测试可以像单元测试一样自动进行,对于测试项目的不同组件如何协同工作以及系统如何反映业务规则非常有用。

此外,此自动化测试还可以作为回归和验收测试套件,用于对软件进行的任何主要(或次要)更改(错误修复,重构,业务更改,新功能等)。这使开发人员更有信心这样做。

有几种用于此类测试的框架,我们使用的fitnesse效果非常好。拥有一个非常好的用于测试网页的库(我们将其用于测试我们的Web应用程序和我们的Web服务),并且它与MavenJenkins集成得很好。

我们还曾经在开发人员之间进行“跨功能测试”,但是这种测试不是“可重复的”,因此其用途受到限制。


2

作为一名开发人员,我认为自己有责任对我所有的代码进行单元测试,并尽最大可能保证它没有缺陷。这就是为什么我们有很多工具可供使用,例如模拟。在测试中创建模拟对象的目的恰恰是试图将您的代码与“外部”世界隔离开来,并确保其工作正常,并且如果出现任何故障,“这不是您的错”。

话虽这么说,尽管事实上这不是您的错,并且您的代码按预期运行,但这并不意味着您无法在其余测试中提供帮助。我相信,将您的工作与他人所做的工作相结合和帮助也是您的责任。IT开发团队每次都应像注油机一样工作,并与其他部门(例如QA)作为更大的团队一起工作,以提供可靠的软件。

但这是团队的工作,而不仅仅是您的。


1

显然是集成测试 ; 它们比单元测试更重要,更难编写。就像盖房子一样。通过单元测试,您只能确保砖是坚固的,并且可以承受压力,温度,湿度和其他条件。但是,您不知道这房子的外观和砖块拼在一起的行为。

大型项目(尤其是驻留在容器中的Java项目)的问题是集成测试很困难。因此,为了促进大型项目中的系统集成测试,需要一个专门针对项目而设计的测试框架,这是开发人员对其进行编码的工作。最近,该领域已经取得了很大的进步,诸如Arquillian之类的平台极大地简化了测试框架的编写(甚​​至替代了它)。


1

在现实世界中,您只负责团队/老板使您负责。如果您不知疲倦地被薪水或契约辛劳,找到每一个角落和缝隙,并跳到老板(或更糟糕的市场营销)对业务逻辑错误的解释的兴起,那么您就应该对所有事情负责。

因此,换句话说,请执行提供给您的范围所要求的操作。从某种常识出发,或者看到其他人使用您正在构建的产品来获得用例和可能要解决的问题的感觉,这是一个不错的选择,但是在“修复”之前,请您的团队或老板来解决。这包括您选择的工具。您的所有努力应该是每个人都参与的工作。

如果您的问题涉及有用的错误跟踪,那么在通信系统方面,我喜欢bugzilla,google docs,zendesk或basecamp。


1

认为这还没有解决-如果错过了,抱歉。

一个问题是有效利用开发人员时间。

开发人员通常缺乏擅长某些类型测试的技能。部分地,这是自然的。这就是作者拥有编辑的原因。如果距离太近,很难看到某处的缺陷。但这也关乎不同的技能和不同的专业。

在这种情况下,花费时间测试的开发人员在成本:收益方面很差。开发人员在做其他事情时会更有效率,而专业的测试人员在进行测试时会更有效率。

当然,这是在做出各种不一定有效的假设。例如,在一家小公司中,雇用专门从事测试的人员可能没有任何意义。尽管雇用额外的支持人员并让他们进行一些测试,或者至少让人们测试他们自己没有编写的代码可能更有意义。


0

我相信,在发布进行质量检查之前,包括所有可能的测试场景是我们(也是开发人员)的责任。质量检查的目的是验证软件。另外,为错误编写自己的代码将总是使您在质量检查时看起来不错。


我认为我试图达到的目标是有效的“锤击”。
Jackie

那绝对是主观的。我会说适用于您的项目的任何类型的测试(当然,并非所有测试类型都适用于所有项目)。这是一个不错的清单:softwaretestinghelp.com/types-of-software-testing。您自己所做的事情以及您选择放弃的事情当然取决于您自己的时间,资源和能力。例如,您可能无法执行验收测试,因为有些规则只有用户知道要遵循。简而言之,请尽您所能。
Honus Wagner

对于我的大部分都是网络项目,无论如何我通常都会尝试包含单元,功能,可用性,回归,性能。如果我有时间,我会去了解白盒,压力,兼容性,甚至在我足够了解的情况下接受。我一般的编码风格非常注重性能,因此我降低了优先级。这意味着QA不会找到任何这些测试类型做错事没有,它只是意味着他们会发现越来越使一个更容易圆2
何那斯·华格纳

0

谁比开发人员更好地知道哪些测试案例最相关。开发人员应负责进行所有的单元测试,并在可能的情况下帮助编写和执行测试脚本。由于在大型项目中很少这样做,因此应该给开发人员一些时间来审查所有测试用例。此外,开发人员应具有知识并使用各种可用的自动化测试工具。

在我的开发生涯中,我发现,如果开发团队和测试团队之间紧密集成,则项目最终会获得更好的结果。

每个小组中至少应有一名成员参加其他计划和实施会议。


1
我唯一的问题是,开发人员和测试团队之间应该有一定程度的隔离,否则测试团队会被开发人员的“代码有效”观点所污染。质量检查人员和开发人员有相反的目标;开发人员试图使其正常运行,而质量检查团队正试图使其失效,并且开发人员并不总是对测试相关性拥有最佳的见解。
罗伯特·哈维

我不同意100%的意见,但是最近我又参与了移动应用程序的开发,我认为它们需要的集成度要比传统的略高一点。注意,我使用术语集成。可以隔离,但是两个团队都应该审查并为测试用例做出贡献。开发人员不太可能访问所有必需的测试资源来进行适当的测试,测试人员也不大可能会为诸如蜂窝网络上的流视频之类的高级内容开发测试用例。隔离过多=麻烦。
米歇尔·坎农

此外,我认为市场越垂直,他们越专业,团队之间的整合就越需要。实际上,每个人都应该进入测试阶段,并认为代码可以在某些经过测试的条件下工作,但很有可能存在缺陷,而不是没有缺陷
Michelle Cannon

这似乎可行,测试团队使用功能规范生成了一个用例文档。开发团队根据技术和功能规范审查用例文档,并根据需要添加用例。测试团队根据用例开发测试方案。开发测试审查测试用例。确实很费时间,但最好在部署或生产阶段进行后续测试。
米歇尔·坎农
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.