4006-998-758
3000+课程任你选择
基于CHI代码健康指数的设计模式与重构高级编程训练营
研发学院 CHI代码 设计模式与重构 高级编程 开课时间:2023-02-14
陈勇

25年软件研发经验

资深编程专家

敏捷专家

25年软件研发经验,资深编程专家、敏捷专家。10年编程、测试开发经验,3年中高层管理经验擅长在实际环境中应用敏捷开发实践。具有丰富的工程技术与项目管理实践经验,从程序员、项目经理、CMMI/敏捷咨询师、事业部总监、副总经理等各种技术与管理岗位获得的一手经验,令其可以站在企业管理者的角度,以更广的视角来理解敏捷开发,并能配合和推动非研发部门协作推广敏捷。

IT著作:敏捷开发1001夜合著,《QUML量化统一建模语言》百度阅读9.7分  ,《IT职场人生》百度阅读9.7分  。


查看老师详情
课程内容


课程前言

核心词:重构,复用,低代码,面向变更的设计,设计模式,面向对象,代码漏洞

卓越设计:面向对象,开闭原则,设计模式        微观编码:编码规范,极简版本

编码改善:重构,重构的量化管理与步骤            宏观编码:CHI代码健康指数,编码消耗率CCR

技术管理:1-3-9团队,L型代码结构,松结对编程,代码审查,TDD,技术团队的招聘与试用

