由于非常紧迫的期限,在开发过程中没有测试驱动的开发过程
这句话非常令人担忧。不是因为这意味着您没有TDD进行开发,也不是因为您没有测试所有内容。这很令人担忧,因为它表明您认为TDD会使您放慢速度,并使您错过最后期限。
只要您以这种方式看到它,您就没有为TDD做准备。TDD并不是您可以逐渐缓解的问题。您要么知道如何做,要么不知道。如果您尝试进行到一半,您将使它变得很糟糕。
TDD是您首先应该在家中练习的东西。学习如何做,因为它现在可以帮助您编码。不是因为有人告诉你这样做。并非如此,因为稍后您进行更改会有所帮助。当您因为急事而要做某事时,就可以准备专业地做它了。
TDD是您可以在任何商店中执行的操作。您甚至不必上交测试代码。如果其他人不屑一顾,则可以自己保留。如果操作正确,即使没有其他人运行测试,这些测试也可以加快您的开发速度。
另一方面,如果其他人喜欢并运行您的测试,则应牢记即使在TDD商店中,签入测试也不是您的工作。这是为了创建经过验证的有效生产代码。如果碰巧是可测试的,请保持整洁。
如果您认为管理层必须相信TDD或您的其他编码人员必须支持您的测试,那么您就忽略了TDD为您做的最好的事情。它快速向您展示了您认为代码所执行的功能与实际执行的功能之间的区别。
如果您看不到它本身如何可以帮助您更快地完成截止日期,那么您就还没有准备好TDD上班。你需要在家练习。
就是说,当团队可以使用您的测试来帮助他们读取您的生产代码,以及管理层将购买功能强大的新TDD工具时,这是很好的。
在将团队转换为TDD之后编写所有可能的测试用例是一个好主意吗?
无论团队在做什么,编写所有可能的测试用例并不总是一个好主意。编写最有用的测试用例。100%的代码覆盖率是有代价的。不要仅仅因为很难做出判断就忽略收益递减的规律。
为有趣的业务逻辑节省测试能量。决策和执行政策的内容。测试一下。厌倦了显而易见的易于阅读的结构胶水代码,只需将东西连接在一起,几乎不需要那么糟糕的测试。
(1)即使一切都工作正常,但停止大多数开发并从一开始就开始编写整个可能的测试用例还是好的还是个好主意?要么
不,这是“让我们彻底重写”的想法。这破坏了来之不易的知识。不要要求管理层花时间编写测试。只是编写测试。一旦您知道自己在做什么,测试就不会让您慢下来。
(2)最好等待发生不好的事情,然后在修复过程中编写新的单元测试,或者
(3)甚至忘记了以前的代码,只为新代码编写单元测试,并将所有内容推迟到下一个主要重构。
我将以相同的方式回答2和3。当您出于任何原因更改代码时,如果可以参加测试,那将非常好。如果代码是旧代码,则当前不支持测试。这意味着在更改之前很难对其进行测试。好吧,由于无论如何都要对其进行更改,因此可以将其更改为可测试的东西并对其进行测试。
那是核选择。有风险。您无需测试即可进行更改。有一些创造性的技巧可以在更改旧代码之前对其进行测试。您正在寻找所谓的接缝,这些接缝可以在不更改代码的情况下更改代码的行为。您需要更改配置文件,构建文件。
迈克尔·费瑟斯(Michael Feathers)给了我们一本书:有效地使用旧版代码。读一读,您会发现不必烧掉所有旧的东西来制作新的东西。