各类 IT/软件企业和研发机构的项目经理、软件设计师、程序员,质量部门员工。
对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人,效果最佳。最好你简单了解重构基本概念,该课程假设你已经知道重构,只是困惑如何在项目之中应用。
软件质量,不但依赖于架构、设计以及项目管理,而且与代码质量紧密相关,这一点,无论你使用什么开发技术都是不得不承认的现实问题。
根据中国软件行业协会过程改进分会对会员单位百家软件公司的调查显示:大部分企业技术高管都在不同程度抱怨自己的技术人员:
1、编程序效率太差,一个简单的功能,很久时间才能完成开发实现;
2、不动脑,经常犯很多弱智的错误;
3、代码质量很差,程序结构不合理;
4、写了7-8年程序仍然没有程序的味道,而且还养成了许多坏的编程习惯;
5、基本功不扎实,学习了面向对象和设计模式,根本不会使用;
6、难于适应需求变更,每次增加新功能都是浪费大量时间。
什么是好的代码呢?可以工作的,性能良好,不出bug的代码,就是好的代码吗?世界级软件大师Bob先生认为,软件代码应该具备3个职责:
第1职责:运行起来所实现的功能,这是代码得以存在的原因。
第2职责:它要应对变化,因为几乎软件需求都有变化,因此代码应该保证将来的修改尽可能的简单。
第3职责:要和阅读它的人进行沟通,对模块不熟悉的人员应该能够比较容易理解。
所以,好的代码就是,除了满足所有功能需求以外,还应该更好的支持易修改和易扩展,同时应该清晰准确地传递作者的思想。即,代码质量与整洁度成正比,干净的代码,不仅在质量上较为可靠,也为后期维护,升级奠定了良好的基础。
为此,如何提高代码质量,提高软件工程师的软件生产力,本中心组织了一批“源于实践,指导实践”的专家,开发出本课程,以帮助学员学以致用,消除“知与行”之间的鸿沟,快速掌握以上技能。课程的一系列有效的重构实践,均来自实际项目的正反两面的范例,只要遵循这些实践,就能编写出干净的代码,从而有效提升代码质量,大幅度提高软件企业的软件生产力水平。
一、课程特色
本课程收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总、研讨,并最终形成培训教程。课程从程序员的编程思维开始讲解,以实战贯穿案例方式完成,通过大量的真实案例,贯穿了设计、编码、重构、单元测试,持续集成等整个软件生命周期过程,详细地介绍了重构需要注意的要点以及难点,这些知识都是培训师十几年编程经验的总结。
二、课程对象
各类IT/软件企业和研发机构的项目经理、软件设计师、程序员,质量部门员工。
对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人,效果最佳。最好你简单了解重构基本概念,该课程假设你已经知道重构,只是困惑如何在项目之中应用。
三、学员基础
了解Java/C#或者C++任一语言,具有面向对象基本概念。
如果你不重视代码质量,最好不要参加,本课程面向重视代码质量的管理者。
如果你已经多年不写代码,最好不要参加,本课程面向一线还在编程的程序员/设计师/架构师。
如果你不认为写好代码是一件重要,困难并且有趣的事情,请你不要参加,本课程面向追求完美的程序员。
四、课程收获:代码能力训练是根据2/8原则,程序编写中常见的错误80%都是重复的理论,本课程总结了程序员非常易犯的若干种错误,汇聚了软件开发常见的多种设计模式以及多个编程实战技巧,重点侧重于程序员实际职业能力的提升。讲师从程序编写人员的基本编程习惯开始讲解,通过大量的真实案例,贯穿了设计、编码、重构、调试等整个软件生命周期过程,详细地介绍了各个阶段需要注意的要点以及难点,这些知识都是培训师十几年编程经验的总结,如何避免重复犯错,让代码更具健壮性是代码能力的关键点。
课程大纲:
第一单元:面向对象程序设计的原则与模式
1.衡量软件系统质量的标准
从一个案例说起:
工程中常见的设计不佳的系统举例,分析其中设计失败的关键之处。
1)复合文件系统。
2)资源库系统。
问题所在
1)强耦合的坏处。2)低内聚的缺陷。3)避免“打补丁”式的修改。
2.用面向对象设计的原理优化设计
类的设计原则:开闭原则、依赖倒置原则、Liskov替换原则、单一职责原则、接口分离原则、组合复用原则、所知最少原则
通过案例说明:
1)练习:对磁盘文件的处理,依赖注入的具体使用场合。
2)Liskov替换原则:
a)例:会议管理系统。
b)例:GUI组件
c)例:线/线段。
d)其它:脆弱基类的讨论。
3)练习:设计媒体墙系统;关注单一职责原则,讨论各个方案的优缺点。
4)接口设计中的问题:
a)接口功能要内聚,接口中方法的数量要合适。
b)扩展:内接口与外接口。核心部分对外暴露内接口,其它部分暴露出供外调用的外接口。
c)扩展:普通接口与智能接口。智能接口供高层调用者,或不关心细节的调用者调用,普通接口供关系细节的调用者调用。
d)工程实践中经常遇到的接口设计疑惑;简单但易出错的陷阱。
通过举例说明包内聚原则,耦合原则:
1)常见的解耦方法。
2)例:代码的坏味道:分散的变化。
3)与保护变化、隔离关注面、职责单一等的关系。
3.GRASP模式在程序设计中的运用
GRASP模式:信息专家、创建者、高内聚、低耦合、控制者、多态、间接、纯虚构、保护变化
案例分析:
1)商店收银系统:违反信息专家的设计方式,使用信息专家的设计方式。
2)面向对象与信息专家模式的联系;面向对象的本质是什么。
3)商务系统:大型系统中的信息专家模式运用。
4)数据分析系统:数据字典使用中的创建者模式。
5)工程中常见的包组织形式及创建者模式在其中的使用。
6)资源库系统:低耦合的设计要点。
7)信息抽取系统:不要死板地套用3层/4层结构,系统中低耦合设计要点。
8)保存Html文档:高内聚的指导意义。
9)对长函数的处理:控制者模式。
10)Socket编程:控制者模式举例。
11)角色设计:用间接模式来处理不断变化的加密需求。
4.面向对象设计中的经验原则介绍(20条)
1)当类包含多于6个数据成员时,可以把逻辑相关的数据成员划分为一组,然后用一个新的包含类去包含这一组成员。等等。
第二单元:灵活使用GOF设计模式避免走弯路
1.常用模式
模板方式模式、适配器模式、工厂方式模式、抽象工厂模式、策略模式、桥接模式、观察者模式、命令模式、装饰模式等。
2.需要背下来的定式――从实际中总结软件设计中的常见用法
1)用策略/桥接/访问者模式作为中心骨架。
2)用工厂/抽象工厂模式进行组装。
3)用命令模式处理事务。
3.模式案例分析:
1)练习及分析:WDL解析系统:
a)初始设计的缺陷分析。
b)用模式重构:外观模式实现智能接口。
c)桥接模式处理多对多的变化。
d)模板方法模式统一流程。
e)抽象工厂模式组织使用方案。
f)单例模式的典型运用。
g)适配器模式用于组织第3方模块。
2)ERO系统的设计分析:不能套用模式的场合。
a)典型场合下的典型设计。
b)深入分析后的领悟。
c)按工程实际进行设计,而非套用模式。
3)薪酬系统:
a)从需求中做的抽象。
b)桥接模式的典型运用。
c)策略的选择:抽象工厂模式组织使用。
4)练习:货运系统:
a)策略模式的典型运用。
b)抽象工厂模式的运用。
c)对本系统中的常见错误设计分析,领悟策略模式的要点。
3.GOF高级话题讨论:
抛弃众多的原则、模式,看问题的本质:设计模式的实用分类及运用。
模式的高级运用分析:
1)对间接类模式的本质分析。
2)对多对多类型模式的本质分析。
3)对命令模式的本质分析。
4)对主体-附加类模式的本质分析。
5)设计模式其实不难!
第三单元:用UML辅助系统分析与设计
1.UML中的常见疑难问题辨析
1.用例图:UseCase的本质讨论。
2.类设计
案例分析:
1)搜索引擎中的建模:依赖关系、关联关系辨析
2)商场收银系统中的类设计:建模为属性/类/基类-派生类/策略模式的抉择。
3)杂志订阅系统中的类设计。
4)汽车销售系统中的类设计。
3.其它辨析:略
2.借鉴RUP的设计过程。
边界类、实体类、控制类的设计要点。
案例分析:
1.复合文件编辑系统:
系统设计中的常见问题。
2.WDL文件解析系统:
初始设计的问题分析。
第四单元:对不良代码的重构
1.常见的不良代码:
重复的代码、过长的函数、过大的类、过长的参数列表、发散式变化、分散的修改、伪面向对象的调用、数据泥团、基本类型的误用、switch-case结构的误用、平行继承体系、过薄的类、只有局部意义的成员变量、过度耦合的消息链、过薄的中间对象、紧耦合类、相似的类、只有数据的类、滥用类的继承关系
2.对代码与结构重构的实际运用:
1)结构不良的系统的典型表现。
2)划分逻辑层次。
3)把整理好的模块划归不同的逻辑层。
4)提取控制类+纯虚构类,整理流程。
5)整理模块间、层间的消息通知机制。
6)数据层的考虑。
7)运用命令模式等,重构主要的函数调用。
第五单元:框架搭建及实例分析
工程中常见的架构风格及案例讨论:
1.系统软件:
分层(Layer)、管道和过滤器(PipesandFilters)、黑板(Blackboard)
1)数据采集系统:用分层组织系统的设计。
2)搜索系统:用分层组织系统的设计。
3)信息分析系统:管道过滤器的实际使用。
4)信息分析系统:黑板模式的实际使用。
5)人工智能系统:黑板模式的实际使用。
2.分布式软件:
1)讨论:异构系统间的通讯模式:经纪人(Broker)的典型运用场景。
2)客户/服务器(Client/Server)模式。
3)点对点(PeertoPeer)模式。
3.交互式软件:
1)MVC模式的具体运用:图像模板编辑工具中的典型运用。
2)显示-抽象-控制(PAC)
第六单元:案例分析:略
康老师:国内资深高级系统架构专家,UML/RUP专家,现任国内某知名IT企业研究院首席架构师、高级软件设计师、软件架构高级工程师(计算机应用专业)。
康老师具有16年从事IT行业的软件开发、系统架构设计分析经验。熟悉中国企业的需求特点和国际、国内规范的软件项目管理流程。最难能可贵的是康老师现在也一直工作在实际项目的大型软件开发、系统架构设计的一线,对系统架构设计的精髓具有很深的造诣。
康老师在国内外曾主持过各级政府政务系统、教育部教育系统、美国外包项目、国税总局金税工程、中国军队(总参)信息化、各级金融机构信息化项目、中国石化、中国电信、2008年北京奥运会首都机场奥运福娃机器人项目等很多大型复杂信息化项目的架构设计,在实际项目工作中积累了丰富的项目实际工作经验和丰富的系统架构设计分析经验。
主要客户包括:中国工商银行、中国农业银行、国家开发银行、交通银行、中国铁通、中国电信、中国航天、中电集团、中石油、中石化、西南电信、海关总署、鲁能软件、深圳雁联计算机、深圳迈瑞等上百家企事业单位。