服务热线

400-600-2138

大型复杂遗留系统维护与重构最佳实践

收藏课程
课程编号:76399 时间:2013年05月30日-01日 讲师:专家 地点:上海
学习费用:5800 元/位
用手机看:
课程编号 开课日期 地点 培训天数 选择报名

培训对象:

对此课程感兴趣的学员。

课程收益:

课程大纲:

时间地点:2013年5月30-6月1日上海

课程费用:5800元/人

课程背景:

我们相信任何软件从业者,都会明白简单的道理,软件是必然要变化,变化是常态;有变化就需要维护,随着时间的推移,维护成本会远远超过初期开发的成本。占据成本的大头。因此,在软件开发中,最重要的是必须要降低维护成本;维护成本的正比于系统的复杂度,所以要降低维护成本,系统的设计和代码就应当追求简单清晰,定期及时的重构成为必然。

这些简单的逻辑看似简单,其实并非如此。不少有经验的开发人员,似乎对这类“道理”不屑一顾,他们更在意新潮的技术,先进的架构,流行的语言……,新出了哪些类库,什么软件新发布了版本,SOA,云计算,大数据等说起来头头是道,但是真刀真枪地写起来程序,往往漏洞百出,一坨坨的代码。

为什么一个原先好好的系统会逐渐“发出腐化的味道”?为什么它们不能保持原来那样的清晰简洁呢?有时候我们把原因归咎于客户。责怪他们总是改变需求,我们自我安慰地认为,只要客户的需求限于他们最初说声明的,那么我们的设计就没有问题的,所以错就错在客户改变了他们的需求。然而问题是需求一定是在变。许多人都曾尝试过以某种方式避免让系统沦为复杂遗留的烂系统,光采用预防措施是不够的。即使是最训练有素的开发团队也常常写出混乱代码,而且系统的腐化程度也会日积月累。所以努力防止腐化是不够的,你必须设法扭转它。

这就是本课程所要讲述的内容---重构。简言之,该课程教你如何扭转系统腐化,重构复杂遗留系统,减低维护成本。在面对一个错综复杂的,不透明的,令人费解的系统时如何慢慢地,逐步地将其变成一个简单的,有良好组织和设计的系统。

课程大纲:

第一部分、软件腐烂与可维护性

第一单元.软件腐烂与软件的可维护性

内容一:软件业者的反思:软件腐烂

1、软件腐烂(Softwarerot),也叫做代码腐烂(coderot)或软件腐朽(softwaredecay)。它描述了随着时间的逝去感知到软件的缓慢衰退,其将最终导致它变得不完善、不可使用或难以维护。

2、软件腐烂(Softwarerot)有两种形式:

3、1)隐匿的腐烂:软件逐渐不再(仍)被使用随着剩余的应用程序的改变变得不能用。它已经被观察到不再被使用的软件有可能一年的半衰期;

4、2)活动的腐烂:软件随着不断地被修改趋向于失去它的完整性。

5、破窗效应与技术债务

6、案例演示1-通过演示大型项目,随着客户需求的变化,导致软件结构混乱,大家反思,为什么?你认为软件腐烂的原因?反思你们公司的软件系统也面临这样的问题吗?

内容二:软件维护性定律—软件从业者必须知道的定律

1、软件变化定律:软件存在的时间越久,它的某个部分需要变化的可能性越大

2、软件缺陷定律:在软件中新增缺陷的可能性与代码修改量成正比

3、软件简洁定律:软件任何一部分的维护难度,反比于该部门的简洁程度

4、软件可维护方程式

D=V/E

D代表变化的合意程度,V代表价值,E维护成本,也就是说明,相对减低实现成本,降低维护成本更重要。

5、软件设计定律:相比降低开发成本,降低维护成本更加重要。维护成本正比于系统的复杂程度。

6、案例演示-通过大型项目,介绍这些基本的软件维护定律?也许大家都明白,但是我是否真的关注这些了吗?

第二部分、减少维护成本之道---重构

第二单元、重构实践

内容一:重构

1、重构概述

2、何时重构

3、重构的误区

4、重构是持续进行的,不要先编写烂代码,再抽出重构

5、如何发现哪些地方需要重构

6、如何保证重构的正确

7、如何测试重构

8、通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,最后如何验收)

内容二:案例—通过实际项目演示重构

1、介绍项目需求情况,进行设计

2、阅读代码指出代码坏症状

3、通过重构逐步改善代码质量

4、通过该案例演示重构的过程,我们遇到的难处,如何解决?

内容三:重构关键—代码的坏味道

1、代码坏味道概述

2、代码坏味道的分类

3、识别代码坏味道,是重构的最重要一步

4、所谓重构,无非就是嗅到坏味道,然后,一小步一小步的改了它。问题是,很多人对坏味道的容忍度让他们嗅不到坏味道,

