| 教学单元 |
单元教学内容 |
| 第一单元:你真正理解重构吗?重构的误区 |
内容一:软件代码的新思维
1. 软件可维护性(为什么必须重视软件的可维护性)
2. 代码质量概述
3. 破窗效应
4. 对代码的重新认识——代码就是设计
5. 优秀代码的评价标准
6. 好代码和糟糕代码之间的区别
7. 劣质代码的代价
8. 大师评价整洁代码的标准
a) Robert C Martin
b) Kent Beck
c) Ward Cunningham
d) Ron Jeffries
e) Grady Booch
f) Dave Thomas
内容二:重构思想
1. 重构概述
2. 何时重构
3. 如何发现哪些地方需要重构
4. 如何保证重构的正确
5. 如何测试重构
6. 通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,最后如何验收)
内容三:案例——通过实际项目演示重构
1. 介绍项目需求情况,进行设计
2. 阅读代码指出代码坏症状
3. 通过重构逐步改善代码质量 |
| 第二单元:如何发现重构点,哪些该需要重构 |
内容一:重构关键—发现代码的坏味道
1. 代码坏味道概述
2. 代码坏味道的分类
3. 代码坏味道低级篇(重复的代码、过长的函数、过大的类、过长的参数列表、发散式变化、分散的修改)
4. 代码坏味道中级篇(伪面向对象的调用、数据泥团、基本类型的误用、switch-case结构的误用、平行继承体系、过薄的类、只有局部意义的成员变量)
5. 代码坏味道高级篇(过度耦合的消息链、过薄的中间对象、紧耦合类、相似的类、只有数据的类、滥用类的继承关系)
6. 通过案例让学员寻找代码坏味道
7. 可以根据客户现在的项目作为案例进行现场分析,找出相应的代码坏味道
内容二:某项目分析——重点了解现实项目代码的充斥大量坏味道
1. 介绍项目需求情况,阅读现有代码指出代码坏症状
2. 不看不知道,代码到底有多烂—触目惊心的代码
3. 通过重构逐步改善代码质量
4. 本案例学习多种重构方式
|
| 第三单元:重构实践 |
内容一:重构技术
1. 重构名录
2. 介绍常见的重构技术
3. 分别通过相关案例展示重构手段
内容二:重构工具
1. 重构工具概述
2. 使用IDE重构工具进行重构
3. 重构工具的使用标准
4. 重构工具的使用心得
5. 通过案例演示如何通过重构工具完成重构
内容三:重构案例——该案例重点:函数和函数调用重构
1. 函数的重构
2. 函数调用重构
3. 函数参数的重构
4. 重复代码处理策略
5. 通过案例介绍函数的重构
内容四:重构案例——该案例重点:复杂条件表达式重构
1. 复杂条件表达式重构
2. IF/Else语句的危害
3. Switch语句的危害
4. 通过案例介绍如何重构面向过程代码到面向对象
内容五:重构案例——该案例重点:学习代码格式和命名
1. 代码格式规范
2. 代码命名-名副其实
3. 很重要,但是总被忽略的基本功
4. 通过案例介绍代码格式以及如何使用IDE工具进行定制格式
5. 通过案例介绍代码的命名,以及如何重构
内容六:重构案例——该案例重点:数据结构重构
1. 数据结构重构
2. 通过案例介绍如何重构面向过程代码到面向对象
内容七:重构案例——该案例重点:对象职责和对象重构
1. 过程化思维和面向对象设计
2. 对象的重新思考
3. 职责驱动的对象设计
4. 通过案例介绍如何重构面向过程代码到面向对象
|
| 第四单元:自动化重构的实践 |
内容一:软件质量和代码质量
1. 软件质量概述
2. 代码质量的度量
3. Chidamber & Kemerer度量,
4. Depth of Inheritance Tree(DIT)
5. Number of Childre(NOC)
6. Response for a Class(RFC)
7. Afferent/Efferent Couplings(CA/CE)
8. Lack of cohesion in methods(LCOM)
9. 业界其他度量标准
10. 通过分析多个实际项目,分别度量相关是否标准
内容二:代码评审和质量抽查
1. 代码评审前期准备
2. 代码评审的代码量
3. 代码评审的检查表
4. 代码评审的总结与学习
5. 通过案例分析如何做好代码评审
|
| 第五单元:重构和质量持续改善 |
内容一:代码静态分析工具
1. 代码静态分析工具概述-以Java语言平台为案例
2. 以Java语言代码静态分析工具为例介绍
3. CheckStyle:用于编码标准
4. PMD 的 CPD:帮助发现代码重复
5. Coverlipse:测量代码覆盖率
6. JDepend:提供依赖项分析
7. Metric:有效地查出复杂度
8. 其他语言相关代码静态分析工具
9. 通过案例演示工具在项目之中的应用
内容二:持续集成
1. 持续集成概述
2. 持续集成的要点和原则
3. 构建策略和最佳实践
4. 持续集成对代码分析的支持
5. 通过案例演示如何利用持续集成完成代码检查和代码分析
|
| 第六单元:重构设计 |
内容一:什么是好的设计以及如何预先设计实现
1. 什么是好的设计和衡量的手段
2. 可扩展性(Extensibility)容易添加新的功能,结合案例通过哪些手段如何实现该目标
3. 灵活性(Flexibility)代码修改平稳地发生,结合案例通过哪些手段如何实现该目标
4. 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来。结合案例通过哪些手段如何实现该目标
5. 软件的变化分析——发现变化/封装变化/隔离变化
6. 分析真实项目如何预先设计,给我们哪些启示,我们可以学习到什么
内容二:重构与设计
1. 重构与设计的思想——根据代码坏味道改善设计
2. 软件需求不可预测性——设计师不可能进行预测式设计
3. 软件设计的重构
4. 软件演化式设计——敏捷的设计思想
5. 分析某电信项目如何设计重构,给我们哪些启示,我们可以学习到什么
内容三:通过代码指标进行设计重构
1. 代码指标和可视化有助于识别代码的重要部分,从而识别设计坏味道,进行重构设计
2. 相关代码指标(HIT 继承树的高度/NOP 包的数量/NOC 类的数量/NOM 方法的数量/LOC 代码行数/CYCLO
圈复杂度/CALL 每个方法的调用数)
3. 分析案例主要讨论两个指标,圈复杂度(cyclomatic complexity) 和传入耦合(afferent
coupling), 介绍显示和理解这两个指标的一些工具,以及如何通过组合指标帮助发现设计特征。
内容四:案例——某项目设计重构案例分析
1. 案例情况
2. 演示如何发现设计坏味道,以及如何重构
|
| 第七单元:重构到模式 |
内容一:重构到模式
1. 软件设计的基本原则
2. 设计模式概述
3. 设计模式的本质论
4. 设计模式如何适应变化和封装
5. 重构到模式的思路
内容二:案例——重点介绍重构基本类型依赖和对应模式
1. 通过案例学习以下重构到模式手段
2. 以State取代状态改变条件语句
3. 以Strategy取代条件逻辑
4. 以Composite取代隐含树
5. 以Interpreter取代隐式语言
6. 转移装饰功能到Decorator
7. 用Builder封装Composite
8. 重点学习案例的重构到模式的过程
内容三:案例——重点介绍重构代码重复和对应模式
1. 通过案例学习以下重构到模式手段
2. 构造Template Method
3. 以Composite取代一/多之分
4. 引入Null Object
5. 用Adapter统一接口
6. 用Fatory Method引入多态创建
7. 重点学习案例的重构到模式的过程
内容四:案例——重点介绍重构代码过长/过大的类/方法和对应模式
1. 转移聚集操作到Vistor
2. 以Strategy取代条件逻辑
3. 以Command取代条件调度程序
4. 转移聚集操作到Collecting Parameter
5. 重点学习案例的重构到模式的过程
内容五:案例——重点介绍条件逻辑过度复杂和对应模式
1. 以Strategy取代条件逻辑
2. 以State取代状态改变条件语句
3. 转移装饰功能到Decorator
4. 引入Null Object
5. 以Command替换条件调度程序
6. 转移聚集操作到Visitor
7. 重点学习案例的重构到模式的过程
|
| 第八单元:大型项目重构案例分析 |
内容一:架构重构
1. 软件架构概述
2. 遗留系统的软件架构恢复
3. 软件架构的重构时机
4. 软件架构的重构步骤
5. 架构坏味道
6. 架构重构策略
内容二:案例分析—某互联网项目架构重构(根据时间调整)
1. 项目背景以及相关需求
2. 软件架构的演进与重构过程
3. 质量属性对软件架构的驱动
4. 架构的可扩展性架构
5. 缓存技术在架构之中的应用
6. Web层的架构策略
7. 中间层的架构和集群策略
8. 大型并发系统Session的复制和容错架构策略
9. 数据的架构
10. 软件架构的重构策略
内容三:案例分析—某电信项目架构重构
1. 介绍项目需求情况进行设计
2. 通过重构逐步实现设计的可维护, 可重用
3. 应用管道与过滤器/元数据/微内核等架构模式
4. 应用AOP架构思想
5. 应用设计模式(Command/ Observer/Proxy/Chain of Responsibility)
6. 通过案例学习架构的重构策略和步骤
|