我是一名有很多经验的合同程序员.我习惯于被客户雇用进入我自己的某种形式的软件项目,通常是从零开始.这意味着几乎每次都是干净的石板.我可以引入我开发的库来快速启动,但它们总是可选的.(并且取决于在合同中获得正确的IP条款)很多时候我可以指定甚至设计硬件平台......所以我们在这里谈论严肃的自由.
我可以看到用于构建某些代码的自动化测试的用途:具有更多简单功能的库,具有大量引用的核心功能等.基本上,随着一段代码的价值在大量使用中上升,我可以看到它自动测试该代码将变得越来越有价值,以便我知道我不会破坏它.
然而,在我的情况下,我发现很难合理化任何东西.我会采用它们证明有用的东西,但我不会盲目跟随任何事情.
我发现我在"维护"中所做的很多事情实际上都是小的设计变化.在这种情况下,测试不会为我节省任何东西,现在他们也必须改变.高度迭代,存根优先的设计方法对我来说非常有效.通过更广泛的测试,我无法看到实际上节省了很多时间.
业余爱好项目更难以证明......他们通常都是从周末到月份的任何事情.边缘案例错误很少发生,它只是玩弄东西.
读书问题,比如这一个,最表决的反应似乎是说,在海报的经验/意见TDD实际上是浪费时间,如果你有少于5人(即使假设能力一定水平与TDD /经验).但是,这似乎涵盖了初始开发时间,而不是维护.目前尚不清楚TDD如何在项目的整个生命周期中叠加.
我认为TDD可以成为提高整个行业产品质量的有价值目标的一个很好的步骤.尽管如此,理想主义本身不再能够激励我.
我不认为TDD将是大团队是一个很好的做法,或含有至少一个不可靠的程序员任何规模的团队.那不是我的问题.
为什么一个拥有良好记录的唯一开发人员会采用TDD?
我很想知道在TDD上完成的任何指标(正式与否)......专注于独立开发人员或非常小的团队.
如果做不到这一点,你个人经历的轶事也会很好.:)
如果没有经验,请避免说出意见.让我们不要把它作为一场意识形态战争.此外,跳过更大的就业选择论点. 这只是一个效率问题.
我不会盲目跟随任何事情.
这是正确的态度.我一直使用TDD,但我并不像某些人那样严格遵守.
支持TDD的最佳论点(在我看来)是当你最终进入项目的重构和维护阶段时,你可以运行一组测试.如果这是您使用TDD的唯一原因,那么您可以随时编写测试,而不是盲目地遵循该方法.
我使用TDD的另一个原因是编写测试让我开始考虑我的API.在写这篇文章之前,我不得不考虑如何使用类.让我进入这个高水平的项目对我来说很有用.还有其他方法可以做到这一点,如果你发现其他方法(有很多)可以做同样的事情,那么我会说继续做对你有用的方法.
我觉得单独飞行时更有用.由于周围没有任何人可以反复提出想法并且没有人来执行同行评审,因此您需要确保您的代码是可靠的.TDD/BDD将为您提供这种保证.但TDD有点反对.其他人可能完全不同意我所说的话.
编辑:我可以补充说,如果做得对,你可以在编写测试的同时为你的软件生成规范.这是BDD的一个很好的副作用.你可以让自己看起来像超级开发人员,如果你正在制定可靠的代码和规范,所有这些都是你自己的.
好了,轮流......我甚至可以自己做TDD(对于非尖峰/实验/原型代码),因为
在你跳跃之前思考:在我开始编写代码之前,强迫我思考我想要完成的事情.我想在这里完成什么......'如果我认为我已经有了这件作品......我怎么能期望它起作用呢?' 鼓励对象的界面设计.
更容易改变:我可以放心地进行修改.'当我改变第5步时,我在步骤1-10中没有破坏任何东西.' 回归测试是即时的
出现了更好的设计:如果没有我在设计活动上投入精力,我发现了更好的设计.test-first + Refactoring导致松散耦合,最小的类,最少的方法..没有过度工程..没有YAGNI代码.这些类具有更好的公共接口,小方法并且更具可读性.这是一种禅宗的事情......你只会注意到你得到它时得到它.
调试器不再是我的拐杖了:我知道我的程序做了什么......而不必花费数小时来通过我自己的代码.现在如果我用调试器花费超过10分钟......心理警报开始响起.
帮助我准时回家我注意到自TDD以来我的代码中的错误数量显着减少..即使断言类似于控制台跟踪而不是xUnit类型AT.
生产力/流量:它帮助我确定下一个离开的婴儿步骤,它将带我完成...保持滚雪球滚动.TDD帮助我更快地进入节奏(或XPers呼叫流程).每单位时间我完成了比以前更大的质量工作.红绿重构循环变成了......一种永动机.
我可以通过触摸按钮证明我的代码可以工作
练习变得完美我发现自己更快地学习和发现龙......在我的腰带下有更多的TDD时间.也许是不和谐..但我觉得TDD让我成为一个更好的程序员,即使我没有先测试.发现重构机会已成为第二天性......
如果我再想的话,我会更新......这是我在最后2分钟的反思中提出的.
我也是合同程序员.以下是我喜欢单元测试的12个原因.