在本文中,我们将研究较大的BDD和较小的TDD反馈循环如何消除浪费,以及如何使用EclEmma等代码覆盖工具来可视化该浪费,以查看您是否很好地执行了流程。
BDD和TDD之间的关系
根据您的情况,运行BDD方案可能需要很多时间。 例如,您可能需要首先创建一个Web应用程序存档(WAR),然后启动一个Web服务器,部署WAR,最后使用Selenium运行自动化验收测试。
对于您编写的每一行代码,这都不是一个方便的反馈周期。
因此,您可能会编写更大的代码块。 但是,这增加了引入错误的风险。 婴儿的脚步可以减轻这种风险。 在这种情况下,这意味着转向测试优先编程,最好是测试驱动开发 (TDD)。
BDD场景和大量单元测试之间的联系是自上而下的测试 。 自顶向下的测试是将BDD方案转换为测试代码的过程。 从那里开始,您可以使用常规TDD进一步进行单元测试。
将BDD方案转换为自上而下的测试似乎很浪费,但事实并非如此。
自上而下的测试只会使开发人员的反馈周期更短。 您永远不必离开IDE来确定您是否已完成。 不必不断切换到更大的BDD反馈周期所带来的好处,可以弥补翻译的浪费。 通过多做一些工作,您最终会更快!
如果您担心由于这些自上而下的测试而增加了构建时间 ,那么您甚至可以考虑在通过这些测试后将其删除,因为这样便可以降低风险。
BDD和TDD都使用JIT编程消除浪费
BDD和TDD都采用即时 (JIT)编码的思想。 JIT是消除浪费的精益原则。 在这种情况下,编写不必要的代码。
您想消除不必要的代码的原因有很多:
- 由于编写代码需要时间,因此编写更少的代码意味着您将提高工作效率(每次迭代完成更多故事 )
- 更多代码意味着更多错误
- 尤其是,更多的代码意味着更多的安全漏洞机会
- 更多的代码意味着将来的维护者必须了解更多的事情,因此,由于误解,在维护期间引入错误的风险更高。
代码覆盖范围可以可视化浪费
在软件开发过程中使用BDD和TDD,可以减少浪费。 至少这是理论。 我们如何在实践中证明这一点?
好吧,让我们看一下过程:
- BDD方案定义了用户故事的接受标准
- 这些BDD场景被转换为自顶向下的测试
- 这些自上而下的测试导致了单元测试
- 最后,这些单元测试导致生产代码
最后一步是最容易验证的:不应编写不需要进行某些单元测试通过的代码。 我们可以通过在执行单元测试时测量代码覆盖率来证明这一点。 根据定义,任何未涵盖的代码都是浪费。
EclEmma在Eclipse中显示代码覆盖率
我们在持续集成构建中使用Cobertura来测量代码覆盖率。 但这又是一个漫长的反馈周期。
因此,我喜欢用EclEmma测量代码覆盖率,而我在区在Eclipse中。
EclEmma将覆盖线变为绿色 ,未覆盖线变为红色 ,而部分覆盖线变为黄色 。
您可以使用Window|Preferences|Java|Code coverage
更改这些颜色。 例如,您可以将“ Full Coverage
更改为白色,以使正常情况下不会出现视觉混乱,只有异常突出。
EclEmma的伟大之处在于,它使您可以在不改变工作方式的情况下测量代码覆盖率。
唯一的区别是,您现在选择Coverage As|JUnit test
(或Alt+Shift+E, T
),而不是选择Run As|JUnit Test
(或Alt+Shift+X, T
Alt+Shift+E, T
)。 要重新运行上一个覆盖,请使用Ctrl+Shift+F11
(而不是Ctrl+F11
来重新运行上一个启动)。
如果您的手指习惯使用Alt+Shift+X, T
和/或Ctrl+F11
,则始终可以使用Window|Preferences|General|Keys
更改键绑定。
以我的经验,EclEmma的性能开销很低,您可以一直使用它。
EclEmma帮助您监视敏捷过程
EclEmma的反馈使您可以立即以不必要的代码形式查看任何浪费。 如果您将BDD和TDD做得好,那么就不会有任何浪费,因此EclEmma的反馈实际上就是您对BDD / TDD流程执行情况的反馈。 您可以使用此反馈来磨练自己的技能,并成为最佳的开发人员。
参考: 安全软件开发博客上的JCG合作伙伴 Remon Sinnema的EclEmma可视化了Eclipse中的代码覆盖率 。
翻译自: https://www.javacodegeeks.com/2012/09/eclipse-with-eclemma-visualizing-code.html