4006-998-758
3000+课程任你选择
代码整洁之道-软件高质量代码体系最佳实践
研发学院 代码整洁
刘捷

前IBM中国研发中心,BEA中国研发中心,oracle中国研发中心,阿里云,多家互联网研发中心咨询顾问。曾任软件开发工程师,高级技术专家,首席架构师等。主要负责客户项目的架构设计和项目开发,架构重构,技术支持,AI2.0时代软件研发,AI赋能研发转型,基于chatGPT大模型的开发咨询。保证项目的成功实施。参加过全省、全国多个大型的计算机应用项目。擅长AI2.0时代研发,软件架构设计与评审、高质量代码体系、单元测试、设计模式、重构(Refactor)、演进式设计(Evolutionary Design)以及降低代码的复杂度(Cyclomatic Complexity)。通过重构、重写,将代码量大幅度缩减,并且提高可读性、可扩展性、可变更性,从而大幅度降低开发成本。他热爱学习、思考与分享,曾翻译过多本技术书籍,在网站上发表过各种文章,并曾多次在技术会议和社区活动上发表演讲。最近几年带队完成了数十个AI项目,内容不仅包括深度学习、机器学习、数据挖掘等具体技术要点,也包括AI的整体发展、现状、应用、商业价值、未来方向等,涵盖内容非常丰富。完成多个深度学习实践项目,广泛应用于医疗、交通、农业、气象、银行、电信等多个领域。

查看老师详情
课程内容


课程大纲


第一篇: 编程是一种态度-------价值观

主题

培训内容

备注

第1单元    代码就是债务

内容一:代码是债务

1. 代码的认识---代码就是债务

2. 代码是债务,越少越好

3. 你拥有的代码越多,添加新内容所要付出的成本就越高

4. 通过案例分析让代码库尽可能小的方法:

5. 通过国际研发中心电信计费系统演示代码是债务的思想,10多年国外研发团队设计与研发第一版本,目前几百人在维护

通过项目演示通过重构如何减少了一半的代码,维护的人员的减少

项目的失败可能归咎于各种各样的原因。一些项目因糟糕的需求而失败,另一些则由于钱和时间超支了,还有少数单纯是因为糟糕的管理所致。如果我们探究其根本原因,是否会发现所有项目失败的罪魁祸首是糟糕的代码呢?

 

内容二 软件界要以新视角看待代码

1. 传统的软件工程对代码的错误认识

2. 代码的两面性,代码的静态结构和运行时行为

3. 客户和管理者往往仅仅关注代码的运行时的行为

4. 温伯格认为的主管必须关注代码

5. 软件设计与代码的关系—真正好的设计是在编码阶段一步一步而形成的,通过案例分析,设计如何根据代码进行演化

6. 编程真的是简单的劳动吗?

7. 通过多家项目案例进行分析,传统思想对代码的种种误解,我们提出了从3种新的角度来观察代码


第2单元编程价值观

内容一:编程价值观

1. 编程的方法学

2. 什么是好的代码,我们却认为“Good code is not bad code !”

3. 编程价值观---沟通,简单,灵活

4. 价值观决定行为

5. 优秀代码的评价标准, 什么是高质量编码? 特征是什么?

6. 软件代码的可读性

7. 代码的可扩展性

8. 糟糕代码的特征

9. 劣质代码的代价

10. 大师评价整洁代码的标准

11. 通过大量项目案例分析,什么是好的代码,对好代码新的认识


第二篇: 编程是一种技艺-------实践篇

第3单元 高质量函数

内容一:高质量函数/过程

1. 为什么需要函数

2. 函数复杂度度量

3. 函数圈复杂度以及度量

4. 函数抽象层次-单一抽象层次原则SLAP(Single Level of Abstrction   Principle)

5. 函数实现模式之—组合函数(Composed Method)

6. 万恶之源—函数过长

7. 函数的单一职责

8. 函数第一原则:是要短小,函数第二原则:是还要短小,函数第三原则:是必须短小

9. 函数重构之道—抽取方法(Extract Method)和抽取对象函数

10. 函数命名—怎样取好的函数名

11. 通过大量项目代码分析,函数的遇到的各种问题,如何编程高质量函数

 

内容二:函数易理解与沟通

1. 函数主体流

2. 函数的异常处理

3. 函数主题流程简化方法1-助手方法

4. 助手方法的应用场景

5. 助手方法的效果

6. 函数主题流程简化方法2-函数对象(MethodObject)

7. 通过真实项目代码进行分析,如果提高代码的可读性

 

