我应该继续测试代码还是实现更多功能



我有一个我喜欢编码的附带项目,我会尽可能地花时间,因为我还在完成大学学业。当我开始它的时候,我几乎不知道良好的编程实践和TDD等,我只是为了好玩才编码

几次迭代、重构、改进和之后积累的知识,让我在实现新功能之前,尽可能地编写单元测试和集成测试。然而,我仍然没有足够的时间来真正进行所有测试,以获得可接受的代码覆盖率。。。尽管该软件运行良好。

因此,当我有时间花在这个项目上时,我想实现新的功能(这次是的,并行地进行单元测试),而不是做很多测试,不得不说这些测试非常无聊,其中许多测试因为嘲笑和其他事情而很难做。。。

我应该继续添加功能,还是应该在之前完成所有测试?

我由此确定,该软件应处于测试版版本,直到达到合理的代码覆盖率。现在它的版本是0.9-beta

如果我添加了新功能,我是否应该遵循语义版本,保留测试版?例如,作为下一个迭代0.10-beta0.11-beta等等,直到测试完成,最后它将转向非beta版本。

如果你想检查我的项目,这里有链接:octaviospain.github.io/Musicott

为现有代码编写测试不是测试驱动的开发。对于这样的附带项目,只有当你担心你的代码可能无法正常工作时,我才会这么做。如果你想测试你现有的代码,你可以做什么,我建议你写验收测试。

验收测试是覆盖用户故事的测试,这意味着用户想要执行的一系列操作,并检查整个系统的行为是否符合要求。由于验收测试大多是端到端的测试,所以您不需要对系统进行过多的模拟。通过这些验收测试,您可以确信您的系统对常见的用户输入做出了正确的反应。

之后,您可以集中精力使用TDD周期添加新功能。我建议在那里也使用验收测试。首先编写一个涵盖整个功能或用户故事的验收测试,然后重复红-绿重构循环,直到您的验收通过。到那时,您就知道某个功能工作正常,可以开始下一个功能的开发了。

如果你想了解更多关于验收测试的信息,我建议你阅读《成长的面向对象软件,以测试为指导》。有时会有点无聊,作者会重复几次,但值得一读。

在我看来,您不应该尝试一次性编写所有测试,因为这将是一项耗时且可怕的任务。此外,为已经编写的代码编写测试并不能真正被称为TDD(IMHO),因为您的测试并不是派生代码的设计,也不会影响代码质量(除非您进行重构)。只要确保为您正确的任何其他代码编写测试。话虽如此,无论何时开始开发特定功能,都要确保编写一些高级集成/回归测试,这将确保不会破坏任何过于关键的东西。

所有这些都是基于这样一个假设,即您的代码写得足够体面,可以成为testable。如果不是这样的话,那么你必须咬紧牙关,在开始工作之前,首先重构与该功能相关的代码

最新更新