代码之家  ›  专栏  ›  技术社区  ›  Dave K

测试驱动设计如何帮助一个人的软件项目?

  •  3
  • Dave K  · 技术社区  · 15 年前

    我花了很多时间为我的最新项目构建测试,我真的不确定投资回报率是多少。

    我是一个人操作,正在构建Web应用程序。我不必“证明”我的软件对任何人(除了我的用户)都有效,我担心在过去的几个月里我花了大量时间不必要地重新构建测试代码。

    我的问题是,虽然我喜欢小型到大型软件团队使用TDD的想法,但它如何帮助一个人团队快速构建高质量的代码?

    谢谢

    =>今天从StackOverflow创始人之一Joel Spolsky的博客上看到了这一点:

    http://www.joelonsoftware.com/items/2009/09/23.html

    “Zawinski没有做很多单元测试。原则上讲,它们听起来很棒。考虑到悠闲的发展步伐,这无疑是一条必经之路。但是当你在看的时候,我们必须在六周内从零开始做,好吧,除非我删掉一些东西,否则我不能做到。我要删掉的是那些不太重要的东西。单元测试也不重要。如果没有单元测试,客户不会抱怨这一点。

    随着年龄的增长,我想我越来越意识到这只是速度和功能的问题。我想构建单元测试。但是,由于我们只有这么多的时间可供使用,所以我宁愿更快地构建它,并依赖于beta测试和良好的自动错误报告,以消除突然出现的任何问题。如果这个项目最终变得足够大,以至于在A*中咬到我,它将产生足够的收入,我可以证明重建是正当的。

    7 回复  |  直到 12 年前
        1
  •  3
  •   soru    15 年前

    重新编译总是不必要的-只是不要首先删除错误…

    对于一个真正的答案,你不能做得比“它取决于”更好。如果:

    • 你不会有那种 自动单元测试可以解决的问题 查找(与性能、视觉或 美学的)
    • 您有一些其他的代码设计方法(例如UML)
    • 你没有理由在保持工作的同时改变事情。

    很可能是这样,TDD并不是真正适合你的。

    或者你做得不对,如果你做得不同,效果会更好。

    或者,也许,它确实有效,但你没有意识到。单独工作的一件事是 self-assessment is difficult .

    一般来说,人们的自我观点是 只是一种脆弱到温和的关系 他们的实际行为和 性能。两者之间的相关性 技能和实际的自我评定 许多领域的性能是 中等到微薄确实,有时, 其他人的预测 人的结果证明更准确 而不是那个人的自我预测。 此外,人们高估 他们自己。一般来说,人们说 他们的技术“高于平均水平” (不符合统计的结论 可能性),高估 他们参与的可能性 理想的行为和实现 有利的结果,提供过度 乐观的估计 完成未来的项目,并达到 过于自信的判断。 几个心理过程 共谋制造有缺陷的 自我评估。

        2
  •  5
  •   Joril    15 年前

    我认为像你这样的情况有帮助 大大地 当您必须更改/重构/优化大量代码依赖的内容时…通过使用单元测试,您可以快速地确保在变更之前工作的所有东西,在变更之后仍然工作:)换句话说,它给您信心。

        3
  •  5
  •   SingleShot    15 年前

    TDD与团队规模无关。它必须与创建正确工作界面所需的最小数量的软件有关。

    TDD过程要求您只编写足够的代码来满足测试,所以您最终不会创建不需要的代码。

    使用TDD设计一个类会让你认为它是类的客户机,所以你最终创建一个更好的接口的频率要比没有TDD开发它的频率高。

    TDD本质上可以实现100%的代码覆盖率,从而证明您的代码是有效的。这样做的一个副作用是,您和其他人现在可以更安全地更改类,因为它有一整套自动化测试。

    我应该补充一点,它的迭代性质也创建了一个正反馈循环,所以当您迭代时,您对代码的信心会越来越大。

        4
  •  5
  •   Frederik Gheysels    15 年前

    TDD不仅涉及测试,还涉及设计类/API。

    我的意思是:通过先写一个测试,你不得不考虑如何使用你的课程。因此,首先要考虑类的接口,如何使用类,因此,对象模型变得更可用和可读。

        5
  •  0
  •   djna    15 年前

    理论上,团队规模不应该重要。TDD应该得到回报,因为:

    • 你测试代码,这样你就可以把错误清除掉。

    • 当您维护或重构代码时,您知道您没有破坏它,因为您很容易测试它。

    • 您可以生成更好的代码,因为您在编写代码时将重点放在边缘情况上。

    • 您可以生成更好的代码,因为您可以自信地重构代码

    一般来说,我发现这种方法是有价值的。我必须承认,对于某些测试的持续维护,我有两种想法。

        6
  •  0
  •   Bill K    15 年前

    甚至在术语TDD流行之前,我总是编写一个小的主要函数来测试我正在工作的任何部分。我马上就把它扔掉。我很难理解那些能够编写从未执行过的代码并将其插入的程序员的思想。当你在做了几次之后发现一个“bug”时,可能需要几天甚至几周的时间来追踪。

    单元测试是一种更好的方法,因为您的测试一直在进行,您可以看到它的意图。

    在集成之后,单元测试将比从UI测试更快地发现这个bug——这只会节省您的时间。

    现在,如果您是单身,那么保存所有单元测试并创建一个套件的价值可能会更低,特别是如果您喜欢重构很多(您可以轻松地将更多的时间花费在重构测试上而不是代码上),但是这些测试仍然值得创建。

    另外,测试驱动的开发在某种程度上也很有趣。

        7
  •  0
  •   Brad Bruce    15 年前

    我发现人们太专注于TDD考试了。有很多人不相信这是发起者的想法。

    我发现无论问题大小,BDD都非常有用。它集中于收集系统应该如何工作。

    有些人一路走到创建自动化单元测试。我将它们同时用作规范和测试用例。因为它们是英文的,所以业务部门和质量保证部门很容易理解它们。

    一般来说,它是一种形式化的记录规范的方法,以便可以编写代码。这不是终极目标吗?

    这里有几个链接