- 4
- 0
- 约9.87千字
- 约 102页
- 2019-05-02 发布于江西
- 举报
浅谈软件重构与性能优化 2009.08 参考书目 重构:改善既有代码的设计 作 者:MARTIN FOWLER 译 者:侯捷 熊节 什么是重构? 重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化。 为什么要重构? 改进软件的设计 提高代码质量,可维护性 Refactoring帮助尽早的发现错误(Defects) Refactoring可以提高提高开发速度 什么时候需要重构 ? 在开始增加一个新的功能之前 在修复一个错误的时候 在做Code Review的时候 何时不应该重构 ? 代码太混乱,设计完全错误 明天是DeadLine 重构的工作量显著的影响Estimate 重构流程 读懂代码(包括测试例子代码) 进行重构 运行所有的Unit Tests 重构与设计 重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补.设计应该是适度的设计,而不必过度的设计.如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码 。 重构与性能 时间预算法 持续关注法 良好的分解方式 时间预算法 在设计时就对程序花费的时间进行预算,通常用于性能要求极高的实时系统.普通的企业应用程序一般对性能要求不高.只要不太慢就可以了 。 持续关注法 要求程序员在任何时间都要设法保持系统的高性能.这个方法有个缺陷,就是大部分的程序90%的优化工作都是白费劲,这样会浪费大量的时间 。 良好的分解方式 这个方式是在开发程序阶段不对性能投以任何关注,直到进入性能优化阶段,再分析程序中性能差的程序,然后对这些程序进分解,查出性能差的程序,进行优化。 代码编写的22宗罪(Bad?Smells?in?Code ) (1)Duplicated?Code(重复的代码) (2)Long?Method(过长函数) (3)Large?Class(过大类) (4)Long?Parameter?List(过长参数列) (5)Divergent?Change(发散式变化) (6)Shortgun?Surgery(霰弹式修改) (7)Feature?Envy(依恋情结)? (8)Data?Clumps(数据泥团)? (9)Primitive?Obsession(基本型别偏执)? (10)Switch?Statements(switch惊悚现身)? (11)Parallel?Inheritance?Hierarchies(平行继承体系)? (12)Lazy?Class(冗赘类)? (13)Speculative?Generality(夸夸其谈未来性)? (14)Temporary?Field(令人迷惑的暂时值域) (15)Message?Chains(过度耦合的消息链) (16)Middle?Man(中间转手人)? (17)Inappropriate?Intimacy(狎昵关系)? (18)Alternative?Classes?with?Different?Interfaces(异曲同工的类)? (19)Incomplete?Library?Class(不完善的程序库类) (20)Data?Class(纯稚的数据类) (21)Refused?Bequest(被拒绝的遗赠) (22)Comments(过多的注释) 建立测试体系(Building?Tests) ?(1)自我测试码(Self-testing?Code)的价值? ?(2)可以参考JUnit测试框架(Testing?Framework) ?(3)添加更多测试 重新组织你的函数(Composing?Methods) (1)Extract?Method(提炼函数)? (2)Inline?Method(将函数内联化)? (3)Inline?Temp(将临时变量内联化)? (4)Replace?Temp?With?Query(以查询取代临时变量)? (5)Introduce?Explaining?Variable(引入解释性变量)? (6)Split?Temporary?Variable(剖解临时变量)? (7)Remove?Assignments?to?Parameters(移除对参数的赋值动作)? (8)Replace?Method?with?Method?Object(以函数对象取代函数) (9)Substitute?Algorithm(替换你的算法)? Extract?Method(提炼函数) void printOwing() { //print banner System.out.pri
原创力文档

文档评论(0)