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

时间:2009-09-11 22:43:09

标签: unit-testing web-applications tdd

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

我是一个人操作,我正在构建Web应用程序。我不一定要“证明”我的软件适用于任何人(除了我的用户),而且我担心在过去几个月里我花了很多时间不必要地重复测试代码。

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

由于

=>今天,来自于堆栈溢出的创始人之一joel spolsky的博客来讨论这个问题:

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

“Zawinski没有进行过多次单元测试。他们”原则上听起来很棒。鉴于悠闲的发展速度,这当然是要走的路。但是当你看到时,'我们必须从零开始在六周内完成,“好吧,除非我剪掉一些东西,否则我不能这样做。而我要删除的东西是不是绝对关键的东西。单元测试并不重要。如果没有单元测试顾客不会抱怨这个。“”

随着我年龄的增长,我想我越来越意识到这一切都与速度和功能有关。我很乐意建立单元测试。但由于我们只有很多时间可以使用,我宁愿更快地构建它,依靠beta测试和良好的自动错误报告来解决任何问题。如果这个项目最终变得足够大,以至于这会让我陷入困境,它将产生足够的收入,我可以证明重建是合理的。

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

TDD与团队规模没有任何关系。它与使用正确工作的正确界面创建所需的最少软件有关。

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

使用TDD设计一个类会让你觉得它是这个类的客户端,所以你最终创建一个比没有TDD的情况下更好的界面。

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

我应该补充说,它的迭代性质也会创建一个正反馈循环,因此当你迭代时,你会对代码越来越有信心。

答案 2 :(得分:5)

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

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

答案 3 :(得分:3)

反叛始终是不必要的 - 只是不要在第一时间删除错误......

对于一个真正的答案,你不能做得比'依赖'更好。如果:

  • 你不喜欢那种 自动单元测试可以解决的问题 找到(而不是表演,视觉或 审美的)
  • 您还有其他一些设计代码的方式(例如UML)
  • 在保持工作的同时,你没有理由改变事物

很可能TDD并不适合你。

或许你做错了,如果你做得不同,那就更好了。

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

  

一般来说,人们的自我观点是有效的   只是一种微不足道的关系   与他们的实际行为和   性能。之间的相关性   技能和实际的自我评价   许多领域的表现是   温和到微薄 - 实际上,有时,   其他人的预测   人的结果证明更准确   比那个人的自我预测。   另外,人们高估了   他们自己。人们说,平均而言   他们的技能“高于平均水平”   (一个无法统计的结论   可能性),高估了   他们参与的可能性   理想的行为和实现   有利的结果,过度提供   乐观估计他们什么时候会   完成未来的项目,并达到目标   判断力过于自信。   几个心理过程   合谋产生缺陷   自我评估。

答案 4 :(得分:0)

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

  • 您测试代码以便获得错误

  • 当您维护或重构代码时,您知道您没有破解它,因为您可以轻松地对其进行测试

  • 您生成更好的代码,因为您在编写代码时专注于边缘情况

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

通常我发现这种方法很有价值。我必须承认对某些测试的持续维护存在两种想法。

答案 5 :(得分:0)

即使在术语TDD变得流行之前,我总是写一些主要功能来测试我正在制作的任何作品。之后我就把它丢掉了。我无法理解程序员的心态,他们可以编写从未执行过的代码并将其插入。如果在执行此操作后发现“Bug”几次,可能需要数天甚至数周才能跟踪。

单元测试是一种稍微好一点的方法,因为你的测试很常见,你可以看到意图。

单元测试会比在集成后从UI测试更快地发现错误 - 它只会节省您的时间。

现在保存所有单元测试并创建套件如果你是单身的话可能价值较低,特别是如果你想重构很多(你可以轻松地花费更多的时间来重构测试而不是代码),但测试仍然值得而要创造。

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

答案 6 :(得分:0)

我发现人们过分关注TDD中的TEST。有许多人不相信这是创始人的想法。

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

有些人一直都在创建自动单元测试。我将它们用作规范和测试用例。因为它们是英文的,所以企业很容易理解它们,以及质量保证部门。

通常,它是一种记录规范的形式化方式,因此可以编写代码。这不是最终目标吗?

以下是一些链接