4006-998-758
3000+课程任你选择
长生命周期软件产品的分析、维护与扩展 培训方案
研发学院 代码 软件架构 开课时间:2022-02-16
温昱

温老师具有金融、军工电子、通讯、移动互联网等行业开发和代码重构经验;另外,有长期嵌入式软件研发和重构咨询经验,尤其擅长嵌入式软件的架构优化和代码重构,客户包括大厂华为、以及烽火和康尼等上市公司。

十五年系统规划、架构设计和代码重构经验,在金融、航空、多媒体、电信、中间件平台等领域负责和参与多个大型系统的规划、设计、开发与重构。

产品涉及银行核心系统、航空专用操作系统、网管系统、中间件平台等。为众多知名企业提供了卓有成效的培训与咨询服务,并在中国软件技术大会、中国软件工程大会、C++技术大会、IBM开发者大会、CSDN技术英雄会、软件开发2.0大会上交流架构设计与重构经验,反响强烈。在《程序员》杂志、IBM DeveloperWorks等媒体发表《图论思想与UML应用》、《拥抱变化:敏捷设计从理论到实践》、《运用RUP 4+1视图方法进行软件架构设计》、《随需而变的RUP》、《见山只是山 见水只是水──提升对继承的认识》、《浅谈模式的正交分类》等文章数十篇


查看老师详情
课程内容


课程大纲


第1部分:代码结构的分析与维护

能否快速分析代码,取决于程序员的代码理解角度、代码分析技巧

内容一:VSP分析法

变量引用分析——Variable reference analysis

语句块职责分析——Statement block responsibility analysis

执行路径分析——execution Path analysis

三组优秀代码原则:变量……、语句块……、执行路径……

对比:低效的行读法

掌握代码结构规律,就能够更快地维护代码结构

内容二:维护代码结构

分析:多案例

提炼:函数拆分与合并技巧,语句块划分与重组技巧

分析:多案例

提炼:提炼抽象判断骨架的技巧,消除判断嵌套的技巧

分析:多案例

提炼:变量不数据结构的代码维护

时间宝贵,实效第一,所以人们常问:代码维护管理有哪些原则

内容三:代码维护管理原则:有理、有利、有节

洞察本质:维护的四种类型、与预防性维护本质

轻松理解:什么是重构、何时重构、代码臭味驱动的重构过程

有理原则:找到问题还不够,必须找对问题

有利原则:利于后续改bug等维护工作、加feature等扩展工作

有节原则:不求完美

在课堂上练会、务实的技能,将在工作中直接发挥价值

内容四:大案例闯关与实战操作要领

场景1:测出Bug,读代码却看不出问题

任务1:分析代码,重构和优化代码结构使代码非常易读……改bug

场景2:越是核心代码,难读难改的复杂判断逻辑越多

任务2:分析代码,维护并改迚代码结构

场景3:你,接手了一堆代码

任务3:10分钟倒计时,测测你能读懂多少程序


第2部分:OO设计的维护与扩展

OO设计师的眼里,不是只有class,而是“OO = 类 + 类层次 + 包 + 接口”

内容五:洞察OO package结构规律,分析OO设计好轻松

利于“隐喻”更快理解OO设计(OO职责模型)

类层次-类角色矩阵

class设计原则

interface设计原则

class hierarchy设计原则

package设计原则

结合源代码案例,践行软件设计的高内聚、松耦合、可扩展

内容六:OO设计的维护与扩展

如何重新规划“类职责”——【高内聚】

• 在类之间“左右”搬移函数、字段

• 在类层次内“上下”搬移字段、函数

• 移除中间人(Remove middle man)

• 分解巨大类为类层次

• 封装“数据+操作”到类

如何保持类间关系“松耦合”——【松耦合】

• 抽象出接口

• 以委托取代继承

• 将双向关联改为单向

• 引入Façade

如何做到“抽象骨架”不“扩展点”分离?——【可扩展】

• 参数化设计

• 塑造模板函数(template method)

• 消息驱动

• 表驱动

• 状态机

在课堂上练会、务实的技能,将在工作中直接发挥价值

内容七:大案例闯关与实战操作要领

场景1:经常因为设计问题诊断不准,造成维护和扩展改善不成功

任务1:小组赛,分析代码,诊断“设计级臭味”

场景2:设计的可扩展性巩

任务2:分析代码,改迚OO设计结构,提高扩展性

场景3:没有带来扩展性的“message handler结构”比比皆是,为什么?

任务3:高抽象、可扩展的“message handler结构”这么设计……


第3部分:软件架构的维护与扩展

经过多次修改,系统大了许多,架构也没人说得清了。怎么办?

内容八:如何逆向分析源代码架构呢?

探讨源代码架构的规律——1个入口 + 5种技术模块 + N个功能模块

第1步 : 入口逻辑分析

第2步 : 结构分析

第3步 : 分析一条条协作链

架构回归松耦合,重点在接口!

内容九:接口维护、及扩展接口的技巧

如何发现、并确定接口设计有问题?

• 两个容易捕获的代码表现

维护接口——【接口易用性】

• 设计更抽象接口、简化调用

• 使接口更易用、调用时丌易“用错”

扩展接口——【接口扩展性、兼容性】

• 通过 proxy 增强接口

• 通过 adapter 增强接口对接能力

在课堂上练会、务实的技能,将在工作中直接发挥价值

内容十:大案例闯关与实战操作要领

场景1:示例代码中的接口丌易用、甚至用错导致奇怪的bug

任务1:改进接口设计

场景2:给一个完整的VC++项目

任务2:明确诊断其中的接口设计问题、以及Model层和View层不分的问题


第4部分:专题

补充与题、观点分享……

内容十一:代码移植——从Windows到Linux

UI代码是不可移植的,但如何尽量减少UI重写工作量

Socket:从windows完成端口到linux epoll

补充与题、观点分享……

内容十二:定制话题:代码架构——5种技术包、与N个功能包的分离

返回上一级