-会议介绍-
复杂遗留系统,往往是10多年的产品,随着不同产品的推出、不同客户,不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免. 迄今为止所有的软件系统都会变成遗留系统,并且都遭遇了缓慢,不可抗拒的腐化,因此软件开发人员不得不面对既有系统的混乱代码.而本课程正是告诉你如何重构既有的遗留系统, 如何重构代码,重构设计,重构架构.
本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总,研讨,并最终形成培训教程。本次培训从程序员的编程思维开始讲解,通过大量的真实案例,涵盖了代码重构,设计重构,架构重构3个层次,详细地介绍了重构需要注意的要点以及难点。
你需要该课程吗?
你们是否已经存在如下现象,如果有,请参加我们课程,我们给你最佳实践:
- 遗留系统的文档已经部分丢失和残缺,甚至没有
- 研发团队对系统的认识非常有限.包括对需求,架构,设计和代码
- 每当修改系统Bug时,莫名其妙的新bug就会屡次出现
- 增加新功能十分困难,即使简单新特性都需要很久时间才能完成
- 没有工程师愿意维护老代码,甚至为了逃离维护工作,采取离职
- 当前系统代码,关系混乱且难以维护
- 谁应该负责重构,如何开始,哪些需要重构
- 如何保证安全重构,如何保证重构的正确性
- 大型项目如何实践重构,我们系统都已经很多版本,很多客户
培训对象 各类软件研发中心的软件设计师、架构师, 项目经理,技术总监,质量部门经理。对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人,效果最佳。
学员基础:了解Java/C#或者C++任一面向对象语言, 具有面向对象基本概念,熟悉基本设计模式
授课方式: 定制课程 + 案例讲解 + 小组讨论,60%案例讲解,40%实践演练
培训内容:2天
第一部分 重构核心思想 |
第一单元 重构核心思想 | 内容一:软件业者的反思: 软件代码的为什么会变烂 1. 软件可维护性(为什么必须重视软件的可维护性) 2. 代码质量概述 3. 破窗效应 4. 技术债务 5. 对代码的重新认识---代码就是设计 6. 案例演示1-通过演示国内某电信项目,随着客户需求的变化,导致软件结构混乱,大家反思,为什么? 你认为代码变烂的原因? 内容二:重构思想与误区 1. 重构概述 2. 何时重构 3. 重构的误区 4. 重构是持续进行的,不要先编写烂代码,再抽出重构 5. 如何发现哪些地方需要重构 6. 如何保证重构的正确 7. 如何测试重构 8. 通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,最后如何验收) 内容三:案例—通过实际项目演示重构 1. 介绍项目需求情况,进行设计 2. 阅读代码指出代码坏症状 3. 通过重构逐步改善代码质量 4. 通过该案例演示重构的过程,我们遇到的难处,如何解决? |
第二部分 重构最佳实践---实践者的思考 |
重构实践 | 内容一:重构关键—发现代码的坏味道 1. 代码坏味道概述 2. 代码坏味道的分类 3. 识别代码坏味道,是重构的最重要一步 4. 所谓重构,无非就是嗅到坏味道,然后,一小步一小步的改了它。问题是,很多人对坏味道的容忍度让他们嗅不到坏味道, 5. 案例分析—通过真实项目的代码,分析代码坏味道 内容二:重构手段和IDE重构工具 1. 重构手段概述 2. 简要演示重构的手段 3. 使用IDE重构工具进行重构 4. 重构工具的使用标准 5. 重构工具的使用心得 6. 通过案例演示如何通过重构工具完成重构 |
第三部分 重构案例- 某电信项目重构实践 |
重构巨型大函数
该案例主要演示如何重构实际项目代码之中的巨大方法 | 内容一:重构案例—该案例重点 巨型函数 1. 函数的重构 2. 巨型函数的种类  a) 项目列表式巨型方法 b) 锯齿状巨型方法 3. 利用自动重构对付巨型方法 4. 利用手工重构对付巨型方法 5. 引入感知变量 6. 函数依赖收集 7. 分解助手方法和方法对象 8. 通过案例介绍函数的重构最佳实践 内容二:重构案例—该案例重点 分解函数和函数参数重构 1. 分解函数 2. 助手方法提取 3. 函数参数的重构 4. 函数参数的相关坏味道 5. 流程函数和功能函数的调用关系 6. 通过案例介绍如何代码之中的分解函数和函数之间参数的重构 内容三:重构案例—该案例重点 复杂条件表达式重构 1. 复杂条件表达式重构 2. IF/Else深层嵌套语句的重构 3. Switch语句的重构 4. 重构表驱动 5. 通过案例介绍如何代码之中的复杂条件表达式的重构 内容四:重构案例—该案例重点学习代码重复 1. 代码重复分类以及重构手段 2. 强加的重复(imposed duplication):开发者觉得他们无可选择-环境似乎要求重复 3. 无耐心的重复(impatient duplication):开发者偷懒,他们重复,因为那样似乎更容易. 4. 无意的重复(inadvertent duplication):开发者没有意识到他们在重复信息 5. 开发者之间的重复(interdeveloper duplication):同一团队(或不同团队)的几个人重复了同样的信息. 6. 通过案例介绍代码的重复,以及如何重构 |
第四部分 重构案例- 某电力项目重构实践 |
类重构
该案例演示大类的重构实践 | 内容一:重构案例—该案例重点 巨大类的重构 1. 重构大类 1. 对象的职责 2. 单一职责原则与类的重构 3. 职责的识别 a) 方法分组 b) 观察隐藏方法 c) 寻找可以更改的原因 d) 寻找内部关系 e) 寻找主要职责 f) 接口分离—接口隔离原则 4. 提取类和接口 5. 通过案例介绍如何重构巨大的类 |
第五部分 重构案例- 税务/社保项目重构实践 |
重构模式
通过多个案例分析如果打通重构与模式任督二脉 | 内容一:重构到模式 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 重点学习案例的重构到模式的过程 |
第六部分 重构案例- 某金融项目设计重构实践 |
设计和模块重构
通过多个案例介绍设计重构,以及组件解耦,重构 | 内容一:设计重构 1. 重构与设计的思想---根据代码坏味道改善设计 2. 软件需求不可预测性----设计师不可能进行预测式设计 3. 软件设计的重构 4. 「重构」和设计彼此互补 5. 「事先设计」("Big Up Front Design) 6. 演进式设计 (evolutionary design) 7. Growing an Architecture 演化架构 8. 分析某项目,如何设计重构,给我们哪些启示,我们可以学习到什么 内容二:组件/包/模块重构 1. 优良的系统设计意味着我们把系统分割成了一个个可单独部署的组件,单独部署意味着如果更改了一个组件,我们也不需要重新部署其他组件。 2. 组件和包 坏味道 3. 模块之间解耦 4. 组件的内聚性实践 5. 组件的依赖性实践 6. 企业应用系统组件设计最佳实践 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. 通过案例学习架构的重构策略和步骤 |
第八部分 重构管理与安全重构 |
重构管理
如何进行安全重构, 消除恐惧心里。 如何使重构持续化,使开发者必须重构 | 内容一:安全重构 1. 重构的恐惧心里 2. 重构勇气 3. 安全重构和祈祷式重构 4. 安全重构保证 a) 依赖编辑器 b) 签名保持 c) 单一目标 d) 依赖编译器 e) 个人的能力 f) 代码审查 g) 单元测试 h) 验收测试 i) 人工测试 5. 通过案例如何保证重构的正确性 内容二:重构管理 1. 代码管理 2. 冰山理论 3. 如何争取业务人员和管理者的支持 4. 持续重构与代码分析工具 5. 持续集成与重构 6. 重构日常习惯 6. 通过案例分析如何保持持续重构,以及如何向领导和业务人员说服重构 |
-主办方介绍-
火龙果软件工程技术中心
火龙果软件工程技术中心是UML软件工程组织下属的一家软件工程综合技术服务公司,为软件行业提供技术研发、技术咨询、技术培训和产品支持服务
培训:
为软件行业提供开发过程中需要的各种专门性知识培训、技术培训,包括软件工程的各种理论知识(例如分析设计)、具体应用类型的理论知识(例如关系数据库),软件开发过程中的各种技术(例如J2EE应用环境)。客户包括:摩托罗拉中国电子有限公司、诺基亚中国技术中心、北大方正、清华同方、一汽大众、UT斯达康等等,客户对我们提供的优质服务给与了高度的赞誉。建立了良好的合作关系。为多家知名公司提供长期定制技术服务。同时和十多家国内著名培训机构有广泛的合作关系,为培训合作伙伴提供技术和师资的支持。