内容三:函数灵活/易可扩展---函数接缝

1. 历史遗留代码维护问题

2. 某电信研发中心的维护问题—开发维护的效率问题。

3. 增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本。

4. 代码的可维护成本分析—通过大量案例分析

a) 确定需要修改哪些部分有多难

b) 必要的改动有多少

c) 实现改动对系统其他部分的影响有多大

5. 如何实现代码的易扩展—函数接缝

6. 接缝(seam),指程序中的一些特殊的点,在这些点上你无需做任何修改就可以达到改动程序行为的目的

7. 通过案例分析,如何实现函数的灵活/易扩展。

 

内容四:函数代码重复

1. 重复的危害

2. 强加的重复/无意的重复/无耐心的重复/开发者之间的重复

3. 不要重复自己DRY—Don't Repeat Yourself Principle

4. Make It   Easy to Reuse(让复用变得容易)

5. 魔法数(Magic   number)

6. 重复性代码(Duplicated   Code)

7. 接口不同的相似类(Alternative Classes with Different Interfaces)

8. 系统分离关注点

9. 系统架构的基础通用服务组件

10. 通过某项目代码是介绍重复编码问题

11. 演示研发过程之中的常见重复问题,以及如何解决

 

内容五:条件表达式

1. 复杂表达式的简化

2. IF/ELSE语句应该如何编写

3. Switch/Case语句应该如何编写

4. 复杂条件表示式的危害

5. 过分深层的缩进,或者“嵌套”,已经困扰了计算机界达25年之久,并且至今仍然是产生混乱代码的罪魁祸首之一

6. 复杂表达式重构之道—引入解释变量/分解条件/抽取方法计算条件

7. 表驱动法-多级嵌套IF语句的必然之道

8. 表驱动法使用总则

9. 某保险项目表驱动法应用案例分析

10. 通过大量项目代码演示条件表达式编码问题

11. 复杂表达式的注意事项,如何解决

 

内容六:利用多态解决复杂表达式

1. 面向对象多态技术的新认识

2. 减少使用if语句,重构到多态

3. 以State/Strategy取代类型代码

4. 引入Null   Object

5. 以Command替换条件调度程序

6. 转移聚集操作到Visitor

7. 转移装饰功能到Decorator

8. 通过大量项目代码演示多态可以解决的编程问题

 

内容七:函数的错误处理和异常管理

1. 函数的错误处理

2. 使用异常而非返回码

3. 依赖磁铁(Dependeny   magent)

4. 主体流-明确表达控制流的主体

5. 异常流-尽可能清晰地表达异常控制流,而不干扰对主体流的表达

6. 标准的异常处理9种方法

7. 通过大量真实案例的代码进行分析函数的错误处理和异常处理


第4单元--高质量函数

内容一:函数10个一

1. 每个变量只用于单一用途

2. 每一个行代码只表达一件事

3. 一个循环只做一件事

4. 单一抽象层次原则

5. 代码组织得一次只做一件事情

6. 函数体内只关注一种变化的原因(动机)

7. 函数应该遵守单一职责

8. 函数圈复杂应该小于一十

9. 函数第一原则是必须要短小

10. 编写函数时必须一心一意,专注,怀有谦卑的心态

11. 通过大量真实案例的代码进行分析函数的错误处理和异常处理 


第5单元    高质量面向对象和面向函数编程

内容一:高质量类和面向对象设计编码

1. 类的基础:抽象数据类

2. 模块化的基础

3. 模块设计的原则

4. 面向对象思想

5. 类的设计原则

6. 案例—通过电信项目介绍数据的抽象

7. 通过大量项目代码演示数据抽象类型解决的问题

 

内容二:函数式编程

1. 什么是函数式编程

2. 什么是函数

3. 现代C 中的函数式编程

4. 基于模板的函数式编程

5. 绑定包装和函数包装

6. Lambda表达式

7. 通用Lambda表达式

8. Lambda模板

9. 高级函数

10. 管道与范围适配器

11. 整洁的函数式编程代码

12. 通过案例分析


第三篇: AI辅助编程

第6单元 AI时代的辅助编程

 

第一部分: Vibe coding氛围编程最佳实践

1. 什么是Vibe编程?

2. 氛围编程基础理念

3. 资深程序员的常见痛点诊断

4. Vibe编程的核心原则

5. 革命性概念的诞生:从“写代码”到“说代码”

6. Vibe编程的技术基础与工作原理

7. Vibe编程与传统编程的核心差异

8. 现在,是学习Vibe编程的最佳时机

9. 编程效率翻倍:AI助手选择攻略

