最新资讯 New
你的位置:首页 > 新闻动态 > 电子硬件

软件重构实战与案例分析高级研修班

2022/3/23 9:50:22

课程特点:

1、本课程首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“两顶帽子”的方式应对变更,拒绝腐化。站在实战的角度讲解高质量软件设计的“小步快跑”过程。

2、用真实案例讲解已经代码腐化的遗留系统是如何通过“软件重构七步曲”,由简入深、循序渐进地重构一个大系统。

3、课程的最后,更加深层次地讲解软件重构面临的难题,以及有效地解决之道。

4、本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总、研讨,并最终形成培训教程。

5、本次培训从程序员的编程思维开始讲解,通过大量的真实案例,详细地介绍了重构需要注意的要点以及难点,这些知识都是讲师十几年经验的总结。

6、课程1/3时间讲解核心思想,1/3时间动手重构实践,1/3点评分析总结。

 

课程大纲:

第一部分:为什么软件需要及时重构

第一单元:剖析软件质量不断下降的根源

质量不断下降的表现:

1.程序代码越来越乱      2.软件维护成本越来越高

3.软件变更越来越困难    4.无法进行新技术的改造

以往采取的措施:

1.头痛医头,脚痛医脚    2.抛弃掉重新编写

3.因担心未来变化而做的过度设计

带来的问题:

1.团队成员越来越多但效率却越来越低   2.测试变得越来越困难而任务繁重

3.软件系统越来越笨重而不适应未来变化

分析与反思:

案例分析:一个遗留系统的演化过程

1.起初的设计  2.随后的变更  3.质量不断下降的过程

软件质量下降的根源:

1.软件总是因变更而变得越来越复杂   2.软件结构已经不再适应复杂的软件需求

3.必须要调整软件结构以适应新的软件需求

软件是因需求变更而质量下降吗?

案例分析:推演软件变更的设计过程

应对软件变更的最佳方式:两顶帽子

1.重构原有代码以适应新的需求   2.实现新的需求

案例:演示两顶帽子的设计过程

第二单元:高质量的软件设计过程

以往软件设计的过程:

1.演示以往软件设计的过程       2.剖析以往软件设计的问题与风险

小步快跑模式的开发过程:

1.用最快的速度开发一个最核心的功能     2.让第一个版本运行起来并可以验证

3.在第一个版本的基础上不断添加功能:

a.每次只添加一个很简单、很单一的功能   b.每次以两顶帽子的方式添加新功能

c.运行、调试与验证   d.重复这个过程添加下一个功能

4.复杂的系统就是由一次次正确开发的不断积累而成

案例:演示小步快跑的开发过程

小步快跑解决的问题:

1.复杂功能有效地解耦       2.代码编写总是可测试与验证

3.简化设计与思考的复杂度   4.适时重构以避免软件退化

案例:数据推送程序的设计过程

第二部分:如何进行软件重构

第三单元:何为重构  

软件重构的概念:

1.重构是一系列代码的等量变换   案例:一个Hello World重构过程

2.重构的保险索:自动化测试     案例:Hello World的自动化测试过程

3.软件修改的四种动机——重构的价值   4.一个真实的谎言——重构的误区

5.重构的主要方法与技巧        

案例分析:重构一个大型遗留系统

1.重构第一步:分解大函数

超级大函数及其危害

案例:演示大函数产生的过程     案例:演示抽取方法操作步骤

实践抽取方法会遇到的问题和解决方案

2.重构第二步:拆分大对象

超级大对象及其危害

案例:演示超级大对象的产生过程  案例:演示抽取类的操作步骤

讲解单一职责设计原则    案例:演示“分久必合,合久必分”的重构过程

3.重构第三步:提高复用率

讲解顺序编程及其危害

“不要重复代码”原则

案例:提高代码复用的6个方法    案例:演示新增代码时的代码复用过程

用静态检查工具检查重复代码

4.重构第四步:可扩展设计

过度设计 vs. 恰如其分的设计

讲解“开放-封闭”的设计原则

案例:讲解可扩展设计的4个方法  案例:讲解新增代码的可扩展设计过程

5.重构第五步:降低耦合度

案例:讲解接口、实现与工厂模式  案例:讲解外部接口解耦与适配器模式

6.重构第六步:系统分层

反思软件架构需要怎样的分层结构

遗留系统如何拥抱需求变化        遗留系统如何应对技术变革

7.重构第七步:领域驱动设计

领域驱动设计的概念

讲解领域模型分析方法

案例:智能温控器分析设计过程(嵌入式+物联网)

⑴最初的领域驱动设计过程 ⑵需求变更的领域驱动设计⑶面向物联网的架构演进

练习:重构一个小程序并编写测试脚本

第四单元:关于重构的讨论 

什么时候重构:

1.重构是一种习惯   2.重构让程序可读      3.重构,才好复用

4.先重构,再扩展   5.紧急任务时的重构

测试的困境:

1.重构初期的困局   2.解耦与自动化测试    3.建立自动化测试体系

重构的评价

1.评价软件质量的指标   2.评价软件质量的工具

第三部分:系统级的重构项目

第五单元:在敏捷框架中开展重构

现在大家都在探讨SAFe规模化敏捷:

1.以最小的资源投入,创造出更多的价值,及时为用户提供服务

2.更快地交付,更快地反馈,更早地产生价值

3.增量构建系统,动态制订里程碑

企业敏捷实践遇到的最大挑战:

1.敏捷开发:每个迭代都是在上一个版本的基础上变更

2.软件退化:

a)每变更一次,软件质量就下降一次

