简介
以重构视角,剖析多家巨头软件公司的成败兴衰,揭示重构工作的重要性。
与敏捷管理结合,提供重构管理的策略与方式方法。
借助案例,展现重构步骤的最佳实践。
重构的保证:自动化测试。
重构的基础工作:寻找代码的坏味道。
用多个实战训练的方式,由粗到细,讲解类重构、函数重构、函数内部重构3个层次要达成的重构目标,以及相关的重构技巧。
课程时长
2天(12H)
受众人群
使用面向对象语言的软件架构师、软件设计师、程序员、测试人员。
学员基础: 1) 熟悉至少一种面向对象语言 2) 熟悉VS开发环境
课程解决的问题
随着软件越来越大,开发效率越来越低。需求变更需要多处代码修改,并且极易引入Bug。
管理者不知道如何评判软件内部质量的优劣,缺乏衡量标准的知识和相关工具的运用。
有经验的老员工,因为厌烦了枯燥的维护工作而离职。
程序员员希望改变代码腐化的现状,却不知道如何入手。
项目开发人员缺乏设计原则的知识,开发的代码只是为了完成功能,很少进行架构优化。
软件无法重用,每一个新项目几乎都是一次重新开始。
由于代码可读性差,新员工无法接手遗留系统。并且软件越维护越杂乱。
分享提纲
主题 | 授课内容 |
第一单元 重构的重要性与重构管理 | 该单元内容主要面向公司管理人员。 通过分析巨头软件公司在代码维护上的失败经验,让管理者认识到重构工作的重要性。 并提出相应的管理办法。 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) 自动化检测原理 |
第四单元 函数重构技能 | 该单元主要讲解函数重构。函数的重构最主要的工作是函数抽取。 讲授高质量函数的标准和助手函数的概念。 最后介绍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) 修正偏离 (3) 加强学习 |