大家好,我是码农小余,今天我们来讨论 TDD
。本文纯属个人实践后的感受,若有不确之处,欢迎大佬指导和交流!
细心的童鞋可能看出在小余前几篇文章中都有在实践 TDD
。比如 手摸手实现一个编译器(中)、通过一个“时髦”的例子学 Babel 插件 和 重构利器 jscodeshift,它们的共同点是都用了需求整理、拆解分析、写测试用例、编码这个流程——测试驱动开发(Test-Driven Development
,缩写 TDD
)。在进入正文之前,可以想想下面这个问题:
TDD
属于编程技术还是规范(意味着TDD
是一种重要的敏捷需求和敏捷设计技术)?——引自 「首席架构师看敏捷数据」核心实践:测试驱动开发(TDD)简介[1]
流程环
一个 TDD
环如下图所示:
简而言之,TDD
流程包括三个环节:
- 在写代码之前,先写测试用例;然后执行测试结果,此时因为一行业务代码都没写,结果当然是全部用例都不通过(红色);
- 根据测试用例,开始写业务代码,此时测试结果逐渐从红色转为绿色;
- 等到用例全部通过之后,就是考虑重构事宜的时间节点了。前期为了赶项目进度,可能不会考虑内部质量(即代码质量,不会思考
SOLID
原则和设计模式等);但在合适的时机(比如空闲时或者下个迭代功能开始之前)务必做重构,这个时间点因为有“绿码”保障,对重构自然也是信心十足。
上述环节要想完美地运作,核心是要做好任务分解和模块拆分。
核心及实践建议
模块分解前提是需求分析。作为手里拿着大斧头的程序员