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

简介:

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

  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/

目录
相关文章
|
6月前
|
测试技术 API C#
C# 软件开发之单元测试
在日常开发中,一般通过启动调试或运行程序来查看功能是否符合预期,如果不符合预期,则需要优化程序,再次运行,如此反复,直到程序的输出符合预期需求为止。随着程序的不断复杂化,某些功能的测试也变得越来越复杂,可能为了验证一个很小的改动项,就需要操作很多步骤,才能验证成功,如果验证不成功,则需要多次重复验证,这对于开发者来说,将大大的拖延了开发进度。如何才能将复杂的功能进行拆分,每一个都可以单独进行验证呢?如果其他的功能没有问题,则只需要验证修改的那部分内容即可,这就是本篇文章需要介绍的单元测试。通过创建和运行单元测试,检查代码是否按预期工作。
297 1
|
7月前
|
Java 测试技术 数据安全/隐私保护
软件测试小白如何实施单元测试?
软件测试小白如何实施单元测试?
|
SQL 测试技术
测试思想-测试设计 关于测试用例设计的一点感想
测试思想-测试设计 关于测试用例设计的一点感想
52 0
|
敏捷开发 测试技术
测试思想-测试设计 精简测试用例编写
测试思想-测试设计 精简测试用例编写
64 0
|
测试技术
测试思想-测试计划 软件测试方法与测试策略简述
测试思想-测试计划 软件测试方法与测试策略简述
68 0
|
测试技术
软件测试面试题:单元测试、集成测试、系统测试的侧重点是什么?
软件测试面试题:单元测试、集成测试、系统测试的侧重点是什么?
102 0
|
Java 测试技术 数据库
EnvironmentPostProcessor怎么做单元测试?阿里P7告诉你
从Spring Boot 1.3开始,我们可以在应用程序上下文刷新之前使用EnvironmentPostProcessor来自定义应用程序的Environment。Environment表示当前应用程序运行的环境,它可以统一访问各种属性源中的属性,如属性文件、JVM系统属性、系统环境变量和Servlet上下文参数。使用EnvironmentPostProcessor可以在bean初始化之前对Environment进行修改。
207 0
|
自然语言处理 Java 测试技术
告别祈祷式编程|单元测试在项目里的正确落地姿势
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Jav...
147 1
|
SQL JSON Java
谈一谈单元测试
写在前面对于我们开发人员来说,单元测试一定不会陌生,但在各种原因下会被忽视,尤其是在我接触到的项目中,提测阶段发现各种各样的问题,我觉得有必要聊一下单元测试。对于单元测试到底有没有存在的必要,这里不是我想要说的重点。有兴趣的可以去了解一下:【单元测试和TDD】【单元测试到底是什么】为了写而写的单元测试没什么价值,但一个好的单元测试带来的收益是非常客观的。问题是怎么去写好单元测试?怎么去驱动写好单元
607 0
谈一谈单元测试

热门文章

最新文章

相关实验场景

更多