大型系统的重构

         
banq
10-01-26 2 3282 3

软件是有生命的,随着时间推移,软件规模不断扩大,大家会发现新功能难以添加扩展,系统变得改一动百,老程序员开始辞职,这些都是说明软件系统必须重构了,Refactoring Large Software Systems一文以亲身经历谈论一个大型系统的重构经验。

大型软件的生命周期如下图:


成熟Maturity期初期:性能好,各方面功能都很稳定,可以顺利增加许多新功能,BUG能够控制修复。但是当到了
Infeasibility阶段就开始恶化,出现如下各种情况:
1.无法加入新功能。每次加入新功能都是非常费力,导致新功能实现时间延长,项目不断拖延。
2.每个BUG修复带来新的BUG,改正了老问题,却带来了新问题。
3.原先架构受到损害,被各种程序员改得面目全非。
4.散发代码臭味,重复方法 长方法。参考Martin Fowler的重构一书。
5.测试覆盖面不足,无法保证原先功能正常。随着新功能扩展复杂,老功能是否正常都无法保证。

他们提出重构方法:
1.重新设计redesign应用:一个完全重新设计和应用的重新实现。重新建模,从分析开始重新设计,代码重写。
2.重新实现Reimplementation:What不动,重新首先HOW:重写代码 进行可伸缩性的重构,增加并行异步执行。

成功重构的条件是:
1.Team :人员多少,期待一两个不现实。
2.经验:大型规模系统重构必须由经验丰富担任,扎实架构设计功底是必须的。
3.动机:不同于开发新功能,学习新知识,重构是代码质量更好。(类似做后勤,吃力不讨好,但是非常重要)
4.带头工程师:虽然都是高手,还是选出一个高高手带头,必须非常熟悉原来系统。

如何确保重构目标实现?
1.灵活:重构是一个长期任务,需要不断根据客户需要改变。
2.持续集成:需要Build服务器,每日集成
3.自动测试:确保应用程序的行为并没有改变的生命线

具体方法是:评估和总体规划
1.评估出原来系统问题:例如没有分层
2.提出解决问题的规划:分层,清理表现层,用通用框架替代自己做的。
下图是他们重构项目的一个步骤图,从原来耦合无层到后来分层:


重构不是一次性战斗,是长期艰巨任务,边开发边重构才不致于疴病成积。这是一个针对不断恶化的战斗。

3
liujian1979
2010-01-26 18:04

感觉重构是比较科学的做法。但在中国,根据国情,公司或企业往往选择重新再做个出来(或者一个项目在经过一期、二期以后甲方或乙方就终止合作,再换家公司合作了),这样比维护和重构带来利润要高。

internetman
2010-01-27 10:19

2010年01月26日 18:04 "liujian1979"的内容
感觉重构是比较科学的做法。但在中国,根据国情,公司或企业往往选择重新再做个出来(或者一个项目在经过一期、二期以后甲方或乙方就终止合作,再换家公司合作了),这样比维护和重构带来利润要高。

貌似 是这样的!