slu*_*ter 57
在我以前工作的地方,单元测试通常被用作与较小的测试部门一起运行的理由; 逻辑是"我们有单位测试!我们的代码不可能失败!因为我们有单元测试,我们不需要真正的测试人员!!"
当然,这种逻辑是有缺陷的.我见过很多你不相信测试的案例.我也看到很多情况,由于时间紧迫,测试变得过时 - 当你有一个星期做大工作时,大多数开发人员会花一周的时间来做真正的代码并运送产品,而不是重构单元测试第一周,然后再恳求至少另一周做真实的代码,然后花费最后一周使单元测试与他们实际编写的内容保持同步.
我还看到了单元测试中涉及的业务逻辑比隐藏在应用程序中的逻辑更具怪异性和难以理解的情况.当这些测试失败时,您需要花费两倍的时间来解决问题 - 测试存在缺陷,还是真正的代码?
现在狂热者不会喜欢这一点:我工作的地方很大程度上已经使用单元测试逃脱了,因为开发人员具有足够高的水平,很难证明编写单元测试的时间和资源是合理的(更不用说我们了使用REAL测试人员).真的.写单元测试只会给我们带来最小的价值,投资回报就不存在了.当然它会给人一种温暖的模糊感觉 - "我可以在晚上睡觉,因为我的代码是通过单元测试保护的,因此宇宙处于一个很好的平衡状态",但现实是我们在编写软件的业务,而不是给经理们温暖的模糊感受.
当然,进行单元测试绝对有充分的理由.单元测试和TDD的问题是:
在现实中,它应该被用来作为一个的,你在日常工作中使用的工具或方法,它不应该成为了单一的方法.
duf*_*ymo 27
重要的是要理解它不是免费的.测试需要努力编写 - 更重要的是,维护.
项目经理和开发团队需要意识到这一点.
Con*_*cht 26
实际上我的错误都不会通过单元测试找到.我的错误主要是集成或意外用例错误,为了更早发现它们,更广泛(和理想的自动化)系统测试将是最好的选择.
我正在等待更多以证据为基础,而不是基于宗教的单位测试论证,正如dummymo所说.我并不是指某些学术环境中的某些实验; 我的意思是,对于我的开发场景和编程能力而言,成本效益将是积极的.
因此,同意OP的其他答案:因为它们花费时间和成本效益没有显示出来.
Jef*_*ege 10
简单的事实是,当你编写一些代码时,你必须确保它在你说它完成之前有效.这意味着你运用它 - 构建一些脚手架来调用函数,传递一些参数,检查以确保它返回你期望的.是否有额外的工作,保持脚手架,所以你可以再次运行测试?
是的,实际上,它可以.通常情况下,即使代码正确,测试也会失败,因为您使用的数据不再一致,等等.
但是,如果你有一个单元测试框架,那么保持测试代码的成本只会比丢弃测试代码稍微多一些.虽然是,您会发现许多测试用例都会因为您使用的数据出现问题而失败,而不是代码问题,当您学习如何构建测试以尽量减少测试时问题.
是的,通过单元测试并不能保证您的系统正常运行.但它确实提供了某些子系统正在工作的保证,这不是什么.测试用例提供了有关如何调用函数的有用示例.
它不是灵丹妙药,但它是一种有用的做法.
正式验证.
如果你可以正式证明代码的正确性,除非测试条件带来新的变量,否则没有理由进行单元测试,在这种情况下,你仍然只进行少量的单元测试(或证明新的变量) ).
单元测试将告诉您一个特定的类方法是否正确设置变量(或某些变量).无论如何,形状或形式都不表示您的应用程序将正常运行或者它将处理它需要处理的环境.
您可以考虑编写测试的任何问题,您将在您的代码中处理,并且该问题永远不会出现.那么你就有300个测试通过,但是你想要测试的真实场景.因此,创建和维护测试所需的工作不一定值得.
这是通常的成本/收益分析.
成本:您需要花时间开发和维护测试,并将资源用于实际运行它们.
好处众所周知(大多数便宜的维护/重构和更少的错误).
因此,您在项目的上下文中平衡了一个与另一个.
如果它是一个一次性的快速黑客,你知道永远不会被重复使用,单元测试可能没有意义.虽然老实说,如果我看到每次一次性快速黑客的一美元,我看到多年后或更糟,多年后不得不维护/重构,我可能会成为投资SO的风险资本家之一:)
非确定性结果.
在简单的情况下,您可以播种随机生成器(或以某种方式模拟它们)以获得可重现的结果,但是当算法很复杂时,这变得不可能,因为代码更改将改变对随机数的需求,从而改变结果.
这在商业环境中很少遇到,但在游戏中很有可能.
| 归档时间: |
|
| 查看次数: |
5428 次 |
| 最近记录: |