我同意Andrew写的内容,但想为答案添加一个不同的角度,我认为在此类讨论中经常会忽略这一点。
您的团队正在构建产品,而您的公司希望从这项工作中获得最大的性价比。
一开始你可能会认为测试会拖慢你的速度——你的系统很简单,每个人都理解它,所以为什么要浪费时间。编写测试可能会让您感觉物有所值。但是,如果您对产品开发采取更长远的观点,这显然是错误的。但我会在这里停下来,因为我正在向皈依者传道。
但是,如果您在尝试回答问题时采用相同的心态,您会发现实际上答案在很大程度上取决于您的情况。我将使用一个相当简化的数学模型来解释我的想法:
假设P(bug | test)
a 的概率bug
,假设您正在运行test
,让C(test)
表示运行测试的成本,让C(bug)
表示错误的成本。
如果您专注于特定的错误*,您希望最小化以下内容:
P(bug | test_1)*C(bug) + C(test_1) ... P(bug | test_n)*C(bug) + C(test_n)
您的套件由n
测试组成。
如果您不考虑测试成本,显然您拥有的测试越多越好,对吧?但是因为测试需要维护、执行等,所以它们的成本是非零的。这意味着你有一个权衡,最后你在这里执行 U 曲线优化(有点像这张图片,他们试图在发布和持有成本之间找到最佳权衡)。
实际成本在很大程度上取决于特定领域、产品领域和测试类型。
如果您从事银行业务,则错误的成本可能会很大,因此它将使测试成本相形见绌。但是,如果您正在为音乐编写推荐引擎,那么保留几个小时的建议将不是问题。实际上,在后一种情况下,您可能希望自由地试验不同的算法和快速迭代的能力,因此测试的成本可能会掩盖错误的成本。
假设您从事特定产品的工作。即使这样也不是同质的。您的产品的某些领域将比其他领域更重要。以推特为例,如果一个人不能发推文或加载他们关注的推文,那将是一个大问题。另一方面,如果“建议听从谁”为空,对产品的影响会小很多。
最后,测试的成本也不统一。但正如我之前所说,它不可忽略,需要谨慎考虑。我在测试覆盖率低的地方工作,因为他们缺乏将更改推向生产的信心,以及在测试运行时间过长以至于人们抱怨他们一直在构建并且几乎没有工作的地方。
最后一件事。在构建时考虑到对失败的弹性是很好的——这将为您降低错误的成本。