我有自己的小项目,我正在使用 RoR 创建,我计划它具有中小型负载。
毫无疑问,我从 BDD 和 TDD(确切地说是 Cucumber 和 RSpec,但我对 TestUnit 也有经验)开始,我喜欢它,但因为它是我自己的项目,而且它有点初创 - 我正在改变其中的很多东西,很多要求,许多想法应该如何工作和看起来。因此,总是使用 BDD 和 TDD 对其进行编码变得非常耗时,即使我只介绍了常见情况。
我应该怎么办?我是否应该牺牲 BDD 和 TDD 来提高生产力,直到我有一个坚实的基础并且是时候进行生产了,然后我才编写测试?
我应该现在就写它们,但尽可能少吗?我现在应该只写 RSpec 而忘记 Cucumber 吗?或者也许只是 TestUnit 来测试模型,因为它是最重要的,其他一切都可以改变?
提前致谢!
6 回答
这不是一个政治正确的答案,我相信这会让纯粹主义者感到不安。这里是这样的:对于一个小型、快速变化的项目,最好只编写代码并跳过 TDD 和 BDD 步骤。否则,您将大大延迟完成。这不是应该始终遵循的规则,但如果您认为您了解项目的要求,那么不要对编写代码感到内疚。
使用 BDD/TDD 可能会提高您的工作效率。您说您的需求经常变化,也许改变/编写测试用例等比编写实际代码然后销毁它并在每次需求变化时编写新代码更灵活/快速。也许这样做可以作为一种过滤器/层,通过它来审查您想要创建的更改。在您花时间实施之前,它可能会帮助您了解事情是否会奏效。当您确实实施它时,您当然拥有 TDD 的好处,您已经拥有测试套件来确保正确性。
就个人而言,如果我只是为了定义功能、设计、实现等而进行迭代。我倾向于轻视测试。
也就是说,一旦我完成了那部分,我通常会抛弃那些开发高峰,并使用 T/BDD 推进可交付成果。
在我看来,既然这是你的项目,你就真的坐在驾驶座上。如果您觉得 TDD/BDD 的优势比更多实验/更快上市时间的优势强,那么我会说坚持下去。另一方面,如果您真的要确定该项目是否有腿,并且最终可能会被废弃,那么在短期内专注于更快的学习可能是一个更好的选择。我想这就是我建议您确定项目当前目标并将您的实践与它们保持一致的方式。
虽然这并没有给出一个非常具体的答案,但我认为它有点,但您可以进行一些更高级别的场景测试,以确保您不会在您的快速功能更改中破坏任何主要内容,但是完全放弃 TDD/BDD。我个人的经验是,在练习 TDD 时我感觉更有效率,因为它帮助我一次专注于解决一个问题,并且我发现自己进入了一个更好的节奏。
希望有帮助!
布兰登
我认为您想使用 TDD(也许不是 BDD)正是因为需求变化如此之大。TDD 支持可重构的设计 + 代码库,因此易于更改。在一个项目的过程中(即使是小到一两周),使用 TDD + 重构实际上会比不使用它时更快。
因此,总是使用 BDD 和 TDD 对其进行编码变得非常耗时,即使我只介绍了常见情况。
我似乎总是使用 TDD 来提高编码速度。在执行测试时找到“愚蠢的编码错误”,并比没有单元测试的情况下更快地找到根本原因。
对于 BDD,如果您的需求倾向于大修,我可以想象您会推迟对需求的测试,直到船舶朝着更统一的方向启航。