好的,所以我以前的想法有点像你现在的想法,所以我想我会对你的一些陈述发表评论,并对你的陈述给出另一种观点。也许这可以揭示测试驱动开发真正的不同编码方法。
我知道自动化测试的想法是防止回归,但我不明白这首先会成为一个问题。
回归通常不仅仅是在对先前代码的工作理解不足的情况下进行的修改吗?如果是这样,您如何确保所有开发人员都以这样一种方式记录其代码的功能,以便您可以自动检测到后期是否有人进行了破坏性更改?单元测试可能有帮助吗?
模块化的、面向对象的、简洁的代码,注释很好,不会有回归问题。
如果您假设文档写得非常好以至于几乎不可能误解它,并且对所述程序的每个后续修改都是由足够熟练的编码人员以手术般精确的方式完成的,那么回归可能没有问题事实上绝不会改变旧的行为。
如果您将单元测试视为记录行为的一种方式,它难道不是一种同样或更有效的方式来传达旧代码的功能吗?
测试当然不应该排除文档,但是每个工具都有自己的优点和缺点。
如果您第一次就正确构建它,并为将来不可避免的功能添加设计进行设计,那么您将永远不需要测试。
在我看来,从一开始就构建正确和灵活的一切所涉及的成本和努力是巨大的,并且通常会导致两件事:过于复杂的系统和缓慢的开发速度。
问问自己:灵活性的成本是多少?您是否通过为每个问题构建多个解决方案并促进它们之间的运行时切换来最小化风险?或者您正在构建允许在运行时修补行为的插件系统?这两种策略都非常昂贵,无论是在开发时间上还是在增加项目的复杂性上。
如果您只是立即构建您需要的东西,并尝试作为一个团队保持足够的灵活性,以便在需要时快速编写任何修改,那么您将在每次实施中节省多少时间和精力?
如果您对现有功能进行测试,扩展功能会变得更容易吗?
而且,这难道不是优雅的错误处理和日志记录应该
完成的吗?当您可以确保所有外部依赖项首先仔细检查它们的可用性时,为什么要花费数周时间来讨论断言语句和单元测试?
优雅的错误处理和日志记录可能是一种很好的后备方式,但故障恢复永远不能代替正确性。我觉得我无法进一步评论,因为当您说“优雅的错误处理”和“双重检查可用性”时,我不确定您指的是什么,但这对我来说听起来像是恢复。没有错误比能够从错误中恢复要好得多。
我是否傲慢地得出这样的结论,即单元测试是“坏”代码库的拐杖,这些代码库有缺陷且构建不佳?这是一个严重的问题。我在任何地方都找不到任何好的答案,如果我质疑自动化测试的目的,我问的每个人似乎都认为我是一个巨魔。
您当然可以使用单元测试作为避免文档和良好编码原则的借口。这是我在很多地方看到的。但它也是一个很好的工具,可以添加到您的工具箱中,以提高产品的正确性、简单性和灵活性!祝你的新团队好运。我相信你可以教他们一两件事关于好的文档和其他有助于避免错误的原则,他们可能会带来一些原则,这些原则可以帮助你更快、更省力地开发产品,同时避免指数级的复杂性增长。