2007年4月2日星期一

Removing the "Legacy" from your code

什么是遗留代码(Legacy Code)?

"To summarize, Legacy Code is code that is difficult, inefficient, or risky to change, but too important and useful to throw away or ignore. You have to deal with it. You can ignore it and keep going, but it might be a lot smarter to pay down the Technical Debt that you've accrued to remove friction in your development environment."

——Jeremy Miller

“Legacy” 在计算机领域的意思是“【电脑】(用于过时的软件或硬件产生的数据等) 遗留下来又难以更新的; 老化的”。Legacy code是指以前的系统中遗留下来的那些难以理解,效率低,而且维护起来有风险的代码。遗留代码通常很重要和也很有用,我们不能弃之不用。

遗留代码有什么可怕的?

  • 代码没有经过自动化测试。且不说缺少测试本身就是个问题,更重要的是没有自动化测试也意味着系统可能是无法测试,比如系统各部分的耦合度太紧密。“MVP vs MVC”提到过的Asp.net的CodeBehind方式,由于业务逻辑的代码都嵌入到了UI中,要想自动测试的困难很大。
  • 代码很难懂。比如结构不够清晰、一个方法需要你PageDown好几下才能看完、命名乱七八糟毫无意义(会带来误解的更让人头疼)、缺少必要的注释等等。
  • 难以调式。这是后继开发人员和维护人员很头疼的问题,为什么这段代码会出现异常呢?为什么输出的结果不对呢?这报的个什么错误啊,完全猜不出来是从哪里抛出来的……
  • 部署困难。系统对环境的依赖不够清楚,代码又难懂又难调式,部署起来能容易吗?
  • 反馈慢。这是自然的了,因为你要把代码编译通过都很困呢,加上测试和部署的过程又困难重重,那将是一个很长的过程。

也 许是程序员经验不足,也许是工期太紧而没时间顾及代码的质量,这些都是导致遗留代码存在的因素。已经存在的遗留代码我们只能硬着头皮去改了,但是千万不能 让我们现在正在编写着的代码又变成遗留代码了,在设计开发的过程中一旦意识到技术性问题的存在就应该尽早地进行更正,包括更新设计和重构代码,如果让它们 存在的越久那以后的修改就越困难。

"Constant small refactorings improve efficiency. Waiting too long and making a refactoring expensive is inefficient. In other words, don't allow technical debt to build up, and avoid Michael's "Tipping Point." The interest rates from Technical Debt are a killer.

"——Jeremy Miller

没有评论: