如何激励同事编写单元测试?

从管理人员到开发者,每个人都在说单元测试,但是却很少有人执行。有关单元测试的好处相信大家也能例举出一二,但很多时候,开发者面对自己的项目代码却无从下手。

  Lurkerbelow在公司里是唯一执行单元测试的一名开发者,他深知单元测试带来的好处,也积极提倡单元测试。他甚至与公司的管理层人员、开发者都讨论过单元测试,但却无人对此感兴趣。 为了与开发人员形成一条战线,Lurkerbelow甚至“被迫“提交了代码审查(Gerrit)和持续集成开发(Jenkins)。

  无奈之下,Lurkerbelow在 Stack Exchange发出上“求救”,抛出《“如何激励同事进行单元测试?》的话题,引发了众多开发者的关注,纷纷献策。

  对此,我们从中摘译了几个较为重要的观点与大家分享,希望能引起大家的共鸣。

  实质的文档或许有帮助

  jimmy_keen:我注意到几乎很少有公司在谈论TDD。人们更乐意看到最终结果。人人都说“编写单元测试将缩短开发时间”,这是似乎是真的,但这并不足以让人们相信。

  我与你处在相同的位置(但不像你这么糟糕),开发者在代码问题上都能够自行解决(这里的代码是指单元测试)。某个项目停止更新时,本地的调查自然就会更进,进而找出问题所在。

  然后,当我们进行单元测试时,如果测试被通过了,大多数问题会出现在最新的、未测试的代码中。如果不是,测试通常能够发现问题(至少找出了正确的方向)。我们修复Bug,再进行测试。

  一句话,如果发生类似这样的情况,将会有超过2名开发者变成可TDD 测试爱好者(我们希望更多人参与)。

  建议,你可以选择TDDkata将使用测试作为首选方法。

  根据任务的复杂程度,非测试方法进程通常较为缓慢,尤其是当增量编码器需求发生更改时。

  ● Roy's string calculator

  ● Bank OCR

  找出问题所在,“对症下药”

  HLGEM:首先,要弄清楚为什么他们不喜欢写单元测试。 通常严格的时间进程表是导致其最大的原因。

  其次,现有的大型未测试的代码基,编写单元测试工作量巨大。因此,开发者本能认为:“这太麻烦了,我得跳过去。”

  另一个原因可能是,他们骨子里认为测试是个好方法,但他们在如何写测试上没有信心,尤其是他们从未接触过。究其根本原因,是开发者根本不会写单元测试!

还有一大原因是,他们没有看到这项额外的工作所带来的好处(利润)故放弃,即便是他们想提供这样的服务。

  那么,对于以上这些情况该如何处理呢?

  Reason 1:向开发者展示案例,如何节省开发时间。

  Reason 2:告诉开发者在一年内能编写多少测试,代码基覆盖了多少比例。

  算算这一年里他们写了多少测试,明年他们依然愿意这么做。一旦他们发觉每天都会进步一点点,思想上就会潜移默化了,从而产生质的变化。

  如果可以的话,把系统数据拉出来,让他们知道在未经测试的代码中有多少重复Bug?进行单元测试的代码中又有多少重复bug?

  Reason 3:培训,让开发者在培训班中编写测试。

  Reason 4:这是问题的关键所在,首先,选择一个痛点,比如在某个项目中这些Bug被多次返回。在上述过程中,向管理部门提出建议,如果他们在这个项目中进行单元测试,那就不会出现不想见而又偏又见到的代码。

  当然,作为开发人员,我们首先要学会自我管理。

  写好单元测试,学会重构很重要

  ElYusubov:我想先说说TDD的好处。

  从正常人类的角度思考,开发者都是以利益为主,因为他们不想进行工作意外的事情。单元测试意味着更少的工作;意味着与朋友相处的时间更多;意味着有更多的乐趣,因为你无须每个夜晚编码工作到11点;也就意味着可以舒心的度过假期。

  想要写好单元测试,学会重构是很重要的。这里补充几点:

  1、编写测试代码建立基本的防护网;

  2、在单元测试和功能测试之间要有取舍,如果单元测试实施成本很高,可以先加功能测试;

  3、通过增加中间层来打破依赖,不是为了去掉依赖,而是为了后续的修改以及测试的便利;

  4、将第一步中编写的功能测试换成单元测试。

  TDD最大的好处之一是,你可以重构程序获得更好的设计或者只需改变某个项目的名称……只要这种设计没有破坏测试,前提是你有100%的信心保证你的改变没有破坏任何东西。

  TDD为遗留代码创建单元测试,这将出现重构。从长远的来说,这将有有助于改善你的代码基础知识,了解其优缺点以及代码中现有的的硬编码业务模块,为你提供一个良好的开端,为提高产品质量向前迈进。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-01 16:51:23

如何激励同事编写单元测试?的相关文章

为什么要编写单元测试?单元测试的优势及优点

为什么要编写单元测试?原因是单元测试有不少的优点,能够给我们的工作带来很大的帮助. 单元测试的优点 1.帮助开发人员编写代码,提升质量.减少bug.如果大家分析一下我们bug原因的构成,我想有会有一部分bug的原因是开发人员在编写工作代码的时候没有考虑到某些case或者边际条件.造成这种问题的原因很多,其中很重要的一个原因是我们对工作代码所要完成的功能思考不足,而编写单元测试,特别是先写单元测试再写工作代码就可以帮助开发人员思考编写的代码到底要实现哪些功能.例如实现一个简单的用户注册功能的业务类