b)变更得越频繁,软件质量下降的速度就越快

c)敏捷开发的软件变更是频繁的

结论:不解决软件变更的质量问题,敏捷开发就不能真正落地

分析软件退化的根源:

1.软件总是从简单向复杂转变   2.简单软件有简单软件的设计

3.复杂软件有复杂软件的设计

4.当软件由简单软件向复杂软件转变时,重构成为必然

保证高质量软件开发的关键:两顶帽子

1.高质量软件开发的关键在于每次变更的设计

2.两顶帽子的意义:恰如其分的软件设计

a)活在今天的格子里,做今天的事儿

b)当需求变更到来时,运用两顶帽子进行软件设计

打造高质量的敏捷开发团队:小步快跑

应用举例:运用小步快跑的方式进行前沿技术的开发

1.前沿技术开发的难题:一边技术研究,一边软件开发

2.用最快的速度开发核心技术并且跑通

3.在此基础上进行重构优化,不断添加新功能

4.当底层技术变更时,进行正确的设计

SAFe敏捷团队中如何制订重构任务:

1.定期制订使能任务   2.敏捷团队中的架构设计与调整

第六单元:遗留系统的技术改造难题

技术改造的难题

一些大型遗留系统已经运行维护十年以上,现在面临着技术改造的难题:

1.程序越来越乱:代码在退化,软件质量持续下降,维护成本越来越高;

2.面临技术改造:一直在犹豫改还是不改,但现在到了不得不改的时候了。

以往的解决方案:

1.修修补补,遇到什么问题就解决什么问题:

存在的问题:

a.始终治标不治本,不能从根本上解决许多问题;

b.有过一些改造,但不敢尝试真正的技术改造,越老的系统技术越落后

存在的问题:面临着被市场淘汰的绝大风险

2.彻底丢弃原有系统重新开发,从而快速摆脱以往的技术债务

存在的问题:

原系统运行维护十年以上,积累大量繁复而细微的业务需求与程序逻辑,但在重做过程中都遭到遗失,给项目带来巨大的风险

问题的实质:

1.面临巨大市场的压力,改造是想做不想做都得做的事情了;

2.原系统中积累大量繁复而细微的业务需求与程序逻辑,既不在设计文档中,也不为现有的维护人员所掌握,但一旦遗失却严重后果;

3.一边在技术改造,一边还有新的需求需要维护,意味着改造中的新系统,在还未替代老系统前,还要不断与老系统同步

正是有了如此多的难题与风险,使得旧系统改造面临进退两难的困境。

演化式重构解决方案:

1.演化式地对原系统进行重构,渐进式地进行优化改进

不是丢弃原系统,而是从原系统开始,运用重构方法进行一小步一小步的优化与调整,使技术改造过程变得平滑

2.培训、指导与审查并举,切实提高代码编写质量

首先对人员进行代码质量与重构的培训,制订代码规范与静态代码检查。在开发初期加强对每项设计的指导,之后组长责任制进行代码审查。

3.组件开发-测试为一体的团队

一边改造,一边编写自动化测试脚本,让改造过程随时处于质量监控之下

4.优化与维护并行开展,让改造工作快速起效

制订迭代式计划,每完成一次改造就发布一个可运行版本。之后的运行维护在该版本的基础上开展

5.平台建设与系统重构并行开展,加快改造速度

分成平台组与重构组并行开展工作,一边在搭建新的技术开发平台,一边运用重构在优化原有系统,最终实现原有系统向新开发平台的代码迁移

第七单元:系统级软件重构过程 

案例分析:演化式重构的改造过程:

1.概念及解决的问题

⑴演化式重构的概念      ⑵建立领域驱动设计的过程

2.模块的选择与迭代项目计划

⑴先选择易上手快速起效的模块开始改造 ⑵再选择最核心最关键的模块进行改造

⑶制订迭代式技术改造项目计划

3.组建一个开发-测试为一体的团队

⑴测试人员与开发人员同时开始工作   ⑵改造初期的自动化测试过程

⑶逐渐编写自动化测试程序的过程

4.平台建设与系统重构并举

重构组:

一边在重构,一边在升级维护上线,既使改造工作快速起效,又使重构的成功以最快的速度得到验证,降低改造风险

平台组:

构建基于领域的轻量级系统架构,既为旧系统代码移植创造条件,又为技术的更迭降低成本

5.平滑地代码移植

代码移植的条件:

1)旧系统完成了代码重构,实现业务代码与技术代码的有效解耦;

2)新平台构建了一个基于领域的系统架构。

代码移植过程:

1)将旧系统中的业务领域层有效提取出来;  2)将业务领域代码放入新平台中

3)完成其它的配置、接口、前端界面等工作   4)运行、调试、测试

改造的效果:

1.实现领域驱动设计,拥抱未来需求的变化

2.建立自动化测试体系保障软件质量

3.更加灵活而快速地应对未来技术的更新

讨论:系统级重构的经验与分享

 

讲师简介:

高级系统架构师、从事软件研发工作近二十年,并且现在一直坚守在大型软件架构设计一线工作。尤其熟悉互联网架构与分析的特点,长期关注软件代码质量,多次参与大型遗留系统改造、软件系统重构等重大项目。先后主持或参与了数十个国内外大型软件项目,涉及国家财政、军工、税务、医疗等领域的大数据建设、风险防控与人工智能研究,互联网及大数据转型的实践者与倡导者。分别担任过需求分析师、主任设计师、项目经理、高级系统架构师、技术专家等各项职务。


时间、地点:来电咨询


具体开课信息请来电咨询!