代码质量与编程技艺

1 编程是一种态度——价值观

1.1 代码就是债务

1.代码是债务

1.代码的认识——代码就是债务
2.代码就是债务,越少越好
3.你拥有的代码越多,添加新内容所要付出的成本就越高
4.通过案例分析让代码库尽可能小的方法

2.软件界要以新视角看待代码

1.传统的软件工程队代码的错误认识
2.代码的两面性,代码的静态结构和运行时行为
3.客户和管理者往往仅仅关注代码的运行时的行为
4.温伯格认为的主管必须关注代码
5.软件设计与代码的关系——真正好的设计是在编码阶段一步一步而形成的,通过案例分析,设计如何根据代码进行演化
6.编程真的是简单的劳动吗?
7.通过多家项目案例进行分析,传统思想对代码的种种误解,我们提出了从3种新的角度来观察代码
    1)从管理者的角度,我们仅仅观察代码的运行时行为,导致代码的静态结构混乱的根源。这就是代码的冰山原理,大量垃圾代码隐藏在冰川之下。
    2)设计师的角度认为只要有好的设计,软件质量就可以保证。其实我们认为代码是真正唯一可以精确描述的设计文档
    3)程序员的视角,编程真的很难,通过某一个项目案例分析,20多人一周的工作量就为几行代码问题

1.2 编程价值观

1.编程的方法学
2.什么是好的代码,我们却认为“Good code is not bad code”
3.编程价值观——沟通、简单、灵活
4.价值观决定行为
5.优秀代码的评价标准,什么是高质量编码?特征是什么?
6.软件代码的可读性
7.代码的可扩展性
8.糟糕代码的特征
9.劣质代码的代价
10.大师评价整洁代码的标准
11.通过大量项目案例分析,什么是好的代码,对好代码新的认识

2 编程是一种技艺——实践篇

2.1 高质量函数

1.高质量函数/过程

1.为什么需要函数
2.函数复杂度度量
3.函数圈复杂度以及度量
4.函数抽象层次——单一抽象层次原则SLAP(Single Level of Abstraction Principle)
5.函数实现模式之——组合函数(Composed Method)
6.万恶之源——函数过长
7.函数的单一职责
8.函数的第一原则:短小
9.函数重构之道——抽取方法(Extract Method)和抽取对象函数
10.函数命名——怎样取好的函数名
11.通过大量项目代码分析函数的各种问题,如何编写高质量的函数

2.函数易理解与沟通

1.函数主体流
2.函数的异常处理
3.函数主体流程简化方法  1)助手方法
4.助手方法的应用场景
5.助手方法的效果
6.函数主体流程简化方法 2)函数对象(Method Object)
7.通过真实项目代码进行分析,如何提高代码的可读性

3.函数灵活/易可扩展——函数接缝

1.历史遗留代码维护问题
2.某电信研发中心的维护问题——开发维护的效率问题
3.增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本
4.代码的可维护成本分析——通过大量案例分析
  1)确定需要修改哪些部分有多难
  2)必要的改动有多少
  3)实现改动对系统其它部分的影响有多大
5.如何实现代码的易扩展——函数接缝
6.接缝(seam),指程序中的一些特殊的点,在这些点上你无需做任何修改就可以达到改动程序行为的目的
7.通过案例分析,如何实现函数的灵活/易扩展

4.函数参数

1.函数参数过长
2.最理想的参数数量是零,有足够的理由才能使用三个以上的参数
3.函数参数重构之道——引入参数对象(introduce parameter object)
4.函数参数的顺序
5.不要把程序参数当做工作变量/临时变量
6.函数参数模式——collecting parameter
7.函数返回值
8.通过大量项目演示函数参数问题
9.演示函数参数的重构

5.变量

1.“一旦了解在程序设计中如何使用变量,他就掌握了程序设计的精华”——Dijkstra
2.为什么需要变量——变量的引入理由
3.单一变量用途
4.变量与方法
5.变量作用域
6.变量声明与初始化
7.通过案例分析,函数的变量如何处理与控制

6.函数代码重复

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.演示研发过程之中的常见重复问题,以及如何解决

7.条件表达式

1.复杂表达式的简化
2.IF/ELSE语句应该如何编写
3.Switch/Case语句应该如何编写
4.复杂条件表达式的危害
5.过分深层的缩进,或者“嵌套”,已经困扰了计算机界达25年之久,并且至今仍让是产生混乱代码的罪魁祸首之一
6.复杂表达式重构之道——引入解释变量/分解条件/抽取方法计算条件
7.表驱动法——多级嵌套IF语句的必然之道
8.表驱动法使用总则
9.某保险项目表驱动法应用案例
10.通过大量项目代码演示条件表达式编码问题
11.复杂表达式的注意事项,如何解决

8.利用多态解决复杂表达式

1.面向对象多态技术的新认识
2.减少使用if语句,重构到多态
3.以State/Strategy取代类型代码
4.引入Null Object
5.以Command替换条件调度程序
6.转移聚集操作到Visitor
7.转移装饰功能到Decorator
8.通过大量项目代码演示多态可以解决的编程问题

9.函数组织

