当同事因为包含unit testing而拒绝我的提交时,我应该怎么做?

我已经从同一家公司的一个团队转移到另一个团队。 在老队伍(hardcore c ++),我们做了大量的unit testing。 在我的新团队(也是C ++)他们做functiontesting。 在审查期间,他们拒绝我的代码,因为unit testing。 大部分团队都有兴趣学习新的东西,但不是那些是VIP的人,而且有遗留的开发者方法。 他必须在提交之前接受代码。 他抵制变化。 build议吗?

//更新:我会在这个主题中通知我的任务发生了什么,但请理解这是一个大公司,这需要时间。 只是为了澄清,我做的testing是好的,它一直在其他团队工作。 我对此并不陌生。 有时我需要制动依赖性导致代码它简直废话。 在C ++中,你有时必须这样做。 只是因为testing,这可能会引起产品代码的变化。 我相信有unit testingcertificate这种简单的变化。 有没有比这更好。

//更新2:感谢大家的好build议,显然这里没有银弹(大部分团队都信服,但是2位高级(15y +)的开发人员仍然反对,我会就此进行简短的讨论。支持我,所以我希望那些家伙只会同意:)放松一下,我开始学习ruby:)

你刚刚遇到了所有人中最难的软件问题。 虽然我不愿意在没有更多的上下文的情况下猜测你的老板(例如,这真的是一个完整的testing图片吗?),单纯因为你包含unit testing而直接拒绝你的代码是一个有问题的做法。

最明智的路线是与这个人进行一对一的交谈,以便你了解他的位置。 你形容你的老板是抗拒改变的,但通常人们并不那么黑白。 例如,也许他认为,由于项目的新状态,您提交的代码数量有风险,不了解您的unit testing能够让您编写更多的代码,因为您可以对此有更高的信心。 所以我会给他怀疑的好处,首先要有一颗心。

以下是您在谈话中要问的一些问题:

  • 你对unit testing有什么想法? 它们如何符合我们的整体testing策略?

  • 你提交的unit testing有什么问题? 他们缺乏或缺乏某种方式? 你可以unit testing本身,但宁愿我的代码组织不同?

  • 为什么我们所有的代码都要在function层面进行testing?

  • 所有的unit testing对于我们的项目都不合适或不合适

  • 当这些条件更复杂,在更高的接口级别上复制时,您如何计划发现与特定方法input相关的问题?

  • 如果你对unit testing有特殊的反对意见,有没有反对在本地使用unit testing,至less我可以validation自己的代码?

如果你觉得现在已经明白自己的位置了,而且想要编写软件的方式是站不住脚的,那么你就有另外一个问题要问自己:尽pipe存在专业上可疑的做法,你是否仍然享有足够的工作去留在团队中?是时候开始寻找其他地方了?

相反,如果你现在明白为什么这个规则在那里,而且你认为在项目的总体背景下是合理的话,那么就很好! 通过专业处理自己,避免了潜在的危机,您可以留在新的团队中,然后回到软件开发这个有趣的部分。


编辑:我真的不能同意这个问题的一些职位,告诉OP适应团队。 标准化的做法只有当团队买入实践时才是好事。 我们应该鼓励他去理解为什么这个规则是到位的,而不是告诉他们这个规则是否合适,以便评估这个规则是否有意义。

经理也有一些解释,他可以帮助OP看到他的方式。 当然,并不是每个人都会同意经理人。 我领导过项目或团队,做出了让大家都不满意的决定,但是我总是先试着让大家提出意见,以便我能够做出最好的决定。 在我看来,由pipe理层执行一套“标准”而不考虑对团队的影响,忽视其他build议,这会使你成为一个糟糕的pipe理者,而不是一个好的pipe理者。

开发团队最重要的事情就是坚持标准,即使你不同意这个标准。 如果每个人都做自己的事情,那么标准就没有意义了。

你可以保持你的个人满意/自信的unit testing。 也许有一天,你可以certificate你的方法已经阻止了以某种方式重新获得或者使团队受益的一个错误,然后可能会更容易得到你的观点。

有一天你会成为制定标准的人,然后有些人会不同意你。 那么你可以告诉他们这个故事。

免责声明:我会适时使用unit testing,任何为我工作的人都将被鼓励。

将unit testing存储在并行版本控制中,只将代码提交给中央系统。 他会在没有unit testing的情况下检查你的代码,你仍然可以从中受益…

此外,我build议使用分布式版本控制之一,你可以玩一个新的有趣的玩具,当你的其他同事想要尝试时,他可以轻松地拥抱和扩展你的testing套件。

编辑澄清以下评论:

我build议他为他的unit testingbuild立一个本地源代码库。 代码本身仍然会与托pipe的存储库同步(通过正常的提交过程只是不提交testing代码)。

他也可以保持他认为对硬盘有用的unit testing,并且不会改变任何东西,就像我知道的任何一个开发者都有一些“工具”文件出于各种目的一样。

这个想法是,在unit testing中,他可以希望他的bug比率低于其他的。 当他用技术领先来讨论这种事情的时候,它会有帮助。 只要他按时完成分配的工作,我不明白他为什么不能按照自己的意愿工作。

unit testing有成本,而不仅仅是好处。 从http://www.joelonsoftware.com/items/2009/09/23.html

Zawinski没有做许多unit testing。 他们“原则上听起来很棒。 以一种悠闲的发展速度,这当然是一条路。 但是当你看到“我们必须在六个星期内从零开始”,那么,除非我切断一些东西,否则我不能那样做。 而我要删除的东西并不是绝对的关键。 而unit testing并不重要。 如果没有unit testing,客户不会抱怨。“

