03重构卓越程序员修炼之道.docx
重构一卓越程序员修炼之道高级培训班软件质量,不但依赖与架构以及项目管理,而且与代码质量紧密相关. 这一点,无论你使用什么开发技术,都不得不承认.什么是好的代码?可以工作的,性能良好,不出bug的代码,就是好的代 码吗?世界大师Bob大叔认为,软件代码应该基本3个职责:第1职责:运行起来所实现的功能,这是代码得以存在的原因.第2职责:它要应对变化,因为几乎软件需求都有变化,因此代码应该保 证将来的修改尽可能的简单.第3职责:要和阅读它的人进行沟通,对模块不熟悉的人员应该能够比 较容易理解.因此所谓好的代码就是,除了满足所有功能需求以外,还应该更好的支 持易修改和易扩展,同时应该清晰准确地传递作者的想法.因此代码质量与 整洁度成正比,干净的代码,即在质量上较为可靠,也为后期维护,升级奠定 了良好的基础.该课程给出了一系列有效的重构实践,并且以来自现实项 目的正,反两面的范例.只要遵循这些实践,就能编写出干净的代码,从而有 效提升代码质量.这是实践我们为上百家软件公司提供咨询服务得到的结果,这也是软 件公司难以大幅度提高生产力的关键所在。然而很多企业的技术高管都在 抱怨自己的技术人员:1、编程序效率太差,一个简单的功能,很久时间才能完成开发实现;2、不动脑,经常犯很多弱智的错误;3、代码质量很差,程序结构不合理;4、写了 78年程序仍然没有程序的味道,而且还养成了许多坏的编程 习惯;5、基本功不扎实,学习了面向对象和设计模式,根本不会使用;6、难于适应需求变更,每次增加新功能都是浪费大量时间。如何提高代码质量,提高程序员的生产力?为协助国内软件企业的程序 员快速掌握以上技能,我们讲师,结合多年国内外项目开发的实战经验, 帮助大家学以致用,消除“知与行”之间的鸿沟。现将相关事宜通知如下: 一、培训特色本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案 例,针对项目过程中技术人员常犯的错误进行了汇总,研讨,并最终形成 培训教程。本次培训从程序员的基本编程思维开始讲解,通过大量的真实 案例,贯穿了设计、编码、重构、单元测试,持续集成等整个软件生命周期 过程,详细地介绍了重构需要注意的要点以及难点,这些知识都是培训师 十几年编程经验的总结。二、培训对象各类IT/软件企业和研发机构的项目经理、软件设计师、程序员,质量 部门员工。对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人, 效果最佳。最好你简单了解重构基本概念,该课程假设你已经知道重构,只 是困惑如何在项目之中应用.三、学员基础学员学习本课程应具备下列基础知识: 了解JaVa/C#或者C+任一语言,具有面向对象基本概念如果你不重视代码质量,最好不要参加.本课程面向重视代码质量 的管理者.如果你已经多年不写代码,最好不要参加,本课程面向一线还在编程 的程序员/设计师/架构师如果你不认为写好代码是一件重要,困难并且有趣的事情,请你不要 参加.本课程面向追求完美的程序员.五、培训要点本课程主要包含以下几个方面的内容:1、 结合电信、电力、税务和金融等多个项目案例进行分析。本次 培训所用案例均为真实项目案例,仅供课堂学术讨论,不得以 任何形式发表或传播,复制等。2、 重构技术:软件并不是在一开始就可以设计的完美无缺,因此 必须经过不断的重构进行改善,重构是实现优秀设计的一种重 要手段3、 代码坏味道:介绍常见的糟糕的代码坏味道,以告诫学员,今 后如何避免出现这样的拙劣代码。这是21条代码基本要求,是 代码管理的最低要求,可以接受的底线.4、 代码管理:项目管理者和质量管理部门,如何组织代码评审,代码审查,如果通过代码评审,提高设计能力。5、 重构到模式:模式的应用是一个渐进演变的过程,坏味道也 不是一开始就出现的.如果在一开始就想到用某某模式,有时 很可能导致设计过度.重构与模式有一种天然的关系.重构是 手段,模式是目的,同时模式也为重构指明了方向和原则.通 过案例分析设计模式是如何演进/重构出来的6、 单元测试:介绍如何使用XUnit进行单元测试,如何更高效地 撰写bug更少的代码;如何发现bug的藏身之处以及如何清除 bug;如何测试代码片断而不用牵连整个项目;如何利用XUnit 简化测试代码;如何在团队中高效地进行测试,设计具有更好 易测性的软件等等。7、 代码质量度量:结合和完善Logiscope和McCabe两种软件度量体系,选取出依据软件程序代码的可量化测量度量元,并通 过测试不同型号的软件确定出模型参数,建立质量度量评估模 型,有助于软件的量化评价,为质量管理人员了解软件质量水 平、软件设计师改进软件程序质量,提供量化的客观依据.8、 代码静态分析工具:介绍业界已经在大量使用代码静态分析工 具,以便在编码阶段就能够找出可能的编码缺陷。比如Java 语言环境下的 findbugs,Checkstlye,PMD, javancss 等9、 持续集成:介绍持续集成基本基本原则和工具,它增加项目可 见性、降低项目失败风险的有效实践.也介绍了测试驱动、代 码审查、数据库集成、信息反馈等实践和工具。10、 架构重构:由于软件应对需求变化的能力越来越差,通过重构 架构进行软件重建的做法变得越来越有吸引力。如何进行架构 重构,怎样重构等.六、培训内容时间授课内容第一单元重构 概述和软件代 码新视角内容一:软件代码的新思维一代码就是设计,代码质量决定软件可维护性1 .软件可维护性(为什么必须重视软件的可维护性)2 .代码质量概述3 .破窗效应4 .对代码的重新认识一代码就是设计5 .优秀代码的评价标准6 .好代码和糟糕代码之间的区别7 .劣质代码的代价8 .大师评价整洁代码的标准a) Robert C Martinb) Kent Beck'c) Ward Cunninghamd) Ron Jeffriese) Grady Boochf) Dave Thomas内容二:重构思想1 .重构概述2 .何时重构3 .如何发现哪些地方需要重构4 .如何保证重构的正确5 .如何测试重构6 .通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如 何保证重构的正确性,最后如何验收)内容三:案例一通过实际项目演示重构1 .介绍项目需求情况,进行设计2 .阅读代码指出代码坏症状3 .通过重构逐步改善代码质量第二单元必知 的21种代码坏 味道如何发现重构点内容一,21种代码坏味道一代码的质量底线1 .代码坏味道概述2 .代码坏味道的分类3 .代码坏味道-低级篇(重复的代码、过长的函数、过大的类、过长的参数 列表、发散式变化、分散的修改)4 .代码坏味道-中级篇(伪面向对象的调用、数据泥团、基本类型的误用、 SWitChYaSe结构的误用、平行继承体系、过薄的类、只有局部意义的成员 变量)5 .代码坏味道一高级篇(过度耦合的消息链、过薄的中间对象、紧耦合类、 相似的类、只有数据的类、滥用类的继承关系)6 .通过案例,让学员寻找代码坏味道7 .可以根据客户现在的项目作为案例进行现场分析,找出相应的代码坏味道内容二:某项目分析-重点了解现实项目代码的充斥大量坏味道1 .介绍项目需求情况,阅读现有代码指出代码坏症状2 .不看不知道,代码到底有多烂一触目惊心的代码3 .通过重构逐步改善代码质量4 .本案例学习多种重构方式第三单元重构 技术一怎样对 现有代码重构内容一:重构技术1 .重构名录2 .介绍72种常见的重构技术3 .分别通过相关案例展示重构技术内容二:重构案例一该案例重点学习代码格式和命名1 .代码格式规范2 .代码命名-名副其实3 .很重要,但是总被忽略的基本功4 .通过案例介绍代码格式以及如何使用IDE工具进行定制格式5 .通过案例介绍代码的命名,以及如何重构内容三:重构案例一该案例重点 函数和函数调用重构1 .函数的重构2 .函数调用重构3 .通过案例介绍函数的重构内容四:重构案例一该案例重点对象职责和对象重构1 .过程化思维和面向对象设计2 .对象的重新思考3 .职责驱动的对象设计4 .通过案例介绍如何重构面向过程代码到面向对象内容五:重构案例一该案例重点数据结构重构1 .数据结构重构2 .通过案例介绍如何重构面向过程代码到面向对象内容六:重构案例一该案例重点复杂条件表达式重构1 .复杂条件表达式重构2 . IFZElse语句的危害3 . SWitCh语句的危害4 .通过案例介绍如何重构面向过程代码到面向对象第四单元代码 质量度量与代 码静态分析工 具-不能度量 就无法考核,通 过工具进行度 量内容一:代码质量度量1. 代码质量的度量2. Chidamber & Kemerer 度量,3. Depth of Inheritance Tree (DIT)4. Number of Childre (NOO5. Response for a Class (RFC)6. AfferentZEfferent Couplings (CA/CE)7. Lack of cohesion in methods (LCOM)8. 业界其他度量标准9. 通过分析多个实际项目,分别度量相关是否标准内容二:代码评审1 .代码评审前期准备2 .代码评审的代码量3 .代码评审的检查表4 .代码评审的总结与学习5 .通过案例分析如何做好代码评审内容三:代码静态分析工具1. 代码静态分析工具概述2. CheckStyle:用于编码标准3. PMD的CPD:帮助发现代码重复4. CoVediPSe :测量代码覆盖率5. JDepend:提供依赖项分析6 . Metric:有效地查出复杂度7 .其他语言相关代码静态分析工具8 .通过案例演示工具在项目之中的应用第五单元重构 工具与持续集 成工欲善 其事,必先利其 器内容一:重构工具I.重构工具概述2 .使用IDE重构工具进行重构3 .重构工具的使用标准4 .重构工具的使用心得5 .通过案例演示如何通过重构工具完成重构内容二:持续集成1 .持续集成概述2 .持续集成的要点和原则3 .持续集成的准备工作4 .搭建持续集成环境5 .构建策略和最佳实践6 .构建结果通知机制7 .与问题追踪工具集成8 .持续集成对代码分析的支持9 .通过案例演示如何利用持续集成完成代码检查和代码分析第六单元重构 到模式-重构 设计,学习设计 模式必由之路内容一:重构到模式1 .软件设计的基本原则2 .设计模式概述3 .设计模式的本质论4 .设计模式如何适应变化和封装5 .重构到模式的思路6 .模式的演进之路内容二:案例一重点介绍重构基本类型依赖和对应模式1 .通过案例学习以下重构到模式手段2 .以State取代状态改变条件语句3 .以Strategy取代条件逻辑4 .以Composite取代隐含树5 .以Interpreter取代隐式语言6 .转移装饰功能到Decorator7 .用 BUiIder 封装 Composite8 .重点学习案例的重构到模式的过程内容三:案例重点介绍重构代码重复和对应模式9 .通过案例学习以下重构到模式手段10 .构造 Template MethodI L以ComPoSite取代一/多之分12