软件重构与性能优化
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈软件重构与性能优化
2009.08
参考书目
重构:改善既有代码的设计
作 者:MARTIN FOWLER 译 者:侯捷 熊节
什么是重构?
重构(Refactoring):在不改变软件的 功能和外部可见性的情况下,为了改善 软件的结构,提高清晰性、可扩展性和 可重用性而对软件进行的改造,对代码 内部的结构进行优化。
//print details System.out.println ("name: " + _name); System.out.println ("amount " + getOutstanding()); }
void printOwing() {
printBanner(); printDetails(getOutstanding()); }
同工的类) (19)Incomplete Library Class(不完善的程序库类) (20)Data Class(纯稚的数据类) (21)Refused Bequest(被拒绝的遗赠) (22)Comments(过多的注释)
2008-04-02
建立测试体系 (Building Tests)
2008-04-02
为什么要重构?
改进软件的设计 提高代码质量,可维护性 Refactoring帮助尽早的发现错误
(Defects) Refactoring可以提高提高开发速度
2008-04-02
什么时候需要重构 ?
在开始增加一个新的功能之前 在修复一个错误的时候 在做Code Review的时候
(1)自我测试码(Self-testing Code)的价值 (2)可以参考JUnit测试框架(Testing Framework) (3)添加更多测试
2008-04-02
重新组织你的函数 (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(移除对参数的赋值动
Void printBanner(){ //print banner System.out.println(“*********”); System.out.println(“Banner”); System.out.println(“*********”);
2008-04-02
重构与性能
时间预算法 持续关注法 良好的分解方式
2008-04-02
时间预算法
在设计时就对程序花费的时间进行预算, 通常用于性能要求极高的实时系统.普通 的企业应用程序一般对性能要求不高.只 要不太慢就可以了 。
2008-04-02
持续关注法
要求程序员在任何时间都要设法保持系 统的高性能.这个方法有个缺陷,就是大 部分的程序90%的优化工作都是白费劲, 这样会浪费大量的时间 。
2008-04-02
何时不应该重构 ?
代码太混乱,设计完全错误 明天是DeadLine 重构的工作量显著的影响Estimate
2008-04-02
重构流程
读懂代码(包括测试例子代码) 进行重构 运行所有的Unit Tests
2008-04-02
重构与设计
重构与设计是互补的,程序应该是先设计, 而在开始编码后,设计上的不足可以用重 构来弥补.设计应该是适度的设计,而不 必过度的设计.如果能很容易的通过重构 来适应需求的变化,那么就不必过度的设 计,当需求改变时再重构代码 。
2008-04-02
良好的分解方式
这个方式是在开发程序阶段不对性能投 以任何关注,直到进入性能优化阶段,再 分析程序中性能差的程序,然后对这些程 序进分解,查出性能差的程序,进行优化。
2008-04-02
代码编写的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(平行继承体系)
2008-04-02
(12)Lazy Class(冗赘类) (13)Speculative Generality(夸夸其谈未来性) (14)Temporary Field(令人迷惑的暂时值域) (15)Message Chains(过度耦合的消息链) (16)Mቤተ መጻሕፍቲ ባይዱddle Man(中间转手人) (17)Inappropriate Intimacy(狎昵关系) (18)Alternative Classes with Different Interfaces(异曲
作) (8)Replace Method with Method Object(以函数对象取代函数) (9)Substitute Algorithm(替换你的算法)
2008-04-02
Extract Method(提炼函数)
void printOwing() { //print banner System.out.println(“*********”); System.out.println(“Banner”); System.out.println(“*********”);
2009.08
参考书目
重构:改善既有代码的设计
作 者:MARTIN FOWLER 译 者:侯捷 熊节
什么是重构?
重构(Refactoring):在不改变软件的 功能和外部可见性的情况下,为了改善 软件的结构,提高清晰性、可扩展性和 可重用性而对软件进行的改造,对代码 内部的结构进行优化。
//print details System.out.println ("name: " + _name); System.out.println ("amount " + getOutstanding()); }
void printOwing() {
printBanner(); printDetails(getOutstanding()); }
同工的类) (19)Incomplete Library Class(不完善的程序库类) (20)Data Class(纯稚的数据类) (21)Refused Bequest(被拒绝的遗赠) (22)Comments(过多的注释)
2008-04-02
建立测试体系 (Building Tests)
2008-04-02
为什么要重构?
改进软件的设计 提高代码质量,可维护性 Refactoring帮助尽早的发现错误
(Defects) Refactoring可以提高提高开发速度
2008-04-02
什么时候需要重构 ?
在开始增加一个新的功能之前 在修复一个错误的时候 在做Code Review的时候
(1)自我测试码(Self-testing Code)的价值 (2)可以参考JUnit测试框架(Testing Framework) (3)添加更多测试
2008-04-02
重新组织你的函数 (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(移除对参数的赋值动
Void printBanner(){ //print banner System.out.println(“*********”); System.out.println(“Banner”); System.out.println(“*********”);
2008-04-02
重构与性能
时间预算法 持续关注法 良好的分解方式
2008-04-02
时间预算法
在设计时就对程序花费的时间进行预算, 通常用于性能要求极高的实时系统.普通 的企业应用程序一般对性能要求不高.只 要不太慢就可以了 。
2008-04-02
持续关注法
要求程序员在任何时间都要设法保持系 统的高性能.这个方法有个缺陷,就是大 部分的程序90%的优化工作都是白费劲, 这样会浪费大量的时间 。
2008-04-02
何时不应该重构 ?
代码太混乱,设计完全错误 明天是DeadLine 重构的工作量显著的影响Estimate
2008-04-02
重构流程
读懂代码(包括测试例子代码) 进行重构 运行所有的Unit Tests
2008-04-02
重构与设计
重构与设计是互补的,程序应该是先设计, 而在开始编码后,设计上的不足可以用重 构来弥补.设计应该是适度的设计,而不 必过度的设计.如果能很容易的通过重构 来适应需求的变化,那么就不必过度的设 计,当需求改变时再重构代码 。
2008-04-02
良好的分解方式
这个方式是在开发程序阶段不对性能投 以任何关注,直到进入性能优化阶段,再 分析程序中性能差的程序,然后对这些程 序进分解,查出性能差的程序,进行优化。
2008-04-02
代码编写的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(平行继承体系)
2008-04-02
(12)Lazy Class(冗赘类) (13)Speculative Generality(夸夸其谈未来性) (14)Temporary Field(令人迷惑的暂时值域) (15)Message Chains(过度耦合的消息链) (16)Mቤተ መጻሕፍቲ ባይዱddle Man(中间转手人) (17)Inappropriate Intimacy(狎昵关系) (18)Alternative Classes with Different Interfaces(异曲
作) (8)Replace Method with Method Object(以函数对象取代函数) (9)Substitute Algorithm(替换你的算法)
2008-04-02
Extract Method(提炼函数)
void printOwing() { //print banner System.out.println(“*********”); System.out.println(“Banner”); System.out.println(“*********”);