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

时间:2017-01-31 12:54:41

标签: unit-testing testing semantic-versioning

我有一个我喜欢编码的辅助项目,我尽可能花时间,因为我还在完成大学学业。当我开始它的时候,我几乎不知道好的编程实践和TDD等等,我只是编码它很有趣。

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

因此,当我有时间在这个项目上花时,我想实现新的功能(这次是,并行进行单元测试)没有做很多的测试,不得不说非常无聊,很多人因为嘲弄和蠢事而很难做到......

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

我确定软件应该是 beta 版本,直到达到合理的代码覆盖率。此时版本为0.9-beta

如果我添加新功能,我应该遵循保留 beta 的语义版本吗?例如,在测试完成之前,作为下一次迭代0.10-beta0.11-beta等等,最后它将转向非beta 版本。

如果您想查看我的项目,请点击以下链接: octaviospain.github.io/Musicott

2 个答案:

答案 0 :(得分:5)

为现有代码编写测试不是测试驱动开发。对于像这样的辅助项目,如果您担心代码可能无法正常工作,我只会这样做。如果要测试现有代码,您可以做什么以及我建议您编写验收测试。

验收测试是涵盖用户故事的测试,意味着用户想要执行的一系列操作,并检查整个系统的行为是否满足要求。由于验收测试主要是端到端测试,因此您不需要模拟太多的系统。通过这些验收测试可以确保您的系统对普通用户输入做出正确反应。

之后,您可以专注于使用TDD循环添加新功能。 我也建议在那里使用验收测试。首先编写涵盖整个功能或用户故事的验收测试,然后重复Red-Green-Refactor循环直到您的验收通过。到那时,您知道某个功能正常运行,您可以开始处理下一个功能。

如果您想了解有关验收测试的更多信息,我建议您阅读“培养面向对象软件,测试指导”。有时候会有点无聊,作者会重复几次,但值得一读。

答案 1 :(得分:1)

在我看来,你不应该一次性尝试编写所有测试,因为这样做太费时间而且可怕。除了为已编写的代码编写测试之外,它还没有真正符合TDD(恕我直言)的要求,因为您的测试不会导致代码设计,也不会影响代码质量(除非您重构)。只需确保为您正确的任何其他代码编写测试。话虽如此,每当您开始处理特定功能时,请确保您编写一些高级集成/回归测试,这将确保您不会破坏任何过于关键的内容。

所有这一切都基于这样的假设,即您的代码编写得足够好testable。如果情况并非如此,那么在开始处理之前,您必须先敲定子弹并重构与该功能相关的代码。