读书人

在遗留代码下开发(Development on le

发布时间: 2013-03-21 10:08:17 作者: rapoo

在遗留代码上开发—evelopment on legacy code)
class Manager{... public void kickOff(){ ... DoSomething doSomething = new DoSomething(...); doSomething.doSomething(objects); }...}

?可修改为:

?

class Manager{... DoSomething doSomething;   public void setAction(Action doSomething){   this.doSomething = doSomething; }  public void kickOff(){      ...      doSomething.doSomething(objects); }...}interface Action {void doSomething(List marks);}

?

为DoSomething提供了接口Action,采用诸如依赖,mock这个DoSomething这个类,测试kickOff()方法。

?

4.尽量使测试的范围缩小在受修改影响的类中,对类中的改动进行全面测试。保证每处修改完全测试,保证测试类减少。

?

5.类之间交互的代码重构,如果这些交互仅在修改的代码之中,只要保证修改的代码完全测试即可。而对于那些可能影响此时其他不需要进行修改代码的类,可以先放下,为其创建新的方法,在此次修改和以后修改中,使用和重构新的方法。对于老的方法,等到以后代码覆盖率提高,能够覆盖所有此类交互方法的代码时,重构此方法,这是你会发现,修改很简单,并且如果修改错误,或者不能处理极端的逻辑,也会和容易找出问题所在。

?

6.努力汲取业务逻辑知识。

?

7.《修改代码的艺术》(Michael Feathers 著)建议找到切入点(Inflection Point),往往我们找的点很多,每一次修改都可能不一样,为此花很多代价找寻,还不如直接进入修改,找出最佳的修改方式避免代码过度重构和修改,减少影响,这才是有有实践价值和有意义的。

?

质量保证

总之,和遗留代码打交道时,为了提高发布信心和效率,速度和质量是我们的追求。

?

1.尽可能让一切自动化:

?

单元测试自动化是最基本要求,尽可能让一切测试变得自动化,不管是单元测试,还是功能测试,还是压力测试,冒烟测试,回归测试。

?

发布自动化也是非常重要的。

?

2.为项目加入冒烟测试和回归测试。逐渐保证代码质量。

?

3.坚持可控变化,逐渐渗透的原则,保持系统稳步得朝健壮的方向进行。

?

关于重构推荐的书籍:

?

《重构:改善既有代码的设计》Martine Fowler著

?

《重构与模式》:Joshua Kerievsky著

?

?《修改代码的艺术》: Michael Feathers 著

?

参考:

?

?《修改代码的艺术》: Michael Feathers 著

?

本文作者:

现就任某公司金融软件高级资深技术架构师,著有《漫谈设计模式》一书(清华大学出版社出版)。

?

?

读书人网 >行业软件

热点推荐