以PHPunit单元测试为起点,向上向下,往左往右,都可以延伸出很多话题。
理性人
在经济学里,有一个术语,叫理性人,意思是指努力实现自己目标的人。
希望作为软件开发工程师,我们也应该学习理性人的做法。在编写单元测试代码时,其实我们是在用代码证明代码。你说你的代码没问,那还不行,需要证明它。怎么证明?用代码来证明。结合测试驱动开发,我们可以做到突破思维、保障重构、增强设计、提高质量、提升效率。
流,重构,TDD与设计模式
虽然我不想刻意制造更多的术语,由于这里重复提到,我们暂且在这里把这三者称为:开发“三把斧”。它们之间的微妙关系,我一直都在构思总结。最后总结出如下:
图 重构、TDD和设计模式
从上图可以看出,最下面的是TDD,也就是说测试驱动开发是一项应该落地的实践,也是我们开发的基础。从头到尾,由始至终,我们都应该遵循测试驱动开发。说白一点,还没开始编写产品代码时,我们就应该编写测试代码,哪怕最后完成了产品代码,我们依然还要运行测试套件。
在中间,在三个层级的代码,从左到右,我们暂且命名为:粗糙的代码、合格的代码、精心的代码,分别代表坏代码、中等代码和好的代码。一般这些都是循序渐进的,即最初我们编写的是粗糙的代码,继而调整为合格的代码,最后雕琢成精心的代码。当然,也有一步到位的情况,但我们这里所讲的适用普通大众的情况。
而在这三等代码之间,要实现往上一级的转换,则需要使用到各种重构的手法。重构的手法多种多样,故而有多个箭头指向,这也就说明了不同的开发人员可以采用不同的重构方式,毕竟条条大路通罗马,代码没有绝对的表现形式。
再往上,即最顶上,则是我们的设计模式。注意,这里使用了虚线,即与实线的重构、实线的TDD不同,它是一种虚的东西。虽然设计模式也有其名称、实现步骤、成例和注意事项等具体的内容,但我觉得设计模式更像是高层的思想,正是它指导了我们往更好的方向前进。所以,在这里我把设计模式作为了我们最高的指导思想。
很明显,综合起来就是一个金字塔的结构,自上而下,分别是:设计模式、重构和测试驱动开发。
这三者应该是相互影响、相互促进的。缺少了TDD,我们就缺少了有力的保障,就没有了安全可靠的测试基础。缺少了重构,我们就会迷失于如何把代码变得更好的细节中。而缺少了设计模式,我们就会漫无目的地进行重构而不知所终,因为我们不知道最终该如何确切组织我们的代码。
开发“三板斧”是很重要的,如果说我为什么开发效率那么高,是因为我和其他开发同学有一些不同之处,那就是掌握了这“三板斧”。如果你尚未对重构、TDD或设计模式有一个良好的理解,我建议你先补充相关的必要基础知识,再继续往下。因为我们将会探讨如何使用这“三板斧”进行高效开发。