现在的位置: 首页 > 综合 > 正文

遗留系统维护的思考

2012年05月21日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭

     不像发达国家,我们现在还在处在软件开荒时期,不断在开发着新的软件。但随着软件已经成为各行各业中的重要的基础设施,我觉得软件维护这个话题将变得越来越重要。

     据统计,可能80%的维护人员都不是以前的开发人员。所以,软件维护首要面临的是对当前软件系统的理解,这次我就这个话题说一下我自己的理解。目前只能想到几点,希望大家能够补充。 

     那么应该从哪几方面来理解呢?我觉得主要是理解业务,理解依赖,理解架构,理解设计,理解代码,理解Hot Spot。

1)理解业务。

      问题1:这个系统是干什么的? 功能

      问题2:谁使用这个系统? 角色

      问题3:主要流程是怎么样的?流程,一般用泳道图

      问题4:有哪些主要概念?glossary,词汇表

      问题5:概念和概念之间的关系?概念模型,领域模型。

      问题6:业务所涉及的专业知识有哪些? 可以找专业知识学习,比如理解财务系统需要会计知识。

2)理解架构。

     问题1:逻辑上系统是如何组织的?逻辑架构

     问题2:系统主要用了哪几种技术?技术架构

     问题3:系统如何部署的?部署架构

3)理解依赖。

     问题1:系统依赖外部哪些系统?

     问题2:系统被哪些系统所依赖?

     一般用系统用例图表示。

4)理解设计。

     问题1:数据库是如何设计的?ER模型。

     问题2:主要有哪些模块组成?概要设计。

     问题3:模块之间的关系?概要设计。

     对遗留系统,设计文档一般是过时的,过时的文档就像鸡肋。

5)理解代码。

     问题1:有哪些主要类?

     问题2:有哪些主要接口?

     问题3:继承层次?

     问题4:关系?(关联,组合,聚合)

     问题5:职责?类的职责?接口的职责?

     问题6:依赖?依赖哪些包(组件层次),依赖哪些类(类层次)

     问题7:单元测试?有吗,跑跑看,单元测试是一个很好的视角,我阅读Spring的源码就是从单元测试开始。

6)理解插座上的孔。

     问题1:业务上,系统本身可以满足哪些扩展? 比如可以通过配置,支持新的功能

     问题2:技术上,可以满足哪些扩展?比如可以继承哪些类,实现对新功能的支持。

     标记这些Hot spot(热点),使你对系统的可预见性有充分了解。

7)理解你想要做的。

     问题1:本次修改,主要是对哪些业务的修改?

     问题2:本次修改,会影响到哪些模块?

     问题3:本次修改,要修改哪些类?

     问题4:本次修改,会影响哪些类?

     问题5:本次修改,会修改哪些方法,有什么影响?

     问题6:到底要不要改?

     问题7:修改哪些文件?配置文件,.java文件,数据库等。最好列出checklist。

     总之一句话:就是尽可能的获取信息。

     简单把上面的总结一下,就认清需要 (了解你想要的,到底想改什么),然后外面看看 (系统角色,外部系统依赖,架构,概念模型),里面看看 (类图,依赖关系,调用关系,数据库表,配置文件),到处摸摸 (试用一下功能,跑一下单元测试,debug一下)。

(原文:http://gurudk.javaeye.com/blog/336571)

抱歉!评论已关闭.