(转)关于大型软件重构的一些想法
这种做法极大的提高了效率 - 要知道,要把所有的case跑完,需要几十台服务器一起跑3天~~~
如何管理代码
重构涉及到很多文件的移动与分拆,需要注意两个地方:
文件的历史信息不能断????? 一个文件是怎么一步步改动过来的是非常重要的信息 - 你可以方便的查到谁在什么时候改过这个文件,怎么改的。移动,或者分拆文件是非常容易因为疏忽而丢失历史的操作。一定要正确的使用SCM工具来保持此信息,比如perforce里就要用intergrate,而不是简单的add。
文件的对应关系不能乱?????? 这里涉及到从branch到main的intergration,你在branch上把一个文件移动了并做了修改,而在main上同样有人做了修改,做intergration的时候,你很容易丢失别人在main上的修改,因为其对应关系并没有被建立起来,也就无从merge了。我想不同的SCM工具应该都提供了解决方案的,比如perforce就可以在其branch spec中来说明其对应关系。
重构的方法
工作期间拜读过《重构----改善既有代码的设计》,上面讲了许多不错的改善设计的方法与步骤,但是基本没用上。因为关于设计,我们对哪种情况,如何修改之前都已做了研究并有了方案,而那些步骤感觉稍显罗嗦,不是很适用。Visual Assist提供了个重构的模块,在一般规模的代码里用用还可以,但是对于有很多个solution的代码就无能为力了。况且这些只是涉及到源代码的重构,我们还有工程/DLL的重构。
我们采取的方法是:针对不同的情况,写perl脚本来自动化一些任务。举个简单点的例子:我修改了一个方法的名字,脚本就会搜索所有的代码,自动check-out需要修改的文件,并替换新名字。记得当时写了许多perl脚本来自动化对perforce的调用,VS的调用,对代码,工程文件的修改等等。
一些细节
interface的使用pInterface->UpdateUI();
做这种大型软件的重构,让我学到比较多的是:
面对一些大型的软件系统不会犯憷,会比较有自信。 养成自动化的习惯,一些大量的手工操作,会很枯燥,很费时,做的很容易出错而且没有成就感,但是把目标转换一下:写个程序把工作自动化,上面那些问题是不是都没了:)