高级开发人员和单元测试-是否需要?他们被允许使用走狗吗?
是应该让高级开发人员免除单元测试,还是应该允许他们使用走狗来实施它们?激励那些不习惯使用单元测试技术的人采用它们的最佳方法是什么?
解决方案
回答
绝对不;至少是因为为我们自己开发的代码编写测试要容易得多。但是,对于所有开发人员,无论其资历如何,都必须对所有代码进行单元测试;这很重要。如果他们知道自己的代码必须是可测试的,他们的劳动成果将会更大。
如果我们需要激励开发人员进行单元测试,则只需长按优势,从长远来看可以节省时间。如果他们习惯为代码编写单元测试,那么他们很快就会开始这样做。
回答
我认为让走狗为别人进行单元测试正在破坏开始进行单元测试的意义。编写代码的程序员应该知道代码应如何中断以及其预期行为是什么。仅仅因为其他人没有将原来的程序员从这一责任中解脱出来。
(由于性别中立,措辞尴尬。)
回答
如果我们是高级开发人员,则部分是因为我们有足够的经验,知道单元测试是一种很好的开发实践,可以生产更好的软件
回答
我认为从TDD的纯粹主义者的立场(即认为单元测试应该在实现之前编写)的角度来看,高级开发人员应该编写的单元测试要比than废的编写更多,而不是更少。
原因是既然单元测试首先出现,所以编写它们需要对代码库有深入的了解。如果让小伙子们来编写它们,实质上就是让对领域了解最少的人来决定代码库的结构。对我来说,这听起来像个坏主意。
回答
编写测试的人=定义系统应如何工作="老板"
进行测试的人就是所谓的" lackeys"
听起来像是一只不喜欢新花样的老狗。俗话说,很难改变他们……TFD(测试优先开发)一旦开始就非常有趣,也许有一个整个团队的内部TDD或者TFD内部1天研讨会。
回答
我认为处理这些情况的一种可能方法是高级开发人员可以编写大部分的单元测试。这意味着他们正在定义和设计程序的工作方式。然后,小伙子们可以编写代码以匹配测试,从而学习高级人在设计时所处的设计理念。
回答
如果高级开发人员不进行自己的测试,那么他们也不是高级开发人员。
缺乏测试意愿几乎总是表示懒惰或者无能(或者两者兼而有之),在高级开发人员中也不应该发现这种特质。
我可以想到的唯一情况是,高级开发人员应加快初级人员的速度,让其他人编写单元测试。在编写一些代码时弄湿他们的脚可能是个好任务。
回答
Should senior developers be exempt from unit testing
绝对不。那时他们根本不应该是高级开发人员。高级开发人员应该成为领导者,这表明走狗的想法似乎荒谬,为什么那时还要打扰他们。
回答
第一部分(高级开发人员和单元测试)
当我想到TDD或者"测试驱动设计"时,单元测试的目的是驱散系统的进化设计,希望能确保持续改进。
编写测试将使代码成形或者突出显示已做出决定的问题,希望能导致重构过程以提高设计质量。
以我的经验,高级开发人员通常是最有经验和能力的人,这意味着他们应该更有能力发现这些重构机会。 (检测代码气味)
我可以想到三种情况,别人可以为我们编写测试是可以接受的。
- 验收测试/客户测试/端到端测试。称它们为我们想要的,但我的意思是从数据输入点(Web服务,网页,应用程序屏幕输入)开始并遍历系统的整个堆栈的测试(对数据库,对另一服务的调用,返回到输入结果屏幕等)。这可以由未实施测试将要执行的各个单元的详细信息的人员编写。
- 配对编程(乒乓模式)-
A writes a new test and sees that it fails. B implements the code needed to pass the test. B writes the next test. A implements it.
- 错误修复测试-发现错误后,通常最好写一个暴露缺陷的失败测试。一旦完成此测试,就完全有可能有人实施使测试通过的代码。我认为这并不是一个好主意,因为编写由于缺陷而失败的测试的行为通常会给人一些关于如何生成修订的见解。
简而言之,对于第一个问题,我的回答是,任何高级开发人员都不应免于编写单元测试。
第二部分(激励人们编写测试)
这是我过去遇到的问题。即使我现在尝试尽可能适当地执行TDD,但我花了几个月的时间才知道编写测试确实有好处。
我认为,试图向他人展示TDD和单元测试的好处是非常困难的。只有当这个人自己经历时,TDD /单元测试才突出他们的代码的微妙之处,否则他们可能会错过或者帮助他们在短时间内修复错误的"啊哈"时刻看到好处。
让他们达到这一点可能非常困难。
我个人是通过上述Ping Pong模式的配对编程到达那里的,并与经验丰富的TDDer一起工作,并看到我们为解决一个不重要的功能而编写的代码演变为所谓的优雅解决方案。随后进行的工作是通过质量检查并进入"实时环境",而不会对此造成任何缺陷。
简而言之,我认为与一个已经相信编写单元测试所带来的好处的经验丰富的程序员结对,是帮助某人激发编写单元测试动力的好方法。
回答
单元测试的最大好处之一就是可以立即反馈,告诉我们表现如何。如果将测试的实施外包,则无论设计是否有效,都不会得到任何反馈。那些为不良设计而苦苦挣扎的人没有办法纠正它。
回答
我不支持TDD,但是我确实在单元/ etc测试中看到了很多价值,并且在我编写代码时也做了很多。
关键是,除了编写该代码的人以外,没有人真正知道该怎么做,而且通常他们甚至都不知道。
考虑到这一点,我们不会从编写测试的" lackeys"中获得很多价值,因为
- 他们不会对所有微妙的案例有深入的了解
- 他们不会在乎代码,因为他们没有投资
- 他们会觉得自己像白痴一样受到对待。
即使他们是白痴,没有人喜欢被当作一个白痴。
如果我们想让员工辞职,这是鼓励他们的好方法。
回答
好吧,我会说是的,但是只有在允许走狗的情况下才允许将发现的错误修复交给上级。那会教他的。
回答
任何人都不应豁免编写单元测试。所有开发人员都需要能够编写它们,并且单元测试也应作为代码检查过程的一部分进行检查。单元测试的复杂度通常取决于开发人员的技能,越复杂的代码将流向高级开发人员,因此,针对他们的单元测试也将变得更加复杂和大量。
如果我们有一个或者多个无法适应的开发人员,则应尝试为他们提供一对一的帮助,并与开发人员配对单元测试,直到他或者她开始掌握它为止。技术上没有什么足够复杂的,可以写代码的人无法进行单元测试。如果确实如此,则可能是该人的技能组合出现较大问题的先兆。
我个人认为,测试人员至少了解项目中的单元测试也很有帮助。开发人员和测试人员之间的合作对于正确诊断和修复缺陷非常重要。我不希望他们必须编写它们,但是他们应该能够与开发人员坐在一起,讨论测试为什么/如何失败的概念。