对J2EE中的DAO组件编写单元测试

单元测试作为保证软件质量及重构的基础,早已获得广大开发人员的认可.单元测试是一种细粒度的测试,越来越多的开发人员在提交功能模块时也同时提交相应的单元测试.对于大多数开发人员来讲,编写单元测试已经成为开发过程中必须的流程和最佳实践. 对普通的逻辑组件编写单元测试是一件容易的事情,由于逻辑组件通常只需要内存资源,因此,设置好输入输出即可编写有效的单元测试.对于稍微复杂一点的组件,例如Servlet,我们可以自行编写模拟对象,以便模拟HttpRequest和HttpResponse等对象,或者,使用E

JUnit一个回归测试框架用于Java开发人员编写单元测试

通过本文的介绍,您可以了解到什么是 Jhttp://www.aliyun.com/zixun/aggregation/29926.html">Unit,它有什么用处,JUnit 4.10 有什么新特性,并且如何应用. JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),主要供 Java 开发人员编写单元测试.在极限编程和重构中被极力推荐使用的一个工具,因为它可以大大地提高开发的效率.那么大家就

不要为数据持久层编写单元测试

为增强自信心而写代码 关于单元测试,其作用我认为更多的是增强开发者的信心,以及作为代码的执行文档(额外的效果).也就是说,编写单元测试首先是开发者的责任,其次单元测试的粒度由程序员的自信心决定. "老板为我的代码付报酬,而不是测试,所以,我对此的价值观是--测试越少越好,少到你对你的代码质量达到了某种自信(我觉得这种的自信标准应该要高于业内的标准,当然,这种自信也可能是种自大).如果我的编码生涯中不会犯这种典型的错误(如:在构造函数中设了个错误的值),那我就不会测试它.我倾向于去对那些有意义的错

编写单元测试的10条理由

Anna写了一篇10 reasons to write unit tests的文章,原文已经打不开,不过其观点还是非常不错的.本文摘录如下: 1. 不要让客户发现难堪的bug.在bug进入产品生产环节前编写足够的测试场景来捕获它们. 2. 对于复杂的场景,快速测试它,不必在程序中手动地重现去它们. 3. 经常测试,在你离开的时候程序便不会出错.你不可能总能了解你所编写代码的各种可能情况,尤其最初的程序并不一定是由你编写的. 4. 尽早测试,就不需要编写一些不必要的代码,而可只关注关键部分.这可以

研发周报:王淮给技术创业团队的十点建议

研发周报:王淮给技术创业团队的十点建议 发表于8小时前| 次阅读| 来源CSDN| 0 条评论| 作者夏梦竹 研发周报facebook单元测试web框架开源API 摘要:即使错过了也没关系,研发周报为您总结了本周最热点新闻.值得关注的有:前 Facebook资深员工王淮给技术创业团队的十点建议:如何激励同事编写单元测试:王淮经验谈:我的码农原则:主流编译器对C++11的支持现状比较等. 我们精心为您准备了CSDN研发频道一周最精彩的技术热点,以飨读者!本周关注点有前Facebook资深员工王淮给

XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)

当你在工程中通过测试导航栏添加了一个测试target之后, xcode会在测试导航栏中显示该target所属的测试类和方法. 这一章演示了怎么创建测试类,以及如何编写测试方法. 测试targets, 测试bundles, 以及测试导航栏 在开始创建测试类之前,测试导航栏值得多看上一眼.对于创建测试和完善测试工作来说,如何使用好它是很关键的. 将一个测试target加到工程会创建一个测试bundle.测试导航栏会展开测试bundles里面所有的源代码组成部分(在一个层级列表中展示了测试类和测试方法

《有效的单元测试》一1.1 国情咨文:编写更好的测试

1.1 国情咨文:编写更好的测试 下述概念如今已被广泛推荐,即开发者应该编写自动化测试,以便当发现回归问题时就使构建失败.而且,测试先行的编程风格已有大量的专业研究,使用自动化测试不仅是保护回归,而且是帮助设计,在编写代码之前就指出代码的期望行为,从而在验证实现之前先验证设计.作为顾问,我见过很多团队.组织.产品和代码.看看今天的我们,很明显自动化测试已经成为主流.这很棒,因为没有自动化测试,大多数软件项目会比现在更糟.自动化测试改善了你的生产力,使你获得并保持开发速度.救命!我是单元测试新手如

《编写可测试的JavaScript代码》——1.2 代码是让人用的

1.2 代码是让人用的 最近这一理念已经深入人心,我们不会弱化这一理念.我们编写的代码不是让电脑用的,而是让人用的.编写软件是一种亲身实践的业务.电脑只是接收比特数据.JavaScript.C+.Java.Per.Lisp或任何其他语言,都是将其编译到CPU极其有限的指令集中.CPU不知道它运行的是"编译"的语言还是"解释"的语言.CPU不在乎注释.分号或空格.CPU对人们使用的各种计算机编程语言的结构.语法.语义都是兼容的.JavaScript程序看起来就像是C+