软件重构实战训练营

软件重构实战训练营
    马上咨询

    讲师介绍

    范老师 航天信息首席架构师,《大话重构》作者,规模化敏捷SPC,软件架构及重构的客座讲师。

    先后参与了数十个國(guó)内大型软件项目,涉及國(guó)家财政、军工、税收、医疗等领域的大数据建设、风险防控与人工智能(néng)研究。長(cháng)期关注大型业務(wù)系统的品质保证、防止腐化以及技术改造等困扰软件企业的问题,微服務(wù)及大数据转型的实践者与倡导者。

    课程简介

    重构是持续进行的,而不是在项目结束时、发布版本时、迭代结束时,甚至不是每天快下班时才进行的。重构是我们每隔一个小(xiǎo)时或者半个小(xiǎo)时就要去做的事情。通过重构,我们可(kě)以持续地保持代码尽可(kě)能(néng)干净、简单并且具有(yǒu)表达力。

    目标收益

    随着不同产品的推出,不同客户、不同版本的发布,需要维护的遗留代码越来越多(duō),重构也就在所难免。不仅如此,所有(yǒu)的软件系统,经过一段时间的维护,都会逐渐变成遗留系统,并且都遭遇了缓慢而不可(kě)抗拒的腐化。因此,软件开发人员不得不面对既有(yǒu)系统的混乱代码。而本课程正是告诉你如何重构既有(yǒu)的遗留系统,如何重构代码、重构设计、重构架构。

    培训对象

    各类软件研发中心的软件设计师、架构师、项目经理(lǐ)、技术总监、质量部门经理(lǐ)。对于重构技术怀有(yǒu)疑问和困惑,需要梳理(lǐ)解答(dá)的团队和个人,效果最佳。

    授课时间

    2天

    第一部分(fēn) 為(wèi)什么软件需要及时重构
     
     第一单元 剖析软件质量不断下降的根源

    质量不断下降的表现:
     1. 程序代码越来越乱
     2. 软件维护成本越来越高
     3. 软件变更越来越困难
     4. 无法进行新(xīn)技术的改造
     以往采取的措施:
     1. 头痛医头,脚痛医脚
     2. 抛弃掉重新(xīn)编写
     3. 因担心未来变化而做的过度设计
     带来的问题
     1. 团队成员越来越多(duō)但效率却越来越低
     2. 测试变得越来越困难而任務(wù)繁重
     3. 软件系统越来越笨重而不适应未来变化
     分(fēn)析与反思
     
     案例分(fēn)析:一个遗留系统的演化过程
     1. 起初的设计
     2. 随后的变更
     3. 质量不断下降的过程
     软件质量下降的根源:
     1. 软件总是因变更而变得越来越复杂
     2. 软件结构已经不再适应复杂的软件需求
     3. 必须要调整软件结构以适应新(xīn)的软件需求
     
     软件是因需求变更而质量下降吗?
     案例分(fēn)析:推演软件变更的设计过程
     应对软件变更的最佳方式:两顶帽子
     1. 重构原有(yǒu)代码以适应新(xīn)的需求
     2. 实现新(xīn)的需求
     案例:演示两顶帽子的设计过程

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

    以往软件设计的过程:
     1. 演示以往软件设计的过程
     2. 剖析以往软件设计的问题与风险
     小(xiǎo)步快跑模式的开发过程:
     1. 用(yòng)最快的速度开发一个最核心的功能(néng)
     2. 让第一个版本运行起来并可(kě)以验证
     3. 在第一个版本的基础上不断添加功能(néng):
     a. 每次只添加一个很(hěn)简单、很(hěn)单一的功能(néng)
     b. 每次以两顶帽子的方式添加新(xīn)功能(néng)
     c. 运行、调试与验证
     d. 重复这个过程添加下一个功能(néng)
     4. 复杂的系统就是由一次次正确开发的不断积累而成
     案例:演示小(xiǎo)步快跑的开发过程
     小(xiǎo)步快跑解决的问题:
     1. 复杂功能(néng)有(yǒu)效地解耦
     2. 代码编写总是可(kě)测试与验证
     3. 简化设计与思考的复杂度
     4. 适时重构以避免软件退化
     
     测试驱动设计
     1. TDD vs. 后测试开发
     2. 案例:演示测试驱动设计的过程
     3. 测试驱动设计的优势
     4. 实践测试驱动设计的难题
     讨论:自动化测试脚本应当由谁来写?
     
     练习:运用(yòng)小(xiǎo)步快跑的方式设计一个软件

    第二部分(fēn) 重构的概念
     
     第三单元 何為(wèi)重构

    软件重构的概念
     1. 重构是一系列代码的等量变换
     案例:一个Hello World重构过程
     2. 重构的保险索:自动化测试
     案例:Hello World的自动化测试过程
     3. 软件修改的四种动机——重构的价值
     4. 一个真实的谎言——重构的误區(qū)
     5. 重构的主要方法与技巧
     
     案例分(fēn)析:重构一个大型遗留系统
     1. 重构第一步:分(fēn)解大函数
     超级大函数及其危害
     案例:演示大函数产生的过程
     案例:演示抽取方法操作步骤
     实践抽取方法会遇到的问题和解决方案
     2. 重构第二步:拆分(fēn)大对象
     超级大对象及其危害
     案例:演示超级大对象的产生过程
     案例:演示抽取类的操作步骤
     讲解单一职责设计原则
     案例:演示“分(fēn)久必合,合久必分(fēn)”的重构过程
     3. 重构第三步:提高复用(yòng)率
     讲解顺序编程及其危害
     “不要重复代码”原则
     案例:提高代码复用(yòng)的6个方法
     案例:演示新(xīn)增代码时的代码复用(yòng)过程
     用(yòng)静态检查工具检查重复代码
     4. 重构第四步:可(kě)扩展设计
     过度设计 vs. 恰如其分(fēn)的设计
     讲解“开放-封闭”的设计原则
     案例:讲解可(kě)扩展设计的4个方法
     案例:讲解新(xīn)增代码的可(kě)扩展设计过程
     5. 重构第五步:降低耦合度
     案例:讲解接口、实现与工厂模式
     案例:讲解外部接口解耦与适配器模式
     案例:讲解继承泛滥问题与桥接模式
     案例:讲解方法解耦与策略模式
     案例:讲解过程解耦与命令模式
     案例:讲解透明扩展与组合模式、装饰者模式
     6. 重构第六步:系统分(fēn)层
     反思软件架构需要怎样的分(fēn)层结构
     遗留系统如何拥抱需求变化
     遗留系统如何应对技术变革
     7. 重构第七步:领域驱动设计
     领域驱动设计的概念
     讲解领域模型分(fēn)析方法
     讲解原文(wén)分(fēn)析法与领域驱动设计
     
     讨论:如何制定重构项目计划
     练习:重构一个小(xiǎo)程序并编写测试脚本

    第四单元 关于重构的讨论

    什么时候重构
     1. 重构是一种习惯
     2. 重构让程序可(kě)读
     3. 重构,才好复用(yòng)
     4. 先重构,再扩展
     5. 紧急任務(wù)时的重构
     
     测试的困境
     1. 重构初期的困局
     2. 解耦与自动化测试
     3. 建立自动化测试體(tǐ)系
     
     重构的评价
     1. 评价软件质量的指标
     2. 评价软件质量的工具