10. 4步创作法+5大技巧,实现从想法到产品

11. 多家研发中心案例分析

 

第二部分: AI辅助编程工具实战案例

1. 项目概述

2. 需求分析和需求获取,需求管理

3. AI辅助编程工具 主要使用场景

4. 实践 AI辅助编程工具

5. 上手AI辅助编程,编码与项目实战探索

6. AI辅助编程工具 编程进阶

7. AI辅助编程工具 prompt 原理和实战

8. AI辅助编程工具 编程技巧

9. 全面了解AI辅助编程工具的工作原理,建立AI辅助编程知识体系

10. 实际操作用AI辅助编程工具做开发,演练典型研发工作场景

11. 使用AI辅助编程工具辅助进行TDD和单元测试

12. 使用AI辅助编程工具辅助进行系统测试

13. 某公司应用案例分析


第四篇: 复杂遗留系统的维护和重构

第7单元    修改遗留系统代码

内容一:修改遗留项目代码

1. 必须修改遗留的代码起因

2. 遗留代码修改危险事项

3. 如何对依赖代码做测试

4. 依赖代码的感知与分离

5. 依赖代码修改的接缝技术

6. 修改依赖代码的工具

7. 降低风险的措施

8. 接依赖技术

9. 通过多个大型项目案例分析,如何修改遗留代码,分析如何解耦

 

内容二:拒绝退化-如何修改遗留系统,而不破坏现有系统结构

1. 拒绝退化—“首先不要伤害”

2. Sprout Method

3. Sprout Class

4. Wrap Method

5. Wrap Method

6. 通过案例分析,如何修改遗留代码,而不破坏现有系统代码结构


第8单元    重构系统代码

内容一:代码重构

1. 重构必然性

2. 破窗效应与技术债务

3. 实际重构遇到的4大问题

4. 介绍常见的重构技术

5. 重构到模式的目录

6. 通过多个案例分析,重构面临的问题和解决之道

 

内容二:案例—通过实际项目演示重构

1. 介绍项目需求情况,进行设计

2. 阅读代码指出代码坏症状

3. 通过重构逐步改善代码质量

4. 通过该案例演示重构的过程,我们遇到的难处,如何解决?

 

内容三:案例---重构到设计模式

1. 通过项目分析重构到模式的手段

2. 构造Template   Method

3. 以Composite取代一/多之分

4. 引入Null   Object

5. 用Adapter统一接口

6. 用Fatory   Method引入多态创建

通过案例介绍如何重构原始设计方案,演示如何通过重构导入设计模式


第四篇: 编程是一种习惯-------管理篇

第9单元 代码质量度量规则

内容一:软件代码可维护性4个分类标准

1. 代码内部质量的核心标准

2. 可分析性(ANALYZABILITY:找到错误在代码中的位置或者软件中必须修改的部分容易程度

3. 可修改性(CHANGEABILITY):即要完成一个修改需要的工作量

4. 稳定性(STABILITY):即修改之后出问题的程度

5. 可测试性(TESTABILITY):即能够验证修改的结果

 

内容二:软件代码质量

1. ANALYZABILITY   = VG + STMT + AVGS + COMF

2. CHANGEABILITY   = PARA + LVAR + VOCF + GOTO

3. STABILITY =   NBCALLING + RETU + DRCT_CALLS + PARA

4. TESTABILITY = DRCT_CALLS + LEVL + PATH + PARA


第10单元    代码质量体系最佳实践

内容一:代码质量管理4个现代化

1. 代码管理的4个现代化

a) 质量量化(如何设置质量指标)

b) 工具化(如何寻找合适的工具

c) 自动化(把流程自动化,忘记流程)

d) 持续优化(反思与优化)

2. 多家电信研发中心,如何实现4个代码现代化

 

内容二:代码静态分析

1. 程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

2. 程序静态分析(Program Static Analysis)可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量

3. 静态分析的特点

4. 常用静态分析技术

5. 静态分析实现方式

 

内容三:代码评审

代码结构分析、代码质量度量、代码覆盖率分析方法,代码审查的形式、技术、技巧和流程,在代码评审环节有效发现代码隐藏问题,代码评审具体方法和审核的具体内容,审核效果分析,代码评审工作的组织结构设计,组织内人员工作安排;

1. 代码评审前期准备

2. 代码评审的代码量

3. 代码评审的检查表

4. 代码评审的总结与学习

 

内容四:代码质量管理体系

1. 结合国内多家研发中心的代码管理经验分享

2. 代码质量体系的建立



返回上一级