我已经被感染了很长一段时间了,但看起来大多数与我一起工作的开发人员从来没有尝试过或因为某种原因而解雇它,其中的论点通常是它增加了开发的开销或者它们不需要打扰.
最让我困扰的是,当我来对他们的代码进行更改时,我很难接受测试,因为我必须应用重构来使其可测试,有时最终只需要做很多工作这样我就可以测试我即将编写的代码.
我想知道的是,你会用什么论据来说服其他开发人员开始编写单元测试?我介绍过的大多数开发人员都非常了解它,看到它的好处并继续使用它.这似乎总是好的开发人员,他们已经对提高代码质量感兴趣,因此可以看到单元测试如何做到这一点.
如何说服其他杂技团队?我不是在寻找测试好处列表,因为我已经知道它们是什么,但是您使用或将用于让其他人加入的技术.关于如何说服管理层发挥积极作用的提示也值得赞赏
质量不言而喻.如果你比其他人更成功,那就是你需要说的.
使用测试覆盖率工具.让它非常明显.这样每个人都可以轻松地看到每个区域中的代码通过,失败和未经测试.
然后你可以开始一种文化,其中"未经测试"是编码错误的标志,"失败"是正在进行的工作的标志,"通过"是完成代码的标志.
如果你也做"先测试",这种方法效果最好.然后"未经测试"变成"你忘了第1步".
当然,您不需要100%的测试覆盖率.但是,在一个区域覆盖率为1%而另一个区域覆盖率为30%的情况下,您有一个度量标准,哪个区域最有可能在生产中失败.
我想这个问题不止一个方面.我发现实际上说服开发人员开始使用测试并不是那么难,因为使用测试的优势列表通常不言而喻.当说,实际上是一个很大的障碍,我发现学习曲线往往有点陡峭 - 特别是对于新手编码器.抛出测试框架,TDD测试优先心态,以及那些对C#,.Net或一般编程都不熟悉的人的嘲讽框架,可能只是处理得太多了.
我是一名顾问,因此我经常要解决在组织中实施TDD的问题.幸运的是,当公司雇用我时,通常是因为我在某些领域的专业知识,因此在引起人们注意时我可能会有一些优势.或者也许这只是为了让我作为一个局外人进入一个新团队然后说"嗨!我在其他项目中尝试过TDD并且我知道它有效!" 或许这是我的说服力/顽固性?:)无论哪种方式,我经常发现很难说服开发人员开始编写测试.我觉得很难,就是教他们如何编写好的单元测试.正如你在问题中指出的那样; 留在正义的道路上.
但我发现一种方法,我认为在教学单元测试方面效果很好.我在这里写了博客,但其实质是坐下来做一些配对编程.在进行结对编程时,我首先开始编写单元测试.这样我向他们展示了测试框架如何工作,如何构建测试以及经常使用模拟.单元测试应该很简单,因此即使对于初级开发人员来说,所有测试都应该相当容易理解.解释最糟糕的部分通常是嘲弄,但使用易于阅读的模拟框架,如Moq很有帮助.然后当编写测试(并且没有编译或通过)时,我将键盘交给我的编码器,以便他可以实现功能.我只是告诉她/他; "让它变成绿色!"然后我们继续进行下一个测试;我编写测试,我旁边的'即将被测试感染的开发'写下了这个功能.
现在,重要的是要理解,在这一点上,您正在教授的开发人员可能还不相信这是正确的编码方式.大多数开发人员似乎看到(绿色)灯的点是由于某些代码更改导致测试失败,他们从未想过会破坏任何功能.当覆盖该功能的测试爆发时,那就是当你在团队中拥有忠诚的TDD时.或者这至少是我的经历,但一如既往; 你的里程会有所不同:)