我正在研究测试驱动开发,其中一个讨论点是与TDD相关的“入门障碍”。有没有人在这个领域有任何经验,你曾经做过的任何决定不使用TDD的项目,因为进入的门槛太高了?
据我所知,进入的唯一障碍是个体开发者的知识(以及经验),大多数人并不完全习惯于这个过程而且有点陌生。鉴于大多数市场领先的工具都是开源的,免费提供,文档齐全且得到很好的支持,因此在财务方面看起来非常有吸引力。
欣赏的想法/感受。
谢谢,
编辑 - 是否有人知道提倡TDD的人的任何高调引用?很想知道链条有多高。欢呼声。答案 0 :(得分:13)
一些障碍包括:
答案 1 :(得分:7)
就进入壁垒而言,实际上,因为您明确编写了在代码被认为完成之前必须通过的测试,所以在获取功能代码所涉及的开发周期中的提前期更长。现在,当使用TDD时,您可以有效地保证代码的某种程度的质量(无论您选择哪种质量级别进行测试),因此通常对提前期的延迟进行补偿,但严格来说,使用TDD获取功能代码有更长的准备时间。
实际上,如果你有编写无错误代码的程序员,TDD将会拖累你的开发周期。当然,TDD的价值在于,没有任何编码人员可以随时编写无错误的代码,因此修复错误的成本必须在某个地方考虑因素;在TDD中,测试基础设施的成本是前置的。
请注意,这对TDD没有任何负面影响;我只是说,前装可能被认为是“进入障碍”。就个人而言,作为一名程序员,我会说投资回报不仅仅值得付出努力,而且我认为最有经验的开发经理也是如此。
答案 2 :(得分:4)
团队和/或管理层的支持是一些公司的最大障碍。如果你是单独的开发人员试图使用TDD而你无法让其他人对这个项目感兴趣,那就非常令人沮丧。
当然,这根本不是财务障碍。最大的感知财务障碍可能是时间。如果你有一个很大的代码库,你需要编写单元测试,它看起来相当艰巨。您的经理(或他们之上的人)会质疑您为什么要花时间编写不会为代码添加功能/功能的代码。很多人没有意识到预先编写测试(正如你在TDD中所做的那样)实际上可以节省你的时间,无论是立即还是从长远来看,当你维护代码时。
答案 3 :(得分:4)
我认为一个主要障碍是它需要你改变你的思维方式。
在我尝试TDD之前,我会创建一个类,比如Employee,然后我会存在诸如FirstName,LastName,Email等的东西。然后我会写一些逻辑并忘记我错过了一些字段或其他东西。在我知道之前,我有一个非常复杂的课程,不知道这些领域是否曾经是必要的。
此外,它与我们习惯编写软件的方式完全不同。我们习惯于编写软件,因为我们会收到签署支票的人的功能。我们不习惯编写不编译的代码,使其编译,然后使其工作以使我们的测试通过。
你第一次这样做,你感觉有点......好傻和愚蠢。为什么我故意让我的代码失败? “让它成功”的理念似乎不合逻辑,我们这么长时间都被教导过。
我工作到目前为止失败的几个原因:
答案 4 :(得分:1)
是的,进入的主要障碍在于你的头脑或其他程序员的头脑。
一开始你不知道在你的测试中要写什么。
诀窍在于考虑如何使用代码而不是关注如何编写代码。说起来容易做起来......
当你开始“得到它”时,知道在哪里停止编写测试有点困难。 你必须记住测试证明什么都没有,所以你只是不能编写测试来涵盖所有情况,你必须选择最有用的......并且已经很多了!
答案 5 :(得分:1)
我当然看到了很多阻力。我遇到的障碍是:
答案 6 :(得分:1)
几周前我写了一篇关于这篇文章的长篇文章,“Why I write tests first”。
我认为最大的障碍是建立首先从测试开始的学科,但我不认为TDD(或任何相关的实践)应该作为一个绝对,绝对,100%的时间解决方案。
TDD是每个开发人员库中的工具。我倾向于认为它在大多数时候对我很有用。一个不习惯于编写测试的开发人员(首先或其他)可能很难在TDD被迫使用时完成任何工作,因为他们无法首先考虑编写测试。
我认为自己是一位经验丰富的测试作家,但我不能总是考虑测试。有些问题本身并不适合,或者至少我的脑袋有些日子不会缠绕它。某些类型的代码(例如UI和客户端代码)不能很好地总是编写测试。
如果你有一个开发团队不习惯于编写测试,我会先推动它。我没有问题要求所有新代码都有可能/实用的单元测试。一旦测试成为一门学科,将开发人员单独或作为一个团队转换为TDD就会容易得多。
答案 7 :(得分:1)
一个非显而易见的障碍(至少对我来说不明显)是构建基础架构。如果开发人员无法控制构建过程,或者基础架构太过巴洛克式而无法管理,那么将测试集成到构建过程中将以“效率”的名义分流到一边。 (当然,在这些情况下,构建基础架构应该以效率的名义放在一边。)