略谈老系统源码如何维护

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

         最近编译公司的一个老系统的C++源码(主要是想把一个功能摘出来),该系统由一个主调用工程和几十个DLL工程组成。结果是编译编得我要吐血,最后是把主调用工程编出来了,运行时还有问题,逐一检查后才解决了。后来我归纳的主要原因是:我只是稍微熟悉这个系统的架构,但大部分的源码工程并不熟悉,所依赖的第三方库也不了解。

 

        首先想探讨下一个大型的C++系统的复杂性体现在哪里?现在的大型系统一般采用分层架构,比如桌面软件一般分为以下几个层次:

        这还只是系统内部的层次结构,一般系统还有大量的系统第三方库支撑(包括商业的和开源的库)。如果你不明白其中的复杂性,我举个简单的例子:比如utility层依赖的一个第三方库发生变动(接口变化或版本升级),极有可能造成所有工程都要重新编译。这还是理想的情况下重编。如果你不明白系统的层次结构,还得先花精力去弄明白系统的层次结构。设计良好的系统一般层次结构清晰,设计不良好的系统则各有各的混乱,比如循环依赖,依赖的第三方库版本不一致等问题。还有就是特定操作系统的问题,比如Windows系统下多个C运行库(多线程的、单线程的、动态的、静态的),编译时链接选项不一致都会造成麻烦。所有这些因素无疑都大大加深了系统的复杂性。

 

         那么一个老系统的源码应该如何维护呢?我感觉一个总的原则是尽量控制你所能控制的。具体是以下几点:

1.      尽量掌握所依赖的第三方库的源代码并保留一份。商业的如果没有源码的就保留一份安装版本。

 

2.      强化维护文档。有人可能说代码就是文档。但是很多时候代码并不能代替文档。以我的经验,在维护一个大型C++系统时下面几个文档是必不可少的:

a.      介绍系统所依赖的第三方库以及如何编译这个系统的说明文档。

b.      介绍各个模块实现的功能以及系统的层次结构的说明文档

c.      重要接口和算法的说明文档

 

3.      采用makefile文件来构建命令行统一编译整个工程应该是一个好方法。工程多了我感觉命令行编译更为便捷(特别利于新手)。

 

        大家如有更好的经验,请在评论中补充。同时欢迎拍砖。

 

       如果你觉得我的博客对你有帮助,请在下面网址中博客之星评选活动投我一票:

http://vote.blog.csdn.net/item/blogstar/clever101(单击候选人介绍下面的投他一票那个按钮)

参与投票有机会获奖:

     最佳贡献奖:通过微博分享活动就有机会获得30元充值卡一张(每周抽选5名)
    幸运奖:凡参与投票用户就有机会获得精美小礼品一份。(每周抽选5名)
    积极参与奖:所有参与投票并符合条件的用户均可获得20个下载积分。





原文地址:https://www.cnblogs.com/lanzhi/p/6470718.html