敏捷技能修炼之小舵板之三:代码未动,测试先行

上一篇:敏捷技能修炼之小舵板之二:分离构造和使用:http://zh.5long.me/2014/Agile-Development-separate-build-use/

前言

随着敏捷方法的出现,测试驱动开发(Test-Driven Development, TDD)已经获得了发展的动力,许多团队已经体验了生产率的提升和测试驱动开发的价值。关于可测试性的问题,可能是所有这些小舵板中最重要的。

可测试性和代码质量

测试时开发中的重要环节,往往会耗去大量时间,但有时花去大量的时间却不一定能完成测试。因为代码的质量与我们试图去证明的代码质量之间有很高的相关性,特别是在松耦合、高内聚和冗余方面。在测试低质量的代码时,往往无从下手,我们经常总结道:"哎呀,我希望他们在写这段代码的时候能够好好考虑将来如何测试它"。这就引出了一个话题:

我应该在编写代码之前仔细考虑这段代码将如何测试。

理由很简单:可测试性与松耦合、高内聚、无冗余和恰当的封装都有关系。努力使代码变得易于测试,也就意味着更松的耦合度、更高的内聚度、更少的冗余和更好的封装性。

关于测试先行的思考

本书中所说的测试先行根本不是一种测试方法,它本质上是一种通过分析测试的设计先行方法。这个方法是先编写测试用例,在编写代码,最后执行测试用例的过程。这里的测试驱动是先编写验收测试在编写单元测试(验收测试驱动开发,Acceptance Test-Driven Development, ATDD),相比于传统的提前编写单元测试的方法(TDD,本书称为UTDD)更有效果。测试先行让我们得到了如下好处:

  • 更好的设计。
  • 更清晰的范围和避免额外的工作。
  • 降低复杂性。

原文链接: http://zh.5long.me/2014/Agile-Development-test-first/
版权声明:自由转载-非商用-保持署名 | Creative Commons BY-NC 4.0

posted @ 2015-08-20 15:34  张朝龙(行之)  阅读(254)  评论(0编辑  收藏  举报
本博客文章采用“署名-非商业性使用-禁止演绎”协议,协议详细内容请参考 CC BY-NC-ND 4.0