什么是遗留系统(Legacy System)?根据维基百科的定义,遗留系统是一种旧的方法、旧的技术、旧的计算机系统或应用程序[1]。这一定义事实上并没有很好地揭露遗留系统的本质。我认为,遗留系统首先是一个还在运行和使用,但已步入软件生命周期衰老期的软件系统。它符合所谓的“奶牛规则”:奶牛逐渐衰老,最终无奶可挤;然而与此同时,饲养成本却在上升。这意味着遗留系统会逐渐随着时间的推移,不断地增加维护成本。
维护一个软件系统,就需要了解该软件系统的知识。若知识缺失,就意味着这会给维护人员带来极大的障碍和困难。从这个角度讲,所谓“遗留系统”,就是缺少了一部分重要知识,使得维护人员“知其然而不知其所以然”的软件系统。
若要让遗留系统焕发青春,最彻底的做法自然是推倒重来,但这样付出的代价太高;而且,即使对系统重新设计和开发,仍然免不了会重蹈遗留系统的覆辙。或者,可以对遗留系统进行重构,在不修改系统功能的情况下改善系统设计。只是这种重构常常是对系统进行重大扩展或修改的前奏,如无绝对必要,并不推荐这种偿还“技术债务(Technical Debt)”的方式。重构应与开发同时进行,而不应将其作为债务推迟到最后,以至于支付高昂的利息。最后,还有一种方式,则是对遗留系统进行技术栈迁移。