28.增量式编程

“真正的程序员写起代码来,一干就是几个小时,根本不停,甚至连头都不抬。不要停下来去编译你的代码,只要一直往下写就好了!”

当你开车进行长途旅行时,两手把住方向盘,固定在一个位置,两眼直盯前方,油门一踩到底几个小时,这样可能吗?当然不行了,你必须掌控方向,必须经常注意交通状况,必须检查油量表,必须停车加油、吃饭,准备其它必需品,以及诸如此类的活动。

如果不对自己编写的代码进行测试,保证没有问题,就不要连续几个小时,甚至连续几分钟进行编程。相反,应该采用增量式的编程方式。增量式编程可以精炼并结构化你的代码。代码被复杂化、变成一团乱麻的几率减少了。所开发的代码基于即时的反馈,这些反馈来自于小步幅方式编写代码和测试的过程。

广告:个人专属 VPN,独立 IP,流量大,速度快,连接稳定,多机房切换,每月最低仅 5 美元

采取增量式编程和测试,会倾向于创建更小的方法和更具有内聚性的类。你不是在埋头盲目地一次性编写一大堆代码。相反,你会经常评估代码质量,并不时地进行许多小调整,而不是一次修改许多东西。

在编写代码的时候,要经常留心可以改进的微小方面。这可能会改善代码的可读性。也许你会发现可以把一个方法拆成几个更小的方法,使其变得更易于测试。在重构的原则指导下,可以做出许多细微改善(见Martin Fowler的《重构:改善既有代码的设计》[FBB+99]-书中的相关讨论)。可以使用测试优先开发方式(见第82页习惯20),作为强制进行增量编程的方式。关键在于持续做一些细小而有用的事情,而不是做一段长时间的编程或重构。

这就是敏捷的方式。

在很短的编辑/构建/测试循环中编写代码。这要比花费长时间仅仅做编写代码的工作好得多。可以创建更加清晰、简单、易于维护的代码。

切身感受

在写了几行代码之后,你会迫切地希望进行一次构建/测试循环。在没有得到反馈时,你不想走得太远。

平衡的艺术

□ 如果构建和测试循环花费的时间过长,你就不会希望经常运行它们了。要保证测试可以快速运行。

□ 在编译和测试运行中,停下来想一想,并暂时远离代码细节,这是保证不会偏离正确方向的好办法。

□ 要休息的话,就要好好休息。休息时请远离键盘。

□ 要像重构你的代码那样,重构你的测试,而且要经常重构测试。