团队经理
互联网
面向对象
推荐课程
average > 0 ? $model->average . '分' : '10.0分' ?>

代码简洁+CCI混沌指数+设计模式 高级编程训练营

Y.Chen

msup 敏捷教练

27年研发、管理及咨询经验,擅长在实际环境中灵活应用各种研发方法论
具有丰富的工程技术与项目管理实践经验,从其程序员、项目经理、CMMI/FPA功能点估算/敏捷咨询师、事业部总监、副总经理等各种技术与管理岗位获得的一手经验,令其可以站在企业管理者的高度,以更广的视角来理解敏捷开发,并能配合和推动非研发部门协作推广敏捷。

➢27年软件开发行业经验
➢ 15年编程、测试开发经验
➢ 4年中高层管理经验
➢ 13年以上项目管理经验
➢ 15年敏捷项目管理、培训与咨询经验
➢ 200+场次培训与咨询

曾为金山软件(西山居),盛大,腾讯,边锋,搜狐,迅雷等10多家互联网软件公司提供敏捷培训与咨询。

27年研发、管理及咨询经验,擅长在实际环境中灵活应用各种研发方法论 具有丰富的工程技术与项目管理实践经验,从其程序员、项目经理、CMMI/FPA功能点估算/敏捷咨询师、事业部总监、副总经理等各种技术与管理岗位获得的一手经验,令其可以站在企业管理者的高度,以更广的视角来理解敏捷开发,并能配合和推动非研发部门协作推广敏捷。 ➢27年软件开发行业经验 ➢ 15年编程、测试开发经验 ➢ 4年中高层管理经验 ➢ 13年以上项目管理经验 ➢ 15年敏捷项目管理、培训与咨询经验 ➢ 200+场次培训与咨询 曾为金山软件(西山居),盛大,腾讯,边锋,搜狐,迅雷等10多家互联网软件公司提供敏捷培训与咨询。

课程费用

6800.00 /人

课程时长

2

成为教练

课程简介

一个人不可能在地面上学会游泳!本课程采用完全现场实战的方式,帮助团队快速体验和学会高级面向对象技术,编写出高质量、易维护的代码。
学员分为若干小组(最好是实际工作组),每个小组都有2~3个核心参训人员人
核心参训人员提供总计3000回车行实际工作代码
对其中1000行代码,讲师会在课上现场讲解并改写(改写量一般在300~500行左右)
改写完成后达到极高的标准,包括:
零常数,零for(int i),零else/case(代码中没有任何else和case关键字)、每个函数均小于30回车行
编码有效率在13~15LOC/FP左右(世界纪录级别)
另外每组准备2000行较差代码作为课堂练习
注意:本课程不涉及性能优化、安全性、多线程等特殊技术。

目标收益

培训对象

技术经理,开发骨干,资质高的新员工,重点产品、新产品、重构团队的全体开发人员

课程大纲

