实话实说,《重构》那本书,我并没有完整看过,但是对里面的一些思想也很赞同。但是毕竟没有真的研究过,所以这里把重构这个名字拿来,不过是托人之 名,言己之道。《重构》书中并不要求你把整个软件进行重新设计,而通过代码的调整,达到优化整个系统的作用。我没有书作者的功力,我们解决这个特定系统的 可维护性问题时,只好把整个系统进行重新设计,并期望用更好的系统结构设计来解决可维护性和系统扩展的问题。
一、问题的产生:
一个难以维护的两万多行的程序
我 们公司是设计生产一家生产电子辞典等教育类电子产品的公司。我所在的小组,是负责电子辞典和PC机进行联机操作的联机软件的。我接手的第一个任务,就是修 改某个版本的联机软件,让它支持一个新的产品,然后作为新产品的配套联机软件。这本来应该是一个很轻松的活,因为实际上所谓的新产品,和上一个产品并没有 本质差异,主要是外观和一些配套软件的区别。我的工作只是在适当的位置修改一下产品版本和名称。
这个联机软件是用BCB5做的,用了4个 界面方面的第三方控件。因为这4个控件没有BCB6的版本,所以我们的项目组也长期使用BCB5,不能升级到 BCB6。拿到源代码,进行编译,我开始恐惧,整个编译过程居然长达1个小时。我开始仔细端详这套代码,这是我看到的最夸张的一个BCB做的软件了。主窗 体的cpp文件,居然有1万8千行,文件大小610k。我是从来没有做过大软件的,当时就被吓着了。索性我所需做的工作并不复杂,用查找替换,我没有花多 久时间就已经完成了修改的任务。之后,经过我自己的初步测试,我把程序发给了测试组。
之后的一个月,我陷入了苦战之中,测试组不断的提交 bug单,我也只好不断的修改这些bug(这些几乎没有我引入的bug,因为我的修改不涉及程序机 理。)。我们的联机软件的不同版本,都是从同一个源代码修改而来的。我现在修改的这些bug,在很多版本中已经修改了,但是因为没有足够的文档记录,也没 有人做中间的协调工作,所以这些重复性的工作都需要重复的做。
一个新的需求
用 户开始抱怨我们的联机软件不能支持多个版本的机型。尤其是那些买过多个机型的用户,他们发现,买一个新机型,就需要用一款新的联机软件来配套。而且用户经 常抱怨,联机软件有很多的bug,而且会出现新机型重复以前老机型有过的bug的问题。网络的兴起,也提出了新的要求,很多用户要求联机软件可以网上升 级,要求可以更方便的使用网上的资源。
这些需求,被公司的企划部门和我们组收集,形成了一个全新的联机软件的需求:
1、可以在线升级。
2、可以支持公司所有的(流行)产品。
3、可以比较方便的进行扩充。
4、一个全新的界面设计
5、完成原有联机软件的所有功能。
显然,原来的代码进行修改是完成不了这样的需求的,所以我们后来做了全新的设计来对应这个需求,目前新的设计已经初步投放使用,反映良好。下一篇,我来详细分析我们的新设计和原有软件的异同。