课程费用

5800.00 /人

课程时长

2

成为教练

课程简介

重构是持续进行的,而不是在项目结束时、发布版本时、迭代结束时,甚至不是每天快下班时才进行的。重构是我们每隔一个小时或者半个小时就要去做的事情。通过重构,我们可以持续地保持代码尽可能干净、简单并且具有表达力。

目标收益

随着不同产品的推出,不同客户、不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免。不仅如此,所有的软件系统,经过一段时间的维护,都会逐渐变成遗留系统,并且都遭遇了缓慢而不可抗拒的腐化。因此,软件开发人员不得不面对既有系统的混乱代码。而本课程正是告诉你如何重构既有的遗留系统,如何重构代码、重构设计、重构架构。

培训对象

各类软件研发中心的软件设计师、架构师、项目经理、技术总监、质量部门经理。对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人,效果最佳。

课程大纲

第一部分 为什么软件需要及时重构

第一单元 剖析软件质量不断下降的根源
质量不断下降的表现:
1. 程序代码越来越乱
2. 软件维护成本越来越高
3. 软件变更越来越困难
4. 无法进行新技术的改造
以往采取的措施:
1. 头痛医头,脚痛医脚
2. 抛弃掉重新编写
3. 因担心未来变化而做的过度设计
带来的问题
1. 团队成员越来越多但效率却越来越低
2. 测试变得越来越困难而任务繁重
3. 软件系统越来越笨重而不适应未来变化
分析与反思

案例分析:一个遗留系统的演化过程
1. 起初的设计
2. 随后的变更
3. 质量不断下降的过程
软件质量下降的根源:
1. 软件总是因变更而变得越来越复杂
2. 软件结构已经不再适应复杂的软件需求
3. 必须要调整软件结构以适应新的软件需求

软件是因需求变更而质量下降吗?
案例分析:推演软件变更的设计过程
应对软件变更的最佳方式:两顶帽子
1. 重构原有代码以适应新的需求
2. 实现新的需求
案例:演示两顶帽子的设计过程
第二单元 高质量的软件设计过程 以往软件设计的过程:
1. 演示以往软件设计的过程
2. 剖析以往软件设计的问题与风险
小步快跑模式的开发过程:
1. 用最快的速度开发一个最核心的功能
2. 让第一个版本运行起来并可以验证
3. 在第一个版本的基础上不断添加功能:
a. 每次只添加一个很简单、很单一的功能
b. 每次以两顶帽子的方式添加新功能
c. 运行、调试与验证
d. 重复这个过程添加下一个功能
4. 复杂的系统就是由一次次正确开发的不断积累而成
案例:演示小步快跑的开发过程
小步快跑解决的问题:
1. 复杂功能有效地解耦
2. 代码编写总是可测试与验证
3. 简化设计与思考的复杂度
4. 适时重构以避免软件退化

测试驱动设计
1. TDD vs. 后测试开发
2. 案例:演示测试驱动设计的过程
3. 测试驱动设计的优势
4. 实践测试驱动设计的难题
讨论:自动化测试脚本应当由谁来写?

练习:运用小步快跑的方式设计一个软件
第二部分 重构的概念

第三单元 何为重构
软件重构的概念
1. 重构是一系列代码的等量变换
案例:一个Hello World重构过程
2. 重构的保险索:自动化测试
案例:Hello World的自动化测试过程
3. 软件修改的四种动机——重构的价值
4. 一个真实的谎言——重构的误区
5. 重构的主要方法与技巧

案例分析:重构一个大型遗留系统
1. 重构第一步:分解大函数
超级大函数及其危害
案例:演示大函数产生的过程
案例:演示抽取方法操作步骤
实践抽取方法会遇到的问题和解决方案
2. 重构第二步:拆分大对象
超级大对象及其危害
案例:演示超级大对象的产生过程
案例:演示抽取类的操作步骤
讲解单一职责设计原则
案例:演示“分久必合,合久必分”的重构过程
3. 重构第三步:提高复用率
讲解顺序编程及其危害
“不要重复代码”原则
案例:提高代码复用的6个方法
案例:演示新增代码时的代码复用过程
用静态检查工具检查重复代码
4. 重构第四步:可扩展设计
过度设计 vs. 恰如其分的设计
讲解“开放-封闭”的设计原则
案例:讲解可扩展设计的4个方法
案例:讲解新增代码的可扩展设计过程
5. 重构第五步:降低耦合度
案例:讲解接口、实现与工厂模式
案例:讲解外部接口解耦与适配器模式
案例:讲解继承泛滥问题与桥接模式
案例:讲解方法解耦与策略模式
案例:讲解过程解耦与命令模式
案例:讲解透明扩展与组合模式、装饰者模式
6. 重构第六步:系统分层
反思软件架构需要怎样的分层结构
遗留系统如何拥抱需求变化
遗留系统如何应对技术变革
7. 重构第七步:领域驱动设计
领域驱动设计的概念
讲解领域模型分析方法
讲解原文分析法与领域驱动设计