微观编码 初级篇
此阶段注重语句级别的编程技能,基本上不需要面向对象基础
讲师现场对某个团队的代表性产品进行代码审查重点包括:
变量命名
函数命名
全局变量处理
消除常数
冗余语句的处理
FFT结构(false-false-true)
foreach循环
var/auto关键字
所有团队现场对剩余代码进行重构,讲师点评
中级篇 此阶段注重函数级别的编程技能,需要函数封装、模板(泛型)等知识
讲师现场对某个团队的代码进行走读,指出以下问题:
代码克隆
如何消除结构相同、类型不同的if-else或case
模板
Map
三元表达式
所有团队现场对剩余代码进行重构,讲师点评
宏观编码 CCI代码混沌指数
CCI是4个数据的平均值:超长类占比(>250逻辑行),超长方法占比(>30回车行),不良分支密度((else+case+default)/逻辑行),不良常数密度(数字或字符常量/逻辑行)。
CCI与测试缺陷密度有0.78~0.80的相关系数,与生产率有-0.52~-0.75的相关系数,对提升生产率和质量具有显著意义。
据对30多个代码样本的研究(约500个文件),CCI工具与人类高手的主观评价几乎完全相同。
CCI可由工具自动扫描获得,不受人数、代码数量的限制(约10万行/秒),可用于对组织级、大规模、长周期代码的整体度量与控制。
CCI实战
使用CCI对现场代码进行扫描
扫描结果判读
高级篇(基于CCI结果)
此阶段注重封装、继承、多态等传统面向对象的知识
初级概念讲解
代码克隆
圈复杂度与圈复杂密度
讲师现场对某个团队的代码进行走读,修改代码以降低CCI数值(越低越好)
消除超长类
消除超长方法
消除结构大为不同的大段if-else或case
基类,虚函数
多态与虚函数
接口与多继承
基类vs接口:扩展与实现
消除常数
封闭与非封闭取之空间的常数
所有团队现场对剩余代码进行重构,讲师点评
质量篇
此阶段注重防范开发中、维护中可能产生的编码质量问题
注:实际上此章节所述内容,均会在上述课程中遇到问题时随时提到,此处仅做总结
讲师现场对某个团队的代码进行走读,指出以下问题:
易读性问题
看似技术含量很高的“半截子科技”代码
可维护性问题
成对出现的编码
常数封装位置
多分支结构的处理
If-else与case的8种消除方法比较
常见缺陷预防
空指针
数组越界
所有团队现场对剩余代码进行重构,讲师点评
设计模式 设计模式解读
由于设计模式种类繁多,此内容不固定,而是以根据两件事情进行选择性演示
代码中存在的问题类型
对代码重构可能用到的模式
预计会演示23种中的约10种典型的设计模式
心法篇
此阶段注重实际开发动态过程中,人们由于编码次序的差异而造成的思维差异,进而导致的编码质量差异;解决了明明懂设计模式但却想不到要用的问题
讲师现场对某个团队的一部分代码进行重写,并展示以下编程心法:
从外向内分解问题出
先编写调用者,后编写底层函数(准TDD开发)
每5~10分钟进行一次编译和测试(TDDB,Test Driven De-Bug测试驱动的调试)
随时将问题控制在最近2~5行代码内
内建的质量
随时避免各种不良编程问题,而不是编写后再进行重构
一次性写成“上帝代码”
“上帝代码”是在语言框架内,多一行则多,少一行则少,无意中删除或添加任何一个字符将会出现编译错误的代码
首次编写即不包括“陈旧语法”
在第一次编写代码时,按照特有的心法和顺序,从来不需要if-else if/switch case等语法,也不会想到它们
重构
重构时机
重构控制
通过度量CCI和CCR防止重蹈覆辙
CCR编码消耗率是每功能点(Function Point)需要的代码行数,其数值大致=逻辑代码行数/(api数*5.4),业界Java中值为27。由于多数被重构的旧产品都有100~300以上的CCR数值,通过每个迭代持续度量和控制重构代码的CCR数值,可以防止重蹈覆辙。
高级话题
单元测试覆盖率的提升
代码行覆盖率
分支覆盖率
通过减少分支来提升分支覆盖率
超越语言的语法边界
C,C++,C#,Java,Python语法进化对比
通过5种语言实现同一个功能的对比,观察人类语言向编码终极奥义的逼近过程
微观编码
初级篇
此阶段注重语句级别的编程技能,基本上不需要面向对象基础
讲师现场对某个团队的代表性产品进行代码审查重点包括:
变量命名
函数命名
全局变量处理
消除常数
冗余语句的处理
FFT结构(false-false-true)
foreach循环
var/auto关键字
所有团队现场对剩余代码进行重构,讲师点评
中级篇
此阶段注重函数级别的编程技能,需要函数封装、模板(泛型)等知识
讲师现场对某个团队的代码进行走读,指出以下问题:
代码克隆
如何消除结构相同、类型不同的if-else或case
模板
Map
三元表达式
所有团队现场对剩余代码进行重构,讲师点评
宏观编码
CCI代码混沌指数
CCI是4个数据的平均值:超长类占比(>250逻辑行),超长方法占比(>30回车行),不良分支密度((else+case+default)/逻辑行),不良常数密度(数字或字符常量/逻辑行)。
CCI与测试缺陷密度有0.78~0.80的相关系数,与生产率有-0.52~-0.75的相关系数,对提升生产率和质量具有显著意义。
据对30多个代码样本的研究(约500个文件),CCI工具与人类高手的主观评价几乎完全相同。
CCI可由工具自动扫描获得,不受人数、代码数量的限制(约10万行/秒),可用于对组织级、大规模、长周期代码的整体度量与控制。
CCI实战
使用CCI对现场代码进行扫描
扫描结果判读
高级篇(基于CCI结果)
此阶段注重封装、继承、多态等传统面向对象的知识
初级概念讲解
代码克隆
圈复杂度与圈复杂密度
讲师现场对某个团队的代码进行走读,修改代码以降低CCI数值(越低越好)
消除超长类
消除超长方法
消除结构大为不同的大段if-else或case
基类,虚函数
多态与虚函数
接口与多继承
基类vs接口:扩展与实现
消除常数
封闭与非封闭取之空间的常数
所有团队现场对剩余代码进行重构,讲师点评
质量篇
此阶段注重防范开发中、维护中可能产生的编码质量问题
注:实际上此章节所述内容,均会在上述课程中遇到问题时随时提到,此处仅做总结
讲师现场对某个团队的代码进行走读,指出以下问题:
易读性问题
看似技术含量很高的“半截子科技”代码
可维护性问题
成对出现的编码
常数封装位置
多分支结构的处理
If-else与case的8种消除方法比较
常见缺陷预防
空指针
数组越界
所有团队现场对剩余代码进行重构,讲师点评
设计模式
设计模式解读
由于设计模式种类繁多,此内容不固定,而是以根据两件事情进行选择性演示
代码中存在的问题类型
对代码重构可能用到的模式
预计会演示23种中的约10种典型的设计模式
心法篇
此阶段注重实际开发动态过程中,人们由于编码次序的差异而造成的思维差异,进而导致的编码质量差异;解决了明明懂设计模式但却想不到要用的问题
讲师现场对某个团队的一部分代码进行重写,并展示以下编程心法:
从外向内分解问题出
先编写调用者,后编写底层函数(准TDD开发)
每5~10分钟进行一次编译和测试(TDDB,Test Driven De-Bug测试驱动的调试)
随时将问题控制在最近2~5行代码内
内建的质量
随时避免各种不良编程问题,而不是编写后再进行重构
一次性写成“上帝代码”
“上帝代码”是在语言框架内,多一行则多,少一行则少,无意中删除或添加任何一个字符将会出现编译错误的代码
首次编写即不包括“陈旧语法”
在第一次编写代码时,按照特有的心法和顺序,从来不需要if-else if/switch case等语法,也不会想到它们
重构
重构时机
重构控制
通过度量CCI和CCR防止重蹈覆辙
CCR编码消耗率是每功能点(Function Point)需要的代码行数,其数值大致=逻辑代码行数/(api数*5.4),业界Java中值为27。由于多数被重构的旧产品都有100~300以上的CCR数值,通过每个迭代持续度量和控制重构代码的CCR数值,可以防止重蹈覆辙。
高级话题
单元测试覆盖率的提升
代码行覆盖率
分支覆盖率
通过减少分支来提升分支覆盖率
超越语言的语法边界
C,C++,C#,Java,Python语法进化对比
通过5种语言实现同一个功能的对比,观察人类语言向编码终极奥义的逼近过程

活动详情

提交需求