5、案例分析—通过真实项目的代码,分析代码坏味道

内容四:重构手法

1、重构手法概述

2、简要演示重构的主要手法

3、使用IDE重构工具进行重构

4、通过案例演示如何通过重构工具完成重构

第三部分、重构实战1一函数相关重构

第三单元、函数重构

内容一:函数的重构

1、函数的重构

2、巨型函数的种类

1)项目列表式巨型方法

2)锯齿状巨型方法

3、分解函数

4、助手方法提取

5、利用自动重构对付巨型方法

6、利用手工重构对付巨型方法

7、引入感知变量

8、函数依赖收集

9、分解助手方法和方法对象

10、通过案例介绍长函数的重构最佳实践

第四部分、重构实战2一类重构

第四单元、类重构

内容一:重构案例—该案例重点巨大类的重构

1、重构大类

2、对象的职责重构

3、职责的识别

1)方法分组

2)观察隐藏方法

3)寻找可以更改的原因

4)寻找内部关系

5)寻找主要职责

6)接口分离—接口隔离原则

4、提取类和接口

5、通过案例介绍如何重构巨大的类

第五部分、重构实战3一重构与模式

第五单元、重构与模式

内容一:案例---重构设计方案引入设计模式

1、通过项目分析重构到模式的手段

2、构造TemplateMethod

3、以Composite取代一/多之分

4、引入NullObject

5、用Adapter统一接口

6、用FatoryMethod引入多态创建

7、通过案例介绍如何重构原始设计方案,演示如何通过重构导入设计模式

第六部分、重构实战4一模块/组件重构

第六单元.模块重构

内容一:模块重构

1、优良的系统设计意味着我们把系统分割成了一个个可单独部署的组件,单独部署意味着如果更改了一个组件,我们也不需要重新部署其他组件。

2、组件和包坏味道

3、模块之间解耦

4、组件的内聚性实践

5、组件的依赖性实践

6、企业应用系统组件设计最佳实践

7、分析某项目,演示模块重构,如何在大型应用系统进行模块重构

第七部分、重构实战5一数据库重构

第七单元.架构重构

内容一:数据重构过程

1、验证数据库重构是否合适

2、选择最合适的数据库重构

3、让原来的数据库schema过时

4、前测试、中测试和后测试

5、修改数据库schema

6、迁移源数据

7、重构外部访问程序

8、运行回归测试

9、对工作进行版本控制

10、结束此次重构

11、分析多年遗留的复杂项目,演示如何重构数据库,数据库重构的一般步骤,和普通的应用程序代码的重构的不同点。

内容二:数据库重构策略

1、小的变更更容易进行

2、唯一地标识每一次重构

3、通过许多小变更实现一次大变更

4、建立数据库配置表

5、触发器优于视图或批量同步

6、选择一个足够长的转换期

7、简化数据库变更控制委员会策略

8、简化与其他团队的协商封装对数据库的访问

9、能够容易地建立数据库环境

10、不要复制sql

11、将数据库资产置于变更控制之下

12、通过多个大型项目的数据库重构策略,分析在不同的数据库坏味道下,使用不同的重构策略

第八部分、重构实战6一架构重构

第七单元.架构重构

内容一:架构重构

1、软件架构概述

2、遗留系统的软件架构恢复

3、软件架构的重构时机

4、软件架构的重构步骤

5、架构坏味道

6、架构重构策略

第九部分、安全重构--构筑重构测试体系

第八单元.单元测试-构筑测试体系

内容一:理解单元测试

1、理解单元测试第一个单元测试

2、单元测试框架提供了什么功能

3、好的测试是什么样子的

4、为什么要写单元测试,为什么不写单元测试

5、为什么要写"好"的单元测试

6、分析真实项目,如何做单元测试,已经相关问题

内容二:构筑测试体系

1、单元测试中的坏味道

2、让测试容易被看懂的模式

3、让测试容易维护的模式

4、让测试被信得过的模式

5、重构单元测试,改进代码设计

6、如何在集成与单元、黑盒或白盒、Mock和非Mock之间做选择?

7、结合多个案例项目进行分析,分析什么是好的单元测试

第九单元.重构管理

内容一:安全重构

1、重构的恐惧心里

2、重构勇气

3、安全重构和祈祷式重构

4、安全重构保证

1)依赖编辑器

2)签名保持

3)单一目标

4)依赖编译器

5)个人的能力

6)代码审查

7)单元测试

8)验收测试

9)人工测试

5、通过案例如何保证重构的正确性

讲师介绍:

在线报名:

客户报名咨询:020-39971893     400 600 2138

近期相关公开课:

报名服务流程:

中培网优势:

热门课程

会员登录

勾选即代表确认同意《用户协议》

没有账号?立即注册

忘记密码?