我应该继续测试代码还是实现更多功能?
Should I keep testing code or implement more functionality?
我有一个业余项目,我喜欢编写代码,我会尽可能花时间在上面,因为我还在完成大学学业。当我开始使用它时,我几乎不知道良好的编程实践和 TDD 等等,我只是 编码 它是为了好玩。
之后的几次迭代、重构、改进和积累的知识,使我能够在实现新功能之前编写我可以编写的单元测试和集成测试。
但是,我仍然没有足够的时间真正进行 所有 测试以获得可接受的代码覆盖率......尽管该软件工作 good.
所以当我有时间花在这个项目上时,我想实现新功能(这次是的,并行进行单元测试)而不是做 很多 测试那个,不得不说很无聊,而且很多都因为嘲笑之类的东西很难做...
我应该继续添加功能还是应该先完成所有测试?
我由此确定该软件应该处于 beta 版本,直到达到 合理的 代码覆盖率。目前版本为 0.9-beta
.
如果我添加新功能,我是否应该遵循保持 beta 的语义版本?例如,作为下一个迭代 0.10-beta
,0.11-beta
等等,直到测试完成,最后它会转向 non-beta 版本。
如果你想查看我的项目,这里是 link: octaviospain.github.io/Musicott
在我看来,您不应该尝试一次性编写所有测试,因为那样完成起来太耗时且任务艰巨。除了为已经编写的代码编写测试并不真正符合 TDD(恕我直言),因为您的测试不会派生代码的设计并且不会影响代码质量(除非您进行重构)。只要确保为您正确的任何其他代码编写测试即可。话虽如此,无论何时开始处理特定功能,请确保编写一些高级 integration/regression 测试,这将确保您不会破坏任何太关键的东西。
所有这一切都基于这样一个假设,即您的代码编写得足够体面 testable
。如果不是这种情况,那么您必须先硬着头皮重构与该功能相关的代码,然后再开始处理它。
为现有代码编写测试不是测试驱动开发。对于像这样的业余项目,只有当您担心您的代码可能无法正常工作时,我才会这样做。如果您想测试现有代码,您可以做什么以及我建议您编写验收测试。
验收测试是涵盖用户故事的测试,即用户想要执行的一系列操作,并检查整个系统的行为是否符合要求。由于验收测试主要是端到端测试,因此您不需要模拟太多系统。进行这些验收测试可以让您确定您的系统对常见的用户输入做出正确的反应。
之后,您可以专注于使用 TDD 周期添加新功能。
我也建议在那里使用验收测试。首先编写涵盖整个功能或用户故事的验收测试,然后重复 Red-Green-Refactor 循环,直到验收通过。到那时你就知道一个功能正常工作了,你可以开始处理下一个功能。
如果您想了解更多关于验收测试的信息,我建议您阅读 'Growing Object Oriented Software, Guided By Tests'。有时会有点无聊,作者重复了几次,但值得一读。
我有一个业余项目,我喜欢编写代码,我会尽可能花时间在上面,因为我还在完成大学学业。当我开始使用它时,我几乎不知道良好的编程实践和 TDD 等等,我只是 编码 它是为了好玩。
之后的几次迭代、重构、改进和积累的知识,使我能够在实现新功能之前编写我可以编写的单元测试和集成测试。 但是,我仍然没有足够的时间真正进行 所有 测试以获得可接受的代码覆盖率......尽管该软件工作 good.
所以当我有时间花在这个项目上时,我想实现新功能(这次是的,并行进行单元测试)而不是做 很多 测试那个,不得不说很无聊,而且很多都因为嘲笑之类的东西很难做...
我应该继续添加功能还是应该先完成所有测试?
我由此确定该软件应该处于 beta 版本,直到达到 合理的 代码覆盖率。目前版本为 0.9-beta
.
如果我添加新功能,我是否应该遵循保持 beta 的语义版本?例如,作为下一个迭代 0.10-beta
,0.11-beta
等等,直到测试完成,最后它会转向 non-beta 版本。
如果你想查看我的项目,这里是 link: octaviospain.github.io/Musicott
在我看来,您不应该尝试一次性编写所有测试,因为那样完成起来太耗时且任务艰巨。除了为已经编写的代码编写测试并不真正符合 TDD(恕我直言),因为您的测试不会派生代码的设计并且不会影响代码质量(除非您进行重构)。只要确保为您正确的任何其他代码编写测试即可。话虽如此,无论何时开始处理特定功能,请确保编写一些高级 integration/regression 测试,这将确保您不会破坏任何太关键的东西。
所有这一切都基于这样一个假设,即您的代码编写得足够体面 testable
。如果不是这种情况,那么您必须先硬着头皮重构与该功能相关的代码,然后再开始处理它。
为现有代码编写测试不是测试驱动开发。对于像这样的业余项目,只有当您担心您的代码可能无法正常工作时,我才会这样做。如果您想测试现有代码,您可以做什么以及我建议您编写验收测试。
验收测试是涵盖用户故事的测试,即用户想要执行的一系列操作,并检查整个系统的行为是否符合要求。由于验收测试主要是端到端测试,因此您不需要模拟太多系统。进行这些验收测试可以让您确定您的系统对常见的用户输入做出正确的反应。
之后,您可以专注于使用 TDD 周期添加新功能。 我也建议在那里使用验收测试。首先编写涵盖整个功能或用户故事的验收测试,然后重复 Red-Green-Refactor 循环,直到验收通过。到那时你就知道一个功能正常工作了,你可以开始处理下一个功能。
如果您想了解更多关于验收测试的信息,我建议您阅读 'Growing Object Oriented Software, Guided By Tests'。有时会有点无聊,作者重复了几次,但值得一读。