课程简介
1、以重构视角,剖析多家巨头软件公司的成败兴衰。揭示重构工作的重要性。
2、与敏捷管理结合,提供重构管理的策略与方式方法。
3、借助案例,展现重构步骤的最佳实践。
4、重构的保证:自动化测试。
5、重构的基础工作:寻找代码的坏味道。
6、用多个实战训练的方式,由粗到细,讲解类重构、函数重构、函数内部重构3个层次要达成的重构目标,以及相关的重构技巧。
目标收益
1、随着软件越来越大,开发效率越来越低。需求变更需要多处代码修改,并且极易引入Bug。
2、管理者不知道如何评判软件内部质量的优劣,缺乏衡量标准的知识和相关工具的运用。
3、有经验的老员工,因为厌烦了枯燥的维护工作而离职。
4、程序员员希望改变代码腐化的现状,却不知道如何入手。
5、项目开发人员缺乏设计原则的知识,开发的代码只是为了完成功能,很少进行架构优化。
6、软件无法重用,每一个新项目几乎都是一次重新开始。
7、由于代码可读性差,新员工无法接手遗留系统。并且软件越维护越杂乱
培训对象
培训面向人群:使用面向对象语言的软件架构师、软件设计师、程序员、测试人员。
课程大纲
第一单元 重构的重要性 与 重构管理 |
该单元内容主要面向公司管理人员。 通过分析巨头软件公司在代码维护上的失败经验,让管理者认识到重构工作的重要性。 并提出相应的管理办法。 1、开发效率问题 (1)大部分公司的现状 (2)消失的巨头公司 (3)代码是怎么腐化变烂的 (4)代码是债务,而不是资产 2、偿还债务的办法――重构与重写 (1)重构与重新的区别 (2)为何要选择重构而不是重写? 3、重构管理 (1)重新认识代码的内部质量 (2)重构面临的管理挑战 重构的推行策略与方式 |
第二单元 重构对开发人员的意义 与 重构最佳实践 |
从第二单元开始,授课内容面向程序员。 通过案例,展示糟糕代码对程序员工作情绪的影响,让程序员产生主动重构的动力。 通过实战训练操作,向程序员说明重构的最佳实践步骤。 并在实战训练的同时,介绍几个重构相关工具的使用方法。 1、重构――从程序员自己做起 (1)从中兴的案例说起 (2)写出好代码的目的 (3)代码是写给人读的,而不是写给机器跑的 (4)让营地比你来时更干净 2、重构的最佳实践 (1)觅取重构点 (2)重构代码 (3)自动化单元测试 3、重构相关工具 (1)单元测试工具 (2)测试覆盖率工具 (3)打桩工具 (4)自动化重构工具 (5)自动化测试工具 |
第三单元 嗅出代码的坏味道 |
介绍代码的多种坏味道,为重构点指明方向。 学习使用代码内部质量检测工具,让觅取重构点的工作工具化。 学习使用自动化检测工具,让觅取重构点的工作自动化。 1、坏味道的分类 (1)重复的代码 (2)含糊不清的命名 (3)方法相关的坏味道 (4)类相关的坏味道 (5)散弹式修改 (6)发散式变化 (7)不恰当的暴露 (8)过多的注释 (9)其他坏味道 2、“鼻子”麻木了怎么办 代码内部质量检测工具 3、没时间检测怎么办 (1)自动化的测试和告警工具 (2)自动化检测原理 |
第四单元 类重构技能 |
讲解创建类的目的。引申出对象职责的概念,并通过实战训练讲述职责划分的技巧。 讲授面向对象设计的5大设计原则。 详细讲解“单一职责原则”。 通过实战训练,传授“依赖倒置原则”的使用。 1、为什么需要封装类 (1)设计“类”概念的目的 (2)良好模块和糟糕模块的区别 (3)最少知道原则 (4)封装相关的坏味道 2、对象职责概念 (1)对象职责概论 (2)对象职责的划分技巧 3、面向对象设计的5大设计原则 (1)单一职责原则 (2)开闭原则 (3)里氏替换原则 (4)接口隔离原则 (5)依赖倒置原则 4、单一职责原则 (1)定义与案例 (2)职责的识别技巧 (3)职责相关的坏味道 5、依赖倒置原则 (1)定义 (2)案例 6、类重构技巧 (1)提炼抽象 (2)打桩测试 (3)分离组件(6个组包原则) (4)组件内部优化 7、设计模式 (1)策略模式 (2)工厂模式 (3)MVP模式 (4)观察者模式 (5)其他模式 |
第五单元 函数重构技能 |
该单元主要讲解函数重构。函数的重构最主要的工作是函数抽取。 讲授高质量函数的标准和助手函数的概念。 最后介绍VS2008自带的C#重构工具,主要演示其中“提取方法”和“封装字段”功能。 1、创建函数的理由 列举多个创建函数的理由,避免程序中产生巨型函数。 2、高质量函数的三原则 (1)单一抽象层次原则 (2)单一职责原则 (3)短小原则 3、助手函数 (1)定义 (2)好处 4、自动化重构工具 学习VS2008内置的重构工具。减少程序员抽取函数的工作量。 |
第六单元 函数内部优化 |
在上一单元的基础上,本单元主要讲解如何通过优化函数内部的代码,增加代码的可读性、可维护性。 1、为你的函数取个好名字 (1)一些基本原则 (2)检查方法 2、简化表达式 (1)引入解释性变量 (2)尽量少用逻辑非运算符 3、驯服深层嵌套 (1)使用卫语句 (2)用switch-case语句,代替if-els (3)表驱动法 4、消除魔鬼数字 5、优化变量 (1)变量命名 (2)一个变量只做一件事 (3)控制变量的作用域 (4)缩短变量的存活时间 (5)减少控制标记 6、优化循环 (1)循环的种类 (2)循环的选择 (3)循环的危险性 (4)循环的重构 7、缩短参数列表 |
第七单元 维护遗留系统 |
课程的最后,介绍在无自动化测试用例保证的遗留系统中,如何进行保护性的开发和重构工作。并提出维护代码的准则。 1、维护代码的准则 首先做到不伤害。 2、修改代码的艺术 (1)新生方法 (2)新生类 (3)外敷方法 (4)外敷类 |
第八单元 架构师的作用 |
1、设计者 (1)切分系统 (2)设计接口 (3)选用设计模式 2、教导者 (1)引导团队 (2)修正偏离 加强学习 |
第一单元 重构的重要性 与 重构管理 该单元内容主要面向公司管理人员。 通过分析巨头软件公司在代码维护上的失败经验,让管理者认识到重构工作的重要性。 并提出相应的管理办法。 1、开发效率问题 (1)大部分公司的现状 (2)消失的巨头公司 (3)代码是怎么腐化变烂的 (4)代码是债务,而不是资产 2、偿还债务的办法――重构与重写 (1)重构与重新的区别 (2)为何要选择重构而不是重写? 3、重构管理 (1)重新认识代码的内部质量 (2)重构面临的管理挑战 重构的推行策略与方式 |
第二单元 重构对开发人员的意义 与 重构最佳实践 从第二单元开始,授课内容面向程序员。 通过案例,展示糟糕代码对程序员工作情绪的影响,让程序员产生主动重构的动力。 通过实战训练操作,向程序员说明重构的最佳实践步骤。 并在实战训练的同时,介绍几个重构相关工具的使用方法。 1、重构――从程序员自己做起 (1)从中兴的案例说起 (2)写出好代码的目的 (3)代码是写给人读的,而不是写给机器跑的 (4)让营地比你来时更干净 2、重构的最佳实践 (1)觅取重构点 (2)重构代码 (3)自动化单元测试 3、重构相关工具 (1)单元测试工具 (2)测试覆盖率工具 (3)打桩工具 (4)自动化重构工具 (5)自动化测试工具 |
第三单元 嗅出代码的坏味道 介绍代码的多种坏味道,为重构点指明方向。 学习使用代码内部质量检测工具,让觅取重构点的工作工具化。 学习使用自动化检测工具,让觅取重构点的工作自动化。 1、坏味道的分类 (1)重复的代码 (2)含糊不清的命名 (3)方法相关的坏味道 (4)类相关的坏味道 (5)散弹式修改 (6)发散式变化 (7)不恰当的暴露 (8)过多的注释 (9)其他坏味道 2、“鼻子”麻木了怎么办 代码内部质量检测工具 3、没时间检测怎么办 (1)自动化的测试和告警工具 (2)自动化检测原理 |
第四单元 类重构技能 讲解创建类的目的。引申出对象职责的概念,并通过实战训练讲述职责划分的技巧。 讲授面向对象设计的5大设计原则。 详细讲解“单一职责原则”。 通过实战训练,传授“依赖倒置原则”的使用。 1、为什么需要封装类 (1)设计“类”概念的目的 (2)良好模块和糟糕模块的区别 (3)最少知道原则 (4)封装相关的坏味道 2、对象职责概念 (1)对象职责概论 (2)对象职责的划分技巧 3、面向对象设计的5大设计原则 (1)单一职责原则 (2)开闭原则 (3)里氏替换原则 (4)接口隔离原则 (5)依赖倒置原则 4、单一职责原则 (1)定义与案例 (2)职责的识别技巧 (3)职责相关的坏味道 5、依赖倒置原则 (1)定义 (2)案例 6、类重构技巧 (1)提炼抽象 (2)打桩测试 (3)分离组件(6个组包原则) (4)组件内部优化 7、设计模式 (1)策略模式 (2)工厂模式 (3)MVP模式 (4)观察者模式 (5)其他模式 |
第五单元 函数重构技能 该单元主要讲解函数重构。函数的重构最主要的工作是函数抽取。 讲授高质量函数的标准和助手函数的概念。 最后介绍VS2008自带的C#重构工具,主要演示其中“提取方法”和“封装字段”功能。 1、创建函数的理由 列举多个创建函数的理由,避免程序中产生巨型函数。 2、高质量函数的三原则 (1)单一抽象层次原则 (2)单一职责原则 (3)短小原则 3、助手函数 (1)定义 (2)好处 4、自动化重构工具 学习VS2008内置的重构工具。减少程序员抽取函数的工作量。 |
第六单元 函数内部优化 在上一单元的基础上,本单元主要讲解如何通过优化函数内部的代码,增加代码的可读性、可维护性。 1、为你的函数取个好名字 (1)一些基本原则 (2)检查方法 2、简化表达式 (1)引入解释性变量 (2)尽量少用逻辑非运算符 3、驯服深层嵌套 (1)使用卫语句 (2)用switch-case语句,代替if-els (3)表驱动法 4、消除魔鬼数字 5、优化变量 (1)变量命名 (2)一个变量只做一件事 (3)控制变量的作用域 (4)缩短变量的存活时间 (5)减少控制标记 6、优化循环 (1)循环的种类 (2)循环的选择 (3)循环的危险性 (4)循环的重构 7、缩短参数列表 |
第七单元 维护遗留系统 课程的最后,介绍在无自动化测试用例保证的遗留系统中,如何进行保护性的开发和重构工作。并提出维护代码的准则。 1、维护代码的准则 首先做到不伤害。 2、修改代码的艺术 (1)新生方法 (2)新生类 (3)外敷方法 (4)外敷类 |
第八单元 架构师的作用 1、设计者 (1)切分系统 (2)设计接口 (3)选用设计模式 2、教导者 (1)引导团队 (2)修正偏离 加强学习 |