来自: http : //www.codinghorror.com/blog/2005/04/good-test-bad-test.html

我目前unit testing的主要问题是当我改变一个devise时,我得到了一堆失败的testing。 这意味着我要么写更less的testing,要么减less大的devise更改。 这两个都是坏事。

我很抱歉,但你必须适应团队。 你必须经常谈论unit testing,你不能在一天之内说服他们。

我的负责人对oop一无所知,他还在用c#编写程序,现在说服他使用构造函数,也许在几个月内他将使用私有字段/方法而不是静态方法。

适应你自己。

在几分钟内,你应该得到一些最有利于你的答案。 将此线程显示给拒绝代码的人员。 🙂

我是一个懒惰的混蛋,他不会在接近足够的unit testing的地方写任何东西,但是当我的人写作的时候,我不会愚蠢地拒绝unit testing。 你可以尝试在愚蠢的pipe理的范围内工作,但除非有一些希望这个家伙即将从现场消失,我build议你find另一个团队。

让你的团队领导阅读这篇文章 (pdf)(你可以在这个博客文章中find整洁的内容 ),看看他是否改变了主意。

现在,一项研究没有任何证据,但有一个非常有趣的外卖段落:

我们发现,考试第一的学生平均写了更多的考试,反过来,写更多考试的学生往往更有成效。 我们还观察到,最低质量随程序员testing的数量呈线性增长,与所采用的开发策略无关。

换句话说,更好的testing,更好的代码。 期。 (这与我的经验,以及与我合作过的无数其他开发人员的经验是一致的。)

如果你不能让这个家伙改变主意,那么在其他地方寻找工作 – 你最终成为失败者队伍中的一个,那些负责人不会去学习新事物。 不好。

编辑:有几十个研究显示TDD的有效性。 尝试这里和这里更多。

如果团队没有经验来维护一个unit testing套件,那么他们就有问题,但是如果他在公司中比他更重要的话,你将难以解决。

我在大学软件质量讲座中得到的一个好build议是:

如果你遇到一个他们不知道如何制作软件的团队/公司, 尽量帮助他们改进(接受没有一个好方法,但不尝试不是这样)。 提出好的论点(例如:我的代码有更less的错误,并花费相同的时间来写?)。 如果你不能改变公司/团队:不要留下来,开始寻找一个新的工作,与这家公司或另一个。

这听起来像他拒绝检查包含代码执行unit testing的源代码,对吗?

简单的解决办法是不要试图检查你的unit testing代码。 你仍然可以编写它,并执行unit testing,但保持分开。 如果你想修改版本,为你的unit testing保留你自己的独立版本库。

这就是我20年来职业生涯中最重要的一步。 我想我只有一个程序正式跟踪你的老团队所做的unit testing。

继续写这些testing,但避免写简单的testing。 也许有一个小小的考验,你认为你可以教育别人,但他们可能会认为这是浪费时间的certificate。 尝试通过编写一个testing来修复错误,重现问题,并做一个关于你对团队做了什么的介绍。 尽量不要将unit testing作为新的宗教来销售,而是试着解释为什么这是你工作的方式。 花费你的精力先说服其他队员。

在某些时候,他们会注意到你可以对代码的执行做很大的改变而不会退化。

重命名您的unit testing“相机functiontesting”。

编辑:更实际的是,如果你不能克服人为因素,你可以维护你的unit testing在一个小的,私人的,并行的存储库。 开发或维护时解压缩它们,运行它们,更新它们,然后放到下一次。

有趣的是,代码被拒绝, 因为unit testing。 如果您将它们从您提交验收的代码中删除,是否会被接受? 如果是这样的话,你只要继续进行unit testing,并继续生产通过这些unit testing的代码。 如果你的testing是好的,那么他们只会改进你input的生产代码。编写unit testing的“开销”并不多 – 当然这与find下游的错误相比。

也就是说,你不能走进一个新的组织,并期望在一夜之间改变这个组织的文化 – 这一般不会发生。 更好的是,你跟上你的良好做法,并提交通过你的testing的代码。 及时,你的同事可能会来,或规则可能会改变。 人们不愿意改变,直到他们看到好处。

如果你的代码不符合组织设置的其他标准,当然你需要解决这个问题。

我将会提出一个不太引人注目的John Feminella的答案。

与有问题的人交谈,但不要做一首大的歌,跳舞。 当然,不要说“你为什么不喜欢我做一些让我的代码更好的东西”,这是对他的知识的挑战,鉴于许多开发者对于默示的批评非常敏感,他可能会告诉你迷路了。

相反,我首先要澄清的是,“你是否仅仅因为我包含了这个testing代码而失败了?” 然后说:“我发现testing时我的生产力更高,testing中有什么问题”

另一方面,unit testing可能会被拒绝的原因可能是:

  • 有可能,规则适用于项目中的所有代码
  • 这意味着unit testing意味着更多的代码来审查
  • unit testing可能不会以符合一般评审/编码标准的方式书写

特别是在C ++中,我想象你的testingtypes与主应用程序代码混合,因为项目中没有unit testing设置。 在这种情况下,可能会使代码更难以遵循。

这并没有真正解决你的问题,但你没有提到你是否获得代码覆盖。

functiontesting和代码覆盖率可以有效地certificate代码的正确性,而且当你的pipe理人员进入队伍时可能会受到欢迎。

主要的问题是当你的代码仍然处于不断变化的状态时,这是很多的努力,并不是很实用。