配套工具:CHM代码健康管理工具(可智能识别代码中设计模式漏用、重构等问题。


应用场景

重点项目:重点项目建立代码度量体系,保证项目成功。

崇拜项目:重构前,建立量化目标;重构中,实时监控防止重蹈覆辙。

体系建设:对中大型企业(100+程序员)的大量团队建立代码度量体系,对代码质量进行横向对比和纵向跟踪。

企业文化:配合“代码大赛”等活动促进工程师文化的建立,并通过代码度量体系来保证其传承。

员工招聘:跟踪使用期内新员工的代码质量,为去留决策提供依据。

软件外包:评价和跟踪供应商人员的编程水平与代码质量。


课程受众

编程人员全员参与(包括初级人员)

技术经理,开发骨干,资质高的新员工

重点产品、新产品、重构团队的全体开发人员


课程特色

本课程使用讲师开发了一款CHI代码健康指数(原CCI代码混沌指数)扫描工具来配合教学。

此工具已在多家民品及军工企业实战使用,不仅扫描代码漏洞,还可扫描代码中潜在的违反面向对象、设计模式(尤其是开闭原则)地方,并根据三种权重规则进行评分 注:业界的sonar等工具一般只扫描变量、语法级别的问题。

课前,可根据评分为课程提前准备练习素材

课上,可直观观察修改前后的评分变化;或反之,理解评分差异所代表的软件不同实现

课后,可通过工具保证培训内容落地

CHI代码健康指数工具(及其前身)已在中国航空信息、杭州恒生电子、四川信通网易、广州ASL等IT企业,及某些军工企业的总计40多个团队中使用。

最早成型于1994年的设计模式随着新的序列化、反射等技术的出现,已经不再完全适合当前语言的开发,课程中使用了全新的分类法,并增、删、重命名了部分模式。


课程思路

课程分为三个模块:

1.微观编程素养

a.对标图书《代码简洁之道》

b.面向典型敏捷团队(5~10人),以肉眼可见的形式改善代码

c.主要内容包括

i.极简编码规范:包含6~10条最核心的规范,简洁但真正可以落地

ii.代码审查及其组织结构

2.编程技能(设计模式+重构)

a.对标图书《设计模式》《重构》

b.面向团队中的核心人员,他们未来承担着控制代码质量的核心任务

c.主要内容包括

i.常用设计模式实例,使用设计模式的心法

ii.重构时机、决策、与TDD的配合、防止重蹈覆辙等

iii.重构的量化管理

3.宏观编码质量管理

a.讲师独创内容

b.面向大团队(大于100人),长周期(年度级),大型软件(单个软件10万行以上,无上限当前最大记录157万行)的实时、全面质量监控

c.主要内容包括

i.利用Chi检测和修改单个文件中的架构问题

1.核心是设计模式中实现开闭、解耦、消重原则的几个保健类模式

ii.利用Chi检测软件整体的可扩展性问题,以8020原则定位问题模块

iii.利用Chi横向对比产品、团队、平台带来的差异


课程大纲

以下内容按时间顺序描述了训练营的整体脉络。除整体脉络外,各个阶段还会穿插相应知识的讲授。

以下描述仅针对其中一个团队,其他团队也各自选定自己的产品代码,并按顺序执行实践。

注意:由于是直接贴合现场所提供代码的实际情况开展课程,所以以下内容的顺序可能会因为在实际代码中的顺序、严重程度而有变化,但最终都将被覆盖。

开篇:编码终极奥义

编码即信息

等量原则:编码的与描述其需求的自然语言的信息量大致相同

自然原则:编码的内容、顺序与其自然语言需求的描述大致相同

最简原则:任何信息本体只存在一处,其他均为镜像

“终极奥义”看似很虚,但后面的所有内容均是这三条原则的产物

中级技术篇

初步审核代码环节(约1小时)

直接拿出客户准备的代码,逐行审核并指出存在的问题

具体问题在下面的章节中

在发现问题之处,讲解问题的现象、问题的危害以及发生危害的场景、造成问题的原因、可能的解决策略以及最佳策略(1最佳策略=1编程规范)

此阶段仅聚焦微观编码问题的初中级,高级问题会留在后面讲

微观编码

初级篇

此阶段注重语句级别的编程技能,基本上不需要面向对象基础

讲师现场对某个团队的代表性产品进行代码审查重点包括:

变量命名

函数命名

全局变量处理

消除常数

冗余语句的处理

FFT结构(false-false-true)

foreach循环

var/auto关键字

练习:所有团队现场对剩余代码进行重构,讲师点评

中级篇

此阶段注重函数级别的编程技能,需要函数封装、模板(泛型)等知识

讲师现场对某个团队的代码进行走读,指出以下问题:

代码克隆

如何消除结构相同、类型不同的if-else或case

模板

Map

三元表达式

练习:所有团队现场对剩余代码进行重构,讲师点评


设计模式

以下学习内容实际使用了辅助教学工具“CHI代码健康指数”,但未防止内容交叉,相关内容放在最后

设计模式原理

设计模式的6大原则

设计模式新分类法(按用途而非实现分类)

保健类设计模式

开闭模式,解耦模式,消重

优化类设计模式

运行时绑定模式,友好的陌生人模式,性能模式

开闭型设计模式(重点,持续约4~5小时,与提升软件可维护性关系最大)

描述:功能开放,代码封闭(代码只加不修)

模式

模板模式

策略模式

装饰器模式

工厂模式

抽象工厂模式

此类模式的漏用检测

实战练习:从代码中识别漏用之处并使用相关模式实现(3~4个)

解耦型设计模式(重点,持续约3~4小时)

描述:易变模块分离,独立修改(多个相关改变聚在一起)

模式

工具模式(原建造者模式)

观察者模式

适配器模式

桥模式

此类模式的漏用检测

实战练习:从代码中识别漏用之处并使用相关模式实现(2~3个)

消重型设计模式(重点,持续约2~3小时)

描述:信息只有一处,其他皆为镜像(单个改变只改一次)

模式

降维模式(原状态模式)

分型模式(原组合模式/局部整体模式)

泛型模式(新增)

反射模式(新增)

常量模式(新增)

此类模式的漏用检测

实战练习:从代码中识别漏用之处并使用相关模式实现(2~3个)

运行时绑定设计模式(重点,持续约1~2小时)

描述:动态适应,灵活多变(代码不写死)

模式

命令模式

责任链模式

句柄模式(新增)

实战练习:从代码中识别漏用之处并使用相关模式实现(1~2个)

陌生人模式(持续约1~2小时)

描述:友好而有警惕(不用学,玩不坏)

模式

外观模式

代理模式

实战练习:从代码中识别漏用之处并使用相关模式实现(1~2个)

性能优化模式(持续约1小时)

描述:牺牲其他,获得性能

模式

单例模式

原型模式

享元模式

实战练习:从代码中识别漏用之处并使用相关模式实现(1~2个)


CHI代码健康指数进阶课程

评分原理

CHI有4个评分项:超长类占比(>250逻辑行),超长方法占比(>30回车行),不良分支密度((else+case+default)/逻辑行),不良常数密度(数字或字符常量/逻辑行)。

CHI与测试缺陷密度有-0.78~-0.84的负相关系数,与生产率有0.52~0.75的正相关系数,对提升生产率和质量具有显著意义。

据对30多个程序员代码样本的深入研究(约500个文件),CHI工具与人类高手的主观评分几乎完全相同(在修正尚未引入的灰色常数和代码克隆后,两者相关系数高达0.91),这意味着使用工具代替人可以得到高度近似评分结果。

CHI代码健康指数可由工具自动扫描获得,不受人数、代码数量的限制(约1万回车行/秒),几乎可以完成对任意规模代码的每日度量,可用于对组织级、大规模、长周期代码的整体度量与控制。

CHI实战

使用工具对现场代码进行扫描

扫描结果判读


高级技术篇(基于CHI结果)

面向对象回顾

此阶段注重封装、继承、多态等传统面向对象的知识,回归面向对象本体

初级概念讲解

代码克隆

圈复杂度与圈复杂密度

讲师现场对某个团队的代码进行走读,修改代码以降低CCI数值(越低越好)

消除超长类

消除超长方法

消除结构大为不同的大段if-else或case

基类,虚函数

多态与虚函数

接口与多继承

基类vs接口:扩展与实现

消除常数

封闭与非封闭取之空间的常数

所有团队现场对剩余代码进行重构,讲师点评

动态设计模式(演示内容)

独创内容:传统的设计模式仅关注静态代码的形态,而“动态设计模式”关注编程本身的心法和过程,包括听到需求后的心理分析、对未来变更点的预测、宏观与微观编程的次序、调试与测试的准自动化。掌握“设计模式心法”后,使用设计模式将逐渐成为编程的自然第一感,而不再是冥思苦想的结果。
注:此部分内容无法在课程时长内习得,需要学员在未来2~5年内持续训练。

讲师现场对某个团队的一部分代码进行重写,并展示以下编程心法:

从外向内分解问题出

先编写调用者,后编写底层函数(准TDD开发)

每5~10分钟进行一次编译和测试(TDDB,Test Driven De-Bug测试驱动的调试)

随时将问题控制在最近2~5行代码内

内建的质量

随时避免各种不良编程问题,而不是编写后再进行重构

一次性写成“上帝代码”

“上帝代码”是在语言框架内,多一行则多,少一行则少,无意中删除或添加任何一个字符将会出现编译错误的代码

首次编写即达到CHI健康指数满分(100)

在第一次编写代码时,按照特有的心法和顺序,从来不需要if-else if/switch case等语法,也不会想到它们

其他高级话题

性能优化

性能优化要义

性能优化步骤

单元测试覆盖率的提升

代码行覆盖率

分支覆盖率

通过减少分支来提升分支覆盖率

超越语言的语法边界

C,C++,C#,Java,Python语法进化对比

通过5种语言实现同一个功能的对比,观察人类语言向编码终极奥义的逼近过程编程团队管理


高级管理篇

重构及其管理

重构时机

重构技术

重构技术回顾(已在之前设计模式、CCI等处讲解)

重构目标与计划

基于待重构代码,对工期、工作量、代码行数、测试缺陷率进行估算

重构控制

通过迭代开发确保重构目标与计划达成

通过度量CHI代码健康指数和CCR(编码消耗率)防止重蹈覆辙

CCR编码消耗率是每功能点(Function Point)需要的代码行数,其数值大致=逻辑代码行数/(api数*5.4),业界Java中值为27。由于多数被重构的旧产品都有100~300以上的CCR数值,通过每个迭代持续度量和控制重构代码的CCR数值,可以防止重蹈覆辙。

团队管理

编程团队的招聘流程

笔试,面试,试用

代码审查的频率与形式

1-3-9师徒团队(学习型团队)

团队职责与层级

团队工作方式

团队的提拔机制

松结对编程

高手的时间管理策略

L型代码结构

可复用库的开发策略

高手在代码结构中的位置


附录

代码质量的个体水平层级表(逐级上升)

1.能完成可用代码

2.能自己完成高质量代码(代码中没有已知缺陷)

3.经过反复,能最终完成精美代码(本次课程的学员学成后目标)

4.能将他人的代码,修改为精美代码(本次课程的学员学成后目标)

5.首次编码,即可完成精美代码(课堂中仅由讲师演示)

6.多次编写相同功能,得到结果接近的精美代码(发现了最佳实现方案而非随兴所至)

7.多次编写相同功能,编程的次序、过程相近(发现了达到最佳实现方案的最短路径并固化)

本课程的讲师要求在5级水平以上,并能在课堂中以学员的随机(可理解)需求进行演示。学员甚至可在过程中引入“变更”,观察高质量代码对变更的响应过程。


代码质量的管理水平层级表(逐级上升)

1.建立了编码规范

2.建立了代码审查机制

3.高手定期对审查中发现的问题组织专项学习和改进

4.使用高低搭配的团队(师徒团队/学习型团队)开发产品,以应对高低不同的质量需求

5.对代码质量建立了量化度量体系

6.对代码的量化管理是日常的(本次课程的学员学成后目标)

7.根据度量数据分析找到改进点,并加以改进(课堂中仅由讲师演示)

8.基于度量数据的改进是可预测的,且最终达成效果与预测相符

本课程的讲师要求在7级水平以上,并能展示实际度量数据的分析结果。


返回上一级