课程介绍
1、 以重构视角,剖析多家巨头软件公司的成败兴衰。揭示重构工作的重要性。
2、 与敏捷管理结合,提供重构管理的策略与方式方法。
3、 借助案例,展现重构步骤的最佳实践。
4、 重构的保证:自动化测试。
5、 重构的基础工作:寻找代码的坏味道。
6、 用多个实战训练的方式,由粗到细,讲解架构分层重组、函数重构、函数内部重构3个层次要达成的重构目标,以及相关的重构技巧。
课程收益
1、随着软件越来越大,开发效率越来越低。需求变更需要多处代码修改,并且极易引入Bug。
(1) 管理者不知道如何评判软件内部质量的优劣,缺乏衡量标准的知识和相关工具的运用。
(2) 有经验的老员工,因为厌烦了枯燥的维护工作而离职。
(3) 程序员员希望改变代码腐化的现状,却不知道如何入手。
(4) 项目开发人员缺乏设计原则的知识,开发的代码只是为了完成功能,很少进行架构优化。
(5) 软件无法重用,每一个新项目几乎都是一次重新开始。
(6) 由于代码可读性差,新员工无法接手遗留系统。并且软件越维护越杂乱
课程对象
培训面向人群:使用面向对象语言的软件架构师、软件设计师、程序员、测试人员。
学员基础
学习本课程应具备下列基础知识:1) 熟悉C语言;
关键词
(1) 重构
(2) 代码坏味道
(3) 自动化测试
课程大纲
主题 | 授课内容 |
第1单元 重构的重要性 与重构管理 | 该单元内容主要面向公司管理人员。 通过分析巨头软件公司在代码维护上的失败经验,让管理者认识到重构工作的重要性。 并提出相应的管理办法。 1、 开发效率问题 (1) 大部分公司的现状 (2) 消失的巨头公司 (3) 代码是怎么腐化变烂的 (4) 代码是债务,而不是资产 2、 偿还债务的办法――重构与重写 (1) 重构与重新的区别 (2) 为何要选择重构而不是重写? 3、 重构管理 1、 重新认识代码的内部质量 2、 重构面临的管理挑战 重构的推行策略与方式 |
第2单元 重构对开发人员的意义与重构最佳实践 | 从第二单元开始,授课内容面向程序员。 通过案例,展示糟糕代码对程序员工作情绪的影响,让程序员产生主动重构的动力。 通过实战训练操作,向程序员说明重构的最佳实践步骤。 并在实战训练的同时,介绍几个重构相关工具的使用方法。 (1) 重构――从程序员自己做起 (1) 从中兴的案例说起 (2) 写出好代码的目的 (3) 代码是写给人读的,而不是写给机器跑的 (4) 让营地比你来时更干净 (2) 重构的最佳实践 (1) 觅取重构点 (2) 重构代码 (3) 自动化单元测试 (3) 重构相关工具 (1) 单元测试工具 (2) 测试覆盖率工具 (3) 打桩工具 (4) 自动化测试工具 |
第3单元 嗅出代码的坏味道 | 介绍代码的多种坏味道,为重构点指明方向。 学习使用代码内部质量检测工具,让觅取重构点的工作工具化。 学习使用自动化检测工具,让觅取重构点的工作自动化。 1、 坏味道的分类 (1) 重复的代码 (2) 含糊不清的命名 (3) 方法相关的坏味道 (4) 类相关的坏味道 (5) 散弹式修改 (6) 发散式变化 (7) 不恰当的暴露 (8) 过多的注释 (9) 其他坏味道 2、 “鼻子”麻木了怎么办 代码内部质量检测工具 3、 没时间检测怎么办 (1) 自动化的测试和告警工具 (2) 自动化检测原理 |
第4单元 模块化程序设计思想 | 该单元介绍代码分模块、分层的思想,以及一些基本的代码解耦方法。 1、模块化设计的目的 2、模块化程序设计方法 (1) 什么是模块? (2) 什么是好模块? (3) 模块接口设计 (4) “C语言”模块怎么组包 3、模块第1大杀手--全局变量 (1) 全局变量的缺点 (2) 减少全局变量使用 (3) 限制全局变量范围 4、模块第2大杀手--循环依赖 (1) 次晨综合症 (2) 分层设计思想 |
第5单元
函数重构技能 | 该单元主要讲解函数重构。函数的重构最主要的工作是函数抽取。 讲授高质量函数的标准和助手函数的概念。 1、 创建函数的理由 列举多个创建函数的理由,避免程序中产生巨型函数。 2、 高质量函数的三原则 (1) 单一抽象层次原则 (2) 单一职责原则 (3) 短小原则 3、 助手函数 (1) 定义 (2) 好处
|
第6单元 函数内部优化 | 在上一单元的基础上,本单元主要讲解如何通过优化函数内部的代码,增加代码的可读性、可维护性。 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、 缩短参数列表 |
第7单元 架构师的作用 | 1、设计者 (1) 切分系统 (2) 设计接口 (3) 选用设计模式 2、教导者 (1) 引导团队 (2) 修正偏离 (3) 加强学习 |