测试驱动的开发。我知道了,喜欢它。
但是编写测试确实需要开销。因此,应该在整个代码库中普遍使用TDD,还是在TDD提供较高ROI的区域以及其他ROI如此低以至于不值得关注的区域。
测试驱动的开发。我知道了,喜欢它。
但是编写测试确实需要开销。因此,应该在整个代码库中普遍使用TDD,还是在TDD提供较高ROI的区域以及其他ROI如此低以至于不值得关注的区域。
Answers:
我建议在合理且实用的地方编写一个完整的测试套件。在不太实际的领域,编写健全性检查。
以我的经验,一整套测试用例的开销在大多数情况下当然是值得的,但实际上,代码覆盖范围的收益递减。在某个时候,编写更多的测试只是为了增加代码覆盖率是没有意义的。
例如,根据您的语言/技术,测试UI可能不切实际甚至不可行。许多测试可能取决于用户看到的内容,并且无法实现自动化。您将如何测试生成验证码的方法产生的图像可以被人类读取?
如果一整套测试将花费您三天的时间来编写,那么在该组件中引入错误的可能性非常低,并且该函数本身只需要半个小时的编写时间,您可能应该考虑一下关于那个时间是否值得。也许只是为该功能编写基本的健全性检查会提供价值?
我的一般建议是,您应该完全测试组件,以便可以相对轻松地编写测试。但是,如果这是一个很难测试的区域,请在沙子上画一条线并编写测试,以在更高级别上测试该区域,而不是对其进行全面测试。
在前面的验证码示例中,也许编写了返回正确大小和格式的图像的测试,并且没有抛出异常。这样可以为您提供一定程度的保证,而又不会太高。