首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

(转)关于大型软件复建的一些想法

2012-09-29 
(转)关于大型软件重构的一些想法这种做法极大的提高了效率 - 要知道,要把所有的case跑完,需要几十台服务器

(转)关于大型软件重构的一些想法

这种做法极大的提高了效率 - 要知道,要把所有的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的使用
我们的重构工作对于接口可以说是无所不用其极,而正是大量的使用接口才让这种已经耦合很紧的代码的UI-核心的分离成为可能。比如某个核心层的操作完成之后是调用UI的刷新代码,而把这个刷新操作移到外面又是相当困难的,此时用接口就是比较好的做法:
(转)关于大型软件复建的一些想法?
pInterface->UpdateUI();

当然还有一些其他的使用接口的方式,但归根结底都是为了分离实现。
使用vsprops
我们用的是Visual Studio,上百个项目都有其各自的设置,而其实很多设置都是差不多的,完全可以把那些一致的设置放到一个vsprops文件中,让每个vcproj文件都引用它。能在很到程度上提高一致性与简洁度。MSDN有其详细的介绍。? 虚函数与rebuild。添加,删除虚函数,尤其是基类里的虚函数都会破坏原有的虚表,因此除非rebuild所有可能引用到的代码,不然就会产生很奇怪的函数调用,具体可以看这篇:关于虚函数那点破事。

做这种大型软件的重构,让我学到比较多的是:

面对一些大型的软件系统不会犯憷,会比较有自信。 养成自动化的习惯,一些大量的手工操作,会很枯燥,很费时,做的很容易出错而且没有成就感,但是把目标转换一下:写个程序把工作自动化,上面那些问题是不是都没了:)

热点排行