讨论:如何制定重构项目计划
练习:重构一个小程序并编写测试脚本
第四单元 关于重构的讨论 什么时候重构
1. 重构是一种习惯
2. 重构让程序可读
3. 重构,才好复用
4. 先重构,再扩展
5. 紧急任务时的重构

测试的困境
1. 重构初期的困局
2. 解耦与自动化测试
3. 建立自动化测试体系

重构的评价
1. 评价软件质量的指标
2. 评价软件质量的工具
第一部分 为什么软件需要及时重构

第一单元 剖析软件质量不断下降的根源
质量不断下降的表现:
1. 程序代码越来越乱
2. 软件维护成本越来越高
3. 软件变更越来越困难
4. 无法进行新技术的改造
以往采取的措施:
1. 头痛医头,脚痛医脚
2. 抛弃掉重新编写
3. 因担心未来变化而做的过度设计
带来的问题
1. 团队成员越来越多但效率却越来越低
2. 测试变得越来越困难而任务繁重
3. 软件系统越来越笨重而不适应未来变化
分析与反思

案例分析:一个遗留系统的演化过程
1. 起初的设计
2. 随后的变更
3. 质量不断下降的过程
软件质量下降的根源:
1. 软件总是因变更而变得越来越复杂
2. 软件结构已经不再适应复杂的软件需求
3. 必须要调整软件结构以适应新的软件需求

软件是因需求变更而质量下降吗?
案例分析:推演软件变更的设计过程
应对软件变更的最佳方式:两顶帽子
1. 重构原有代码以适应新的需求
2. 实现新的需求
案例:演示两顶帽子的设计过程
第二单元 高质量的软件设计过程
以往软件设计的过程:
1. 演示以往软件设计的过程
2. 剖析以往软件设计的问题与风险
小步快跑模式的开发过程:
1. 用最快的速度开发一个最核心的功能
2. 让第一个版本运行起来并可以验证
3. 在第一个版本的基础上不断添加功能:
a. 每次只添加一个很简单、很单一的功能
b. 每次以两顶帽子的方式添加新功能
c. 运行、调试与验证
d. 重复这个过程添加下一个功能
4. 复杂的系统就是由一次次正确开发的不断积累而成
案例:演示小步快跑的开发过程
小步快跑解决的问题:
1. 复杂功能有效地解耦
2. 代码编写总是可测试与验证
3. 简化设计与思考的复杂度
4. 适时重构以避免软件退化

测试驱动设计
1. TDD vs. 后测试开发
2. 案例:演示测试驱动设计的过程
3. 测试驱动设计的优势
4. 实践测试驱动设计的难题
讨论:自动化测试脚本应当由谁来写?

练习:运用小步快跑的方式设计一个软件
第二部分 重构的概念

第三单元 何为重构
软件重构的概念
1. 重构是一系列代码的等量变换
案例:一个Hello World重构过程
2. 重构的保险索:自动化测试
案例:Hello World的自动化测试过程
3. 软件修改的四种动机——重构的价值
4. 一个真实的谎言——重构的误区
5. 重构的主要方法与技巧

案例分析:重构一个大型遗留系统
1. 重构第一步:分解大函数
超级大函数及其危害
案例:演示大函数产生的过程
案例:演示抽取方法操作步骤
实践抽取方法会遇到的问题和解决方案
2. 重构第二步:拆分大对象
超级大对象及其危害
案例:演示超级大对象的产生过程
案例:演示抽取类的操作步骤
讲解单一职责设计原则
案例:演示“分久必合,合久必分”的重构过程
3. 重构第三步:提高复用率
讲解顺序编程及其危害
“不要重复代码”原则
案例:提高代码复用的6个方法
案例:演示新增代码时的代码复用过程
用静态检查工具检查重复代码
4. 重构第四步:可扩展设计
过度设计 vs. 恰如其分的设计
讲解“开放-封闭”的设计原则
案例:讲解可扩展设计的4个方法
案例:讲解新增代码的可扩展设计过程
5. 重构第五步:降低耦合度
案例:讲解接口、实现与工厂模式
案例:讲解外部接口解耦与适配器模式
案例:讲解继承泛滥问题与桥接模式
案例:讲解方法解耦与策略模式
案例:讲解过程解耦与命令模式
案例:讲解透明扩展与组合模式、装饰者模式
6. 重构第六步:系统分层
反思软件架构需要怎样的分层结构
遗留系统如何拥抱需求变化
遗留系统如何应对技术变革
7. 重构第七步:领域驱动设计
领域驱动设计的概念
讲解领域模型分析方法
讲解原文分析法与领域驱动设计

讨论:如何制定重构项目计划
练习:重构一个小程序并编写测试脚本
第四单元 关于重构的讨论
什么时候重构
1. 重构是一种习惯
2. 重构让程序可读
3. 重构,才好复用
4. 先重构,再扩展
5. 紧急任务时的重构

测试的困境
1. 重构初期的困局
2. 解耦与自动化测试
3. 建立自动化测试体系

重构的评价
1. 评价软件质量的指标
2. 评价软件质量的工具

活动详情

提交需求