最近正在学习 6.005 软件构造。Lab2的核心是使用 TDD 进行开发。测试驱动开发是一个出现频率很高的词。最早在学习61B的时候有一篇文章叫做 TDD is Dead,当时因为缺少相关背景知识,不明觉厉。之后学习软件工程的时候又遇到了这个词,TDD 属于软件构造方面的技巧。

[! 教科书给出的定义]
测试驱动开发要求程序员在编写一段代码之前,优先完成该段代码的测试代码。 完成测试代码之后,程序员再编写程序代码,并在编程中重复执行测试代码,以 验证程序代码的正确性。

TDD 主要有以下两个方面的作用:

  1. 能够帮助程序员更加清晰地理解待实现程序的需求和规格,写出质量更高的程序;
  2. 同时能够通过测试的代码也会具有更高的正确性和可靠性。

参加考试的时候仍然觉得这个概念非常抽象,但是做Lab2的时候我就深刻地感受到了测试驱动开发地意义。

TDD能够将程序员软件构造的三个主要阶段连接起来:理解-编码-测试。程序员根据软件的规格说明(Specification) 编写单元测试的过程中,会让程序员强制理解软件的需求和规格的细节。避免程序员囫囵吞枣地看一遍需求就开始编码,却因为错误理解而导致不必要的代码错误。程序员编码时,就会下意识地考虑到需求的本质,以及各种 Corner Cases。编码完成后,运行单元测试又会作为第二道保险,以确保程序的正确性。

当然,以上TDD的优点全都要基于良好的单元测试的编写。简洁、完备、有代表性的用例才可以发挥出TDD的长处。