1.尽管组织直线代码是一个相当简单的任务,代码结构上的不合理会对代码的质量、正确性、可读性和可维护性带来影响
2.把函数代码分成“段落”
3.选择一个有意义的顺序,始终一致地使用它
4.应该把代码组织得一次只做一件事
5.组织直线型代码。嵌套可以,但是不应该交叠
6.系统应该由许多短小的函数而不是少量巨大的大函数组成
7.系统应该由许多短小的类而不是少量巨大的大类组成
8.从一个程序中提取子程序,不会降低整个程序的复杂度,只是把决策点转移到其他地方
9. 但是可以降低你在同一时间必须关注的复杂度水平。重点是要降低你需要在头脑中同时考虑的项目的数量,所以一个子程序是有价值
10.通过大量真实案例的代码进行分析:函数的组织技术

10.函数的错误处理和异常管理

1.函数的错误处理
2.使用异常而非返回码
3.依赖磁铁(Dependency magent)
4.主体流——明确表达控制流的主体
5.异常流——尽可能清晰地表达异常控制流,而不干扰对主体流的表达
6.标准的异常处理9种方法
7.通过大量真实案例,分析函数的错误处理和异常处理

2.2 高质量类

1.高质量类

1.类的基础:抽象数据类
2.需要用到ADT的场景
3.使用ADT的益处
4.基本类型依赖坏味道
5.数据泥团坏味道
6.案例——通过电信项目介绍数据的抽象
7.通过大量项目代码演示数据抽象类型解决的问题

2.面向对象设计——职责分配

1.单一职责原则
2.RDD——职责驱动的面向对象设计方法
3.上帝类,代码之中的大量的上帝类
4.通过案例分析,如何设计高质量的类和进行重构

3.面向对象编程

1.上帝类/过大的类——违反单一职责
2.依恋情节——一个方法似乎过于强调处理其他类的数据,而不是处理自己的数据
3.发散式改变
4.散弹式修改
5.消息链
6.中间人
7.不当的紧密性
8.案例——通过电信项目介绍OOP

2.3 单元测试与代码可测试性

1.单元测试

1.单元测试基本知识
2.单元测试框架提供什么功能
3.好的测试是什么样子的
4.为什么要写单元测试,为什么不写单元测试
5.为什么要写“好”的单元测试
6.通过案例分析单元测试的基本概念,以及如何评价好的单元测试,单元测试的价值

2.编写可测试代码

1.如何编写可信赖的测试
2.如何编写可维护性的测试
3.如何编写可读的测试
4.测试代码的重构
5.通过大量真实的项目案例分析如何编写可测试性代码

3 编程是一种习惯——管理篇

3.1 代码重构

1.重构必然性
2.破窗效应与技术债务
3.实际重构遇到的4大问题
4.介绍常见的重构技术
5.重构到模式的目录
6.通过多个案例分析,重构面临的问题和解决之道

3.2 修改遗留系统代码

1.修改遗留项目代码

1.必须修改遗留的代码起因
2.遗留代码修改危险事项
3.如何对依赖代码做测试
4.依赖代码的感知与分离
5.依赖代码修改的接缝技术
6.修改依赖代码的工具
7.降低风险的措施
8.接依赖技术
9.通过多个大型项目案例分析,如何修改遗留代码,分析如何解耦

2.拒绝退化——如何修改遗留系统,而不破坏现有系统结构

1.拒绝退化——“首先不要伤害”
2.Sprout Method
3.Sprout Class
4.Wrap Method
5.Wrap Class
6.通过案例分析,如何修改遗留代码,而不破坏现有系统代码结构

3.3 代码质量体系的最佳实践

1.代码质量管理4个现代化

1.代码管理的4个现代化
  1)质量量化(如何设置质量指标)
  2)工具话(如何寻找合适的工具)
  3)自动化(把流程自动化,忘记流程)
  4)持续优化(反思与优化)
2.多家电信研发中心,如何实现4个代码现代化

2.代码静态分析工具

1.代码静态分析工具概述
2.以Java语言代码静态分析工具为例介绍,该内容的思想仍然适合其他语言
  1)Sonar集成平台
  2)CheckStyle:用于编码标准
  3)PMD的CPD:帮助发现代码重复
  4)Coverlipse:测量代码覆盖率
  5)JDepend:提供依赖项分析
  6)Metric:有效地查出复杂度
  7)其他语言相关代码静态分析工具
3.通过案例演示工具在项目之中的应用

3.代码评审

代码结构分析、代码质量度量、代码覆盖率分析方法,代码审查的形式、技术、技巧和流程,在代码评审环节有效发现代码隐藏问题,代码评审具体方法和审查的具体内容,审查效果分析,代码评审工作的组织结构设计,组织内人员工作安排:
1.代码评审前期准备
2.代码评审的代码量
3.代码评审的检查表
4.代码评审的总结与学习

4.代码质量管理体系

1.结合国内多家研发中心的代码管理经验分享
2.代码质量体系的建立
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,270评论 25 707
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 6,531评论 3 22
  • 题记:月子快要结束,老公就要出差,并且可能是2-3周,天呐,像我这样的菜鸟顿感压力山大,这绝对又是一段难忘的时期。...
    爱做梦的西瓜阅读 585评论 0 50
  • 中午的课,我提前了一个小时出门,想去看看春景,昨日还狂风大作,冰雹满地砸,今天就已经阳光灿烂,春光无限好。取下口罩...
    清空妙有阅读 466评论 2 1
  • 我们开始旅程啦?这句话是什么意思?让我来告诉你吧! 事情是这样开始的:有一天,妈妈郑重地跟我说:“我们这个暑假去知...
    洵张阅读 322评论 2 2