您是否在专业项目中使用单元测试?

时间:2008-10-17 11:09:02

标签: unit-testing testing architecture tdd

我们即将开始项目的新部分,似乎对单元测试似乎没有太多兴趣(并且他们感觉不到他们经历过TDD)。我相信它几乎是必不可少的,它使维护更容易。 你有什么看法?

由于

BTW:这是一个与语言无关的问题,但新项目是用Java编写的。

17 个答案:

答案 0 :(得分:8)

我发现单元测试不仅仅是一件有用的事情,它也是开发人员的责任。如果您发布未编写的代码以通过有效且全面的单元测试集,则可能会延迟您的项目,或导致其他人的包,类等出现问题。

此外,您应该与您的客户保持密切联系(即使是您自己的公司),并尝试鼓励他们进行全面的验收测试。这符合他们的最佳利益(尽管我发现一些公司对这个想法有抵触,因为执行测试所需的短期时间,尽管如果产品没有完全确切地节省了大量的时间他们想要什么。)

修改

所以,是的,我想我想说的是:是的,我确实认为Test Driven Development是要走的路。我当然没有提到的另一件事是测试有助于记录代码。您将知道这些方法应该做什么,并且当您在以后的任何阶段进行更改时,您将确保它们仍然可以。

答案 1 :(得分:8)

绝对单位测试用于我们的项目。每个不是无脑的吸气剂和制定者的课程都经过单元测试。通过对代码进行功能测试,您可以随意重构,而不必担心会同时破坏50个不同的东西。

单元测试的另一个被低估的方面是它将一个被忽略的算法方面带到了表面。我只花了两天时间使用正交数组编写和重写单元测试,因为每次我提出一个测试用例列表时,我发现了技术主管忽略了问题的另一个方面。

答案 2 :(得分:5)

是。我们一直在使用TDD一段时间。不知何故,TDD已在我们身上发现,我们喜欢这种增量方法,以实现更好的代码质量。尽管最初的拒绝曲线,您认为它会减慢开发过程中的一致性和渐进式单元测试,而编写代码在很多方面都是必不可少的。由于逐步建立的回归测试框架,编写重大变更非常困难。完成后,代码更加健壮,对代码和整个项目的信心也会受到积极影响。

现在编写单元测试不仅仅是精英。它应该是每个开发人员的责任。后来发现代码中的错误越多,修复成本就越高,找到它就越难。这很容易成为维护的噩梦。大力支持单元测试可以大大降低这种风险。

将单元测试和TDD的强大功能与配置良好的持续集成系统相结合,可以在项目的早期阶段快速发现问题。每日构建是避免未来和几乎肯定麻烦的必要条件。

答案 3 :(得分:5)

单位测试需要付出代价。首先,您必须编写并验证所有额外代码。然后,您可能不得不在项目团队中推动昂贵的文化变革,以接受单元测试。

这个价格可能值得为您的特定项目付出代价。该决定不应基于教条或轶事,而应基于对成本和收益的仔细分析。

答案 4 :(得分:2)

严格来说不是TDD,但我会对我编写的每一段代码进行单元测试。我认为它与源代码控制和重构的方式相同;他们只是来编写高质量的代码。我不会想到单元测试。

答案 5 :(得分:2)

我无法想象现在没有自动化测试的项目(单元/集成等......)

事实上,我经常说

  

“如果这打破了,那不是我的错”

处理没有测试的人员代码时。

答案 6 :(得分:2)

我们在一段代码像客户真正想要的那样工作之后进行单元测试。起初我们正在进行单元测试太快,当客户改变他/她的想法(它发生,相信我)时,你经常要删除代码以及单元测试。这太费时间和昂贵。我是单元测试,但TDD对我们来说并不经济。

答案 7 :(得分:1)

我发现TDD非常有用,但是在写一些新代码打破较旧的测试之前,一些开发人员看不到它的价值。

答案 8 :(得分:1)

当您在讨论论坛上提出问题时,很多人会说单元测试是“强制性的”,但实际上单元测试的考虑因素来自调查结果。有关更多参考/材料,请参阅http://www.methodsandtools.com/dynpoll/oldpoll.php?UnitTest2

答案 9 :(得分:0)

如果值得写,那值得测试。

答案 10 :(得分:0)

是的,无论我在哪里。我必须支持我编写的代码,而且我知道在开发过程中花费的适量额外时间使我免于在发布后花费的额外时间。

答案 11 :(得分:0)

在所有新开发项目中,我们现在进行TDD。对于遗留维护,我们创建失败的单元测试以公开报告的缺陷并逐步构建库。

这是一种文化冲击,但当你意识到你花更多的时间在新的开发上并且花更少的时间寻找bug时,它确实会得到回报。

答案 12 :(得分:0)

单元测试(我在想JUnit)和TDD是你用新代码开始一个新项目时的方法(你需要更多像CI)。

但是当你的新项目要修改一个充满紧密耦合类的旧代码库时,每个代码库都有5KLOC,那么单元测试很困难,大多数时候项目时间线不允许重构(或重写) )。如果这是您即将开始的项目,我建议您阅读“使用旧版代码”来测试旧代码的策略。

答案 13 :(得分:0)

是。除了客户在我的头旁边拿枪的情况,以便在当天结束时获得一个功能。

答案 14 :(得分:0)

不幸的是不是每一次。我们最关键的任务系统充满了单元测试,以确保他们做他们应该做的事情,并且不管开发人员如何都继续这样做。  对于其他系统,大多数时候开发时间太短,无法用于编写测试。 (但最终赢得的时间是两次调试。)

答案 15 :(得分:0)

我希望我能在项目中更多地使用单元测试,并希望我的同事至少编写一些测试。 :)

就我而言,启用单元测试和使用TDD实践的代价非常高。它主要依赖于工具,这对我们使用的框架来说非常差。如果单个测试只能通过单击进行整个项目(或两次点击,以防我们此刻需要进行特定测试),那就更容易了。我们现在使用的工具并没有真正得到回报 - 有时候手动发现错误更容易,而不是运行测试。

使用Java,有更好的工具,所以你现在应该开始编写测试了!调试很糟糕,测试岩石,真的。

答案 16 :(得分:0)

我很感兴趣这样做,但不知道如何开始使用我最终加入的大型项目...自1996年以来没有参与过一个真正重新开始的项目!